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
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 == '.')