import qualified IO import Text.ParserCombinators.Parsec as Parsec import qualified Data.List as List import Grammar import Registry.Grammar import Registry.Types infile = "./language-subtag-registry" onlyIrregularGF (GF r) = isLeft (Grammar.getTag (gf'tag r)) onlyIrregularGF _ = False displayTag (GF r) = "\"" ++ (gf'tag r) ++ "\" / " run parser input = case (Parsec.parse parser "" input) of Left err -> error ("Registry \"" ++ infile ++ "\" is not legal: " ++ (show err) ++ "\n") Right x -> IO.putStr ("-- AUTOMATICALLY GENERATED! Do *not* edit!!! \n" ++ (foldr (++) "" (List.intersperse "\n" (map displayTag (filter onlyIrregularGF (map fromRight x))))) ++ "\n") main = do f <- IO.openFile (infile) IO.ReadMode input <- IO.hGetContents f run registry input