Mercurial > hg > soundsoftware-site
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