module CJK.Data.Internal where import qualified CJK.Data.Jyutping as Jyutping import qualified CJK.Data.Pinyin as Pinyin import CJK.Data.Types import Control.Applicative import Data.Char import Data.Attoparsec.Text jyutpingP :: Parser Jyutping.Phone jyutpingP = liftA2 Jyutping.Phone (takeWhile1 (\c -> isAsciiUpper c || isAsciiLower c || c == '[' || c == ']')) jyutpingToneP -- Some kCheungBauer says [ng]ai1 jyutpingToneP :: Parser Jyutping.Tone jyutpingToneP = char '1' *> pure Jyutping.HighLevel <|> char '2' *> pure Jyutping.MidRising <|> char '3' *> pure Jyutping.MidLevel <|> char '4' *> pure Jyutping.LowFalling <|> char '5' *> pure Jyutping.LowRising <|> char '6' *> pure Jyutping.LowLevel tonedPinyinP :: Parser Pinyin.Phone tonedPinyinP = liftA2 Pinyin.Phone (takeWhile1 (\c -> isAsciiUpper c || isAsciiLower c || c == 'ü' || c == 'Ü')) pinyinToneP pinyinToneP :: Parser Pinyin.Tone pinyinToneP = char '1' *> pure Pinyin.Flat <|> char '2' *> pure Pinyin.Rising <|> char '3' *> pure Pinyin.FallingRising <|> char '4' *> pure Pinyin.Falling <|> char '5' *> pure Pinyin.Neutral hdzEntryP :: Parser HDZEntry hdzEntryP = takeWhile1 (\c -> isDigit c || c == '.')