aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/Muse.hs22
-rw-r--r--test/Tests/Readers/Muse.hs21
2 files changed, 42 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/Muse.hs b/src/Text/Pandoc/Readers/Muse.hs
index 74622a639..77f75c8c6 100644
--- a/src/Text/Pandoc/Readers/Muse.hs
+++ b/src/Text/Pandoc/Readers/Muse.hs
@@ -32,7 +32,7 @@ TODO:
- {{{ }}} syntax for <example>
- Page breaks (five "*")
- Headings with anchors (make it round trip with Muse writer)
-- <verse> and ">"
+- Verse markup (">")
- Org tables
- table.el tables
- Images with attributes (floating and width)
@@ -180,6 +180,7 @@ blockElements = choice [ comment
, centerTag
, rightTag
, quoteTag
+ , verseTag
, bulletList
, orderedList
, definitionList
@@ -244,6 +245,25 @@ rightTag = blockTag id "right"
quoteTag :: PandocMonad m => MuseParser m (F Blocks)
quoteTag = withQuoteContext InDoubleQuote $ blockTag B.blockQuote "quote"
+verseLine :: PandocMonad m => MuseParser m String
+verseLine = do
+ line <- anyLine <|> many1Till anyChar eof
+ let (white, rest) = span (== ' ') line
+ return $ replicate (length white) '\160' ++ rest
+
+verseLines :: PandocMonad m => MuseParser m (F Blocks)
+verseLines = do
+ optionMaybe blankline -- Skip blankline after opening tag on separate line
+ lns <- many verseLine
+ lns' <- mapM (parseFromString' (trimInlinesF . mconcat <$> many inline)) lns
+ return $ B.lineBlock <$> sequence lns'
+
+verseTag :: PandocMonad m => MuseParser m (F Blocks)
+verseTag = do
+ (_, content) <- htmlElement "verse"
+ parsedContent <- parseFromString verseLines content
+ return parsedContent
+
commentTag :: PandocMonad m => MuseParser m (F Blocks)
commentTag = parseHtmlContent "comment" anyChar >> return mempty
diff --git a/test/Tests/Readers/Muse.hs b/test/Tests/Readers/Muse.hs
index 8d4ad0b15..1f3218daf 100644
--- a/test/Tests/Readers/Muse.hs
+++ b/test/Tests/Readers/Muse.hs
@@ -147,6 +147,27 @@ tests =
blockQuote (para "This is a quotation with a continuation")
]
, "Quote tag" =: "<quote>Hello, world</quote>" =?> blockQuote (para $ text "Hello, world")
+ , "Verse tag" =:
+ T.unlines [ "<verse>"
+ , ""
+ , "Foo bar baz"
+ , " One two three"
+ , ""
+ , "</verse>"
+ , "<verse>Foo bar</verse>"
+ , "<verse>"
+ , "Foo bar</verse>"
+ , "<verse>"
+ , " Foo</verse>"
+ ] =?>
+ lineBlock [ ""
+ , text "Foo bar baz"
+ , text "\160\160One two three"
+ , ""
+ ] <>
+ lineBlock [ "Foo bar" ] <>
+ lineBlock [ "Foo bar" ] <>
+ lineBlock [ "\160\160\160Foo" ]
, "Center" =: "<center>Hello, world</center>" =?> para (text "Hello, world")
, "Right" =: "<right>Hello, world</right>" =?> para (text "Hello, world")
, testGroup "Comments"