From f6c92c7523a4070f13fbf193ef80ad7ac63f6693 Mon Sep 17 00:00:00 2001
From: Vasily Alferov <ya-ikmik2012@yandex.ru>
Date: Sun, 14 Jul 2019 02:55:41 +0300
Subject: 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.
---
 src/Text/Pandoc/Readers/LaTeX.hs | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

(limited to 'src')

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 $
-- 
cgit v1.2.3