|
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
|