@@ -148,25 +148,19 @@ litChar = escapedChar'
148148-- | Parse a sequence of inline elements between square brackets,
149149-- including inlines between balanced pairs of square brackets.
150150inlinesInBalancedBrackets :: PandocMonad m => MarkdownParser m (F Inlines)
151−inlinesInBalancedBrackets = do
152− char '['
153− pos <- getPosition
154− (_, raw) <- withRaw $ charsInBalancedBrackets 1
155− guard $ not $ null raw
156− parseFromString' (setPosition pos >>
157− trimInlinesF <$> inlines) (init raw)
158−
159−charsInBalancedBrackets :: PandocMonad m => Int -> MarkdownParser m ()
160−charsInBalancedBrackets 0 = return ()
161−charsInBalancedBrackets openBrackets =
162− (char '[' >> charsInBalancedBrackets (openBrackets + 1))
163− <|> (char ']' >> charsInBalancedBrackets (openBrackets - 1))
164− <|> (( (() <$ code)
165− <|> (() <$ escapedChar')
166− <|> (newline >> notFollowedBy blankline)
167− <|> skipMany1 (noneOf "[]`\n\\")
168− <|> (() <$ count 1 (oneOf "`\\"))
169− ) >> charsInBalancedBrackets openBrackets)
151+inlinesInBalancedBrackets = try $ char '[' >> go 1
152+ where go :: PandocMonad m => Int -> MarkdownParser m (F Inlines)
153+ go 0 = return mempty
154+ go openBrackets =
155+ (mappend <$> (bracketedSpan <|> link <|> image) <*>
156+ go openBrackets)
157+ <|> ((if openBrackets > 1
158+ then (return (B.str "]") <>)
159+ else id) <$>
160+ (char ']' >> go (openBrackets - 1)))
161+ <|> ((return (B.str "[") <>) <$>
162+ (char '[' >> go (openBrackets + 1)))
163+ <|> (mappend <$> inline <*> go openBrackets)
170164
171165--
172166-- document structure