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