From 28b736bf957da0df79ffb211fc5e7ec4ff713c4b Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 22 Dec 2017 17:59:47 -0800 Subject: `latex_macros` extension changes. Don't pass through macro definitions themselves when `latex_macros` is set. The macros have already been applied. If `latex_macros` is enabled, then `rawLaTeXBlock` in Text.Pandoc.Readers.LaTeX will succeed in parsing a macro definition, and will update pandoc's internal macro map accordingly, but the empty string will be returned. Together with earlier changes, this closes #4179. --- src/Text/Pandoc/Readers/LaTeX.hs | 6 ++++-- src/Text/Pandoc/Readers/Markdown.hs | 10 +++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src/Text/Pandoc') diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 5299b964f..f7e45e01a 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -272,8 +272,10 @@ rawLaTeXBlock = do lookAhead (try (char '\\' >> letter)) -- we don't want to apply newly defined latex macros to their own -- definitions: - (snd <$> rawLaTeXParser macroDef) <|> - ((snd <$> rawLaTeXParser (environment <|> blockCommand)) >>= applyMacros) + (do (_, raw) <- rawLaTeXParser macroDef + (guardDisabled Ext_latex_macros >> return raw) <|> return "") + <|> (do (_, raw) <- rawLaTeXParser (environment <|> blockCommand) + applyMacros raw) rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s) => ParserT String s m String diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index af020261b..e7ad9d8ba 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -1120,13 +1120,17 @@ rawVerbatimBlock = htmlInBalanced isVerbTag rawTeXBlock :: PandocMonad m => MarkdownParser m (F Blocks) rawTeXBlock = do guardEnabled Ext_raw_tex - result <- (B.rawBlock "context" . trimr . concat <$> + result <- (B.rawBlock "context" . trim . concat <$> many1 ((++) <$> (rawConTeXtEnvironment <|> conTeXtCommand) <*> (blanklines <|> many spaceChar))) - <|> (B.rawBlock "latex" . trimr . concat <$> + <|> (B.rawBlock "latex" . trim . concat <$> many1 ((++) <$> rawLaTeXBlock <*> (blanklines <|> many spaceChar))) - return $ return result + return $ case B.toList result of + [RawBlock _ cs] + | all (`elem` [' ','\t','\n']) cs -> return mempty + -- don't create a raw block for suppressed macro defs + _ -> return result conTeXtCommand :: PandocMonad m => MarkdownParser m String conTeXtCommand = oneOfStrings ["\\placeformula"] -- cgit v1.2.3