git.iko.soy/typeable/pandoc
on master help sign in
HTML reader: support <bdo> (#6271)

See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo Closes #5794

commitdd06d6354081f478e99d864ac4343896ec887eda authorTristan de Cacqueray <tdecacqu@redhat.com> dateSat 11 Apr 2020, 16:57 (7 years ago) parent61f666a
2 files changed+34
src/Text/Pandoc/Readers/HTML.hs+13 test/command/1592.md+21
src/Text/Pandoc/Readers/HTML.hs+13
@@ -648,6 +648,7 @@ inline = choice
648648 , pLineBreak
649649 , pLink
650650 , pImage
651+ , pBdo
651652 , pCode
652653 , pCodeWithClass [("samp","sample"),("var","variable")]
653654 , pSpan
@@ -802,6 +803,18 @@ pCode = try $ do
802803 result <- manyTill pAny (pCloses open)
803804 return $ B.codeWith (mkAttr attr) $ T.unwords $ T.lines $ innerText result
804805
806+-- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo
807+-- Bidirectional Text Override
808+pBdo :: PandocMonad m => TagParser m Inlines
809+pBdo = try $ do
810+ TagOpen _ attr' <- lookAhead $ pSatisfy $ tagOpen (=="bdo") (const True)
811+ let attr = toStringAttr attr'
812+ contents <- pInTags "bdo" inline
813+ return $ case lookup "dir" attr of
814+ -- Only bdo with a direction matters
815+ Just dir -> B.spanWith ("", [], [("dir",T.toLower dir)]) contents
816+ Nothing -> contents
817+
805818pSpan :: PandocMonad m => TagParser m Inlines
806819pSpan = try $ do
807820 guardEnabled Ext_native_spans
test/command/1592.md+21
@@ -47,3 +47,24 @@ pandoc -f native -t markdown
4747[hi]{.smallcaps}
4848```
4949
50+```
51+% pandoc -f html -t native
52+<bdo dir="ltr">foo</bdo>
53+^D
54+[Plain [Span ("",[],[("dir","ltr")]) [Str "foo"]]]
55+```
56+
57+```
58+% pandoc -f html -t native
59+<bdo dir="rtl">foo<bdo dir="ltr">bar</bdo>baz</bdo>
60+^D
61+[Plain [Span ("",[],[("dir","rtl")]) [Str "foo",Span ("",[],[("dir","ltr")]) [Str "bar"],Str "baz"]]]
62+```
63+
64+```
65+% pandoc -f html -t native
66+<p><bdo dir="rtl">This text will go right
67+to left.</bdo></p>
68+^D
69+[Para [Span ("",[],[("dir","rtl")]) [Str "This",Space,Str "text",Space,Str "will",Space,Str "go",Space,Str "right",SoftBreak,Str "to",Space,Str "left."]]]
70+```