diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-01-31 22:50:51 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-01-31 22:50:51 -0800 |
commit | e752669e50815b0c1bef62fc5b1de95c33317f89 (patch) | |
tree | 727bbcabf4878b317fe93863c7de26f1eb7316a0 | |
parent | 7c424b315cb814b952d9bd9d5f027beb70169bff (diff) | |
download | pandoc-e752669e50815b0c1bef62fc5b1de95c33317f89.tar.gz |
LaTeX reader: don't let `\egroup` match `{`.
`braced` now actually requires nested braces.
Otherwise some legitimate command and environment
definitions can break (see test/command/tex-group.md).
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX/Parsing.hs | 6 | ||||
-rw-r--r-- | test/command/tex-group.md | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX/Parsing.hs b/src/Text/Pandoc/Readers/LaTeX/Parsing.hs index 9437c23d9..a2dd61aee 100644 --- a/src/Text/Pandoc/Readers/LaTeX/Parsing.hs +++ b/src/Text/Pandoc/Readers/LaTeX/Parsing.hs @@ -612,19 +612,19 @@ braced' :: PandocMonad m => LP m Tok -> Int -> LP m [Tok] braced' getTok n = handleEgroup <|> handleBgroup <|> handleOther where handleEgroup = do - t <- egroup + t <- symbol '}' if n == 1 then return [] else (t:) <$> braced' getTok (n - 1) handleBgroup = do - t <- bgroup + t <- symbol '{' (t:) <$> braced' getTok (n + 1) handleOther = do t <- getTok (t:) <$> braced' getTok n braced :: PandocMonad m => LP m [Tok] -braced = bgroup *> braced' anyTok 1 +braced = symbol '{' *> braced' anyTok 1 -- URLs require special handling, because they can contain % -- characters. So we retonenize comments as we go... diff --git a/test/command/tex-group.md b/test/command/tex-group.md new file mode 100644 index 000000000..277b32142 --- /dev/null +++ b/test/command/tex-group.md @@ -0,0 +1,12 @@ +``` +% pandoc -f latex -t html +\newenvironment{foo}% +{\emph\bgroup}% +{\egroup} + +\begin{foo} +hi +\end{foo} +^D +<p><em>hi</em></p> +``` |