git.iko.soy/typeable/pandoc
on master help sign in
Move manyUntil to Text.Pandoc.Parsing and use it in Txt2Tags reader
commit5a9d7d20ddeebc164acdbb3b318df298417ad1ab authorAlexander Krotov <ilabdsf@gmail.com> dateMon 19 Feb 2018, 19:23 (9 years ago) parent5741048
4 files changed+20−17
src/Text/Pandoc/Parsing.hs+15 src/Text/Pandoc/Readers/Muse.hs−14 src/Text/Pandoc/Readers/Txt2Tags.hs+1−2 test/Tests/Readers/Txt2Tags.hs+4−1
src/Text/Pandoc/Parsing.hs+15
@@ -40,6 +40,7 @@ module Text.Pandoc.Parsing ( takeWhileP,
4040 anyLineNewline,
4141 indentWith,
4242 many1Till,
43+ manyUntil,
4344 notFollowedBy',
4445 oneOfStrings,
4546 oneOfStringsCI,
@@ -325,6 +326,20 @@ many1Till p end = do
325326 rest <- manyTill p end
326327 return (first:rest)
327328
329+-- | Like @manyTill@, but also returns the result of end parser.
330+manyUntil :: (Stream s m t)
331+ => ParserT s u m a
332+ -> ParserT s u m b
333+ -> ParserT s u m ([a], b)
334+manyUntil p end = scan
335+ where scan =
336+ (do e <- end
337+ return ([], e)
338+ ) <|>
339+ (do x <- p
340+ (xs, e) <- scan
341+ return (x:xs, e))
342+
328343-- | A more general form of @notFollowedBy@. This one allows any
329344-- type of parser to be specified, and succeeds only if that parser fails.
330345-- It does not consume any input.
src/Text/Pandoc/Readers/Muse.hs−14
@@ -189,20 +189,6 @@ atStart p = do
189189 guard $ museLastStrPos st /= Just pos
190190 p
191191
192−-- Like manyTill, but also returns result of end parser
193−manyUntil :: (Stream s m t)
194− => ParserT s u m a
195− -> ParserT s u m b
196− -> ParserT s u m ([a], b)
197−manyUntil p end = scan
198− where scan =
199− (do e <- end
200− return ([], e)
201− ) <|>
202− (do x <- p
203− (xs, e) <- scan
204− return (x:xs, e))
205−
206192someUntil :: (Stream s m t)
207193 => ParserT s u m a
208194 -> ParserT s u m b
src/Text/Pandoc/Readers/Txt2Tags.hs+1−2
@@ -529,8 +529,7 @@ image = try $ do
529529 -- List taken from txt2tags source
530530 let extensions = [".jpg", ".jpeg", ".gif", ".png", ".eps", ".bmp"]
531531 char '['
532− path <- manyTill (noneOf "\n\t\r ") (try $ lookAhead (oneOfStrings extensions))
533− ext <- oneOfStrings extensions
532+ (path, ext) <- manyUntil (noneOf "\n\t\r ") (oneOfStrings extensions)
534533 char ']'
535534 return $ B.image (path ++ ext) "" mempty
536535
test/Tests/Readers/Txt2Tags.hs+4−1
@@ -96,9 +96,12 @@ tests =
9696 , "Autolink" =:
9797 "http://www.google.com" =?>
9898 para (link "http://www.google.com" "" (str "http://www.google.com"))
99− , "Image" =:
99+ , "JPEG Image" =:
100100 "[image.jpg]" =?>
101101 para (image "image.jpg" "" mempty)
102+ , "PNG Image" =:
103+ "[image.png]" =?>
104+ para (image "image.png" "" mempty)
102105
103106 , "Link" =:
104107 "[title http://google.com]" =?>