aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-09-06 17:05:04 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-09-07 09:41:17 -0700
commita211edc8192f2abc9787c1012a3cf3cb3f96952c (patch)
treef03a95f0038e10fe55ede2fcceb6889c76566f20
parent6397aacdaed3f5ca3305a383b8ff6575f5d73e5d (diff)
downloadpandoc-a211edc8192f2abc9787c1012a3cf3cb3f96952c.tar.gz
HTML reader: parse `<script type="math/tex` tags as math.
These are used by MathJax. Closes #4877.
-rw-r--r--src/Text/Pandoc/Readers/HTML.hs12
-rw-r--r--test/command/4877.md13
2 files changed, 25 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Readers/HTML.hs b/src/Text/Pandoc/Readers/HTML.hs
index ea62bfcbf..b06e07a80 100644
--- a/src/Text/Pandoc/Readers/HTML.hs
+++ b/src/Text/Pandoc/Readers/HTML.hs
@@ -663,6 +663,7 @@ inline = choice
, pCode
, pSpan
, pMath False
+ , pScriptMath
, pRawHtmlInline
]
@@ -822,6 +823,17 @@ toStringAttr :: [(Text, Text)] -> [(String, String)]
toStringAttr = map go
where go (x,y) = (T.unpack x, T.unpack y)
+pScriptMath :: PandocMonad m => TagParser m Inlines
+pScriptMath = try $ do
+ TagOpen _ attr' <- pSatisfy $ tagOpen (=="script") (const True)
+ isdisplay <- case lookup "type" attr' of
+ Just x | "math/tex" `T.isPrefixOf` x
+ -> return $ "display" `T.isSuffixOf` x
+ _ -> mzero
+ contents <- T.unpack . innerText <$>
+ manyTill pAnyTag (pSatisfy (matchTagClose "script"))
+ return $ (if isdisplay then B.displayMath else B.math) contents
+
pMath :: PandocMonad m => Bool -> TagParser m Inlines
pMath inCase = try $ do
open@(TagOpen _ attr') <- pSatisfy $ tagOpen (=="math") (const True)
diff --git a/test/command/4877.md b/test/command/4877.md
new file mode 100644
index 000000000..070687345
--- /dev/null
+++ b/test/command/4877.md
@@ -0,0 +1,13 @@
+```
+% pandoc -f html -t native
+My <script type="math/tex">\mathcal{D}</script>
+^D
+[Plain [Str "My",Space,Math InlineMath "\\mathcal{D}"]]
+```
+
+```
+% pandoc -f html -t native
+<script type="math/tex; mode=display">\mathcal{D}</script>
+^D
+[Plain [Math DisplayMath "\\mathcal{D}"]]
+```