packages feed

iri-0.5: punycode/Data/Text/Punycode/Shared.hs

module Data.Text.Punycode.Shared where

import Data.Char (ord)

base :: Int
base = 36

tmin :: Int
tmin = 1

tmax :: Int
tmax = 26

skew :: Int
skew = 38

damp :: Int
damp = 700

initial_bias :: Int
initial_bias = 72

initial_n :: Int
initial_n = 128

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

isBasic :: Char -> Bool
isBasic = (< initial_n) . ord