diff options
author | Kornelius Kalnbach <murphy@rubychan.de> | 2014-01-23 22:23:59 +0100 |
---|---|---|
committer | Kornelius Kalnbach <murphy@rubychan.de> | 2014-01-23 22:23:59 +0100 |
commit | ee76cc5df42af385743d81ec0810073b7c9ed465 (patch) | |
tree | 89387c694298768c2ea4766eff097cdd5006fbdf /lib/coderay/scanners/raydebug.rb | |
parent | 4131a5ff622e7c767dfd042c4c357906a2544c01 (diff) | |
parent | e93aae88985667189bb5b24ad0d5f54cb5fdba70 (diff) | |
download | coderay-ee76cc5df42af385743d81ec0810073b7c9ed465.tar.gz |
Merge branch 'master' into bash-scanner
Conflicts:
lib/coderay/helpers/file_type.rb
Diffstat (limited to 'lib/coderay/scanners/raydebug.rb')
-rw-r--r-- | lib/coderay/scanners/raydebug.rb | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/lib/coderay/scanners/raydebug.rb b/lib/coderay/scanners/raydebug.rb index 7a21354..1effdc8 100644 --- a/lib/coderay/scanners/raydebug.rb +++ b/lib/coderay/scanners/raydebug.rb @@ -1,23 +1,30 @@ +require 'set' + module CodeRay module Scanners - - # = Debug Scanner + + # = Raydebug Scanner # - # Parses the output of the Encoders::Debug encoder. + # Highlights the output of the Encoders::Debug encoder. class Raydebug < Scanner - + register_for :raydebug file_extension 'raydebug' title 'CodeRay Token Dump' protected + def setup + super + @known_token_kinds = TokenKinds.keys.map(&:to_s).to_set + end + def scan_tokens encoder, options - + opened_tokens = [] - + until eos? - + if match = scan(/\s+/) encoder.text_token match, :space @@ -26,20 +33,22 @@ module Scanners encoder.text_token kind, :class encoder.text_token '(', :operator match = self[2] - encoder.text_token match, kind.to_sym + unless match.empty? + if @known_token_kinds.include? kind + encoder.text_token match, kind.to_sym + else + encoder.text_token match, :plain + end + end encoder.text_token match, :operator if match = scan(/\)/) elsif match = scan(/ (\w+) ([<\[]) /x) - kind = self[1] - case self[2] - when '<' - encoder.text_token kind, :class - when '[' - encoder.text_token kind, :class + encoder.text_token self[1], :class + if @known_token_kinds.include? self[1] + kind = self[1].to_sym else - raise 'CodeRay bug: This case should not be reached.' + kind = :unknown end - kind = kind.to_sym opened_tokens << kind encoder.begin_group kind encoder.text_token self[2], :operator @@ -59,8 +68,8 @@ module Scanners encoder end - + end - + end end |