lib/rouge/lexer.rb in rouge-0.0.8 vs lib/rouge/lexer.rb in rouge-0.0.9

- old
+ new

@@ -305,21 +305,27 @@ def state raise 'empty stack!' if stack.empty? stack.last end - MAX_STEPS = 200000 + MAX_NULL_STEPS = 5 def scan(re, &b) - @steps ||= 0 - @steps += 1 + @null_steps ||= 0 - if @steps >= MAX_STEPS - raise "too many scans near: #{scanner.peek(20)}..." + if @null_steps >= MAX_NULL_STEPS + debug { " too many scans without consuming the string!" } + return false end scanner.scan(re) if scanner.matched? + if scanner.matched_size == 0 + @null_steps += 1 + else + @null_steps = 0 + end + yield self return true end return false