diff options
author | murphy <murphy@rubychan.de> | 2006-10-20 07:11:19 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2006-10-20 07:11:19 +0000 |
commit | 2c359044eeaea18e7618fd019cb19b0c9c86393e (patch) | |
tree | 9dc3d4d995c5203c222d5592ba2f9009a086015d /lib/coderay | |
parent | b31493d1961e8b39c61e41657803e8accad0a82e (diff) | |
download | coderay-2c359044eeaea18e7618fd019cb19b0c9c86393e.tar.gz |
Added Debug scanner (for .raydebug files).
Diffstat (limited to 'lib/coderay')
-rw-r--r-- | lib/coderay/scanners/debug.rb | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/lib/coderay/scanners/debug.rb b/lib/coderay/scanners/debug.rb new file mode 100644 index 0000000..0dee38f --- /dev/null +++ b/lib/coderay/scanners/debug.rb @@ -0,0 +1,60 @@ +module CodeRay +module Scanners + + # = Debug Scanner + class Debug < Scanner + + include Streamable + register_for :debug + + 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 + + elsif scan(/ > /x) + kind = opened_tokens.pop + match = :close + + else + kind = :error + getch + + end + + match ||= matched + if $DEBUG and not kind + 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 |