aboutsummaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorFlorian Beeres <yuuki@protonmail.com>2019-11-11 17:55:58 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2019-11-11 08:55:58 -0800
commitbf2eb4f288df5d5b5e054cdc4ffa3b3c4dd187fa (patch)
treef49ab82d214ec4bd4badf8e67d89362d8c70a10a /src/Text
parent3bf53628984a91d9456d40b1202e9d15f1ad3088 (diff)
downloadpandoc-bf2eb4f288df5d5b5e054cdc4ffa3b3c4dd187fa.tar.gz
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.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Readers/HTML.hs15
-rw-r--r--src/Text/Pandoc/Shared.hs2
-rw-r--r--src/Text/Pandoc/Writers/HTML.hs6
3 files changed, 16 insertions, 7 deletions
diff --git a/src/Text/Pandoc/Readers/HTML.hs b/src/Text/Pandoc/Readers/HTML.hs
index 697a3aa9d..e03ac6a97 100644
--- a/src/Text/Pandoc/Readers/HTML.hs
+++ b/src/Text/Pandoc/Readers/HTML.hs
@@ -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"],[]))
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index ff97d16fb..797a0a0b0 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -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])
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index 3971b7740..f042bda21 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -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)