diff options
author | Vasily Alferov <ya-ikmik2012@yandex.ru> | 2019-07-14 02:55:41 +0300 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-07-13 16:55:41 -0700 |
commit | f6c92c7523a4070f13fbf193ef80ad7ac63f6693 (patch) | |
tree | 5e4afc7c98d7368780df2d868e0d0cf11cd7e048 | |
parent | 7bc9eab8465e16a13768834e49f124a3efbf29f4 (diff) | |
download | pandoc-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.hs | 12 | ||||
-rw-r--r-- | test/command/4499.md | 87 |
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> +``` |