GaBuZoMeu/display-tag.hs

79 lines
3.1 KiB
Haskell

import Grammar
import Types
import Registry.Registry (readRegistry, isValid)
import Registry.Types
import Registry.Utils (onlyThisValue, onlyThisType, scriptFrom, languageFrom,
regionFrom, variantFrom)
import Data.List (intersperse)
import System.Environment (getArgs)
infile = "./language-subtag-registry"
langToString registry l =
"language \"" ++ concat (intersperse " / "
(lang'descr (languageFrom (filter (onlyThisValue
"language" l)
(filter (onlyThisType "language")
registry) !! 0)))) ++ "\""
scriptToString registry Nothing = ""
scriptToString registry (Just s) =
let theScript = (filter (onlyThisValue "script" s)
(filter (onlyThisType "script")
registry)) !! 0 in
", " ++ s ++ ": script " ++
" \"" ++ concat (intersperse " / " (script'descr
(scriptFrom theScript))) ++ "\""
regionToString registry Nothing = ""
regionToString registry (Just r) =
let theRegion = (filter (onlyThisValue "region" r)
(filter (onlyThisType "region")
registry)) !! 0 in
", " ++ r ++ ": region " ++
" \"" ++ concat (intersperse " / " (region'descr
(regionFrom theRegion))) ++ "\""
variantsToString registry [] = ""
variantsToString registry v = ", " ++ concat (intersperse ", "
(map (variantToString registry) v))
variantToString registry v =
let theVariant = (filter (onlyThisValue "variant" v)
(filter (onlyThisType "variant")
registry)) !! 0 in
v ++ ": variant " ++
" \"" ++ concat (intersperse " / " (variant'descr
(variantFrom theVariant))) ++ "\""
toString :: Registry -> Tag -> String
toString registry (Tag l el s r v e) =
-- Display extlangs. See issue #8
-- Display extensions. See issue #7
l ++ ": " ++ langToString registry l ++
scriptToString registry s ++ regionToString registry r ++
variantsToString registry v
toString registry (Types.GF tag) = tag
toString registry (Priv p) =
(concat p) ++ " (private tag so no info available)"
analyze :: Registry -> String -> String
analyze reg input
= case (getTag input) of
Left err -> err
Right tag -> let result = isValid reg tag in
if fst result then
input ++ ": (" ++ (toString reg tag) ++ ")"
else
(input ++ " is NOT valid: " ++ snd result ++ "\n")
main = do
myargs <- getArgs
theregistry <- readRegistry infile
putStrLn (concat (intersperse "\n" (map (analyze theregistry) myargs)))