debug.rb
62 lines
| 1.3 KiB
| text/x-ruby
|
RubyLexer
|
r638 | module CodeRay | ||
module Scanners | ||||
# = Debug Scanner | ||||
class Debug < Scanner | ||||
include Streamable | ||||
register_for :debug | ||||
|
r3478 | file_extension 'raydebug' | ||
title 'CodeRay Token Dump' | ||||
|
r638 | |||
protected | ||||
def scan_tokens tokens, options | ||||
opened_tokens = [] | ||||
until eos? | ||||
kind = nil | ||||
match = nil | ||||
if scan(/\s+/) | ||||
tokens << [matched, :space] | ||||
next | ||||
elsif scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \) /x) | ||||
kind = self[1].to_sym | ||||
match = self[2].gsub(/\\(.)/, '\1') | ||||
elsif scan(/ (\w+) < /x) | ||||
kind = self[1].to_sym | ||||
opened_tokens << kind | ||||
match = :open | ||||
|
r3478 | elsif !opened_tokens.empty? && scan(/ > /x) | ||
kind = opened_tokens.pop || :error | ||||
|
r638 | match = :close | ||
else | ||||
kind = :error | ||||
getch | ||||
end | ||||
match ||= matched | ||||
|
r3478 | if $CODERAY_DEBUG and not kind | ||
|
r638 | raise_inspect 'Error token %p in line %d' % | ||
[[match, kind], line], tokens | ||||
end | ||||
raise_inspect 'Empty token', tokens unless match | ||||
tokens << [match, kind] | ||||
end | ||||
tokens | ||||
end | ||||
end | ||||
end | ||||
end | ||||