git.iko.soy/typeable/pandoc
on master help sign in
Parsing: `many1Till`: Check for the end condition before parsing
5a71632Herwig Stuetz
src/Text/Pandoc/Parsing.hs+3−2
@@ -274,11 +274,12 @@ indentWith num = do
274 , try (char '\t' >> indentWith (num - tabStop)) ]
274 , try (char '\t' >> indentWith (num - tabStop)) ]
275
275
276-- | Like @manyTill@, but reads at least one item.
276-- | Like @manyTill@, but reads at least one item.
277−many1Till :: Stream s m t
277+many1Till :: (Show end, Stream s m t)
278 => ParserT s st m a
278 => ParserT s st m a
279 -> ParserT s st m end
279 -> ParserT s st m end
280 -> ParserT s st m [a]
280 -> ParserT s st m [a]
281many1Till p end = do
281many1Till p end = do
282+ notFollowedBy' end
282 first <- p
283 first <- p
283 rest <- manyTill p end
284 rest <- manyTill p end
284 return (first:rest)
285 return (first:rest)
@@ -343,7 +344,7 @@ blanklines :: Stream s m Char => ParserT s st m [Char]
343blanklines = many1 blankline
344blanklines = many1 blankline
344
345
345-- | Parses material enclosed between start and end parsers.
346-- | Parses material enclosed between start and end parsers.
346−enclosed :: Stream s m Char => ParserT s st m t -- ^ start parser
347+enclosed :: (Show end, Stream s m Char) => ParserT s st m t -- ^ start parser
347 -> ParserT s st m end -- ^ end parser
348 -> ParserT s st m end -- ^ end parser
348 -> ParserT s st m a -- ^ content parser (to be used repeatedly)
349 -> ParserT s st m a -- ^ content parser (to be used repeatedly)
349 -> ParserT s st m [a]
350 -> ParserT s st m [a]
src/Text/Pandoc/Readers/Org/Inlines.hs+2−2
@@ -687,13 +687,13 @@ mathEnd c = try $ do
687 return res
687 return res
688
688
689
689
690−enclosedInlines :: PandocMonad m => OrgParser m a
690+enclosedInlines :: (PandocMonad m, Show b) => OrgParser m a
691 -> OrgParser m b
691 -> OrgParser m b
692 -> OrgParser m (F Inlines)
692 -> OrgParser m (F Inlines)
693enclosedInlines start end = try $
693enclosedInlines start end = try $
694 trimInlinesF . mconcat <$> enclosed start end inline
694 trimInlinesF . mconcat <$> enclosed start end inline
695
695
696−enclosedRaw :: PandocMonad m => OrgParser m a
696+enclosedRaw :: (PandocMonad m, Show b) => OrgParser m a
697 -> OrgParser m b
697 -> OrgParser m b
698 -> OrgParser m String
698 -> OrgParser m String
699enclosedRaw start end = try $
699enclosedRaw start end = try $
src/Text/Pandoc/Readers/TWiki.hs+2−2
@@ -349,13 +349,13 @@ linebreak = newline >> notFollowedBy newline >> (lastNewline <|> innerNewline)
349 where lastNewline = eof >> return mempty
349 where lastNewline = eof >> return mempty
350 innerNewline = return B.space
350 innerNewline = return B.space
351
351
352−between :: (Monoid c, PandocMonad m)
352+between :: (Monoid c, PandocMonad m, Show b)
353 => TWParser m a -> TWParser m b -> (TWParser m b -> TWParser m c)
353 => TWParser m a -> TWParser m b -> (TWParser m b -> TWParser m c)
354 -> TWParser m c
354 -> TWParser m c
355between start end p =
355between start end p =
356 mconcat <$> try (start >> notFollowedBy whitespace >> many1Till (p end) end)
356 mconcat <$> try (start >> notFollowedBy whitespace >> many1Till (p end) end)
357
357
358−enclosed :: (Monoid b, PandocMonad m)
358+enclosed :: (Monoid b, PandocMonad m, Show a)
359 => TWParser m a -> (TWParser m a -> TWParser m b) -> TWParser m b
359 => TWParser m a -> (TWParser m a -> TWParser m b) -> TWParser m b
360enclosed sep p = between sep (try $ sep <* endMarker) p
360enclosed sep p = between sep (try $ sep <* endMarker) p
361 where
361 where
src/Text/Pandoc/Readers/Textile.hs+1−1
@@ -692,7 +692,7 @@ langAttr = do
692 return $ \(id',classes,keyvals) -> (id',classes,("lang",lang):keyvals)
692 return $ \(id',classes,keyvals) -> (id',classes,("lang",lang):keyvals)
693
693
694-- | Parses material surrounded by a parser.
694-- | Parses material surrounded by a parser.
695−surrounded :: PandocMonad m
695+surrounded :: (PandocMonad m, Show t)
696 => ParserT [Char] st m t -- ^ surrounding parser
696 => ParserT [Char] st m t -- ^ surrounding parser
697 -> ParserT [Char] st m a -- ^ content parser (to be used repeatedly)
697 -> ParserT [Char] st m a -- ^ content parser (to be used repeatedly)
698 -> ParserT [Char] st m [a]
698 -> ParserT [Char] st m [a]