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.hs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs
index c04db4d60..145ad64c5 100644
--- a/src/Text/Pandoc/Parsing.hs
+++ b/src/Text/Pandoc/Parsing.hs
@@ -173,9 +173,16 @@ notFollowedBy' p = try $ join $ do a <- try p
return (return ())
-- (This version due to Andrew Pimlott on the Haskell mailing list.)
--- | Parses one of a list of strings (tried in order).
+-- | Parses one of a list of strings (tried in order).
oneOfStrings :: [String] -> Parsec [Char] st String
-oneOfStrings listOfStrings = choice $ map (try . string) listOfStrings
+oneOfStrings [] = fail "no strings"
+oneOfStrings strs = do
+ c <- anyChar
+ let strs' = [xs | (x:xs) <- strs, x == c]
+ case strs' of
+ [] -> fail "not found"
+ z | "" `elem` z -> return [c]
+ | otherwise -> (c:) `fmap` oneOfStrings strs'
-- | Parses a space or tab.
spaceChar :: Parsec [Char] st Char