@@ -446,30 +446,25 @@ satisfyTok f = do
446446
447447doMacros :: PandocMonad m => LP m ()
448448doMacros = do
449− expanded <- sExpanded <$> getState
450− verbatimMode <- sVerbatimMode <$> getState
451− unless (expanded || verbatimMode) $ do
452− getInput >>= doMacros' 1 >>= setInput
453− updateState $ \st -> st{ sExpanded = True }
449+ st <- getState
450+ unless (sExpanded st || sVerbatimMode st || M.null (sMacros st)) $ do
451+ getInput >>= doMacros' 1 >>= setInput
452+ updateState $ \s -> s{ sExpanded = True }
454453
455454doMacros' :: PandocMonad m => Int -> [Tok] -> LP m [Tok]
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 <|> return inp
465− Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
466− Tok _ Word name : Tok _ Symbol "}" : ts
467− -> handleMacros macros n spos ("end" <> name) ts <|> return inp
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 <|> return inp
472− _ -> return inp
455+doMacros' n inp =
456+ case inp of
457+ Tok spos (CtrlSeq "begin") _ : Tok _ Symbol "{" :
458+ Tok _ Word name : Tok _ Symbol "}" : ts
459+ -> handleMacros n spos name ts <|> return inp
460+ Tok spos (CtrlSeq "end") _ : Tok _ Symbol "{" :
461+ Tok _ Word name : Tok _ Symbol "}" : ts
462+ -> handleMacros n spos ("end" <> name) ts <|> return inp
463+ Tok _ (CtrlSeq "expandafter") _ : t : ts
464+ -> combineTok t <$> doMacros' n ts
465+ Tok spos (CtrlSeq name) _ : ts
466+ -> handleMacros n spos name ts <|> return inp
467+ _ -> return inp
473468
474469 where
475470 combineTok (Tok spos (CtrlSeq name) x) (Tok _ Word w : ts)
@@ -510,9 +505,10 @@ doMacros' n inp = do
510505 Tok spos (CtrlSeq x) (txt <> " ") : acc
511506 addTok _ _ spos t acc = setpos spos t : acc
512507
513− handleMacros macros n' spos name ts = do
508+ handleMacros n' spos name ts = do
514509 when (n' > 20) -- detect macro expansion loops
515510 $ throwError $ PandocMacroLoop name
511+ macros <- sMacros <$> getState
516512 case M.lookup name macros of
517513 Nothing -> mzero
518514 Just (Macro expansionPoint argspecs optarg newtoks) -> do