module Data.Text.Punycode.Shared where

import Data.Char (ord)

base :: Int
base :: Int
base = Int
36

tmin :: Int
tmin :: Int
tmin = Int
1

tmax :: Int
tmax :: Int
tmax = Int
26

skew :: Int
skew :: Int
skew = Int
38

damp :: Int
damp :: Int
damp = Int
700

initial_bias :: Int
initial_bias :: Int
initial_bias = Int
72

initial_n :: Int
initial_n :: Int
initial_n = Int
128

adapt :: Int -> Int -> Bool -> Int
adapt :: Int -> Int -> Bool -> Int
adapt Int
delta Int
numpoints Bool
firsttime = Int
helper
  where
    helper :: Int
helper = Int -> Int -> Int
loop Int
0 (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Int
delta' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ (Int
delta' Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
numpoints)
      where
        delta' :: Int
delta'
          | Bool
firsttime = Int
delta Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
damp
          | Bool
otherwise = Int
delta Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2
    loop :: Int -> Int -> Int
loop Int
k Int
delta'
      | Int
delta' Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> ((Int
base Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
tmin) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
tmax) Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2 = Int -> Int -> Int
loop (Int
k Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
base) (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Int
delta' Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` (Int
base Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
tmin)
      | Bool
otherwise = Int
k Int -> Int -> Int
forall a. Num a => a -> a -> a
+ (((Int
base Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
tmin Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
delta') Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` (Int
delta' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
skew))

isBasic :: Char -> Bool
isBasic :: Char -> Bool
isBasic = (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
initial_n) (Int -> Bool) -> (Char -> Int) -> Char -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
ord