aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasily Alferov <ya-ikmik2012@yandex.ru>2019-07-14 02:55:41 +0300
committerJohn MacFarlane <jgm@berkeley.edu>2019-07-13 16:55:41 -0700
commitf6c92c7523a4070f13fbf193ef80ad7ac63f6693 (patch)
tree5e4afc7c98d7368780df2d868e0d0cf11cd7e048
parent7bc9eab8465e16a13768834e49f124a3efbf29f4 (diff)
downloadpandoc-f6c92c7523a4070f13fbf193ef80ad7ac63f6693.tar.gz
Fix #4499: add mbox and hbox handling to LaTeX reader (#5586)
When `+raw_tex` is enabled, these are passed through literally. Otherwise, they are handled in a way that emulates LaTeX's behavior.
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs12
-rw-r--r--test/command/4499.md87
2 files changed, 98 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index 0202c1fc4..73780a8b8 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -29,7 +29,7 @@ import Prelude
import Control.Applicative (many, optional, (<|>))
import Control.Monad
import Control.Monad.Except (throwError)
-import Data.Char (isDigit, isLetter, toLower, toUpper)
+import Data.Char (isDigit, isLetter, toLower, toUpper, chr)
import Data.Default
import Data.List (intercalate, isPrefixOf)
import qualified Data.Map as M
@@ -893,6 +893,8 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
, ("cref", rawInlineOr "cref" $ doref "ref") -- from cleveref.sty
, ("vref", rawInlineOr "vref" $ doref "ref+page") -- from varioref.sty
, ("eqref", rawInlineOr "eqref" $ doref "eqref") -- from amsmath.sty
+ , ("mbox", rawInlineOr "mbox" $ processHBox <$> tok)
+ , ("hbox", rawInlineOr "hbox" $ processHBox <$> tok)
, ("lettrine", optional opt >> extractSpaces (spanWith ("",["lettrine"],[])) <$> tok)
, ("(", mathInline . toksToString <$> manyTill anyTok (controlSeq ")"))
, ("[", mathDisplay . toksToString <$> manyTill anyTok (controlSeq "]"))
@@ -1287,6 +1289,14 @@ rawInlineOr name' fallback = do
then rawInline "latex" <$> getRawCommand name' ("\\" <> name')
else fallback
+processHBox :: Inlines -> Inlines
+processHBox = walk convert
+ where
+ convert Space = Str [chr 160] -- non-breakable space
+ convert SoftBreak = Str [chr 160] -- non-breakable space
+ convert LineBreak = Str ""
+ convert x = x
+
getRawCommand :: PandocMonad m => Text -> Text -> LP m String
getRawCommand name txt = do
(_, rawargs) <- withRaw $
diff --git a/test/command/4499.md b/test/command/4499.md
new file mode 100644
index 000000000..073f76c0e
--- /dev/null
+++ b/test/command/4499.md
@@ -0,0 +1,87 @@
+```
+% pandoc -f latex -t html
+\mbox{abc def} ghi
+^D
+<p>abc def ghi</p>
+```
+
+```
+% pandoc -f latex+raw_tex -t native
+\mbox{abc def}
+^D
+[Para [RawInline (Format "latex") "\\mbox{abc def}"]]
+```
+
+```
+% pandoc -f latex -t html
+abc \mbox{\textit{def ghi} jkl} mno
+^D
+<p>abc <em>def ghi</em> jkl mno</p>
+```
+
+```
+% pandoc -f latex -t html
+abc \mbox{def \\ ghi} jkl
+^D
+<p>abc defghi jkl</p>
+```
+
+```
+% pandoc -f latex -t html
+abc \mbox{def
+ghi}
+^D
+<p>abc def ghi</p>
+```
+
+```
+% pandoc -f latex -t html
+abc \mbox{def \textit{ghi \\ jkl}
+mno} pqr
+^D
+<p>abc def <em>ghijkl</em> mno pqr</p>
+```
+
+```
+% pandoc -f latex -t html
+\hbox{abc def} ghi
+^D
+<p>abc def ghi</p>
+```
+
+```
+% pandoc -f latex+raw_tex -t native
+\hbox{abc def}
+^D
+[Para [RawInline (Format "latex") "\\hbox{abc def}"]]
+```
+
+```
+% pandoc -f latex -t html
+abc \hbox{\textit{def ghi} jkl} mno
+^D
+<p>abc <em>def ghi</em> jkl mno</p>
+```
+
+```
+% pandoc -f latex -t html
+abc \hbox{def \\ ghi} jkl
+^D
+<p>abc defghi jkl</p>
+```
+
+```
+% pandoc -f latex -t html
+abc \hbox{def
+ghi}
+^D
+<p>abc def ghi</p>
+```
+
+```
+% pandoc -f latex -t html
+abc \hbox{def \textit{ghi \\ jkl}
+mno} pqr
+^D
+<p>abc def <em>ghijkl</em> mno pqr</p>
+```