diff options
-rw-r--r-- | src/Text/Pandoc/Readers/Muse.hs | 22 | ||||
-rw-r--r-- | test/Tests/Readers/Muse.hs | 21 |
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" |