mirror of
https://github.com/jgm/pandoc.git
synced 2026-09-24 15:44:59 +08:00
LaTeX reader: avoid macro resolution code if no macros defined.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user