git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: rewrite parseHtmlContent, verseTag and lineBlock in applicative style
commitca4ee9940ce55fc640ba21dbf2ccde9b048216bb authorAlexander Krotov <ilabdsf@gmail.com> dateTue 9 Oct 2018, 16:14 (8 years ago) parent9ee00fc
1 file changed+12−18
src/Text/Pandoc/Readers/Muse.hs+12−18
src/Text/Pandoc/Readers/Muse.hs+12−18
@@ -211,13 +211,11 @@ htmlAttrToPandoc attrs = (ident, classes, keyvals)
211211parseHtmlContent :: PandocMonad m
212212 => String -- ^ Tag name
213213 -> MuseParser m (Attr, F Blocks)
214−parseHtmlContent tag = try $ do
215− indent <- getIndent
216− attr <- openTag tag
217− manyTill spaceChar eol
218− content <- parseBlocksTill $ try $ count indent spaceChar *> closeTag tag
219− manyTill spaceChar eol -- closing tag must be followed by optional whitespace and newline
220− return (htmlAttrToPandoc attr, content)
214+parseHtmlContent tag = try $ getIndent >>= \indent -> (,)
215+ <$> fmap htmlAttrToPandoc (openTag tag)
216+ <* manyTill spaceChar eol
217+ <*> parseBlocksTill (try $ count indent spaceChar *> closeTag tag)
218+ <* manyTill spaceChar eol -- closing tag must be followed by optional whitespace and newline
221219
222220-- ** Directive parsers
223221
@@ -463,13 +461,11 @@ verseLine = (<>)
463461
464462-- | Parse @\<verse>@ tag.
465463verseTag :: PandocMonad m => MuseParser m (F Blocks)
466−verseTag = try $ do
467− indent <- getIndent
468− openTag "verse"
469− manyTill spaceChar eol
470− content <- sequence <$> manyTill (count indent spaceChar *> verseLine) (try $ count indent spaceChar *> closeTag "verse")
471− manyTill spaceChar eol
472− return $ B.lineBlock <$> content
464+verseTag = try $ getIndent >>= \indent -> fmap B.lineBlock . sequence
465+ <$ openTag "verse"
466+ <* manyTill spaceChar eol
467+ <*> manyTill (count indent spaceChar *> verseLine) (try $ count indent spaceChar *> closeTag "verse")
468+ <* manyTill spaceChar eol
473469
474470-- | Parse @\<comment>@ tag.
475471commentTag :: PandocMonad m => MuseParser m (F Blocks)
@@ -544,10 +540,8 @@ emacsNoteBlock = try $ do
544540
545541-- | Parse a line block indicated by @\'>\'@ characters.
546542lineBlock :: PandocMonad m => MuseParser m (F Blocks)
547−lineBlock = try $ do
548− indent <- getIndent
549− lns <- (blankVerseLine <|> nonblankVerseLine) `sepBy1'` try (indentWith indent)
550− return $ B.lineBlock <$> sequence lns
543+lineBlock = try $ getIndent >>= \indent -> fmap B.lineBlock . sequence
544+ <$> (blankVerseLine <|> nonblankVerseLine) `sepBy1'` try (indentWith indent)
551545 where
552546 blankVerseLine = try $ mempty <$ char '>' <* blankline
553547 nonblankVerseLine = try (string "> ") *> verseLine