Muse reader: parse <verse> tag (#3872)
This commit is contained in:
parent
ef209ebad2
commit
e6f767b581
2 changed files with 42 additions and 1 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue