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:
1 parent
3e466b9346
commit
fa83246d7d
1 file changed
+12
-20
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user