2 module Java.META.Parser where
4 import qualified Data.Map as M
6 import Text.Parsec.String
11 pNewLine = choice $ map try $ [
12 string "\r\n" >> return (),
13 char '\r' >> return (),
14 char '\n' >> return () ]
16 blankline :: Parser ()
18 pNewLine <?> "first newline in blankline"
21 pSection :: Parser Section
24 blankline <?> "blank line"
25 return $ M.fromList list
27 pHeader :: Parser (String, String)
29 name <- many1 headerChar <?> "header name"
34 headerChar = oneOf "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
36 pValue :: Parser String
41 manyLines :: Parser [String]
45 s <- many1 (noneOf "\n\r\0")
46 pNewLine <?> "new line at end of value line"
47 c <- lookAhead anyChar
55 pMETA = many1 pSection
57 parseMetaFile :: FilePath -> IO (Either ParseError META)
58 parseMetaFile path = do
60 return $ parse pMETA path (str ++ "\n\n")