git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: Treat `{{xxx}}` the same as `{xxx}`.

Closes #2115.

commita088d67f0d7212c96f5b59c568f0fc61a1106be4 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 9 Mar 2017, 21:03 (10 years ago) parent1ec6a19
1 file changed+14−9
src/Text/Pandoc/Readers/LaTeX.hs+14−9
src/Text/Pandoc/Readers/LaTeX.hs+14−9
@@ -147,17 +147,22 @@ egroup = () <$ char '}'
147147 <|> () <$ controlSeq "endgroup"
148148
149149grouped :: PandocMonad m => Monoid a => LP m a -> LP m a
150−grouped parser = try $ bgroup *> (mconcat <$> manyTill parser egroup)
150+grouped parser = try $ do
151+ bgroup
152+ -- first we check for an inner 'grouped', because
153+ -- {{a,b}} should be parsed the same as {a,b}
154+ try (grouped parser <* egroup)
155+ <|> (mconcat <$> manyTill parser egroup)
151156
152157braced :: PandocMonad m => LP m String
153−braced = bgroup *> (concat <$> manyTill
154− ( many1 (satisfy (\c -> c /= '\\' && c /= '}' && c /= '{'))
155− <|> try (string "\\}")
156− <|> try (string "\\{")
157− <|> try (string "\\\\")
158− <|> ((\x -> "{" ++ x ++ "}") <$> braced)
159− <|> count 1 anyChar
160− ) egroup)
158+braced = grouped chunk
159+ where chunk =
160+ many1 (satisfy (\c -> c /= '\\' && c /= '}' && c /= '{'))
161+ <|> try (string "\\}")
162+ <|> try (string "\\{")
163+ <|> try (string "\\\\")
164+ <|> ((\x -> "{" ++ x ++ "}") <$> braced)
165+ <|> count 1 anyChar
161166
162167bracketed :: PandocMonad m => Monoid a => LP m a -> LP m a
163168bracketed parser = try $ char '[' *> (mconcat <$> manyTill parser (char ']'))