{-# LANGUAGE OverloadedStrings #-} module Data.Text.ENIG.Detect where import Data.Text.ENIG.Config import Data.Text.ENIG.Data import Data.Char import Data.Text (Text) import qualified Data.Text as T import Data.Text.Normalize import qualified Data.Vector.Unboxed as V -- | Detect whether the last component is an last consonant or not isLastConsonant :: Int -> Bool isLastConsonant hangulCode = (head lastConsonantCodeList <= hangulCode) && (hangulCode <= last lastConsonantCodeList) -- | Detect whether the last component is an vowel or not -- To avoid the issue with the first consonant, like 'ㄱ'. isLastVowel :: Int -> Bool isLastVowel hangulCode = (head vowelCodeList <= hangulCode) && (hangulCode <= last vowelCodeList) -- | Detect whether the last component is the last consonant 'ㄹ' isLastR :: Int -> Bool isLastR hangulCode = hangulCode == 4527 -- | Detect whether the given code is an Hangul component or not isHangul :: Int -> Bool isHangul mHangulCode = (head hangulComponentCodeList <= mHangulCode) && (mHangulCode <= last hangulComponentCodeList) -- | Get the last component's code of given Hangel getLastComponentCode :: Text -> Int getLastComponentCode str = ord aComponent where lastChar = T.singleton . T.last $ str aComponent = T.last . normalize NFKD $ lastChar