ENIG-0.0.0.2: src/Data/Text/ENIG.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Text.ENIG where
import Data.Text.ENIG.Config
import Data.Text.ENIG.Data
import Data.Text.ENIG.Detect
import Data.Text.ENIG.Show
import Data.Char
import Data.Text (Text)
import qualified Data.Text as T
import Data.Text.Normalize
import qualified Data.Vector.Unboxed as V
-- | Return proper and minimal PPP about given text
-- 주어진 단어와 조사의 종류에 대해서 최소한의 적절한 조사의 문자열을 반환함
--
-- >>> enigPPP "과자" WG
-- "와"
-- >>> enigPPP "무엇" WG
-- "과"
enigPPP :: Text -> PPPCategory -> Text
enigPPP inputStr pppCa =
if isHangul lastComponent
then tShowPPPId . (toEnum :: Int -> PPPIdentity) $
if isSecondType
then snd selectedPPPIPair
else fst selectedPPPIPair
else if isDigit lastComponent
then error "enigPPPByDigit is not implemented"
else tShowPPPCa pppCa
where
isSecondType = isLastVowel lastComponent || (pppCa == EuX && isLastR lastComponent)
selectedPPPIPair = pppidVector V.! fromEnum pppCa
-- preprocessForPPP for handling parenthesis, quatation, etc.
preprocessForPPP = id
preprocessed = preprocessForPPP inputStr
lastComponent = getLastComponentCode preprocessed
-- handling PPP with digit is not implemented
isDigit _ = False
-- | Return proper PPP about given text with post text
-- 주어진 단어와 조사의 종류에 대해서 적절한 조사의 문자열을 반환함
--
-- >>> enigPPP "과자" EuX "로"
-- "로"
-- >>> enigPPP "무엇" EuX "로"
-- "으로"
enigPPPWithPost :: Text -> PPPCategory -> Text -> Text
enigPPPWithPost inputStr pppCa postStr = T.append (enigPPP inputStr pppCa) postStr