Blame MkUnicodeData.hs

Packit 3b6bb9
module Main
Packit 3b6bb9
where
Packit 3b6bb9
import Data.Char (isHexDigit)
Packit 3b6bb9
import Data.RFC5051.Types
Packit 3b6bb9
import qualified Data.ByteString.Char8 as B8
Packit 3b6bb9
Packit 3b6bb9
main = B8.readFile "UnicodeData.txt" >>= rawDataToModule
Packit 3b6bb9
Packit 3b6bb9
rawDataToModule :: B8.ByteString -> IO ()
Packit 3b6bb9
rawDataToModule bs = do
Packit 3b6bb9
  let lns = map (B8.split ';') $ take 0x2000 $ B8.lines bs
Packit 3b6bb9
  let pairs = [ (toInt x, map toInt $ filter (B8.all isHexDigit) $ B8.words y) |
Packit 3b6bb9
                    (x:_:_:_:_:y:_) <- lns, not (B8.null y) ]
Packit 3b6bb9
  putStrLn "module Data.RFC5051.UnicodeData (decompositionMap) where"
Packit 3b6bb9
  putStrLn "import Data.RFC5051.Types"
Packit 3b6bb9
  putStrLn "import qualified Data.Map as M"
Packit 3b6bb9
  putStrLn ""
Packit 3b6bb9
  putStrLn "decompositionMap :: M.Map Int [Int]"
Packit 3b6bb9
  putStrLn $ "decompositionMap = M.fromList " ++ show pairs
Packit 3b6bb9
Packit 3b6bb9
toInt :: B8.ByteString -> Int
Packit 3b6bb9
toInt xs = read $ '0':'x': B8.unpack xs