From 34b229dd5a8493bad62498e5485f2775e2289ce8 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 19 Jul 2018 13:58:02 -0700 Subject: Fix for bug in parsing `\include` in markdown. Starting in 2.2.2, everything after an `\input` (or `\include`) in a markdown file would be parsed as raw LaTeX. This commit fixes the issue and adds a regression test. Closes #4781. --- src/Text/Pandoc/Readers/LaTeX.hs | 11 ++++++++++- test/command/4781.md | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/command/4781.md diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index c15312cd8..1dd31d402 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -286,6 +286,12 @@ rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s) rawLaTeXBlock = do lookAhead (try (char '\\' >> letter)) snd <$> (rawLaTeXParser False macroDef blocks + <|> (rawLaTeXParser True + (do choice (map controlSeq + ["include", "input", "subfile", "usepackage"]) + skipMany opt + braced + return mempty) blocks) <|> rawLaTeXParser True (environment <|> blockCommand) (mconcat <$> (many (block <|> beginOrEndCommand)))) @@ -308,7 +314,10 @@ rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s) => ParserT String s m String rawLaTeXInline = do lookAhead (try (char '\\' >> letter)) - snd <$> rawLaTeXParser True (inlineEnvironment <|> inlineCommand') inlines + snd <$> ( rawLaTeXParser True + (mempty <$ (controlSeq "input" >> skipMany opt >> braced)) + inlines + <|> rawLaTeXParser True (inlineEnvironment <|> inlineCommand') inlines) inlineCommand :: PandocMonad m => ParserT String ParserState m Inlines inlineCommand = do diff --git a/test/command/4781.md b/test/command/4781.md new file mode 100644 index 000000000..7dc973c7c --- /dev/null +++ b/test/command/4781.md @@ -0,0 +1,22 @@ +``` +% pandoc -t native +Markdown parsed *here* + +\include{command/bar} + +*But not here* +^D +[Para [Str "Markdown",Space,Str "parsed",Space,Emph [Str "here"]] +,RawBlock (Format "latex") "\\include{command/bar}" +,Para [Emph [Str "But",Space,Str "not",Space,Str "here"]]] +``` + +``` +% pandoc -t native +*here* \input{command/bar} + +*But not here* +^D +[Para [Emph [Str "here"],Space,RawInline (Format "tex") "\\input{command/bar}"] +,Para [Emph [Str "But",Space,Str "not",Space,Str "here"]]] +``` -- cgit v1.2.3