diff .svn/pristine/27/273ac825eb891aaec6af1c5e2e94f14d0663c303.svn-base @ 926:b73a59a6acbd luisf

Merge from cannam_integration
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Fri, 11 May 2012 16:10:11 +0100
parents cbb26bc654de
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.svn/pristine/27/273ac825eb891aaec6af1c5e2e94f14d0663c303.svn-base	Fri May 11 16:10:11 2012 +0100
@@ -0,0 +1,61 @@
+module CodeRay
+module Encoders
+  
+  # = Debug Encoder
+  #
+  # Fast encoder producing simple debug output.
+  #
+  # It is readable and diff-able and is used for testing.
+  #
+  # You cannot fully restore the tokens information from the
+  # output, because consecutive :space tokens are merged.
+  # Use Tokens#dump for caching purposes.
+  # 
+  # See also: Scanners::Debug
+  class Debug < Encoder
+    
+    register_for :debug
+    
+    FILE_EXTENSION = 'raydebug'
+    
+    def initialize options = {}
+      super
+      @opened = []
+    end
+    
+    def text_token text, kind
+      if kind == :space
+        @out << text
+      else
+        # TODO: Escape (
+        text = text.gsub(/[)\\]/, '\\\\\0')  # escape ) and \
+        @out << kind.to_s << '(' << text << ')'
+      end
+    end
+    
+    def begin_group kind
+      @opened << kind
+      @out << kind.to_s << '<'
+    end
+    
+    def end_group kind
+      if @opened.last != kind
+        puts @out
+        raise "we are inside #{@opened.inspect}, not #{kind}"
+      end
+      @opened.pop
+      @out << '>'
+    end
+    
+    def begin_line kind
+      @out << kind.to_s << '['
+    end
+    
+    def end_line kind
+      @out << ']'
+    end
+    
+  end
+  
+end
+end