diff options
author | John MacFarlane <jgm@berkeley.edu> | 2014-08-09 20:22:06 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2014-08-09 20:22:06 -0700 |
commit | eed1274fcaa0348fd08624eaa863ad26248958de (patch) | |
tree | 6000aeb164abda25f1cce788e18e37e5180d7438 /lib/fonts/parseUnicodeMapping.hs | |
parent | c2a0d47c7b15483efa565ab2b6d9fa836e3a8818 (diff) | |
parent | ecb42cc002f892295ea33711947338580f60522b (diff) | |
download | pandoc-eed1274fcaa0348fd08624eaa863ad26248958de.tar.gz |
Merge pull request #1509 from jkr/symbol
Parse "w:sym"
Diffstat (limited to 'lib/fonts/parseUnicodeMapping.hs')
-rw-r--r-- | lib/fonts/parseUnicodeMapping.hs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/fonts/parseUnicodeMapping.hs b/lib/fonts/parseUnicodeMapping.hs new file mode 100644 index 000000000..4f7ff692b --- /dev/null +++ b/lib/fonts/parseUnicodeMapping.hs @@ -0,0 +1,40 @@ +import System.FilePath +import Text.Parsec +import Data.Char +import System.Environment +import Control.Applicative hiding (many) +import Data.List + +main :: IO () +main = (head <$> getArgs) >>= parseUnicodeMapping + + +parseUnicodeMapping :: FilePath -> IO () +parseUnicodeMapping fname = do + fin <- readFile fname + let mapname = dropExtension . takeFileName $ fname + let res = runParse fin + let header = "-- Generated from " ++ fname ++ "\n" ++ + mapname ++ " :: [(Char, Char)]\n" ++ mapname ++" =\n [ " + let footer = "]" + writeFile (replaceExtension fname ".hs") + (header ++ (concat $ intersperse "\n , " (map show res)) ++ footer) + +type Unicode = Char + +runParse :: String -> [(Char, Unicode)] +runParse s= either (error . show) id (parse parseMap "" s) + +anyline = manyTill anyChar newline + +getHexChar :: Parsec String () Char +getHexChar = do + [(c,_)] <- readLitChar . ("\\x" ++) <$> many1 hexDigit + return c + +parseMap :: Parsec String () [(Char, Unicode)] +parseMap = do + skipMany (char '#' >> anyline) + many (flip (,) <$> getHexChar <* tab <*> getHexChar <* anyline) + + |