git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: rewrite parseHtmlContent, verseTag and lineBlock in applicative style
ca4ee99Alexander Krotov
src/Text/Pandoc/Readers/Muse.hs+12−18
@@ -211,13 +211,11 @@ htmlAttrToPandoc attrs = (ident, classes, keyvals)
211parseHtmlContent :: PandocMonad m
211parseHtmlContent :: PandocMonad m
212 => String -- ^ Tag name
212 => String -- ^ Tag name
213 -> MuseParser m (Attr, F Blocks)
213 -> MuseParser m (Attr, F Blocks)
214−parseHtmlContent tag = try $ do
214+parseHtmlContent tag = try $ getIndent >>= \indent -> (,)
215− indent <- getIndent
216− attr <- openTag tag
215+ <$> fmap htmlAttrToPandoc (openTag tag)
217− manyTill spaceChar eol
216+ <* manyTill spaceChar eol
218− content <- parseBlocksTill $ try $ count indent spaceChar *> closeTag tag
217+ <*> parseBlocksTill (try $ count indent spaceChar *> closeTag tag)
219− manyTill spaceChar eol -- closing tag must be followed by optional whitespace and newline
218+ <* manyTill spaceChar eol -- closing tag must be followed by optional whitespace and newline
220− return (htmlAttrToPandoc attr, content)
221
219
222-- ** Directive parsers
220-- ** Directive parsers
223
221
@@ -463,13 +461,11 @@ verseLine = (<>)
463
461
464-- | Parse @\<verse>@ tag.
462-- | Parse @\<verse>@ tag.
465verseTag :: PandocMonad m => MuseParser m (F Blocks)
463verseTag :: PandocMonad m => MuseParser m (F Blocks)
466−verseTag = try $ do
464+verseTag = try $ getIndent >>= \indent -> fmap B.lineBlock . sequence
467− indent <- getIndent
465+ <$ openTag "verse"
468− openTag "verse"
466+ <* manyTill spaceChar eol
469− manyTill spaceChar eol
470− content <- sequence <$> manyTill (count indent spaceChar *> verseLine) (try $ count indent spaceChar *> closeTag "verse")
467+ <*> manyTill (count indent spaceChar *> verseLine) (try $ count indent spaceChar *> closeTag "verse")
471− manyTill spaceChar eol
468+ <* manyTill spaceChar eol
472− return $ B.lineBlock <$> content
473
469
474-- | Parse @\<comment>@ tag.
470-- | Parse @\<comment>@ tag.
475commentTag :: PandocMonad m => MuseParser m (F Blocks)
471commentTag :: PandocMonad m => MuseParser m (F Blocks)
@@ -544,10 +540,8 @@ emacsNoteBlock = try $ do
544
540
545-- | Parse a line block indicated by @\'>\'@ characters.
541-- | Parse a line block indicated by @\'>\'@ characters.
546lineBlock :: PandocMonad m => MuseParser m (F Blocks)
542lineBlock :: PandocMonad m => MuseParser m (F Blocks)
547−lineBlock = try $ do
543+lineBlock = try $ getIndent >>= \indent -> fmap B.lineBlock . sequence
548− indent <- getIndent
549− lns <- (blankVerseLine <|> nonblankVerseLine) `sepBy1'` try (indentWith indent)
544+ <$> (blankVerseLine <|> nonblankVerseLine) `sepBy1'` try (indentWith indent)
550− return $ B.lineBlock <$> sequence lns
551 where
545 where
552 blankVerseLine = try $ mempty <$ char '>' <* blankline
546 blankVerseLine = try $ mempty <$ char '>' <* blankline
553 nonblankVerseLine = try (string "> ") *> verseLine
547 nonblankVerseLine = try (string "> ") *> verseLine