lib: Refactor common comment parsers

This commit is contained in:
Alex Chen 2018-05-10 15:23:19 -06:00 committed by Simon Michael
parent c2199b1125
commit b06d22a418

View File

@ -795,25 +795,25 @@ whitespaceChar = charCategory Space
--- ** comments --- ** comments
multilinecommentp :: JournalParser m () multilinecommentp :: JournalParser m ()
multilinecommentp = do multilinecommentp = startComment *> anyLine `skipManyTill` endComment
string "comment" >> lift (skipMany spacenonewline) >> newline
go
where where
go = try (eof <|> (string "end comment" >> newline >> return ())) emptylinep = lift (skipMany spacenonewline) *> newline *> pure ()
<|> (anyLine >> go) startComment = string "comment" >> emptylinep
endComment = eof <|> (string "end comment" >> emptylinep)
anyLine = anyChar `manyTill` newline anyLine = anyChar `manyTill` newline
emptyorcommentlinep :: JournalParser m () emptyorcommentlinep :: JournalParser m ()
emptyorcommentlinep = do emptyorcommentlinep = do
lift (skipMany spacenonewline) >> (linecommentp <|> (lift (skipMany spacenonewline) >> newline >> return "")) lift (skipMany spacenonewline)
return () void linecommentp <|> void newline
-- | Parse a possibly multi-line comment following a semicolon. -- | Parse a possibly multi-line comment following a semicolon.
followingcommentp :: JournalParser m Text followingcommentp :: JournalParser m Text
followingcommentp = followingcommentp = do
-- ptrace "followingcommentp" -- ptrace "followingcommentp"
do samelinecomment <- lift (skipMany spacenonewline) >> (try commentp <|> (newline >> return "")) lift (skipMany spacenonewline)
newlinecomments <- many (try (lift (skipSome spacenonewline) >> commentp)) samelinecomment <- try commentp <|> (newline >> return "")
newlinecomments <- many $ try $ lift (skipSome spacenonewline) >> commentp
return $ T.unlines $ samelinecomment:newlinecomments return $ T.unlines $ samelinecomment:newlinecomments
-- | Parse a possibly multi-line comment following a semicolon, and -- | Parse a possibly multi-line comment following a semicolon, and