From f6c92c7523a4070f13fbf193ef80ad7ac63f6693 Mon Sep 17 00:00:00 2001 From: Vasily Alferov 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 +++++- test/command/4499.md | 87 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 test/command/4499.md 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 +

abc def ghi

+``` + +``` +% 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 +

abc def ghi jkl mno

+``` + +``` +% pandoc -f latex -t html +abc \mbox{def \\ ghi} jkl +^D +

abc defghi jkl

+``` + +``` +% pandoc -f latex -t html +abc \mbox{def +ghi} +^D +

abc def ghi

+``` + +``` +% pandoc -f latex -t html +abc \mbox{def \textit{ghi \\ jkl} +mno} pqr +^D +

abc def ghijkl mno pqr

+``` + +``` +% pandoc -f latex -t html +\hbox{abc def} ghi +^D +

abc def ghi

+``` + +``` +% 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 +

abc def ghi jkl mno

+``` + +``` +% pandoc -f latex -t html +abc \hbox{def \\ ghi} jkl +^D +

abc defghi jkl

+``` + +``` +% pandoc -f latex -t html +abc \hbox{def +ghi} +^D +

abc def ghi

+``` + +``` +% pandoc -f latex -t html +abc \hbox{def \textit{ghi \\ jkl} +mno} pqr +^D +

abc def ghijkl mno pqr

+``` -- cgit v1.2.3