From 31b8f60ea82d96b370cf4a765c46c18004ff6fa8 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Sat, 20 Feb 2021 22:03:29 -0800
Subject: LaTeX reader:  avoid macro resolution code if no macros defined.

---
 src/Text/Pandoc/Readers/LaTeX/Parsing.hs | 35 +++++++++++++++++---------------
 1 file changed, 19 insertions(+), 16 deletions(-)

(limited to 'src')

diff --git a/src/Text/Pandoc/Readers/LaTeX/Parsing.hs b/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
index dab4d334e..fc8542894 100644
--- a/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
+++ b/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
@@ -453,20 +453,24 @@ doMacros = do
       updateState $ \st -> st{ sExpanded = True }
 
 doMacros' :: PandocMonad m => Int -> [Tok] -> LP m [Tok]
-doMacros' n inp =
-  case inp of
-     Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
-      Tok _ Word name : Tok _ Symbol "}" : ts
-        -> handleMacros n spos name ts
-     Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
-      Tok _ Word name : Tok _ Symbol "}" : ts
-        -> handleMacros n spos ("end" <> name) ts
-     Tok _ (CtrlSeq "expandafter") _ : t : ts
-        -> combineTok t <$> doMacros' n ts
-     Tok spos (CtrlSeq name) _ : ts
-        -> handleMacros n spos name ts
-     _ -> return inp
-   <|> return inp
+doMacros' n inp = do
+  macros <- sMacros <$> getState
+  if M.null macros
+     then return inp
+     else
+       case inp of
+          Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
+           Tok _ Word name : Tok _ Symbol "}" : ts
+             -> handleMacros macros n spos name ts
+          Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
+           Tok _ Word name : Tok _ Symbol "}" : ts
+             -> handleMacros macros n spos ("end" <> name) ts
+          Tok _ (CtrlSeq "expandafter") _ : t : ts
+             -> combineTok t <$> doMacros' n ts
+          Tok spos (CtrlSeq name) _ : ts
+             -> handleMacros macros n spos name ts
+          _ -> return inp
+        <|> return inp
 
   where
     combineTok (Tok spos (CtrlSeq name) x) (Tok _ Word w : ts)
@@ -507,10 +511,9 @@ doMacros' n inp =
         Tok spos (CtrlSeq x) (txt <> " ") : acc
     addTok _ _ spos t acc = setpos spos t : acc
 
-    handleMacros n' spos name ts = do
+    handleMacros macros n' spos name ts = do
       when (n' > 20)  -- detect macro expansion loops
         $ throwError $ PandocMacroLoop name
-      macros <- sMacros <$> getState
       case M.lookup name macros of
            Nothing -> mzero
            Just (Macro expansionPoint argspecs optarg newtoks) -> do
-- 
cgit v1.2.3