@@ -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 ']'))