2 module Java.META.Parser
6 import qualified Data.Map as M
8 import Text.Parsec.String
10 import Java.META.Types
13 pNewLine = choice $ map try $ [
14 string "\r\n" >> return (),
15 char '\r' >> return (),
16 char '\n' >> return () ]
18 blankline :: Parser ()
20 pNewLine <?> "first newline in blankline"
23 pSection :: Parser Section
26 blankline <?> "blank line"
27 return $ M.fromList list
29 pHeader :: Parser (String, String)
31 name <- many1 headerChar <?> "header name"
36 headerChar = oneOf "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
38 pValue :: Parser String
43 manyLines :: Parser [String]
47 s <- many1 (noneOf "\n\r\0")
48 pNewLine <?> "new line at end of value line"
49 c <- lookAhead anyChar
57 pMETA = many1 pSection
59 parseMetaFile :: FilePath -> IO (Either ParseError META)
60 parseMetaFile path = do
62 return $ parse pMETA path (str ++ "\n\n")
64 parseMeta :: String -> Either ParseError META
65 parseMeta str = parse pMETA "<META>" (str ++ "\n\n")