git.iko.soy/typeable/pandoc
on master help sign in
Parsing: added gobbleSpaces.

This is a utility function to use in list parsing.

commit34d3f25e87240b4641d00b9f206e7301af932e42 authorJohn MacFarlane <jgm@berkeley.edu> dateTue 8 Aug 2017, 20:07 (9 years ago) parentb1c2ada
1 file changed+12
src/Text/Pandoc/Parsing.hs+12
src/Text/Pandoc/Parsing.hs+12
@@ -49,6 +49,7 @@ module Text.Pandoc.Parsing ( takeWhileP,
4949 skipSpaces,
5050 blankline,
5151 blanklines,
52+ gobbleSpaces,
5253 enclosed,
5354 stringAnyCase,
5455 parseFromString,
@@ -377,6 +378,17 @@ blankline = try $ skipSpaces >> newline
377378blanklines :: Stream s m Char => ParserT s st m [Char]
378379blanklines = many1 blankline
379380
381+-- | Gobble n spaces; if tabs are encountered, expand them
382+-- and gobble some or all of their spaces, leaving the rest.
383+gobbleSpaces :: Monad m => ReaderOptions -> Int -> ParserT [Char] st m ()
384+gobbleSpaces _ 0 = return ()
385+gobbleSpaces opts n = try $ do
386+ char ' ' <|> do char '\t'
387+ inp <- getInput
388+ setInput $ replicate (readerTabStop opts - 1) ' ' ++ inp
389+ return ' '
390+ gobbleSpaces opts (n - 1)
391+
380392-- | Parses material enclosed between start and end parsers.
381393enclosed :: (Show end, Stream s m Char) => ParserT s st m t -- ^ start parser
382394 -> ParserT s st m end -- ^ end parser