git.iko.soy/typeable/pandoc
on master help sign in
Export 'nested' in Parsing.
commit167012daf75436208bcf275164792f3ec06ee56c authorJohn MacFarlane <jgm@berkeley.edu> dateMon 10 Sep 2012, 14:35 (14 years ago) parent58a096c
2 files changed+13−12
src/Text/Pandoc/Parsing.hs+13 src/Text/Pandoc/Readers/Markdown.hs−12
src/Text/Pandoc/Parsing.hs+13
@@ -82,6 +82,7 @@ module Text.Pandoc.Parsing ( (>>~),
8282 ellipses,
8383 apostrophe,
8484 dash,
85+ nested,
8586 macro,
8687 applyMacros',
8788 Parser,
@@ -925,6 +926,18 @@ emDashOld = do
925926 try (charOrRef "\8212\151") <|> (try $ string "--" >> optional (char '-') >> return '-')
926927 return (Str "\8212")
927928
929+-- This is used to prevent exponential blowups for things like:
930+-- a**a*a**a*a**a*a**a*a**a*a**a*a**
931+nested :: Parser s ParserState a
932+ -> Parser s ParserState a
933+nested p = do
934+ nestlevel <- stateMaxNestingLevel `fmap` getState
935+ guard $ nestlevel > 0
936+ updateState $ \st -> st{ stateMaxNestingLevel = stateMaxNestingLevel st - 1 }
937+ res <- p
938+ updateState $ \st -> st{ stateMaxNestingLevel = nestlevel }
939+ return res
940+
928941--
929942-- Macros
930943--
src/Text/Pandoc/Readers/Markdown.hs−12
@@ -1294,18 +1294,6 @@ inlinesBetween start end =
12941294 where inner = innerSpace <|> (notFollowedBy' (() <$ whitespace) >> inline)
12951295 innerSpace = try $ whitespace >>~ notFollowedBy' end
12961296
1297−-- This is used to prevent exponential blowups for things like:
1298−-- a**a*a**a*a**a*a**a*a**a*a**a*a**
1299−nested :: Parser [Char] ParserState a
1300− -> Parser [Char] ParserState a
1301−nested p = do
1302− nestlevel <- stateMaxNestingLevel `fmap` getState
1303− guard $ nestlevel > 0
1304− updateState $ \st -> st{ stateMaxNestingLevel = stateMaxNestingLevel st - 1 }
1305− res <- p
1306− updateState $ \st -> st{ stateMaxNestingLevel = nestlevel }
1307− return res
1308−
13091297emph :: Parser [Char] ParserState (F Inlines)
13101298emph = fmap B.emph <$> nested
13111299 (inlinesBetween starStart starEnd <|> inlinesBetween ulStart ulEnd)