Skip to content
Browse files

No commit message

  • Loading branch information...
1 parent 591b282 commit a2156b92bec0bb4e2ea7c02927ee6fbd423e82bf @korny korny committed May 18, 2010
Showing with 70 additions and 4 deletions.
  1. +1 โˆ’1 lib/coderay/helpers/file_type.rb
  2. +2 โˆ’3 lib/coderay/scanners/debug.rb
  3. +67 โˆ’0 lib/coderay/scanners/raydebug.rb
View
2 lib/coderay/helpers/file_type.rb
@@ -105,7 +105,7 @@ def shebang filename
'py3' => :python,
'pyw' => :python,
'rake' => :ruby,
- 'raydebug' => :debug,
+ 'raydebug' => :raydebug,
'rb' => :ruby,
'rbw' => :ruby,
'rhtml' => :rhtml,
View
5 lib/coderay/scanners/debug.rb
@@ -4,12 +4,11 @@ module Scanners
# = Debug Scanner
#
- # Parses the output of the Encoders::Debug encoder.
+ # Interprets the output of the Encoders::Debug encoder.
class Debug < Scanner
register_for :debug
- file_extension 'raydebug'
- title 'CodeRay Token Dump'
+ title 'CodeRay Token Dump Import'
protected
View
67 lib/coderay/scanners/raydebug.rb
@@ -0,0 +1,67 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Scanners
+
+ # = Debug Scanner
+ #
+ # Parses the output of the Encoders::Debug encoder.
+ class Raydebug < Scanner
+
+ register_for :raydebug
+ file_extension 'raydebug'
+ title 'CodeRay Token Dump'
+
+ protected
+
+ def scan_tokens encoder, options
+
+ opened_tokens = []
+
+ until eos?
+
+ if match = scan(/\s+/)
+ encoder.text_token match, :space
+
+ elsif match = scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) /x)
+ kind = self[1]
+ encoder.text_token kind, :class
+ encoder.text_token '(', :operator
+ match = self[2]
+ encoder.text_token match, kind.to_sym
+ 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
+ else
+ raise 'CodeRay bug: This case should not be reached.'
+ end
+ kind = kind.to_sym
+ opened_tokens << kind
+ encoder.begin_group kind
+ encoder.text_token self[2], :operator
+
+ elsif !opened_tokens.empty? && match = scan(/ [>\]] /x)
+ encoder.text_token match, :operator
+ encoder.end_group opened_tokens.pop
+
+ else
+ encoder.text_token getch, :space
+
+ end
+
+ end
+
+ encoder.end_group opened_tokens.pop until opened_tokens.empty?
+
+ encoder
+ end
+
+ end
+
+end
+end

0 comments on commit a2156b9

Please sign in to comment.
Something went wrong with that request. Please try again.