module Data.Text.Punycode.Shared where

import Data.Char (ord)

base :: Int
base :: Int
base = 36

tmin :: Int
tmin :: Int
tmin = 1

tmax :: Int
tmax :: Int
tmax = 26

skew :: Int
skew :: Int
skew = 38

damp :: Int
damp :: Int
damp = 700

initial_bias :: Int
initial_bias :: Int
initial_bias = 72

initial_n :: Int
initial_n :: Int
initial_n = 128

adapt :: Int -> Int -> Bool -> Int
adapt :: Int -> Int -> Bool -> Int
adapt delta :: Int
delta numpoints :: Int
numpoints firsttime :: Bool
firsttime = Int
helper
  where helper :: Int
helper = Int -> Int -> Int
loop 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` 2
        loop :: Int -> Int -> Int
loop k :: Int
k delta' :: 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` 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
+ 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