diff vendor/gems/coderay-1.0.0/lib/coderay/scanners/raydebug.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-1.0.0/lib/coderay/scanners/raydebug.rb	Fri Feb 24 19:09:32 2012 +0000
@@ -0,0 +1,66 @@
+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