2 module Java.META.Parser
5 import qualified Data.Map as M
7 import Text.Parsec.String
12 pNewLine = choice $ map try $ [
13 string "\r\n" >> return (),
14 char '\r' >> return (),
15 char '\n' >> return () ]
17 blankline :: Parser ()
19 pNewLine <?> "first newline in blankline"
22 pSection :: Parser Section
25 blankline <?> "blank line"
26 return $ M.fromList list
28 pHeader :: Parser (String, String)
30 name <- many1 headerChar <?> "header name"
35 headerChar = oneOf "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
37 pValue :: Parser String
42 manyLines :: Parser [String]
46 s <- many1 (noneOf "\n\r\0")
47 pNewLine <?> "new line at end of value line"
48 c <- lookAhead anyChar
56 pMETA = many1 pSection
58 parseMetaFile :: FilePath -> IO (Either ParseError META)
59 parseMetaFile path = do
61 return $ parse pMETA path (str ++ "\n\n")