LaTeX reader: further performance optimization.
Avoid unnecessary 'doMacros'.
This commit is contained in:
parent
c0c8865eaa
commit
f43cb5ddcf
1 changed files with 19 additions and 23 deletions
|
@ -446,29 +446,24 @@ satisfyTok f = do
|
||||||
|
|
||||||
doMacros :: PandocMonad m => LP m ()
|
doMacros :: PandocMonad m => LP m ()
|
||||||
doMacros = do
|
doMacros = do
|
||||||
expanded <- sExpanded <$> getState
|
st <- getState
|
||||||
verbatimMode <- sVerbatimMode <$> getState
|
unless (sExpanded st || sVerbatimMode st || M.null (sMacros st)) $ do
|
||||||
unless (expanded || verbatimMode) $ do
|
|
||||||
getInput >>= doMacros' 1 >>= setInput
|
getInput >>= doMacros' 1 >>= setInput
|
||||||
updateState $ \st -> st{ sExpanded = True }
|
updateState $ \s -> s{ sExpanded = True }
|
||||||
|
|
||||||
doMacros' :: PandocMonad m => Int -> [Tok] -> LP m [Tok]
|
doMacros' :: PandocMonad m => Int -> [Tok] -> LP m [Tok]
|
||||||
doMacros' n inp = do
|
doMacros' n inp =
|
||||||
macros <- sMacros <$> getState
|
|
||||||
if M.null macros
|
|
||||||
then return inp
|
|
||||||
else
|
|
||||||
case inp of
|
case inp of
|
||||||
Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
|
Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
|
||||||
Tok _ Word name : Tok _ Symbol "}" : ts
|
Tok _ Word name : Tok _ Symbol "}" : ts
|
||||||
-> handleMacros macros n spos name ts <|> return inp
|
-> handleMacros n spos name ts <|> return inp
|
||||||
Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
|
Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
|
||||||
Tok _ Word name : Tok _ Symbol "}" : ts
|
Tok _ Word name : Tok _ Symbol "}" : ts
|
||||||
-> handleMacros macros n spos ("end" <> name) ts <|> return inp
|
-> handleMacros n spos ("end" <> name) ts <|> return inp
|
||||||
Tok _ (CtrlSeq "expandafter") _ : t : ts
|
Tok _ (CtrlSeq "expandafter") _ : t : ts
|
||||||
-> combineTok t <$> doMacros' n ts
|
-> combineTok t <$> doMacros' n ts
|
||||||
Tok spos (CtrlSeq name) _ : ts
|
Tok spos (CtrlSeq name) _ : ts
|
||||||
-> handleMacros macros n spos name ts <|> return inp
|
-> handleMacros n spos name ts <|> return inp
|
||||||
_ -> return inp
|
_ -> return inp
|
||||||
|
|
||||||
where
|
where
|
||||||
|
@ -510,9 +505,10 @@ doMacros' n inp = do
|
||||||
Tok spos (CtrlSeq x) (txt <> " ") : acc
|
Tok spos (CtrlSeq x) (txt <> " ") : acc
|
||||||
addTok _ _ spos t acc = setpos spos t : acc
|
addTok _ _ spos t acc = setpos spos t : acc
|
||||||
|
|
||||||
handleMacros macros n' spos name ts = do
|
handleMacros n' spos name ts = do
|
||||||
when (n' > 20) -- detect macro expansion loops
|
when (n' > 20) -- detect macro expansion loops
|
||||||
$ throwError $ PandocMacroLoop name
|
$ throwError $ PandocMacroLoop name
|
||||||
|
macros <- sMacros <$> getState
|
||||||
case M.lookup name macros of
|
case M.lookup name macros of
|
||||||
Nothing -> mzero
|
Nothing -> mzero
|
||||||
Just (Macro expansionPoint argspecs optarg newtoks) -> do
|
Just (Macro expansionPoint argspecs optarg newtoks) -> do
|
||||||
|
|
Loading…
Add table
Reference in a new issue