annotate vendor/gems/coderay-1.0.0/lib/coderay/encoders/json.rb @ 1481:93934eec7b56 issue_540

Close obsolete branch issue_540
author Chris Cannam
date Sat, 24 Nov 2012 17:53:51 +0000
parents cbb26bc654de
children
rev   line source
Chris@909 1 module CodeRay
Chris@909 2 module Encoders
Chris@909 3
Chris@909 4 # A simple JSON Encoder.
Chris@909 5 #
Chris@909 6 # Example:
Chris@909 7 # CodeRay.scan('puts "Hello world!"', :ruby).json
Chris@909 8 # yields
Chris@909 9 # [
Chris@909 10 # {"type"=>"text", "text"=>"puts", "kind"=>"ident"},
Chris@909 11 # {"type"=>"text", "text"=>" ", "kind"=>"space"},
Chris@909 12 # {"type"=>"block", "action"=>"open", "kind"=>"string"},
Chris@909 13 # {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
Chris@909 14 # {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
Chris@909 15 # {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
Chris@909 16 # {"type"=>"block", "action"=>"close", "kind"=>"string"},
Chris@909 17 # ]
Chris@909 18 class JSON < Encoder
Chris@909 19
Chris@909 20 begin
Chris@909 21 require 'json'
Chris@909 22 rescue LoadError
Chris@909 23 begin
Chris@909 24 require 'rubygems' unless defined? Gem
Chris@909 25 gem 'json'
Chris@909 26 require 'json'
Chris@909 27 rescue LoadError
Chris@909 28 $stderr.puts "The JSON encoder needs the JSON library.\n" \
Chris@909 29 "Please gem install json."
Chris@909 30 raise
Chris@909 31 end
Chris@909 32 end
Chris@909 33
Chris@909 34 register_for :json
Chris@909 35 FILE_EXTENSION = 'json'
Chris@909 36
Chris@909 37 protected
Chris@909 38 def setup options
Chris@909 39 super
Chris@909 40
Chris@909 41 @first = true
Chris@909 42 @out << '['
Chris@909 43 end
Chris@909 44
Chris@909 45 def finish options
Chris@909 46 @out << ']'
Chris@909 47 end
Chris@909 48
Chris@909 49 def append data
Chris@909 50 if @first
Chris@909 51 @first = false
Chris@909 52 else
Chris@909 53 @out << ','
Chris@909 54 end
Chris@909 55
Chris@909 56 @out << data.to_json
Chris@909 57 end
Chris@909 58
Chris@909 59 public
Chris@909 60 def text_token text, kind
Chris@909 61 append :type => 'text', :text => text, :kind => kind
Chris@909 62 end
Chris@909 63
Chris@909 64 def begin_group kind
Chris@909 65 append :type => 'block', :action => 'open', :kind => kind
Chris@909 66 end
Chris@909 67
Chris@909 68 def end_group kind
Chris@909 69 append :type => 'block', :action => 'close', :kind => kind
Chris@909 70 end
Chris@909 71
Chris@909 72 def begin_line kind
Chris@909 73 append :type => 'block', :action => 'begin_line', :kind => kind
Chris@909 74 end
Chris@909 75
Chris@909 76 def end_line kind
Chris@909 77 append :type => 'block', :action => 'end_line', :kind => kind
Chris@909 78 end
Chris@909 79
Chris@909 80 end
Chris@909 81
Chris@909 82 end
Chris@909 83 end