git.iko.soy/typeable/pandoc
on master help sign in
HTML reader: support <bdo> (#6271)
dd06d63Tristan de Cacqueray
src/Text/Pandoc/Readers/HTML.hs+13
@@ -648,6 +648,7 @@ inline = choice
648 , pLineBreak
648 , pLineBreak
649 , pLink
649 , pLink
650 , pImage
650 , pImage
651+ , pBdo
651 , pCode
652 , pCode
652 , pCodeWithClass [("samp","sample"),("var","variable")]
653 , pCodeWithClass [("samp","sample"),("var","variable")]
653 , pSpan
654 , pSpan
@@ -802,6 +803,18 @@ pCode = try $ do
802 result <- manyTill pAny (pCloses open)
803 result <- manyTill pAny (pCloses open)
803 return $ B.codeWith (mkAttr attr) $ T.unwords $ T.lines $ innerText result
804 return $ B.codeWith (mkAttr attr) $ T.unwords $ T.lines $ innerText result
804
805
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+
805pSpan :: PandocMonad m => TagParser m Inlines
818pSpan :: PandocMonad m => TagParser m Inlines
806pSpan = try $ do
819pSpan = try $ do
807 guardEnabled Ext_native_spans
820 guardEnabled Ext_native_spans
test/command/1592.md+21
@@ -47,3 +47,24 @@ pandoc -f native -t markdown
47[hi]{.smallcaps}
47[hi]{.smallcaps}
48```
48```
49
49
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+```