json_pure 1.4.6 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGES +6 -0
  2. data/COPYING-json-jruby +57 -0
  3. data/README-json-jruby.markdown +33 -0
  4. data/Rakefile +224 -119
  5. data/VERSION +1 -1
  6. data/benchmarks/generator2_benchmark.rb +1 -1
  7. data/benchmarks/generator_benchmark.rb +1 -1
  8. data/ext/json/ext/generator/generator.c +20 -20
  9. data/ext/json/ext/generator/generator.h +7 -7
  10. data/ext/json/ext/parser/extconf.rb +1 -0
  11. data/ext/json/ext/parser/parser.c +122 -88
  12. data/ext/json/ext/parser/parser.h +7 -0
  13. data/ext/json/ext/parser/parser.rl +54 -20
  14. data/java/lib/bytelist-1.0.6.jar +0 -0
  15. data/java/lib/jcodings.jar +0 -0
  16. data/java/src/json/ext/ByteListTranscoder.java +167 -0
  17. data/java/src/json/ext/Generator.java +441 -0
  18. data/java/src/json/ext/GeneratorMethods.java +231 -0
  19. data/java/src/json/ext/GeneratorService.java +42 -0
  20. data/java/src/json/ext/GeneratorState.java +473 -0
  21. data/java/src/json/ext/OptionsReader.java +119 -0
  22. data/java/src/json/ext/Parser.java +2295 -0
  23. data/java/src/json/ext/Parser.rl +825 -0
  24. data/java/src/json/ext/ParserService.java +34 -0
  25. data/java/src/json/ext/RuntimeInfo.java +119 -0
  26. data/java/src/json/ext/StringDecoder.java +166 -0
  27. data/java/src/json/ext/StringEncoder.java +106 -0
  28. data/java/src/json/ext/Utils.java +89 -0
  29. data/json-java.gemspec +20 -0
  30. data/lib/json/add/core.rb +1 -2
  31. data/lib/json/add/rails.rb +4 -54
  32. data/lib/json/common.rb +36 -8
  33. data/lib/json/editor.rb +1 -3
  34. data/lib/json/ext.rb +2 -2
  35. data/lib/json/pure.rb +2 -64
  36. data/lib/json/pure/generator.rb +10 -8
  37. data/lib/json/pure/parser.rb +23 -12
  38. data/lib/json/version.rb +1 -1
  39. data/tests/setup_variant.rb +11 -0
  40. data/tests/test_json.rb +1 -5
  41. data/tests/test_json_addition.rb +14 -9
  42. data/tests/test_json_encoding.rb +9 -12
  43. data/tests/test_json_fixtures.rb +9 -8
  44. data/tests/test_json_generate.rb +3 -5
  45. data/tests/test_json_string_matching.rb +40 -0
  46. data/tests/test_json_unicode.rb +1 -5
  47. metadata +51 -13
  48. data/tests/test_json_rails.rb +0 -144
data/CHANGES CHANGED
@@ -1,3 +1,9 @@
1
+ 2010-08-15 (1.5.0)
2
+ * Included Java source codes for the Jruby extension made by Daniel Luz
3
+ <dev@mernen.com>.
4
+ * Output full exception message of deep_const_get to aid debugging.
5
+ * Fixed an issue with ruby 1.9 Module#const_defined? method, that was
6
+ reported by Riley Goodside.
1
7
  2010-08-09 (1.4.6)
2
8
  * Fixed oversight reported in http://github.com/flori/json/issues/closed#issue/23,
3
9
  always create a new object from the state prototype.
