git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: avoid macro resolution code if no macros defined.
commit31b8f60ea82d96b370cf4a765c46c18004ff6fa8 authorJohn MacFarlane <jgm@berkeley.edu> dateSat 20 Feb 2021, 22:03 (6 years ago) parent0f955b1
1 file changed+19−16
src/Text/Pandoc/Readers/LaTeX/Parsing.hs+19−16
src/Text/Pandoc/Readers/LaTeX/Parsing.hs+19−16
@@ -453,20 +453,24 @@ doMacros = do
453453 updateState $ \st -> st{ sExpanded = True }
454454
455455doMacros' :: PandocMonad m => Int -> [Tok] -> LP m [Tok]
456−doMacros' n inp =
457− case inp of
458− Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
459− Tok _ Word name : Tok _ Symbol "}" : ts
460− -> handleMacros n spos name ts
461− Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
462− Tok _ Word name : Tok _ Symbol "}" : ts
463− -> handleMacros n spos ("end" <> name) ts
464− Tok _ (CtrlSeq "expandafter") _ : t : ts
465− -> combineTok t <$> doMacros' n ts
466− Tok spos (CtrlSeq name) _ : ts
467− -> handleMacros n spos name ts
468− _ -> return inp
469− <|> return inp
456+doMacros' n inp = do
457+ macros <- sMacros <$> getState
458+ if M.null macros
459+ then return inp
460+ else
461+ case inp of
462+ Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
463+ Tok _ Word name : Tok _ Symbol "}" : ts
464+ -> handleMacros macros n spos name ts
465+ Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
466+ Tok _ Word name : Tok _ Symbol "}" : ts
467+ -> handleMacros macros n spos ("end" <> name) ts
468+ Tok _ (CtrlSeq "expandafter") _ : t : ts
469+ -> combineTok t <$> doMacros' n ts
470+ Tok spos (CtrlSeq name) _ : ts
471+ -> handleMacros macros n spos name ts
472+ _ -> return inp
473+ <|> return inp
470474
471475 where
472476 combineTok (Tok spos (CtrlSeq name) x) (Tok _ Word w : ts)
@@ -507,10 +511,9 @@ doMacros' n inp =
507511 Tok spos (CtrlSeq x) (txt <> " ") : acc
508512 addTok _ _ spos t acc = setpos spos t : acc
509513
510− handleMacros n' spos name ts = do
514+ handleMacros macros n' spos name ts = do
511515 when (n' > 20) -- detect macro expansion loops
512516 $ throwError $ PandocMacroLoop name
513− macros <- sMacros <$> getState
514517 case M.lookup name macros of
515518 Nothing -> mzero
516519 Just (Macro expansionPoint argspecs optarg newtoks) -> do