aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Krotov <ilabdsf@gmail.com>2018-10-05 12:37:41 +0300
committerAlexander Krotov <ilabdsf@gmail.com>2018-10-05 13:43:52 +0300
commitef4bc58cc1b2ce8226cfe3449eb188734dcb5c51 (patch)
tree8da1dc67d079c45a784c468932981c7f450612a1 /src
parent5f7799ac8f359fbb7896037a79f2abb61be2fd2c (diff)
downloadpandoc-ef4bc58cc1b2ce8226cfe3449eb188734dcb5c51.tar.gz
Muse reader: simplify verse parsers
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Muse.hs25
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