@@ -0,0 +1,57 @@
1
+ JSON-JRuby is copyrighted free software by Daniel Luz <mernen at gmail dot com>,
2
+ and is a derivative work of Florian Frank's json library <flori at ping dot de>.
3
+ You can redistribute it and/or modify it under either the terms of the GPL
4
+ version 2 (see the file GPL), or the conditions below:
5
+
6
+ 1. You may make and give away verbatim copies of the source form of the
7
+ software without restriction, provided that you duplicate all of the
8
+ original copyright notices and associated disclaimers.
9
+
10
+ 2. You may modify your copy of the software in any way, provided that
11
+ you do at least ONE of the following:
12
+
13
+ a) place your modifications in the Public Domain or otherwise
14
+ make them Freely Available, such as by posting said
15
+ modifications to Usenet or an equivalent medium, or by allowing
16
+ the author to include your modifications in the software.
17
+
18
+ b) use the modified software only within your corporation or
19
+ organization.
20
+
21
+ c) give non-standard binaries non-standard names, with
22
+ instructions on where to get the original software distribution.
23
+
24
+ d) make other distribution arrangements with the author.
25
+
26
+ 3. You may distribute the software in object code or binary form,
27
+ provided that you do at least ONE of the following:
28
+
29
+ a) distribute the binaries and library files of the software,
30
+ together with instructions (in the manual page or equivalent)
31
+ on where to get the original distribution.
32
+
33
+ b) accompany the distribution with the machine-readable source of
34
+ the software.
35
+
36
+ c) give non-standard binaries non-standard names, with
37
+ instructions on where to get the original software distribution.
38
+
39
+ d) make other distribution arrangements with the author.
40
+
41
+ 4. You may modify and include the part of the software into any other
42
+ software (possibly commercial). But some files in the distribution
43
+ are not written by the author, so that they are not under these terms.
44
+
45
+ For the list of those files and their copying conditions, see the
46
+ file LEGAL.
47
+
48
+ 5. The scripts and library files supplied as input to or produced as
49
+ output from the software do not automatically fall under the
50
+ copyright of the software, but belong to whomever generated them,
51
+ and may be sold commercially, and may be aggregated with this
52
+ software.
53
+
54
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
55
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
56
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
57
+ PURPOSE.
@@ -0,0 +1,33 @@
1
+ JSON-JRuby
2
+ ==========
3
+
4
+ JSON-JRuby is a port of Florian Frank's native
5
+ [`json` library](http://json.rubyforge.org/) to JRuby.
6
+ It aims to be a perfect drop-in replacement for `json_pure`.
7
+
8
+
9
+ Development version
10
+ ===================
11
+
12
+ The latest version is available from the
13
+ [Git repository](http://github.com/mernen/json-jruby/tree):
14
+
15
+ git clone git://github.com/mernen/json-jruby.git
16
+
17
+
18
+ Compiling
19
+ =========
20
+
21
+ You'll need JRuby version 1.2 or greater to build JSON-JRuby.
22
+ Its path must be set on the `jruby.dir` property of
23
+ `nbproject/project.properties` (defaults to `../jruby`).
24
+
25
+ Additionally, you'll need [Ant](http://ant.apache.org/), and
26
+ [Ragel](http://www.cs.queensu.ca/~thurston/ragel/) 6.4 or greater.
27
+
28
+ Then, from the folder where the sources are located, type:
29
+
30
+ ant clean jar
31
+
32
+ to clean any leftovers from previous builds and generate the `.jar` files.
33
+ To generate a RubyGem, specify the `gem` action rather than `jar`.
data/Rakefile CHANGED
@@ -6,34 +6,45 @@ end
6
6
  begin
7
7
  require 'rake/extensiontask'
8
8
  rescue LoadError
9
- puts "WARNING: rake-compiler is not installed. You will not be able to build the json gem until you install it."
9
+ warn "WARNING: rake-compiler is not installed. You will not be able to build the json gem until you install it."
10
10
  end
11
11
 
12
12
  require 'rbconfig'
13
13
  include Config
14
14
 
15
15
  require 'rake/clean'
16
- CLOBBER.include Dir['benchmarks/data/*.{dat,log}'], FileList['**/*.rbc']
16
+ CLOBBER.include Dir['benchmarks/data/*.{dat,log}']
17
17
  CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
18
- FileList["ext/**/{Makefile,mkmf.log}"],
19
- FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def}"]
18
+ FileList["ext/**/{Makefile,mkmf.log}"], 'build', 'dist', FileList['**/*.rbc'],
19
+ FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def,jar,class}"],
20
+ FileList['java/src/**/*.class']
20
21
 
21
22
  MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
22
23
  PKG_NAME = 'json'
23
24
  PKG_TITLE = 'JSON Implementation for Ruby'
24
25
  PKG_VERSION = File.read('VERSION').chomp
25
- PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|tmp|coverage|Makefile|\.nfs\./).exclude(/\.(so|bundle|o|#{CONFIG['DLEXT']})$/)
26
+ PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|tmp|coverage|Makefile|\.nfs\.|\.iml\Z/).exclude(/\.(so|bundle|o|class|#{CONFIG['DLEXT']})$/)
27
+
26
28
  EXT_ROOT_DIR = 'ext/json/ext'
27
29
  EXT_PARSER_DIR = "#{EXT_ROOT_DIR}/parser"
28
30
  EXT_PARSER_DL = "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}"
31
+ RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
29
32
  EXT_PARSER_SRC = "#{EXT_PARSER_DIR}/parser.c"
30
33
  PKG_FILES << EXT_PARSER_SRC
31
34
  EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
32
35
  EXT_GENERATOR_DL = "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}"
33
36
  EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
37
+
38
+ JAVA_DIR = "java/src/json/ext"
39
+ JAVA_RAGEL_PATH = "#{JAVA_DIR}/Parser.rl"
40
+ JAVA_PARSER_SRC = "#{JAVA_DIR}/Parser.java"
41
+ JAVA_SOURCES = FileList["#{JAVA_DIR}/*.java"]
42
+ JAVA_CLASSES = []
43
+ JRUBY_PARSER_JAR = File.expand_path("lib/json/ext/parser.jar")
44
+ JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
45
+
34
46
  RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
35
47
  RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
36
- RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
37
48
 
38
49
  def myruby(*args, &block)
39
50
  @myruby ||= File.join(CONFIG['bindir'], CONFIG['ruby_install_name'])
@@ -71,112 +82,6 @@ else
71
82
  task :install => :install_ext
72
83
  end
73
84
 
74
- desc "Compiling extension"
75
- task :compile_ext => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
76
-
77
- file EXT_PARSER_DL => EXT_PARSER_SRC do
78
- cd EXT_PARSER_DIR do
79
- myruby 'extconf.rb'
80
- sh MAKE
81
- end
82
- cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
83
- end
84
-
85
- file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
86
- cd EXT_GENERATOR_DIR do
87
- myruby 'extconf.rb'
88
- sh MAKE
89
- end
90
- cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
91
- end
92
-
93
- desc "Generate parser with ragel"
94
- task :ragel => EXT_PARSER_SRC
95
-
96
- task :ragel_clean do
97
- rm_rf EXT_PARSER_SRC
98
- end
99
-
100
- file EXT_PARSER_SRC => RAGEL_PATH do
101
- cd EXT_PARSER_DIR do
102
- if RAGEL_CODEGEN == 'ragel'
103
- sh "ragel parser.rl -G2 -o parser.c"
104
- else
105
- sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
106
- end
107
- end
108
- end
109
-
110
- desc "Generate diagrams of ragel parser (ps)"
111
- task :ragel_dot_ps do
112
- root = 'diagrams'
113
- specs = []
114
- File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
115
- for s in specs
116
- if RAGEL_DOTGEN == 'ragel'
117
- sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
118
- else
119
- sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
120
- end
121
- end
122
- end
123
-
124
- desc "Generate diagrams of ragel parser (png)"
125
- task :ragel_dot_png do
126
- root = 'diagrams'
127
- specs = []
128
- File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
129
- for s in specs
130
- if RAGEL_DOTGEN == 'ragel'
131
- sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
132
- else
133
- sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
134
- end
135
- end
136
- end
137
-
138
- desc "Generate diagrams of ragel parser"
139
- task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
140
-
141
- desc "Testing library (pure ruby)"
142
- task :test_pure => :clean do
143
- ENV['JSON'] = 'pure'
144
- ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
145
- myruby "-S testrb #{Dir['./tests/*.rb'] * ' '}"
146
- end
147
-
148
- desc "Testing library (extension)"
149
- task :test_ext => :compile_ext do
150
- ENV['JSON'] = 'ext'
151
- ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
152
- myruby "-S testrb #{Dir['./tests/*.rb'] * ' '}"
153
- end
154
-
155
- desc "Testing library (pure ruby and extension)"
156
- task :test => [ :test_pure, :test_ext ]
157
-
158
- desc "Benchmarking parser"
159
- task :benchmark_parser do
160
- ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
161
- myruby 'benchmarks/parser_benchmark.rb'
162
- myruby 'benchmarks/parser2_benchmark.rb'
163
- end
164
-
165
- desc "Benchmarking generator"
166
- task :benchmark_generator do
167
- ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
168
- myruby 'benchmarks/generator_benchmark.rb'
169
- myruby 'benchmarks/generator2_benchmark.rb'
170
- end
171
-
172
- desc "Benchmarking library"
173
- task :benchmark => [ :benchmark_parser, :benchmark_generator ]
174
-
175
- desc "Create RDOC documentation"
176
- task :doc => [ :version, EXT_PARSER_SRC ] do
177
- sh "sdoc -o doc -t '#{PKG_TITLE}' -m README README lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
178
- end
179
-
180
85
  if defined?(Gem) and defined?(Rake::GemPackageTask)
181
86
  spec_pure = Gem::Specification.new do |s|
182
87
  s.name = 'json_pure'
@@ -196,7 +101,7 @@ if defined?(Gem) and defined?(Rake::GemPackageTask)
196
101
  s.extra_rdoc_files << 'README'
197
102
  s.rdoc_options <<
198
103
  '--title' << 'JSON implemention for ruby' << '--main' << 'README'
199
- s.test_files.concat Dir['tests/*.rb']
104
+ s.test_files.concat Dir['./tests/test_*.rb']
200
105
 
201
106
  s.author = "Florian Frank"
202
107
  s.email = "flori@ping.de"
@@ -233,7 +138,7 @@ if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::Extension
233
138
  s.extra_rdoc_files << 'README'
234
139
  s.rdoc_options <<
235
140
  '--title' << 'JSON implemention for Ruby' << '--main' << 'README'
236
- s.test_files.concat Dir['tests/*.rb']
141
+ s.test_files.concat Dir['./tests/test_*.rb']
237
142
 
238
143
  s.author = "Florian Frank"
239
144
  s.email = "flori@ping.de"
@@ -282,11 +187,211 @@ EOT
282
187
  end
283
188
  end
284
189
 
285
- desc "Build all gems and archives for a new release."
286
- task :release => [ :clean, :version, :cross, :native, :gem ] do
287
- sh "#$0 clean native gem"
288
- sh "#$0 clean package"
190
+ desc "Testing library (pure ruby)"
191
+ task :test_pure => :clean do
192
+ ENV['JSON'] = 'pure'
193
+ ENV['RUBYOPT'] = "-Ilib #{ENV['RUBYOPT']}"
194
+ myruby '-S', 'testrb', *Dir['./tests/test_*.rb']
195
+ end
196
+
197
+ desc "Testing library (pure ruby and extension)"
198
+ task :test => [ :test_pure, :test_ext ]
199
+
200
+
201
+ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
202
+ file JAVA_PARSER_SRC => JAVA_RAGEL_PATH do
203
+ cd JAVA_DIR do
204
+ if RAGEL_CODEGEN == 'ragel'
205
+ sh "ragel Parser.rl -J -o Parser.java"
206
+ else
207
+ sh "ragel -x Parser.rl | #{RAGEL_CODEGEN} -J"
208
+ end
209
+ end
210
+ end
211
+
212
+ desc "Generate parser for java with ragel"
213
+ task :ragel => JAVA_PARSER_SRC
214
+
215
+ desc "Delete the ragel generated Java source"
216
+ task :ragel_clean do
217
+ rm_rf JAVA_PARSER_SRC
218
+ end
219
+
220
+ JRUBY_JAR = File.join(Config::CONFIG["libdir"], "jruby.jar")
221
+ if File.exist?(JRUBY_JAR)
222
+ JAVA_SOURCES.each do |src|
223
+ classpath = (Dir['java/lib/*.jar'] << 'java/src' << JRUBY_JAR) * ':'
224
+ obj = src.sub(/\.java\Z/, '.class')
225
+ file obj => src do
226
+ sh 'javac', '-classpath', classpath, '-source', '1.5', src
227
+ end
228
+ JAVA_CLASSES << obj
229
+ end
230
+ else
231
+ warn "WARNING: Cannot find jruby in path => Cannot build jruby extension!"
232
+ end
233
+
234
+ desc "Compiling jruby extension"
235
+ task :compile_ext => JAVA_CLASSES
236
+
237
+ desc "Package the jruby gem"
238
+ task :jruby_gem => :create_jar do
239
+ sh 'gem build json-java.gemspec'
240
+ mkdir_p 'pkg'
241
+ mv "json-#{PKG_VERSION}-java.gem", 'pkg'
242
+ end
243
+
244
+ desc "Testing library (jruby)"
245
+ task :test_ext => :create_jar do
246
+ ENV['JSON'] = 'ext'
247
+ myruby '-S', 'testrb', '-Ilib', *Dir['./tests/test_*.rb']
248
+ end
249
+
250
+ file JRUBY_PARSER_JAR => :compile_ext do
251
+ cd 'java/src' do
252
+ parser_classes = FileList[
253
+ "json/ext/ByteListTranscoder*.class",
254
+ "json/ext/OptionsReader*.class",
255
+ "json/ext/Parser*.class",
256
+ "json/ext/RuntimeInfo*.class",
257
+ "json/ext/StringDecoder*.class",
258
+ "json/ext/Utils*.class"
259
+ ]
260
+ sh 'jar', 'cf', File.basename(JRUBY_PARSER_JAR), *parser_classes
261
+ mv File.basename(JRUBY_PARSER_JAR), File.dirname(JRUBY_PARSER_JAR)
262
+ end
263
+ end
264
+
265
+ desc "Create parser jar"
266
+ task :create_parser_jar => JRUBY_PARSER_JAR
267
+
268
+ file JRUBY_GENERATOR_JAR => :compile_ext do
269
+ cd 'java/src' do
270
+ generator_classes = FileList[
271
+ "json/ext/ByteListTranscoder*.class",
272
+ "json/ext/OptionsReader*.class",
273
+ "json/ext/Generator*.class",
274
+ "json/ext/RuntimeInfo*.class",
275
+ "json/ext/StringEncoder*.class",
276
+ "json/ext/Utils*.class"
277
+ ]
278
+ sh 'jar', 'cf', File.basename(JRUBY_GENERATOR_JAR), *generator_classes
279
+ mv File.basename(JRUBY_GENERATOR_JAR), File.dirname(JRUBY_GENERATOR_JAR)
280
+ end
281
+ end
282
+
283
+ desc "Create generator jar"
284
+ task :create_generator_jar => JRUBY_GENERATOR_JAR
285
+
286
+ desc "Create parser and generator jars"
287
+ task :create_jar => [ :create_parser_jar, :create_generator_jar ]
288
+
289
+ desc "Build all gems and archives for a new release of the jruby extension."
290
+ task :release => [ :clean, :version, :jruby_gem ]
291
+ else
292
+ desc "Compiling extension"
293
+ task :compile_ext => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
294
+
295
+ file EXT_PARSER_DL => EXT_PARSER_SRC do
296
+ cd EXT_PARSER_DIR do
297
+ myruby 'extconf.rb'
298
+ sh MAKE
299
+ end
300
+ cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
301
+ end
302
+
303
+ file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
304
+ cd EXT_GENERATOR_DIR do
305
+ myruby 'extconf.rb'
306
+ sh MAKE
307
+ end
308
+ cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
309
+ end
310
+
311
+ desc "Testing library (extension)"
312
+ task :test_ext => :compile_ext do
313
+ ENV['JSON'] = 'ext'
314
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
315
+ myruby '-S', 'testrb', *Dir['./tests/test_*.rb']
316
+ end
317
+
318
+ desc "Benchmarking parser"
319
+ task :benchmark_parser do
320
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
321
+ myruby 'benchmarks/parser_benchmark.rb'
322
+ myruby 'benchmarks/parser2_benchmark.rb'
323
+ end
324
+
325
+ desc "Benchmarking generator"
326
+ task :benchmark_generator do
327
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
328
+ myruby 'benchmarks/generator_benchmark.rb'
329
+ myruby 'benchmarks/generator2_benchmark.rb'
330
+ end
331
+
332
+ desc "Benchmarking library"
333
+ task :benchmark => [ :benchmark_parser, :benchmark_generator ]
334
+
335
+ desc "Create RDOC documentation"
336
+ task :doc => [ :version, EXT_PARSER_SRC ] do
337
+ sh "sdoc -o doc -t '#{PKG_TITLE}' -m README README lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
338
+ end
339
+
340
+ desc "Generate parser with ragel"
341
+ task :ragel => EXT_PARSER_SRC
342
+
343
+ desc "Delete the ragel generated C source"
344
+ task :ragel_clean do
345
+ rm_rf EXT_PARSER_SRC
346
+ end
347
+
348
+ file EXT_PARSER_SRC => RAGEL_PATH do
349
+ cd EXT_PARSER_DIR do
350
+ if RAGEL_CODEGEN == 'ragel'
351
+ sh "ragel parser.rl -G2 -o parser.c"
352
+ else
353
+ sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
354
+ end
355
+ end
356
+ end
357
+
358
+ desc "Generate diagrams of ragel parser (ps)"
359
+ task :ragel_dot_ps do
360
+ root = 'diagrams'
361
+ specs = []
362
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
363
+ for s in specs
364
+ if RAGEL_DOTGEN == 'ragel'
365
+ sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
366
+ else
367
+ sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
368
+ end
369
+ end
370
+ end
371
+
372
+ desc "Generate diagrams of ragel parser (png)"
373
+ task :ragel_dot_png do
374
+ root = 'diagrams'
375
+ specs = []
376
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
377
+ for s in specs
378
+ if RAGEL_DOTGEN == 'ragel'
379
+ sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
380
+ else
381
+ sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
382
+ end
383
+ end
384
+ end
385
+
386
+ desc "Generate diagrams of ragel parser"
387
+ task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
388
+
389
+ desc "Build all gems and archives for a new release of json and json_pure."
390
+ task :release => [ :clean, :version, :cross, :native, :gem, ] do
391
+ sh "#$0 clean native gem"
392
+ sh "#$0 clean package"
393
+ end
289
394
  end
290
395
 
291
396
  desc "Compile in the the source directory"
292
- task :default => [ :version, :compile_ext ]
397
+ task :default => [ :version ]