diff options
author | Alexander Krotov <ilabdsf@gmail.com> | 2018-10-05 12:37:41 +0300 |
---|---|---|
committer | Alexander Krotov <ilabdsf@gmail.com> | 2018-10-05 13:43:52 +0300 |
commit | ef4bc58cc1b2ce8226cfe3449eb188734dcb5c51 (patch) | |
tree | 8da1dc67d079c45a784c468932981c7f450612a1 /src | |
parent | 5f7799ac8f359fbb7896037a79f2abb61be2fd2c (diff) | |
download | pandoc-ef4bc58cc1b2ce8226cfe3449eb188734dcb5c51.tar.gz |
Muse reader: simplify verse parsers
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Readers/Muse.hs | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/src/Text/Pandoc/Readers/Muse.hs b/src/Text/Pandoc/Readers/Muse.hs index d5236c5a2..c3b8ea25f 100644 --- a/src/Text/Pandoc/Readers/Muse.hs +++ b/src/Text/Pandoc/Readers/Muse.hs @@ -453,10 +453,9 @@ playTag = do fmap (B.divWith ("", ["play"], [])) . snd <$> parseHtmlContent "play" verseLine :: PandocMonad m => MuseParser m (F Inlines) -verseLine = do - indent <- (B.str <$> many1 ('\160' <$ char ' ')) <|> pure mempty - rest <- manyTill inline' newline - return $ trimInlinesF $ mconcat (pure indent : rest) +verseLine = (<>) + <$> fmap pure (option mempty (B.str <$> many1 ('\160' <$ char ' '))) + <*> fmap (trimInlinesF . mconcat) (manyTill inline' eol) -- | Parse @\<verse>@ tag. verseTag :: PandocMonad m => MuseParser m (F Blocks) @@ -541,26 +540,16 @@ emacsNoteBlock = try $ do -- Verse markup -- -lineVerseLine :: PandocMonad m => MuseParser m (F Inlines) -lineVerseLine = try $ do - string "> " - indent <- many ('\160' <$ char ' ') - let indentEl = if null indent then mempty else B.str indent - rest <- manyTill inline' eol - return $ trimInlinesF $ mconcat (pure indentEl : rest) - -blanklineVerseLine :: PandocMonad m => MuseParser m (F Inlines) -blanklineVerseLine = try $ mempty - <$ char '>' - <* blankline - -- | Parse a line block indicated by @\'>\'@ characters. lineBlock :: PandocMonad m => MuseParser m (F Blocks) lineBlock = try $ do many spaceChar col <- sourceColumn <$> getPosition - lns <- (blanklineVerseLine <|> lineVerseLine) `sepBy1'` try (indentWith (col - 1)) + lns <- (blankVerseLine <|> nonblankVerseLine) `sepBy1'` try (indentWith (col - 1)) return $ B.lineBlock <$> sequence lns + where + blankVerseLine = try $ mempty <$ char '>' <* blankline + nonblankVerseLine = try (string "> ") *> verseLine -- *** List parsers |