gf-3.4: lib/src/chinese/pinyin/MkPinyin.hs
import qualified Data.Map as Map
import Numeric
main = do
s <- readFile pinyinFile
let m = c2pMap (mkList (words s))
mapM_ (mkPinyin m) ["Lexicon", "Numeral", "Res", "Structural"]
return ()
pinyinFile = "pinyin.txt"
mkPinyin ma mo = do
s <- readFile ("../" ++ runghc MkPinyin.hsmo ++ "Chi.gf")
writeFile (mo ++ "Cmn.gf") (useMapGF ma s)
--import Pinyin (c2pMap, useMapGF, mkList)
-- AR 3/10/2012
-- Chinese unicode - character - pinyin conversions
-- character data from http://www.linguanaut.com/chinese_alphabet2.htm
mkList ws = case ws of
c:w:ws -> (head (map (flip Numeric.showHex "" . fromEnum) c), (c, chop w)) : mkList ws
_ -> []
chop = words . map unslash
where
unslash '/' = ' '
unslash c = c
useMapGF m s = case s of
'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China
'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn
'"':cs -> '"':convert cs
c :cs -> c :useMapGF m cs
_ -> s
where
convert cs = case cs of
'"':s -> '"' : useMapGF m s
c :s -> maybe [c] (head . words) (Map.lookup [c] m) ++ convert s
_ -> cs
c2pMap ws = Map.fromList [(c,unwords ps) | (_,(c,ps)) <- ws]