Chris@0: module CodeRay Chris@0: module Encoders Chris@0: Chris@0: # = Debug Encoder Chris@0: # Chris@0: # Fast encoder producing simple debug output. Chris@0: # Chris@0: # It is readable and diff-able and is used for testing. Chris@0: # Chris@0: # You cannot fully restore the tokens information from the Chris@0: # output, because consecutive :space tokens are merged. Chris@0: # Use Tokens#dump for caching purposes. Chris@0: class Debug < Encoder Chris@0: Chris@0: include Streamable Chris@0: register_for :debug Chris@0: Chris@0: FILE_EXTENSION = 'raydebug' Chris@0: Chris@0: protected Chris@0: def text_token text, kind Chris@0: if kind == :space Chris@0: text Chris@0: else Chris@0: text = text.gsub(/[)\\]/, '\\\\\0') # escape ) and \ Chris@0: "#{kind}(#{text})" Chris@0: end Chris@0: end Chris@0: Chris@0: def open_token kind Chris@0: "#{kind}<" Chris@0: end Chris@0: Chris@0: def close_token kind Chris@0: ">" Chris@0: end Chris@0: Chris@0: def begin_line kind Chris@0: "#{kind}[" Chris@0: end Chris@0: Chris@0: def end_line kind Chris@0: "]" Chris@0: end Chris@0: Chris@0: end Chris@0: Chris@0: end Chris@0: end