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