aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Parsing.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Parsing.hs')
-rw-r--r--src/Text/Pandoc/Parsing.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs
index 562e3d577..1b66aa430 100644
--- a/src/Text/Pandoc/Parsing.hs
+++ b/src/Text/Pandoc/Parsing.hs
@@ -40,6 +40,7 @@ module Text.Pandoc.Parsing ( takeWhileP,
anyLineNewline,
indentWith,
many1Till,
+ manyUntil,
notFollowedBy',
oneOfStrings,
oneOfStringsCI,
@@ -325,6 +326,20 @@ many1Till p end = do
rest <- manyTill p end
return (first:rest)
+-- | Like @manyTill@, but also returns the result of end parser.
+manyUntil :: (Stream s m t)
+ => ParserT s u m a
+ -> ParserT s u m b
+ -> ParserT s u m ([a], b)
+manyUntil p end = scan
+ where scan =
+ (do e <- end
+ return ([], e)
+ ) <|>
+ (do x <- p
+ (xs, e) <- scan
+ return (x:xs, e))
+
-- | A more general form of @notFollowedBy@. This one allows any
-- type of parser to be specified, and succeeds only if that parser fails.
-- It does not consume any input.