aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2021-08-11 16:28:53 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2021-08-11 16:28:53 -0700
commitdd1a956a8aa7d0cadd37db1650698eee9274beee (patch)
treedade1c78121fc3e6e1e5f99e8b38fc7e1e0ea6f9
parente3a263df4669450049c49043412f791261e049a4 (diff)
downloadpandoc-dd1a956a8aa7d0cadd37db1650698eee9274beee.tar.gz
LaTeX reader: Support `\global` before `\def`, `\let`, etc.
See #7494.
-rw-r--r--src/Text/Pandoc/Readers/LaTeX/Macro.hs12
-rw-r--r--test/command/7494.md12
2 files changed, 22 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX/Macro.hs b/src/Text/Pandoc/Readers/LaTeX/Macro.hs
index 5709cbb8c..bd7979ef3 100644
--- a/src/Text/Pandoc/Readers/LaTeX/Macro.hs
+++ b/src/Text/Pandoc/Readers/LaTeX/Macro.hs
@@ -25,8 +25,8 @@ macroDef constructor = do
guardDisabled Ext_latex_macros)
<|> return mempty
where commandDef = do
- nameMacroPairs <- newcommand <|> letmacro <|>
- edefmacro <|> defmacro <|> newif
+ nameMacroPairs <- newcommand <|>
+ checkGlobal (letmacro <|> edefmacro <|> defmacro <|> newif)
guardDisabled Ext_latex_macros <|>
mapM_ insertMacro nameMacroPairs
environmentDef = do
@@ -77,6 +77,14 @@ letmacro = do
Macro GroupScope ExpandWhenDefined [] Nothing [target])]
_ -> pure [(name, Macro GroupScope ExpandWhenDefined [] Nothing [target])]
+checkGlobal :: PandocMonad m => LP m [(Text, Macro)] -> LP m [(Text, Macro)]
+checkGlobal p =
+ (do controlSeq "global"
+ ms <- p
+ return $ map (\(n, Macro _ expand arg optarg contents) ->
+ (n, Macro GlobalScope expand arg optarg contents)) ms)
+ <|> p
+
edefmacro :: PandocMonad m => LP m [(Text, Macro)]
edefmacro = do
scope <- (GroupScope <$ controlSeq "edef")
diff --git a/test/command/7494.md b/test/command/7494.md
index d8a2ff7a5..364bcb7e1 100644
--- a/test/command/7494.md
+++ b/test/command/7494.md
@@ -24,6 +24,18 @@ BAR BAZ BAZ
```
% pandoc -f latex -t plain
+\def\foo{BAR}
+{\foo
+\global\def\foo{BAZ}
+\foo
+}
+\foo
+^D
+BAR BAZ BAZ
+```
+
+```
+% pandoc -f latex -t plain
\newcommand{\aaa}{BBB}
{
\renewcommand{\aaa}{AAA}