diff vendor/gems/coderay-1.0.0/lib/coderay/scanners/debug.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/debug.rb	Fri Feb 24 19:09:32 2012 +0000
@@ -0,0 +1,65 @@
+module CodeRay
+module Scanners
+  
+  # = Debug Scanner
+  # 
+  # Interprets the output of the Encoders::Debug encoder.
+  class Debug < Scanner
+    
+    register_for :debug
+    title 'CodeRay Token Dump Import'
+    
+  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].to_sym
+          match = self[2].gsub(/\\(.)/m, '\1')
+          unless TokenKinds.has_key? kind
+            kind = :error
+            match = matched
+          end
+          encoder.text_token match, kind
+          
+        elsif match = scan(/ (\w+) ([<\[]) /x)
+          kind = self[1].to_sym
+          opened_tokens << kind
+          case self[2]
+          when '<'
+            encoder.begin_group kind
+          when '['
+            encoder.begin_line kind
+          else
+            raise 'CodeRay bug: This case should not be reached.'
+          end
+          
+        elsif !opened_tokens.empty? && match = scan(/ > /x)
+          encoder.end_group opened_tokens.pop
+          
+        elsif !opened_tokens.empty? && match = scan(/ \] /x)
+          encoder.end_line 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