module Country.Unexposed.Names
( englishCountryNamesText
, englishIdentifierNamesText
, numberOfPossibleCodes
) where
import Control.Monad.ST
import Data.Text (Text)
import Data.Word
import Data.Char (toLower,isAlpha)
import Country.Unexposed.Encode.English (countryNameQuads)
import Data.Primitive (Array,indexArray,newArray,unsafeFreezeArray,writeArray,
writeByteArray,indexByteArray,unsafeFreezeByteArray,newByteArray)
import qualified Data.Text as T
englishCountryNamesText :: Array Text
englishCountryNamesText = runST $ do
m <- newArray numberOfPossibleCodes unnamed
mapM_ (\(ix,name,_,_) -> writeArray m (word16ToInt ix) name) countryNameQuads
unsafeFreezeArray m
englishIdentifierNamesText :: Array Text
englishIdentifierNamesText = runST $ do
m <- newArray numberOfPossibleCodes unnamed
mapM_ (\(ix,name,_,_) -> writeArray m (word16ToInt ix) (toIdentifier name)) countryNameQuads
unsafeFreezeArray m
toIdentifier :: Text -> Text
toIdentifier t = case (T.uncons . T.filter isAlpha . T.toTitle) t of
Nothing -> T.empty
Just (b,bs) -> T.cons (toLower b) bs
unnamed :: Text
unnamed = T.pack "Invalid Country"
numberOfPossibleCodes :: Int
numberOfPossibleCodes = 1000
word16ToInt :: Word16 -> Int
word16ToInt = fromIntegral