Change the implementation of htmlSpanLikeElements
and implement <dfn>
(#5882)
* Add HTML Reader support for `<dfn>`, parsing this as a Span with class `dfn`. * Change `htmlSpanLikeElements` implementation to retain classes, attributes and inline content.
This commit is contained in:
parent
3bf5362898
commit
bf2eb4f288
4 changed files with 36 additions and 7 deletions
|
@ -719,10 +719,17 @@ pSubscript :: PandocMonad m => TagParser m Inlines
|
|||
pSubscript = pInlinesInTags "sub" B.subscript
|
||||
|
||||
pSpanLike :: PandocMonad m => TagParser m Inlines
|
||||
pSpanLike = Set.foldr
|
||||
(\tag acc -> acc <|> pInlinesInTags tag (B.spanWith ("",[T.unpack tag],[])))
|
||||
mzero
|
||||
htmlSpanLikeElements
|
||||
pSpanLike =
|
||||
Set.foldr
|
||||
(\tagName acc -> acc <|> parseTag tagName)
|
||||
mzero
|
||||
htmlSpanLikeElements
|
||||
where
|
||||
parseTag tagName = do
|
||||
TagOpen _ attrs <- pSatisfy $ tagOpenLit tagName (const True)
|
||||
let (ids, cs, kvs) = mkAttr . toStringAttr $ attrs
|
||||
content <- mconcat <$> manyTill inline (pCloses tagName <|> eof)
|
||||
return $ B.spanWith (ids, T.unpack tagName : cs, kvs) content
|
||||
|
||||
pSmall :: PandocMonad m => TagParser m Inlines
|
||||
pSmall = pInlinesInTags "small" (B.spanWith ("",["small"],[]))
|
||||
|
|
|
@ -702,7 +702,7 @@ underlineSpan = B.spanWith ("", ["underline"], [])
|
|||
-- | Set of HTML elements that are represented as Span with a class equal as
|
||||
-- the element tag itself.
|
||||
htmlSpanLikeElements :: Set.Set T.Text
|
||||
htmlSpanLikeElements = Set.fromList [T.pack "kbd", T.pack "mark"]
|
||||
htmlSpanLikeElements = Set.fromList [T.pack "kbd", T.pack "mark", T.pack "dfn"]
|
||||
|
||||
-- | Returns the first sentence in a list of inlines, and the rest.
|
||||
breakSentence :: [Inline] -> ([Inline], [Inline])
|
||||
|
|
|
@ -998,13 +998,15 @@ inlineToHtml opts inline = do
|
|||
|
||||
(Span (id',classes,kvs) ils) ->
|
||||
let spanLikeTag = case classes of
|
||||
[c] -> do
|
||||
(c:_) -> do
|
||||
let c' = T.pack c
|
||||
guard (c' `Set.member` htmlSpanLikeElements)
|
||||
pure $ customParent (textTag c')
|
||||
_ -> Nothing
|
||||
in case spanLikeTag of
|
||||
Just tag -> tag <$> inlineListToHtml opts ils
|
||||
Just tag -> do
|
||||
h <- inlineListToHtml opts ils
|
||||
addAttrs opts (id',tail classes',kvs') $ tag h
|
||||
Nothing -> do
|
||||
h <- inlineListToHtml opts ils
|
||||
addAttrs opts (id',classes',kvs') (H.span h)
|
||||
|
|
20
test/command/5795.md
Normal file
20
test/command/5795.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
```
|
||||
% pandoc -f html -t html
|
||||
<dfn class="dfn" id="foo" title="bax"><span>foo</span></dfn>
|
||||
^D
|
||||
<dfn id="foo" class="dfn" title="bax"><span>foo</span></dfn>
|
||||
```
|
||||
|
||||
```
|
||||
% pandoc -f html -t native
|
||||
<dfn class="dfn" id="foo" title="bax"><span>foo</span></dfn>
|
||||
^D
|
||||
[Plain [Span ("foo",["dfn","dfn"],[("title","bax")]) [Span ("",[],[]) [Str "foo"]]]]
|
||||
```
|
||||
|
||||
```
|
||||
% pandoc -f native -t html
|
||||
[Plain [Span ("foo",["dfn","dfn"],[("title","bax")]) [Span ("",[],[]) [Str "foo"]]]]
|
||||
^D
|
||||
<dfn id="foo" class="dfn" title="bax"><span>foo</span></dfn>
|
||||
```
|
Loading…
Add table
Reference in a new issue