Markdown reader: Improve inlinesInBalancedBrackets.

This is just a small improvement in terms of performance,
but it's simpler and more direct code.

Also, we avoid parsing interparagraph spaces in balanced
brackets, as the original did.
This commit is contained in:
John MacFarlane committed 2021-11-02 23:25:27 -07:00
1 parent 3e466b9346
commit fa83246d7d
1 file changed
+12 -20
+12 -20
View File
@@ -186,26 +186,18 @@ litChar = escapedChar'
-- including inlines between balanced pairs of square brackets. -- including inlines between balanced pairs of square brackets.
inlinesInBalancedBrackets :: PandocMonad m => MarkdownParser m (F Inlines) inlinesInBalancedBrackets :: PandocMonad m => MarkdownParser m (F Inlines)
inlinesInBalancedBrackets = inlinesInBalancedBrackets =
try $ char '[' >> withRaw (go 1) >>= mconcat <$> try (char '[' >> go (1 :: Int))
parseFromString inlines . stripBracket . snd where
where stripBracket t = case T.unsnoc t of go n =
Just (t', ']') -> t' (:) <$> (note <|> cite <|> bracketedSpan <|> link) <*> go n
_ -> t <|>
go :: PandocMonad m => Int -> MarkdownParser m () (char '[' *> ((:) <$> pure (pure (B.str "[")) <*> go (n + 1)))
go 0 = return () <|>
go openBrackets = (char ']' *> (if n > 1
(() <$ (escapedChar <|> then (:) <$> pure (pure (B.str "]")) <*> go (n - 1)
code <|> else pure []))
math <|> <|>
rawHtmlInline <|> (:) <$> inline <*> go n
rawLaTeXInline') >> go openBrackets)
<|>
(do char ']'
Control.Monad.when (openBrackets > 1) $ go (openBrackets - 1))
<|>
(char '[' >> go (openBrackets + 1))
<|>
(anyChar >> go openBrackets)
-- --
-- document structure -- document structure