Mercurial > hg > soundsoftware-site
annotate .svn/pristine/49/49c759950bed453cc0da75c2904a201b6bf1a7c4.svn-base @ 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 |
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 |