[前][次][番号順一覧][スレッド一覧]

ruby-changes:12985

From: naruse <ko1@a...>
Date: Wed, 2 Sep 2009 01:18:31 +0900 (JST)
Subject: [ruby-changes:12985] Ruby:r24727 (trunk): * ext/json: Update to JSON 1.1.9.

naruse	2009-09-02 01:17:56 +0900 (Wed, 02 Sep 2009)

  New Revision: 24727

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24727

  Log:
    * ext/json: Update to JSON 1.1.9.

  Removed files:
    trunk/ext/json/lib/json/Array.xpm
    trunk/ext/json/lib/json/FalseClass.xpm
    trunk/ext/json/lib/json/Hash.xpm
    trunk/ext/json/lib/json/Key.xpm
    trunk/ext/json/lib/json/NilClass.xpm
    trunk/ext/json/lib/json/Numeric.xpm
    trunk/ext/json/lib/json/String.xpm
    trunk/ext/json/lib/json/TrueClass.xpm
    trunk/ext/json/lib/json/json.xpm
  Modified files:
    trunk/ChangeLog
    trunk/ext/json/ext/generator/generator.c
    trunk/ext/json/ext/generator/unicode.c
    trunk/ext/json/ext/parser/parser.c
    trunk/ext/json/ext/parser/parser.rl
    trunk/ext/json/ext/parser/unicode.c
    trunk/ext/json/lib/json/common.rb
    trunk/ext/json/lib/json/version.rb
    trunk/ext/json/lib/json.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24726)
+++ ChangeLog	(revision 24727)
@@ -1,3 +1,7 @@
+Wed Sep  2 01:16:32 2009  NARUSE, Yui  <naruse@r...>
+
+	* ext/json: Update to JSON 1.1.9.
+
 Tue Sep  1 19:56:28 2009  Koichi Sasada  <ko1@a...>
 
 	* vm_eval.c (eval_string_with_cref): fix to check local_table_size.
Index: ext/json/ext/generator/generator.c
===================================================================
--- ext/json/ext/generator/generator.c	(revision 24726)
+++ ext/json/ext/generator/generator.c	(revision 24727)
@@ -496,7 +496,7 @@
  * Configure this State instance with the Hash _opts_, and return
  * itself.
  */
-static inline VALUE cState_configure(VALUE self, VALUE opts)
+static VALUE cState_configure(VALUE self, VALUE opts)
 {
     VALUE tmp;
     GET_STATE(self);
Index: ext/json/ext/generator/unicode.c
===================================================================
--- ext/json/ext/generator/unicode.c	(revision 24726)
+++ ext/json/ext/generator/unicode.c	(revision 24727)
@@ -144,8 +144,6 @@
                     rb_str_buf_cat2(buffer, "\\\"");
                 } else if (ch == '\\') {
                     rb_str_buf_cat2(buffer, "\\\\");
-                } else if (ch == '/') {
-                    rb_str_buf_cat2(buffer, "\\/");
                 } else if (ch >= 0x20 && ch <= 0x7f) {
                     rb_str_buf_cat(buffer, (char *) source - 1, 1);
                 } else if (ch == '\n') {
Index: ext/json/ext/parser/unicode.c
===================================================================
--- ext/json/ext/parser/unicode.c	(revision 24726)
+++ ext/json/ext/parser/unicode.c	(revision 24727)
@@ -81,7 +81,7 @@
         buf[1] = *p++;
         buf[2] = *p++;
         buf[3] = *p++;
-        tmpPtr[i] = strtol(buf, NULL, 16);
+        tmpPtr[i] = (UTF16)strtol(buf, NULL, 16);
         p += 2;
     }
 
Index: ext/json/ext/parser/parser.rl
===================================================================
--- ext/json/ext/parser/parser.rl	(revision 24726)
+++ ext/json/ext/parser/parser.rl	(revision 24727)
@@ -27,7 +27,7 @@
 static VALUE CNaN, CInfinity, CMinusInfinity;
 
 static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
-          i_chr, i_max_nesting, i_allow_nan; 
+          i_chr, i_max_nesting, i_allow_nan, i_object_class, i_array_class; 
 
 #define MinusInfinity "-Infinity"
 
@@ -40,6 +40,8 @@
     int max_nesting;
     int current_nesting;
     int allow_nan;
+    VALUE object_class;
+    VALUE array_class;
 } JSON_Parser;
 
 static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
@@ -118,12 +120,13 @@
 {
     int cs = EVIL;
     VALUE last_name = Qnil;
+    VALUE object_class = json->object_class;
 
     if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
+        rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
     }
 
-    *result = rb_hash_new();
+    *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
 
     %% write init;
     %% write exec;
@@ -330,11 +333,12 @@
 static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
 {
     int cs = EVIL;
+    VALUE array_class = json->array_class;
 
     if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
+        rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
     }
-    *result = rb_ary_new();
+    *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
 
     %% write init;
     %% write exec;
@@ -500,6 +504,8 @@
  * * *create_additions*: If set to false, the Parser doesn't create
  *   additions even if a matchin class and create_id was found. This option
  *   defaults to true.
+ * * *object_class*: Defaults to Hash
+ * * *array_class*: Defaults to Array
  */
 static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
 {
@@ -549,11 +555,25 @@
             } else {
                 json->create_id = rb_funcall(mJSON, i_create_id, 0);
             }
+            tmp = ID2SYM(i_object_class);
+            if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+                json->object_class = rb_hash_aref(opts, tmp);
+            } else {
+                json->object_class = Qnil;
+            }
+            tmp = ID2SYM(i_array_class);
+            if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+                json->array_class = rb_hash_aref(opts, tmp);
+            } else {
+                json->array_class = Qnil;
+            }
         }
     } else {
         json->max_nesting = 19;
         json->allow_nan = 0;
         json->create_id = rb_funcall(mJSON, i_create_id, 0);
+        json->object_class = Qnil;
+        json->array_class = Qnil;
     }
     json->current_nesting = 0;
     /*
@@ -610,6 +630,8 @@
 {
     rb_gc_mark_maybe(json->Vsource);
     rb_gc_mark_maybe(json->create_id);
+    rb_gc_mark_maybe(json->object_class);
+    rb_gc_mark_maybe(json->array_class);
 }
 
 static void JSON_free(JSON_Parser *json)
@@ -659,4 +681,6 @@
     i_chr = rb_intern("chr");
     i_max_nesting = rb_intern("max_nesting");
     i_allow_nan = rb_intern("allow_nan");
+    i_object_class = rb_intern("object_class");
+    i_array_class = rb_intern("array_class");
 }
Index: ext/json/ext/parser/parser.c
===================================================================
--- ext/json/ext/parser/parser.c	(revision 24726)
+++ ext/json/ext/parser/parser.c	(revision 24727)
@@ -29,7 +29,7 @@
 static VALUE CNaN, CInfinity, CMinusInfinity;
 
 static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
-          i_chr, i_max_nesting, i_allow_nan; 
+          i_chr, i_max_nesting, i_allow_nan, i_object_class, i_array_class; 
 
 #define MinusInfinity "-Infinity"
 
@@ -42,6 +42,8 @@
     int max_nesting;
     int current_nesting;
     int allow_nan;
+    VALUE object_class;
+    VALUE array_class;
 } JSON_Parser;
 
 static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
@@ -56,11 +58,11 @@
     Data_Get_Struct(self, JSON_Parser, json);
 
 
-#line 82 "parser.rl"
+#line 84 "parser.rl"
 
 
 
-#line 64 "parser.c"
+#line 66 "parser.c"
 static const int JSON_object_start = 1;
 static const int JSON_object_first_final = 27;
 static const int JSON_object_error = 0;
@@ -68,29 +70,30 @@
 static const int JSON_object_en_main = 1;
 
 
-#line 115 "parser.rl"
+#line 117 "parser.rl"
 
 
 static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
 {
     int cs = EVIL;
     VALUE last_name = Qnil;
+    VALUE object_class = json->object_class;
 
     if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
+        rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
     }
 
-    *result = rb_hash_new();
+    *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
 
     
-#line 87 "parser.c"
+#line 90 "parser.c"
 	{
 	cs = JSON_object_start;
 	}
 
-#line 129 "parser.rl"
+#line 132 "parser.rl"
     
-#line 94 "parser.c"
+#line 97 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -118,7 +121,7 @@
 		goto st2;
 	goto st0;
 tr2:
-#line 101 "parser.rl"
+#line 103 "parser.rl"
 	{
         char *np = JSON_parse_string(json, p, pe, &last_name);
         if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
@@ -128,7 +131,7 @@
 	if ( ++p == pe )
 		goto _test_eof3;
 case 3:
-#line 132 "parser.c"
+#line 135 "parser.c"
 	switch( (*p) ) {
 		case 13: goto st3;
 		case 32: goto st3;
@@ -195,7 +198,7 @@
 		goto st8;
 	goto st0;
 tr11:
-#line 90 "parser.rl"
+#line 92 "parser.rl"
 	{
         VALUE v = Qnil;
         char *np = JSON_parse_value(json, p, pe, &v); 
@@ -211,7 +214,7 @@
 	if ( ++p == pe )
 		goto _test_eof9;
 case 9:
-#line 215 "parser.c"
+#line 218 "parser.c"
 	switch( (*p) ) {
 		case 13: goto st9;
 		case 32: goto st9;
@@ -300,14 +303,14 @@
 		goto st9;
 	goto st18;
 tr4:
-#line 106 "parser.rl"
+#line 108 "parser.rl"
 	{ p--; {p++; cs = 27; goto _out;} }
 	goto st27;
 st27:
 	if ( ++p == pe )
 		goto _test_eof27;
 case 27:
-#line 311 "parser.c"
+#line 314 "parser.c"
 	goto st0;
 st19:
 	if ( ++p == pe )
@@ -405,7 +408,7 @@
 	_out: {}
 	}
 
-#line 130 "parser.rl"
+#line 133 "parser.rl"
 
     if (cs >= JSON_object_first_final) {
         if (RTEST(json->create_id)) {
@@ -424,7 +427,7 @@
 }
 
 
-#line 428 "parser.c"
+#line 431 "parser.c"
 static const int JSON_value_start = 1;
 static const int JSON_value_first_final = 21;
 static const int JSON_value_error = 0;
@@ -432,7 +435,7 @@
 static const int JSON_value_en_main = 1;
 
 
-#line 228 "parser.rl"
+#line 231 "parser.rl"
 
 
 static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -440,14 +443,14 @@
     int cs = EVIL;
 
     
-#line 444 "parser.c"
+#line 447 "parser.c"
 	{
 	cs = JSON_value_start;
 	}
 
-#line 235 "parser.rl"
+#line 238 "parser.rl"
     
-#line 451 "parser.c"
+#line 454 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -472,14 +475,14 @@
 cs = 0;
 	goto _out;
 tr0:
-#line 176 "parser.rl"
+#line 179 "parser.rl"
 	{
         char *np = JSON_parse_string(json, p, pe, result);
         if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
     }
 	goto st21;
 tr2:
-#line 181 "parser.rl"
+#line 184 "parser.rl"
 	{
         char *np;
         if(pe > p + 9 && !strncmp(MinusInfinity, p, 9)) {
@@ -499,7 +502,7 @@
     }
 	goto st21;
 tr5:
-#line 199 "parser.rl"
+#line 202 "parser.rl"
 	{ 
         char *np;
         json->current_nesting++;
@@ -509,7 +512,7 @@
     }
 	goto st21;
 tr9:
-#line 207 "parser.rl"
+#line 210 "parser.rl"
 	{ 
         char *np;
         json->current_nesting++;
@@ -519,7 +522,7 @@
     }
 	goto st21;
 tr16:
-#line 169 "parser.rl"
+#line 172 "parser.rl"
 	{
         if (json->allow_nan) {
             *result = CInfinity;
@@ -529,7 +532,7 @@
     }
 	goto st21;
 tr18:
-#line 162 "parser.rl"
+#line 165 "parser.rl"
 	{
         if (json->allow_nan) {
             *result = CNaN;
@@ -539,19 +542,19 @@
     }
 	goto st21;
 tr22:
-#line 156 "parser.rl"
+#line 159 "parser.rl"
 	{
         *result = Qfalse;
     }
 	goto st21;
 tr25:
-#line 153 "parser.rl"
+#line 156 "parser.rl"
 	{
         *result = Qnil;
     }
 	goto st21;
 tr28:
-#line 159 "parser.rl"
+#line 162 "parser.rl"
 	{
         *result = Qtrue;
     }
@@ -560,9 +563,9 @@
 	if ( ++p == pe )
 		goto _test_eof21;
 case 21:
-#line 215 "parser.rl"
+#line 218 "parser.rl"
 	{ p--; {p++; cs = 21; goto _out;} }
-#line 566 "parser.c"
+#line 569 "parser.c"
 	goto st0;
 st2:
 	if ( ++p == pe )
@@ -723,7 +726,7 @@
 	_out: {}
 	}
 
-#line 236 "parser.rl"
+#line 239 "parser.rl"
 
     if (cs >= JSON_value_first_final) {
         return p;
@@ -733,7 +736,7 @@
 }
 
 
-#line 737 "parser.c"
+#line 740 "parser.c"
 static const int JSON_integer_start = 1;
 static const int JSON_integer_first_final = 5;
 static const int JSON_integer_error = 0;
@@ -741,7 +744,7 @@
 static const int JSON_integer_en_main = 1;
 
 
-#line 252 "parser.rl"
+#line 255 "parser.rl"
 
 
 static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -749,15 +752,15 @@
     int cs = EVIL;
 
     
-#line 753 "parser.c"
+#line 756 "parser.c"
 	{
 	cs = JSON_integer_start;
 	}
 
-#line 259 "parser.rl"
+#line 262 "parser.rl"
     json->memo = p;
     
-#line 761 "parser.c"
+#line 764 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -791,14 +794,14 @@
 		goto st0;
 	goto tr4;
 tr4:
-#line 249 "parser.rl"
+#line 252 "parser.rl"
 	{ p--; {p++; cs = 5; goto _out;} }
 	goto st5;
 st5:
 	if ( ++p == pe )
 		goto _test_eof5;
 case 5:
-#line 802 "parser.c"
+#line 805 "parser.c"
 	goto st0;
 st4:
 	if ( ++p == pe )
@@ -817,7 +820,7 @@
 	_out: {}
 	}
 
-#line 261 "parser.rl"
+#line 264 "parser.rl"
 
     if (cs >= JSON_integer_first_final) {
         long len = p - json->memo;
@@ -829,7 +832,7 @@
 }
 
 
-#line 833 "parser.c"
+#line 836 "parser.c"
 static const int JSON_float_start = 1;
 static const int JSON_float_first_final = 10;
 static const int JSON_float_error = 0;
@@ -837,7 +840,7 @@
 static const int JSON_float_en_main = 1;
 
 
-#line 283 "parser.rl"
+#line 286 "parser.rl"
 
 
 static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -845,15 +848,15 @@
     int cs = EVIL;
 
     
-#line 849 "parser.c"
+#line 852 "parser.c"
 	{
 	cs = JSON_float_start;
 	}
 
-#line 290 "parser.rl"
+#line 293 "parser.rl"
     json->memo = p;
     
-#line 857 "parser.c"
+#line 860 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -911,14 +914,14 @@
 		goto st0;
 	goto tr7;
 tr7:
-#line 277 "parser.rl"
+#line 280 "parser.rl"
 	{ p--; {p++; cs = 10; goto _out;} }
 	goto st10;
 st10:
 	if ( ++p == pe )
 		goto _test_eof10;
 case 10:
-#line 922 "parser.c"
+#line 925 "parser.c"
 	goto st0;
 st6:
 	if ( ++p == pe )
@@ -979,7 +982,7 @@
 	_out: {}
 	}
 
-#line 292 "parser.rl"
+#line 295 "parser.rl"
 
     if (cs >= JSON_float_first_final) {
         long len = p - json->memo;
@@ -992,7 +995,7 @@
 
 
 
-#line 996 "parser.c"
+#line 999 "parser.c"
 static const int JSON_array_start = 1;
 static const int JSON_array_first_final = 17;
 static const int JSON_array_error = 0;
@@ -1000,27 +1003,28 @@
 static const int JSON_array_en_main = 1;
 
 
-#line 328 "parser.rl"
+#line 331 "parser.rl"
 
 
 static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
 {
     int cs = EVIL;
+    VALUE array_class = json->array_class;
 
     if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
+        rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
     }
-    *result = rb_ary_new();
+    *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
 
     
-#line 1017 "parser.c"
+#line 1021 "parser.c"
 	{
 	cs = JSON_array_start;
 	}
 
-#line 340 "parser.rl"
+#line 344 "parser.rl"
     
-#line 1024 "parser.c"
+#line 1028 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -1059,7 +1063,7 @@
 		goto st2;
 	goto st0;
 tr2:
-#line 309 "parser.rl"
+#line 312 "parser.rl"
 	{
         VALUE v = Qnil;
         char *np = JSON_parse_value(json, p, pe, &v); 
@@ -1075,7 +1079,7 @@
 	if ( ++p == pe )
 		goto _test_eof3;
 case 3:
-#line 1079 "parser.c"
+#line 1083 "parser.c"
 	switch( (*p) ) {
 		case 13: goto st3;
 		case 32: goto st3;
@@ -1175,14 +1179,14 @@
 		goto st3;
 	goto st12;
 tr4:
-#line 320 "parser.rl"
+#line 323 "parser.rl"
 	{ p--; {p++; cs = 17; goto _out;} }
 	goto st17;
 st17:
 	if ( ++p == pe )
 		goto _test_eof17;
 case 17:
-#line 1186 "parser.c"
+#line 1190 "parser.c"
 	goto st0;
 st13:
 	if ( ++p == pe )
@@ -1238,7 +1242,7 @@
 	_out: {}
 	}
 
-#line 341 "parser.rl"
+#line 345 "parser.rl"
 
     if(cs >= JSON_array_first_final) {
         return p + 1;
@@ -1304,7 +1308,7 @@
 }
 
 
-#line 1308 "parser.c"
+#line 1312 "parser.c"
 static const int JSON_string_start = 1;
 static const int JSON_string_first_final = 8;
 static const int JSON_string_error = 0;
@@ -1312,7 +1316,7 @@
 static const int JSON_string_en_main = 1;
 
 
-#line 425 "parser.rl"
+#line 429 "parser.rl"
 
 
 static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -1321,15 +1325,15 @@
 
     *result = rb_str_new("", 0);
     
-#line 1325 "parser.c"
+#line 1329 "parser.c"
 	{
 	cs = JSON_string_start;
 	}
 
-#line 433 "parser.rl"
+#line 437 "parser.rl"
     json->memo = p;
     
-#line 1333 "parser.c"
+#line 1337 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -1354,7 +1358,7 @@
 		goto st0;
 	goto st2;
 tr2:
-#line 411 "parser.rl"
+#line 415 "parser.rl"
 	{
         *result = json_string_unescape(json->memo + 1, p);
         if (NIL_P(*result)) {
@@ -1365,14 +1369,14 @@
 			{p = (( p + 1))-1;}
 		}
 	}
-#line 422 "parser.rl"
+#line 426 "parser.rl"
 	{ p--; {p++; cs = 8; goto _out;} }
 	goto st8;
 st8:
 	if ( ++p == pe )
 		goto _test_eof8;
 case 8:
-#line 1376 "parser.c"
+#line 1380 "parser.c"
 	goto st0;
 st3:
 	if ( ++p == pe )
@@ -1448,7 +1452,7 @@
 	_out: {}
 	}
 
-#line 435 "parser.rl"
+#line 439 "parser.rl"
 
     if (cs >= JSON_string_first_final) {
         return p + 1;
@@ -1459,7 +1463,7 @@
 
 
 
-#line 1463 "parser.c"
+#line 1467 "parser.c"
 static const int JSON_start = 1;
 static const int JSON_first_final = 10;
 static const int JSON_error = 0;
@@ -1467,7 +1471,7 @@
 static const int JSON_en_main = 1;
 
 
-#line 469 "parser.rl"
+#line 473 "parser.rl"
 
 
 /* 
@@ -1502,6 +1506,8 @@
  * * *create_additions*: If set to false, the Parser doesn't create
  *   additions even if a matchin class and create_id was found. This option
  *   defaults to true.
+ * * *object_class*: Defaults to Hash
+ * * *array_class*: Defaults to Array
  */
 static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
 {
@@ -1551,11 +1557,25 @@
             } else {
                 json->create_id = rb_funcall(mJSON, i_create_id, 0);
             }
+            tmp = ID2SYM(i_object_class);
+            if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+                json->object_class = rb_hash_aref(opts, tmp);
+            } else {
+                json->object_class = Qnil;
+            }
+            tmp = ID2SYM(i_array_class);
+            if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+                json->array_class = rb_hash_aref(opts, tmp);
+            } else {
+                json->array_class = Qnil;
+            }
         }
     } else {
         json->max_nesting = 19;
         json->allow_nan = 0;
         json->create_id = rb_funcall(mJSON, i_create_id, 0);
+        json->object_class = Qnil;
+        json->array_class = Qnil;
     }
     json->current_nesting = 0;
     /*
@@ -1590,16 +1610,16 @@
     GET_STRUCT;
 
     
-#line 1594 "parser.c"
+#line 1614 "parser.c"
 	{
 	cs = JSON_start;
 	}
 
-#line 591 "parser.rl"
+#line 611 "parser.rl"
     p = json->source;
     pe = p + json->len;
     
-#line 1603 "parser.c"
+#line 1623 "parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -1655,7 +1675,7 @@
 		goto st1;
 	goto st5;
 tr3:
-#line 458 "parser.rl"
+#line 462 "parser.rl"
 	{
         char *np;
         json->current_nesting = 1;
@@ -1664,7 +1684,7 @@
     }
 	goto st10;
 tr4:
-#line 451 "parser.rl"
+#line 455 "parser.rl"
 	{
         char *np;
         json->current_nesting = 1;
@@ -1676,7 +1696,7 @@
 	if ( ++p == pe )
 		goto _test_eof10;
 case 10:
-#line 1680 "parser.c"
+#line 1700 "parser.c"
 	switch( (*p) ) {
 		case 13: goto st10;
 		case 32: goto st10;
@@ -1733,7 +1753,7 @@
 	_out: {}
 	}
 
-#line 594 "parser.rl"
+#line 614 "parser.rl"
 
     if (cs >= JSON_first_final && p == pe) {
         return result;
@@ -1753,6 +1773,8 @@
 {
     rb_gc_mark_maybe(json->Vsource);
     rb_gc_mark_maybe(json->create_id);
+    rb_gc_mark_maybe(json->object_class);
+    rb_gc_mark_maybe(json->array_class);
 }
 
 static void JSON_free(JSON_Parser *json)
@@ -1802,4 +1824,6 @@
     i_chr = rb_intern("chr");
     i_max_nesting = rb_intern("max_nesting");
     i_allow_nan = rb_intern("allow_nan");
+    i_object_class = rb_intern("object_class");
+    i_array_class = rb_intern("array_class");
 }
Index: ext/json/lib/json/Array.xpm
===================================================================
--- ext/json/lib/json/Array.xpm	(revision 24726)
+++ ext/json/lib/json/Array.xpm	(revision 24727)
@@ -1,21 +0,0 @@
-/* XPM */
-static char * Array_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"   ..........   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   ..........   ",
-"                ",
-"                ",
-"                "};
Index: ext/json/lib/json/FalseClass.xpm
===================================================================
--- ext/json/lib/json/FalseClass.xpm	(revision 24726)
+++ ext/json/lib/json/FalseClass.xpm	(revision 24727)
@@ -1,21 +0,0 @@
-/* XPM */
-static char * False_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #FF0000",
-"                ",
-"                ",
-"                ",
-"     ......     ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     ......     ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     .          ",
-"                ",
-"                ",
-"                "};
Index: ext/json/lib/json/Numeric.xpm
===================================================================
--- ext/json/lib/json/Numeric.xpm	(revision 24726)
+++ ext/json/lib/json/Numeric.xpm	(revision 24727)
@@ -1,28 +0,0 @@
-/* XPM */
-static char * Numeric_xpm[] = {
-"16 16 9 1",
-" 	c None",
-".	c #FF0000",
-"+	c #0000FF",
-"@	c #0023DB",
-"#	c #00EA14",
-"$	c #00FF00",
-"%	c #004FAF",
-"&	c #0028D6",
-"*	c #00F20C",
-"                ",
-"                ",
-"                ",
-" ... +++@#$$$$  ",
-"   .+   %&   $$ ",
-"   .     +    $ ",
-"   .     +   $$ ",
-"   .    ++$$$$  ",
-"   .    +    $$ ",
-"   .   +      $ ",
-"   .  +       $ ",
-"   . +  $    $$ ",
-" .....++++*$$   ",
-"                ",
-"                ",
-"                "};
Index: ext/json/lib/json/Hash.xpm
===================================================================
--- ext/json/lib/json/Hash.xpm	(revision 24726)
+++ ext/json/lib/json/Hash.xpm	(revision 24727)
@@ -1,21 +0,0 @@
-/* XPM */
-static char * Hash_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"       .  .     ",
-"       .  .     ",
-"       .  .     ",
-"    .........   ",
-"      .  .      ",
-"      .  .      ",
-"   .........    ",
-"     .  .       ",
-"     .  .       ",
-"     .  .       ",
-"                ",
-"                ",
-"                "};
Index: ext/json/lib/json/TrueClass.xpm
===================================================================
--- ext/json/lib/json/TrueClass.xpm	(revision 24726)
+++ ext/json/lib/json/TrueClass.xpm	(revision 24727)
@@ -1,21 +0,0 @@
-/* XPM */
-static char * TrueClass_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #0BF311",
-"                ",
-"                ",
-"                ",
-"   .........    ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"                ",
-"                ",
-"                "};
Index: ext/json/lib/json/String.xpm
===================================================================
--- ext/json/lib/json/String.xpm	(revision 24726)
+++ ext/json/lib/json/String.xpm	(revision 24727)
@@ -1,96 +0,0 @@
-/* XPM */
-static char * String_xpm[] = {
-"16 16 77 1",
-" 	c None",
-".	c #000000",
-"+	c #040404",
-"@	c #080806",
-"#	c #090606",
-"$	c #EEEAE1",
-"%	c #E7E3DA",
-"&	c #E0DBD1",
-"*	c #D4B46F",
-"=	c #0C0906",
-"-	c #E3C072",
-";	c #E4C072",
-">	c #060505",
-",	c #0B0A08",
-"'	c #D5B264",
-")	c #D3AF5A",
-"!	c #080602",
-"~	c #E1B863",
-"{	c #DDB151",
-"]	c #DBAE4A",
-"^	c #DDB152",
-"/	c #DDB252",
-"(	c #070705",
-"_	c #0C0A07",
-":	c #D3A33B",
-"<	c #020201",
-"[	c #DAAA41",
-"}	c #040302",
-"|	c #E4D9BF",
-"1	c #0B0907",
-"2	c #030201",
-"3	c #020200",
-"4	c #C99115",
-"5	c #080704",
-"6	c #DBC8A2",
-"7	c #E7D7B4",
-"8	c #E0CD9E",
-"9	c #080601",
-"0	c #040400",
-"a	c #010100",
-"b	c #0B0B08",
-"c	c #DCBF83",
-"d	c #DCBC75",
-"e	c #DEB559",
-"f	c #040301",
-"g	c #BC8815",
-"h	c #120E07",
-"i	c #060402",
-"j	c #0A0804",
-"k	c #D4A747",
-"l	c #D6A12F",
-"m	c #0E0C05",
-"n	c #C8C1B0",
-"o	c #1D1B15",
-"p	c #D7AD51",
-"q	c #070502",
-"r	c #080804",
-"s	c #BC953B",
-"t	c #C4BDAD",
-"u	c #0B0807",
-"v	c #DBAC47",
-"w	c #1B150A",
-"x	c #B78A2C",
-"y	c #D8A83C",
-"z	c #D4A338",
-"A	c #0F0B03",
-"B	c #181105",
-"C	c #C59325",
-"D	c #C18E1F",
-"E	c #060600",
-"F	c #CC992D",
-"G	c #B98B25",
-"H	c #B3831F",
-"I	c #C08C1C",
-"J	c #060500",
-"K	c #0E0C03",
-"L	c #0D0A00",
-"                ",
-"   .+@#         ",
-"  .$%&*=        ",
-" .-;>,')!       ",
-" .~.  .{].      ",
-" .^/. (_:<      ",
-"  .[.}|$12      ",
-"   345678}90    ",
-"    a2bcdefgh   ",
-"      ijkl.mno  ",
-"      <pq. rstu ",
-"      .]v.  wx= ",
-"       .yzABCDE ",
-"        .FGHIJ  ",
-"         0KL0   ",
-"                "};
Index: ext/json/lib/json/Key.xpm
===================================================================
--- ext/json/lib/json/Key.xpm	(revision 24726)
+++ ext/json/lib/json/Key.xpm	(revision 24727)
@@ -1,73 +0,0 @@
-/* XPM */
-static char * Key_xpm[] = {
-"16 16 54 1",
-" 	c None",
-".	c #110007",
-"+	c #0E0900",
-"@	c #000013",
-"#	c #070600",
-"$	c #F6F006",
-"%	c #ECE711",
-"&	c #E5EE00",
-"*	c #16021E",
-"=	c #120900",
-"-	c #EDF12B",
-";	c #000033",
-">	c #0F0000",
-",	c #FFFE03",
-"'	c #E6E500",
-")	c #16021B",
-"!	c #F7F502",
-"~	c #000E00",
-"{	c #130000",
-"]	c #FFF000",
-"^	c #FFE711",
-"/	c #140005",
-"(	c #190025",
-"_	c #E9DD27",
-":	c #E7DC04",
-"<	c #FFEC09",
-"[	c #FFE707",
-"}	c #FFDE10",
-"|	c #150021",
-"1	c #160700",
-"2	c #FAF60E",
-"3	c #EFE301",
-"4	c #FEF300",
-"5	c #E7E000",
-"6	c #FFFF08",
-"7	c #0E0206",
-"8	c #040000",
-"9	c #03052E",
-"0	c #041212",
-"a	c #070300",
-"b	c #F2E713",
-"c	c #F9DE13",
-"d	c #36091E",
-"e	c #00001C",
-"f	c #1F0010",
-"g	c #FFF500",
-"h	c #DEDE00",
-"i	c #050A00",
-"j	c #FAF14A",
-"k	c #F5F200",
-"l	c #040404",
-"m	c #1A0D00",
-"n	c #EDE43D",
-"o	c #ECE007",
-"                ",
-"                ",
-"    .+@         ",
-"   #$%&*        ",
-"  =-;>,')       ",
-"  >!~{]^/       ",
-"  (_:<[}|       ",
-"   1234567      ",
-"    890abcd     ",
-"       efghi    ",
-"         >jkl   ",
-"          mnol  ",
-"           >kl  ",
-"            ll  ",
-"                ",
-"                "};
Index: ext/json/lib/json/NilClass.xpm
===================================================================
--- ext/json/lib/json/NilClass.xpm	(revision 24726)
+++ ext/json/lib/json/NilClass.xpm	(revision 24727)
@@ -1,21 +0,0 @@
-/* XPM */
-static char * False_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"       ...      ",
-"      .   .     ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"      .   .     ",
-"       ...      ",
-"                ",
-"                ",
-"                "};
Index: ext/json/lib/json/json.xpm
===================================================================
--- ext/json/lib/json/json.xpm	(revision 24726)
+++ ext/json/lib/json/json.xpm	(revision 24727)
@@ -1,1499 +0,0 @@
-/* XPM */
-static char * json_xpm[] = {
-"64 64 1432 2",
-"  	c None",
-". 	c #641839",
-"+ 	c #CF163C",
-"@ 	c #D31C3B",
-"# 	c #E11A38",
-"$ 	c #5F242D",
-"% 	c #320C22",
-"& 	c #9B532D",
-"* 	c #F32E34",
-"= 	c #820F33",
-"- 	c #4B0F34",
-"; 	c #8E1237",
-"> 	c #944029",
-", 	c #961325",
-"' 	c #A00C24",
-") 	c #872C23",
-"! 	c #694021",
-"~ 	c #590D1F",
-"{ 	c #420528",
-"] 	c #D85A2D",
-"^ 	c #7E092B",
-"/ 	c #0E0925",
-"( 	c #0D081F",
-"_ 	c #0F081E",
-": 	c #12071F",
-"< 	c #360620",
-"[ 	c #682A21",
-"} 	c #673F21",
-"| 	c #780E21",
-"1 	c #A82320",
-"2 	c #8D1D1F",
-"3 	c #970127",
-"4 	c #0D0123",
-"5 	c #0D0324",
-"6 	c #3B1E28",
-"7 	c #C28429",
-"8 	c #0C0523",
-"9 	c #0C041E",
-"0 	c #0E031A",
-"a 	c #11031A",
-"b 	c #13031B",
-"c 	c #13031C",
-"d 	c #11031D",
-"e 	c #19051E",
-"f 	c #390E20",
-"g 	c #9C0C20",
-"h 	c #C00721",
-"i 	c #980320",
-"j 	c #14031E",
-"k 	c #CD9F32",
-"l 	c #C29F2E",
-"m 	c #0F0325",
-"n 	c #0D0321",
-"o 	c #0E0324",
-"p 	c #D08329",
-"q 	c #9D1B27",
-"r 	c #1C0320",
-"s 	c #0D011A",
-"t 	c #120117",
-"u 	c #130017",
-"v 	c #150018",
-"w 	c #160119",
-"x 	c #17021A",
-"y 	c #15021B",
-"z 	c #11021E",
-"A 	c #0F021F",
-"B 	c #8C1821",
-"C 	c #CF4522",
-"D 	c #831821",
-"E 	c #BA7033",
-"F 	c #EDB339",
-"G 	c #C89733",
-"H 	c #280727",
-"I 	c #0F051F",
-"J 	c #0E0420",
-"K 	c #591F27",
-"L 	c #E47129",
-"M 	c #612224",
-"N 	c #0C021D",
-"O 	c #120018",
-"P 	c #140017",
-"Q 	c #170017",
-"R 	c #190018",
-"S 	c #1B0019",
-"T 	c #1B011A",
-"U 	c #18011B",
-"V 	c #15011C",
-"W 	c #12031E",
-"X 	c #460A21",
-"Y 	c #A13823",
-"Z 	c #784323",
-"` 	c #5A0C21",
-" .	c #BC4530",
-"..	c #EB5B38",
-"+.	c #CE4E3B",
-"@.	c #DD9334",
-"#.	c #751A27",
-"$.	c #11071E",
-"%.	c #0F041C",
-"&.	c #1E0824",
-"*.	c #955A28",
-"=.	c #9A5027",
-"-.	c #1E0321",
-";.	c #11011A",
-">.	c #140018",
-",.	c #180018",
-"'.	c #1F001A",
-").	c #20001B",
-"!.	c #1E001A",
-"~.	c #1B001A",
-"{.	c #16021B",
-"].	c #16041E",
-"^.	c #220622",
-"/.	c #5F3525",
-"(.	c #DE5724",
-"_.	c #611021",
-":.	c #0F0925",
-"<.	c #D1892E",
-"[.	c #F27036",
-"}.	c #EC633B",
-"|.	c #DA293C",
-"1.	c #E64833",
-"2.	c #912226",
-"3.	c #11081C",
-"4.	c #110419",
-"5.	c #0F041E",
-"6.	c #451425",
-"7.	c #BF6F28",
-"8.	c #332225",
-"9.	c #0E021E",
-"0.	c #13001B",
-"a.	c #17001A",
-"b.	c #1C001B",
-"c.	c #21001C",
-"d.	c #23001C",
-"e.	c #21001B",
-"f.	c #19021A",
-"g.	c #17041E",
-"h.	c #150721",
-"i.	c #602424",
-"j.	c #D51223",
-"k.	c #540820",
-"l.	c #D04D2D",
-"m.	c #EA8933",
-"n.	c #875637",
-"o.	c #88543A",
-"p.	c #E5923A",
-"q.	c #891931",
-"r.	c #130B25",
-"s.	c #10051B",
-"t.	c #110217",
-"u.	c #12021A",
-"v.	c #761826",
-"w.	c #E2A728",
-"x.	c #300224",
-"y.	c #10011E",
-"z.	c #16001B",
-"A.	c #1B001B",
-"B.	c #21001A",
-"C.	c #1E0019",
-"D.	c #1D0019",
-"E.	c #1A011A",
-"F.	c #17031C",
-"G.	c #120720",
-"H.	c #4E0822",
-"I.	c #670721",
-"J.	c #C07630",
-"K.	c #F59734",
-"L.	c #BE1B35",
-"M.	c #0E1435",
-"N.	c #522037",
-"O.	c #DB8039",
-"P.	c #D45933",
-"Q.	c #420927",
-"R.	c #0F041D",
-"S.	c #140118",
-"T.	c #13021D",
-"U.	c #100423",
-"V.	c #7B6227",
-"W.	c #C04326",
-"X.	c #0E0020",
-"Y.	c #13001D",
-"Z.	c #18001B",
-"`.	c #1E001B",
-" +	c #22001C",
-".+	c #22001B",
-"++	c #1B011B",
-"@+	c #16041D",
-"#+	c #130520",
-"$+	c #860521",
-"%+	c #710520",
-"&+	c #670A2A",
-"*+	c #A66431",
-"=+	c #E97536",
-"-+	c #F8833A",
-";+	c #F77A3A",
-">+	c #C45337",
-",+	c #0A1C35",
-"'+	c #993638",
-")+	c #F7863B",
-"!+	c #F49736",
-"~+	c #94462B",
-"{+	c #0E031F",
-"]+	c #130119",
-"^+	c #160018",
-"/+	c #16011B",
-"(+	c #15021F",
-"_+	c #120123",
-":+	c #A65C28",
-"<+	c #5C4D23",
-"[+	c #0F001F",
-"}+	c #14001D",
-"|+	c #1A001B",
-"1+	c #1F001B",
-"2+	c #24001D",
-"3+	c #25001D",
-"4+	c #24001C",
-"5+	c #1F001C",
-"6+	c #1A011C",
-"7+	c #16021E",
-"8+	c #3F0421",
-"9+	c #BC0522",
-"0+	c #1C041E",
-"a+	c #7F5531",
-"b+	c #E68A38",
-"c+	c #F8933E",
-"d+	c #FA7942",
-"e+	c #FB7543",
-"f+	c #FA6F41",
-"g+	c #F1793D",
-"h+	c #7D3B3A",
-"i+	c #28263B",
-"j+	c #D45441",
-"k+	c #F8A238",
-"l+	c #996B2D",
-"m+	c #0E0421",
-"n+	c #12011A",
-"o+	c #180019",
-"p+	c #17001C",
-"q+	c #12001F",
-"r+	c #4C2B2A",
-"s+	c #DB8130",
-"t+	c #540023",
-"u+	c #0F0120",
-"v+	c #16011C",
-"w+	c #22001D",
-"x+	c #25001F",
-"y+	c #26001F",
-"z+	c #25001E",
-"A+	c #24001E",
-"B+	c #1D001C",
-"C+	c #18011D",
-"D+	c #16031F",
-"E+	c #3C0522",
-"F+	c #9B0821",
-"G+	c #13041E",
-"H+	c #F6462E",
-"I+	c #E6AB37",
-"J+	c #E7A03E",
-"K+	c #FA9F44",
-"L+	c #FB8A48",
-"M+	c #FD7A4A",
-"N+	c #FD794A",
-"O+	c #FD7748",
-"P+	c #FD7E45",
-"Q+	c #FD8343",
-"R+	c #FB5D42",
-"S+	c #6E3A40",
-"T+	c #EE8A37",
-"U+	c #7E252B",
-"V+	c #100520",
-"W+	c #13011A",
-"X+	c #170019",
-"Y+	c #15001C",
-"Z+	c #0F0020",
-"`+	c #564427",
-" @	c #E0BA29",
-".@	c #5E2B25",
-"+@	c #10011F",
-"@@	c #17011C",
-"#@	c #1E001D",
-"$@	c #23001F",
-"%@	c #250020",
-"&@	c #24001F",
-"*@	c #23001E",
-"=@	c #21001E",
-"-@	c #1B001C",
-";@	c #17021D",
-">@	c #14041E",
-",@	c #AC0B25",
-"'@	c #5E1420",
-")@	c #F28635",
-"!@	c #C2733E",
-"~@	c #984C44",
-"{@	c #EA9148",
-"]@	c #FB844B",
-"^@	c #FD7E4C",
-"/@	c #FE7E4C",
-"(@	c #FE7E4B",
-"_@	c #FE7749",
-":@	c #FD7148",
-"<@	c #FB7D46",
-"[@	c #F89641",
-"}@	c #B95634",
-"|@	c #0D0927",
-"1@	c #11041D",
-"2@	c #150119",
-"3@	c #180017",
-"4@	c #16001A",
-"5@	c #13001E",
-"6@	c #110023",
-"7@	c #944C29",
-"8@	c #EE6229",
-"9@	c #3D0324",
-"0@	c #12021F",
-"a@	c #19011D",
-"b@	c #21001F",
-"c@	c #22001F",
-"d@	c #20001E",
-"e@	c #1F001D",
-"f@	c #1C001C",
-"g@	c #19011C",
-"h@	c #3D1621",
-"i@	c #B53622",
-"j@	c #31061F",
-"k@	c #841D34",
-"l@	c #F2703F",
-"m@	c #C14445",
-"n@	c #E67349",
-"o@	c #FB8E4B",
-"p@	c #FD834C",
-"q@	c #FE834D",
-"r@	c #FE834C",
-"s@	c #FE804C",
-"t@	c #FD814B",
-"u@	c #FB7D49",
-"v@	c #F79B43",
-"w@	c #AF1234",
-"x@	c #0D0625",
-"y@	c #13021C",
-"z@	c #1A0019",
-"A@	c #190019",
-"B@	c #410225",
-"C@	c #D39729",
-"D@	c #AA5927",
-"E@	c #0E0422",
-"F@	c #15021E",
-"G@	c #1A011D",
-"H@	c #1D001D",
-"I@	c #15031D",
-"J@	c #240820",
-"K@	c #A01023",
-"L@	c #670B21",
-"M@	c #3D0D33",
-"N@	c #E63C3E",
-"O@	c #EF7C45",
-"P@	c #F59048",
-"Q@	c #FB944A",
-"R@	c #FD904A",
-"S@	c #FE8E4B",
-"T@	c #FE854A",
-"U@	c #FE854B",
-"V@	c #FE884C",
-"W@	c #FC954B",
-"X@	c #F8AB45",
-"Y@	c #C37A35",
-"Z@	c #0D0425",
-"`@	c #13011B",
-" #	c #170018",
-".#	c #1A0018",
-"+#	c #1C0019",
-"@#	c #15001B",
-"##	c #100120",
-"$#	c #311F25",
-"%#	c #E68E28",
-"&#	c #7A1425",
-"*#	c #130321",
-"=#	c #17011E",
-"-#	c #1A001D",
-";#	c #19001B",
-">#	c #16021C",
-",#	c #130521",
-"'#	c #6F3123",
-")#	c #6D3022",
-"!#	c #C89433",
-"~#	c #EA7E3E",
-"{#	c #DB2943",
-"]#	c #EF7745",
-"^#	c #FB8544",
-"/#	c #FD9A43",
-"(#	c #FE9941",
-"_#	c #FE9D43",
-":#	c #FEA548",
-"<#	c #FEAE49",
-"[#	c #FCB944",
-"}#	c #CA9F35",
-"|#	c #0E0225",
-"1#	c #11001B",
-"2#	c #160019",
-"3#	c #12011B",
-"4#	c #0F0220",
-"5#	c #351D26",
-"6#	c #D85B28",
-"7#	c #6C0F26",
-"8#	c #190121",
-"9#	c #1B001E",
-"0#	c #1A001C",
-"a#	c #1D001B",
-"b#	c #130220",
-"c#	c #703A23",
-"d#	c #713A23",
-"e#	c #140327",
-"f#	c #411B36",
-"g#	c #C8713E",
-"h#	c #7A3A3F",
-"i#	c #CE2C3C",
-"j#	c #E77338",
-"k#	c #9C6535",
-"l#	c #9C6233",
-"m#	c #9C6332",
-"n#	c #9C6A35",
-"o#	c #C37D3C",
-"p#	c #FEAC41",
-"q#	c #FEC23E",
-"r#	c #826330",
-"s#	c #100122",
-"t#	c #120019",
-"u#	c #150017",
-"v#	c #190017",
-"w#	c #1B0018",
-"x#	c #12001A",
-"y#	c #10021F",
-"z#	c #1A0326",
-"A#	c #5F292A",
-"B#	c #7B4E29",
-"C#	c #3C0E25",
-"D#	c #1A0020",
-"E#	c #14021F",
-"F#	c #723B23",
-"G#	c #14001A",
-"H#	c #58042A",
-"I#	c #A28337",
-"J#	c #C8813B",
-"K#	c #B14B38",
-"L#	c #761231",
-"M#	c #5A132A",
-"N#	c #0D0726",
-"O#	c #0C0623",
-"P#	c #0B0723",
-"Q#	c #0B0A26",
-"R#	c #321C2D",
-"S#	c #C45B33",
-"T#	c #FEBB33",
-"U#	c #13052A",
-"V#	c #13011F",
-"W#	c #160017",
-"X#	c #15001A",
-"Y#	c #12001D",
-"Z#	c #94062A",
-"`#	c #630D2C",
-" $	c #85292B",
-".$	c #AA5E29",
-"+$	c #1F0123",
-"@$	c #19011F",
-"#$	c #1E001C",
-"$$	c #15031F",
-"%$	c #712122",
-"&$	c #712223",
-"*$	c #14011B",
-"=$	c #110321",
-"-$	c #AF0C2B",
-";$	c #E7D534",
-">$	c #EAC934",
-",$	c #84582D",
-"'$	c #1B0824",
-")$	c #11041E",
-"!$	c #10021B",
-"~$	c #100119",
-"{$	c #100218",
-"]$	c #0F041A",
-"^$	c #0E0720",
-"/$	c #2C1026",
-"($	c #D8A328",
-"_$	c #140322",
-":$	c #160016",
-"<$	c #14001F",
-"[$	c #120024",
-"}$	c #100128",
-"|$	c #3C032F",
-"1$	c #2C062E",
-"2$	c #29022B",
-"3$	c #A31D29",
-"4$	c #976A25",
-"5$	c #1A0321",
-"6$	c #17031E",
-"7$	c #1B021D",
-"8$	c #20001C",
-"9$	c #14041F",
-"0$	c #703422",
-"a$	c #6F3522",
-"b$	c #8D0328",
-"c$	c #920329",
-"d$	c #0F0326",
-"e$	c #100321",
-"f$	c #11021B",
-"g$	c #130117",
-"h$	c #140016",
-"i$	c #150015",
-"j$	c #140015",
-"k$	c #130116",
-"l$	c #120219",
-"m$	c #11031C",
-"n$	c #12031D",
-"o$	c #170016",
-"p$	c #160020",
-"q$	c #250029",
-"r$	c #670033",
-"s$	c #DCA238",
-"t$	c #F5C736",
-"u$	c #9A732E",
-"v$	c #110227",
-"w$	c #110324",
-"x$	c #811924",
-"y$	c #A04323",
-"z$	c #250721",
-"A$	c #1A041F",
-"B$	c #1E011D",
-"C$	c #1C011C",
-"D$	c #18031D",
-"E$	c #130721",
-"F$	c #6F3623",
-"G$	c #6B3622",
-"H$	c #1A001A",
-"I$	c #14011F",
-"J$	c #12011E",
-"K$	c #11011C",
-"L$	c #140117",
-"M$	c #170015",
-"N$	c #150016",
-"O$	c #120119",
-"P$	c #11011B",
-"Q$	c #11001A",
-"R$	c #130018",
-"S$	c #170118",
-"T$	c #170119",
-"U$	c #18021E",
-"V$	c #1A0126",
-"W$	c #6F2332",
-"X$	c #E5563B",
-"Y$	c #F1B83F",
-"Z$	c #F6CC38",
-"`$	c #9D7A2D",
-" %	c #130123",
-".%	c #130320",
-"+%	c #2A0721",
-"@%	c #B00E24",
-"#%	c #7D0B23",
-"$%	c #1F0522",
-"%%	c #1E0220",
-"&%	c #1D011E",
-"*%	c #1A031E",
-"=%	c #15051F",
-"-%	c #241322",
-";%	c #A32F23",
-">%	c #670E21",
-",%	c #1C001A",
-"'%	c #19001A",
-")%	c #180016",
-"!%	c #160118",
-"~%	c #140219",
-"{%	c #11021C",
-"]%	c #10021E",
-"^%	c #0F011D",
-"/%	c #170117",
-"(%	c #160219",
-"_%	c #17041D",
-":%	c #190523",
-"<%	c #8C042E",
-"[%	c #B65838",
-"}%	c #E9D73F",
-"|%	c #EED43E",
-"1%	c #D85538",
-"2%	c #493129",
-"3%	c #130120",
-"4%	c #15021D",
-"5%	c #330822",
-"6%	c #8A0825",
-"7%	c #3C0424",
-"8%	c #1E0322",
-"9%	c #1C0321",
-"0%	c #180421",
-"a%	c #130822",
-"b%	c #AF2D24",
-"c%	c #BC5623",
-"d%	c #2F071F",
-"e%	c #1A041C",
-"f%	c #1C031C",
-"g%	c #1D011C",
-"h%	c #160117",
-"i%	c #150419",
-"j%	c #12081D",
-"k%	c #0F0923",
-"l%	c #A77027",
-"m%	c #A60525",
-"n%	c #11021A",
-"o%	c #130218",
-"p%	c #150319",
-"q%	c #16061D",
-"r%	c #180923",
-"s%	c #9C1D2B",
-"t%	c #A32636",
-"u%	c #A66E3B",
-"v%	c #4B2E3C",
-"w%	c #412C36",
-"x%	c #36012D",
-"y%	c #140123",
-"z%	c #17001E",
-"A%	c #19011B",
-"B%	c #1A0421",
-"C%	c #340425",
-"D%	c #9E0326",
-"E%	c #1F0424",
-"F%	c #1C0524",
-"G%	c #180724",
-"H%	c #A91024",
-"I%	c #D55D24",
-"J%	c #90071E",
-"K%	c #3C051D",
-"L%	c #1C021C",
-"M%	c #1C011A",
-"N%	c #1D001A",
-"O%	c #160116",
-"P%	c #150216",
-"Q%	c #140217",
-"R%	c #140618",
-"S%	c #120D1D",
-"T%	c #231925",
-"U%	c #B16A2E",
-"V%	c #FDAC34",
-"W%	c #D58631",
-"X%	c #280E2A",
-"Y%	c #0D0A23",
-"Z%	c #0F0920",
-"`%	c #120C21",
-" &	c #1F1026",
-".&	c #A3352E",
-"+&	c #EE9F36",
-"@&	c #5D2A3C",
-"#&	c #960D3C",
-"$&	c #970638",
-"%&	c #A00330",
-"&&	c #4D0126",
-"*&	c #1C001F",
-"=&	c #280120",
-"-&	c #290223",
-";&	c #1F0425",
-">&	c #260726",
-",&	c #340A26",
-"'&	c #850925",
-")&	c #3A0823",
-"!&	c #82071D",
-"~&	c #5E071D",
-"{&	c #18051C",
-"]&	c #18021A",
-"^&	c #190118",
-"/&	c #160217",
-"(&	c #150418",
-"_&	c #130618",
-":&	c #110718",
-"<&	c #10081A",
-"[&	c #110D1D",
-"}&	c #291C24",
-"|&	c #A73B2D",
-"1&	c #FD6B36",
-"2&	c #FD853C",
-"3&	c #FD863B",
-"4&	c #C24A35",
-"5&	c #6B442F",
-"6&	c #6D302D",
-"7&	c #6E252E",
-"8&	c #8E3B32",
-"9&	c #DE7739",
-"0&	c #F48E3F",
-"a&	c #DD8D41",
-"b&	c #854F3D",
-"c&	c #7E2D35",
-"d&	c #33082B",
-"e&	c #1C0222",
-"f&	c #20001F",
-"g&	c #1F0222",
-"h&	c #1A0524",
-"i&	c #440C27",
-"j&	c #BC1427",
-"k&	c #20041B",
-"l&	c #53061C",
-"m&	c #25071B",
-"n&	c #11061A",
-"o&	c #130418",
-"p&	c #140317",
-"q&	c #150217",
-"r&	c #160318",
-"s&	c #12051B",
-"t&	c #100C1D",
-"u&	c #0E101E",
-"v&	c #0C121F",
-"w&	c #0C1321",
-"x&	c #781725",
-"y&	c #B25D2C",
-"z&	c #FA6335",
-"A&	c #FD633C",
-"B&	c #FE6D42",
-"C&	c #FE7C42",
-"D&	c #FE813F",
-"E&	c #FE873C",
-"F&	c #FD743B",
-"G&	c #FB683B",
-"H&	c #FA7A3E",
-"I&	c #F98242",
-"J&	c #F97844",
-"K&	c #F98943",
-"L&	c #F79C3D",
-"M&	c #A25133",
-"N&	c #280B28",
-"O&	c #1D021F",
-"P&	c #1F011C",
-"Q&	c #280321",
-"R&	c #1C0724",
-"S&	c #3F1C27",
-"T&	c #D33C27",
-"U&	c #0E061B",
-"V&	c #0C091C",
-"W&	c #0C0A1B",
-"X&	c #0E091A",
-"Y&	c #11081B",
-"Z&	c #100A20",
-"`&	c #0E0D23",
-" *	c #551227",
-".*	c #B21829",
-"+*	c #C42329",
-"@*	c #C62C29",
-"#*	c #C55429",
-"$*	c #E76F2B",
-"%*	c #F14232",
-"&*	c #F95E3A",
-"**	c #FC6740",
-"=*	c #FE6E45",
-"-*	c #FE7246",
-";*	c #FE7545",
-">*	c #FE7744",
-",*	c #FD7745",
-"'*	c #FD7845",
-")*	c #FD7847",
-"!*	c #FD7948",
-"~*	c #FD7B44",
-"{*	c #FC7C3B",
-"]*	c #6F3130",
-"^*	c #140B24",
-"/*	c #19031D",
-"(*	c #1C011B",
-"_*	c #5A011F",
-":*	c #B70421",
-"<*	c #380824",
-"[*	c #3E2626",
-"}*	c #9F5626",
-"|*	c #13051E",
-"1*	c #360A21",
-"2*	c #361223",
-"3*	c #371724",
-"4*	c #381824",
-"5*	c #3B1524",
-"6*	c #3E1E26",
-"7*	c #471A29",
-"8*	c #DB252E",
-"9*	c #ED2733",
-"0*	c #EE5436",
-"a*	c #F04237",
-"b*	c #F33934",
-"c*	c #F53D2F",
-"d*	c #D7312B",
-"e*	c #AF212B",
-"f*	c #3A2C31",
-"g*	c #F65F39",
-"h*	c #FB6F41",
-"i*	c #FD6D45",
-"j*	c #FE7047",
-"k*	c #FE7647",
-"l*	c #FE7847",
-"m*	c #FE7848",
-"n*	c #FE7748",
-"o*	c #FE7948",
-"p*	c #FE7C48",
-"q*	c #FE7C47",
-"r*	c #FE7642",
-"s*	c #FE7439",
-"t*	c #6D332C",
-"u*	c #100B21",
-"v*	c #16031B",
-"w*	c #2B001B",
-"x*	c #22011F",
-"y*	c #220521",
-"z*	c #1B0A23",
-"A*	c #421425",
-"B*	c #951924",
-"C*	c #381023",
-"D*	c #E94028",
-"E*	c #E7302B",
-"F*	c #EF432D",
-"G*	c #F4302E",
-"H*	c #F32C30",
-"I*	c #CB4432",
-"J*	c #DD3235",
-"K*	c #EF4B3A",
-"L*	c #F0333E",
-"M*	c #CC3D3F",
-"N*	c #E4313C",
-"O*	c #F34834",
-"P*	c #D13E2C",
-"Q*	c #431825",
-"R*	c #0E1424",
-"S*	c #3C202C",
-"T*	c #F15537",
-"U*	c #F97140",
-"V*	c #FC6E45",
-"W*	c #FE7547",
-"X*	c #FE7947",
-"Y*	c #FE7B48",
-"Z*	c #FE7D48",
-"`*	c #FE8047",
-" =	c #FE7A42",
-".=	c #FE7A38",
-"+=	c #6D442B",
-"@=	c #0F0B21",
-"#=	c #15031A",
-"$=	c #49001B",
-"%=	c #2F001C",
-"&=	c #21021E",
-"*=	c #220620",
-"==	c #1B0D23",
-"-=	c #641625",
-";=	c #951823",
-">=	c #390F25",
-",=	c #AC3A2A",
-"'=	c #B6492E",
-")=	c #ED7531",
-"!=	c #F45A34",
-"~=	c #F54C36",
-"{=	c #C72D39",
-"]=	c #DE283C",
-"^=	c #F33B40",
-"/=	c #F34142",
-"(=	c #D0393F",
-"_=	c #E72E39",
-":=	c #DB3C2E",
-"<=	c #461724",
-"[=	c #0F0D1E",
-"}=	c #140B1E",
-"|=	c #341427",
-"1=	c #CB4834",
-"2=	c #F7743F",
-"3=	c #FB7145",
-"4=	c #FE7747",
-"5=	c #FE7A47",
-"6=	c #FF7B48",
-"7=	c #FF7C48",
-"8=	c #FE7F47",
-"9=	c #FE8247",
-"0=	c #FE8642",
-"a=	c #FE8439",
-"b=	c #6D442D",
-"c=	c #0F0A21",
-"d=	c #14031A",
-"e=	c #20031D",
-"f=	c #210821",
-"g=	c #191024",
-"h=	c #CC1C25",
-"i=	c #961423",
-"j=	c #2C162C",
-"k=	c #BD242E",
-"l=	c #EF2C31",
-"m=	c #F54C34",
-"n=	c #F34037",
-"o=	c #F5353A",
-"p=	c #F7413D",
-"q=	c #F8423D",
-"r=	c #F93A39",
-"s=	c #F95731",
-"t=	c #341425",
-"u=	c #110A1D",
-"v=	c #140619",
-"w=	c #18051B",
-"x=	c #200F26",
-"y=	c #864833",
-"z=	c #F8773F",
-"A=	c #FC7445",
-"B=	c #FF7E48",
-"C=	c #FF7E49",
-"D=	c #FF7D49",
-"E=	c #FF7D48",
-"F=	c #FE8347",
-"G=	c #FE8743",
-"H=	c #FE893B",
-"I=	c #6E452F",
-"J=	c #100E23",
-"K=	c #14041A",
-"L=	c #55041D",
-"M=	c #540921",
-"N=	c #161124",
-"O=	c #CE6A25",
-"P=	c #3F1129",
-"Q=	c #170A29",
-"R=	c #0F0F29",
-"S=	c #15132B",
-"T=	c #1E182D",
-"U=	c #A82B3D",
-"V=	c #CB6633",
-"W=	c #CC6932",
-"X=	c #CC3D2D",
-"Y=	c #331225",
-"Z=	c #0F091C",
-"`=	c #120417",
-" -	c #160216",
-".-	c #190419",
-"+-	c #210F26",
-"@-	c #8C4934",
-"#-	c #F97A40",
-"$-	c #FC7545",
-"%-	c #FF7B49",
-"&-	c #FE7D46",
-"*-	c #FE7E43",
-"=-	c #FD7B3E",
-"--	c #FA6934",
-";-	c #532328",
-">-	c #130B1D",
-",-	c #150519",
-"'-	c #14041C",
-")-	c #120920",
-"!-	c #C43624",
-"~-	c #A21E23",
-"{-	c #F87C30",
-"]-	c #C9302D",
-"^-	c #300F2A",
-"/-	c #591129",
-"(-	c #171328",
-"_-	c #171628",
-":-	c #141829",
-"<-	c #101A2B",
-"[-	c #0F172B",
-"}-	c #0F1226",
-"|-	c #0E0C20",
-"1-	c #100619",
-"2-	c #140316",
-"3-	c #19051B",
-"4-	c #3C1428",
-"5-	c #E04B36",
-"6-	c #FA7B41",
-"7-	c #FD7346",
-"8-	c #FE7548",
-"9-	c #FF7849",
-"0-	c #FF7749",
-"a-	c #FE7B47",
-"b-	c #FE7945",
-"c-	c #FC7740",
-"d-	c #FA7E39",
-"e-	c #C1432F",
-"f-	c #131523",
-"g-	c #130A1C",
-"h-	c #420621",
-"i-	c #D08423",
-"j-	c #F87739",
-"k-	c #C03D37",
-"l-	c #962B34",
-"m-	c #A14332",
-"n-	c #E54B30",
-"o-	c #9E3E2F",
-"p-	c #7F262E",
-"q-	c #922D2E",
-"r-	c #9C4B2E",
-"s-	c #65212C",
-"t-	c #101628",
-"u-	c #101022",
-"v-	c #11091C",
-"w-	c #130619",
-"x-	c #160A1E",
-"y-	c #43252C",
-"z-	c #F66439",
-"A-	c #FA6942",
-"B-	c #FD6C47",
-"C-	c #FE6E48",
-"D-	c #FE6F48",
-"E-	c #FE7049",
-"F-	c #FE714A",
-"G-	c #FE744A",
-"H-	c #FE7846",
-"I-	c #FD7243",
-"J-	c #FC703E",
-"K-	c #FA6C37",
-"L-	c #81312B",
-"M-	c #121123",
-"N-	c #15071D",
-"O-	c #16031A",
-"P-	c #17021B",
-"Q-	c #8F3D22",
-"R-	c #F8393E",
-"S-	c #E42A3D",
-"T-	c #E7473B",
-"U-	c #FB503B",
-"V-	c #FB4F3A",
-"W-	c #F95439",
-"X-	c #ED4C38",
-"Y-	c #F45938",
-"Z-	c #FB6537",
-"`-	c #EA5236",
-" ;	c #CE6232",
-".;	c #CD392C",
-"+;	c #181425",
-"@;	c #120F21",
-"#;	c #130D20",
-"$;	c #151225",
-"%;	c #903431",
-"&;	c #F8703D",
-"*;	c #FB6344",
-"=;	c #FD6748",
-"-;	c #FE6849",
-";;	c #FE6949",
-">;	c #FE6A49",
-",;	c #FE6C4A",
-"';	c #FE704A",
-");	c #FE734A",
-"!;	c #FE7449",
-"~;	c #FE7347",
-"{;	c #FE7145",
-"];	c #FD6C42",
-"^;	c #FD753D",
-"/;	c #F36E35",
-"(;	c #CB452C",
-"_;	c #600D24",
-":;	c #1C061F",
-"<;	c #1E031F",
-"[;	c #5B3821",
-"};	c #CE9822",
-"|;	c #FA4341",
-"1;	c #FB4341",
-"2;	c #FC4541",
-"3;	c #FC4542",
-"4;	c #FC4143",
-"5;	c #FC4D42",
-"6;	c #FB5042",
-"7;	c #FB5342",
-"8;	c #FC5242",
-"9;	c #FD4F40",
-"0;	c #FD503E",
-"a;	c #FB6339",
-"b;	c #F45E33",
-"c;	c #A12A2E",
-"d;	c #401E2C",
-"e;	c #452D2F",
-"f;	c #F74F38",
-"g;	c #FA5940",
-"h;	c #FC6245",
-"i;	c #FE6447",
-"j;	c #FE6449",
-"k;	c #FE6549",
-"l;	c #FE6749",
-"m;	c #FE6B49",
-"n;	c #FE6D49",
-"o;	c #FE6D48",
-"p;	c #FE6D47",
-"q;	c #FE6D45",
-"r;	c #FE6C44",
-"s;	c #FE6A42",
-"t;	c #FE663C",
-"u;	c #FC6233",
-"v;	c #752129",
-"w;	c #1F0922",
-"x;	c #750520",
-"y;	c #81061F",
-"z;	c #FA3D42",
-"A;	c #FB4142",
-"B;	c #FD4543",
-"C;	c #FD4844",
-"D;	c #FD4A45",
-"E;	c #FD4D45",
-"F;	c #FD5045",
-"G;	c #FD5345",
-"H;	c #FE5346",
-"I;	c #FE5445",
-"J;	c #FD5444",
-"K;	c #FC4F41",
-"L;	c #FA513D",
-"M;	c #F95339",
-"N;	c #F63736",
-"O;	c #F75737",
-"P;	c #F95F3B",
-"Q;	c #FB5840",
-"R;	c #FD5F43",
-"S;	c #FE6345",
-"T;	c #FE6547",
-"U;	c #FE6548",
-"V;	c #FE6448",
-"W;	c #FE6248",
-"X;	c #FE6348",
-"Y;	c #FE6748",
-"Z;	c #FE6848",
-"`;	c #FE6846",
-" >	c #FE6A45",
-".>	c #FE6D43",
-"+>	c #FE703F",
-"@>	c #FC6F36",
-"#>	c #6F302B",
-"$>	c #140A22",
-"%>	c #FA3B42",
-"&>	c #FC4243",
-"*>	c #FD4744",
-"=>	c #FE4A45",
-"->	c #FE4C47",
-";>	c #FE4D47",
-">>	c #FE5047",
-",>	c #FE5347",
-"'>	c #FE5447",
-")>	c #FD5246",
-"!>	c #FB503F",
-"~>	c #FA543D",
-"{>	c #9B3D3B",
-"]>	c #A3433B",
-"^>	c #F9683D",
-"/>	c #FC6940",
-"(>	c #FE6342",
-"_>	c #FE6645",
-":>	c #FE6646",
-"<>	c #FE6147",
-"[>	c #FE6048",
-"}>	c #FE6148",
-"|>	c #FE6746",
-"1>	c #FE6A46",
-"2>	c #FE6F45",
-"3>	c #FE7441",
-"4>	c #FC7D39",
-"5>	c #6C422E",
-"6>	c #0F0F23",
-"7>	c #FA4142",
-"8>	c #FC4643",
-"9>	c #FE4D46",
-"0>	c #FE4E47",
-"a>	c #FE4F48",
-"b>	c #FE5148",
-"c>	c #FE5348",
-"d>	c #FE5548",
-"e>	c #FE5247",
-"f>	c #FD5445",
-"g>	c #FC5544",
-"h>	c #F96041",
-"i>	c #D33F3D",
-"j>	c #392D39",
-"k>	c #973C38",
-"l>	c #F94E3A",
-"m>	c #FD693E",
-"n>	c #FE6C43",
-"o>	c #FE6047",
-"p>	c #FE5D47",
-"q>	c #FE5E48",
-"r>	c #FE6948",
-"s>	c #FE6947",
-"t>	c #FE6B47",
-"u>	c #FE6E46",
-"v>	c #FD6D43",
-"w>	c #FB723D",
-"x>	c #D54A33",
-"y>	c #301C29",
-"z>	c #FB4A42",
-"A>	c #FD4B44",
-"B>	c #FE4F47",
-"C>	c #FE5048",
-"D>	c #FE5648",
-"E>	c #FE5848",
-"F>	c #FE5747",
-"G>	c #FE5547",
-"H>	c #FC5945",
-"I>	c #F95742",
-"J>	c #F3543D",
-"K>	c #A33336",
-"L>	c #302032",
-"M>	c #152433",
-"N>	c #CD3E38",
-"O>	c #FD5A3F",
-"P>	c #FE6343",
-"Q>	c #FE6446",
-"R>	c #FE6247",
-"S>	c #FE6A47",
-"T>	c #FC6542",
-"U>	c #FB6A3B",
-"V>	c #FA6D34",
-"W>	c #D73C2D",
-"X>	c #442428",
-"Y>	c #281323",
-"Z>	c #FD4E42",
-"`>	c #FD4D43",
-" ,	c #FE4D45",
-".,	c #FE5248",
-"+,	c #FE5947",
-"@,	c #FE5C47",
-"#,	c #FE5B47",
-"$,	c #FE5A47",
-"%,	c #FE5847",
-"&,	c #FC5C45",
-"*,	c #F95B43",
-"=,	c #F3613F",
-"-,	c #E74F37",
-";,	c #8C2431",
-">,	c #161E2F",
-",,	c #CD4E33",
-"',	c #FD503A",
-"),	c #FE5D40",
-"!,	c #FE6445",
-"~,	c #FE6946",
-"{,	c #FE6847",
-"],	c #FE6747",
-"^,	c #FD6644",
-"/,	c #FD6241",
-"(,	c #FD5B3D",
-"_,	c #FE6739",
-":,	c #FE6135",
-"<,	c #AB4830",
-"[,	c #733E2A",
-"},	c #161224",
-"|,	c #FC4E42",
-"1,	c #FE4D44",
-"2,	c #FE4E46",
-"3,	c #FE5147",
-"4,	c #FE5E47",
-"5,	c #FD5C46",
-"6,	c #FA5B44",
-"7,	c #F45441",
-"8,	c #EB393A",
-"9,	c #CC3433",
-"0,	c #47212F",
-"a,	c #59242F",
-"b,	c #FC6734",
-"c,	c #FC6F3A",
-"d,	c #FC723E",
-"e,	c #FD6540",
-"f,	c #FE6442",
-"g,	c #FE6643",
-"h,	c #FE6944",
-"i,	c #FE6546",
-"j,	c #FE6444",
-"k,	c #FE6143",
-"l,	c #FE5E41",
-"m,	c #FE613F",
-"n,	c #FE683C",
-"o,	c #FE7937",
-"p,	c #A25030",
-"q,	c #692629",
-"r,	c #151122",
-"s,	c #FA573F",
-"t,	c #FB4D40",
-"u,	c #FC4F43",
-"v,	c #FE5246",
-"w,	c #FF6347",
-"x,	c #FE5F48",
-"y,	c #F65942",
-"z,	c #F0493D",
-"A,	c #ED3736",
-"B,	c #73262F",
-"C,	c #10152C",
-"D,	c #3B292F",
-"E,	c #363034",
-"F,	c #AC3938",
-"G,	c #FC6B3B",
-"H,	c #FD763C",
-"I,	c #FE6D3F",
-"J,	c #FE6341",
-"K,	c #FE6642",
-"L,	c #FE6745",
-"M,	c #FE6245",
-"N,	c #FE6244",
-"O,	c #FE6841",
-"P,	c #FF683B",
-"Q,	c #EC7035",
-"R,	c #D0412D",
-"S,	c #3A1627",
-"T,	c #CF3938",
-"U,	c #F6543C",
-"V,	c #FB5040",
-"W,	c #FD5544",
-"X,	c #FE5A48",
-"Y,	c #FE5D48",
-"Z,	c #FE5F47",
-"`,	c #FF6147",
-" '	c #FD5C45",
-".'	c #FB5B43",
-"+'	c #FA5A42",
-"@'	c #F76040",
-"#'	c #F4623D",
-"$'	c #F26D38",
-"%'	c #EC4130",
-"&'	c #380E2B",
-"*'	c #13122C",
-"='	c #362D31",
-"-'	c #353435",
-";'	c #352E37",
-">'	c #2D3337",
-",'	c #CC5838",
-"''	c #CD6F3A",
-")'	c #CE6E3D",
-"!'	c #FE793F",
-"~'	c #FD7541",
-"{'	c #FD6243",
-"]'	c #FE6545",
-"^'	c #FF6543",
-"/'	c #FF6240",
-"('	c #FE723B",
-"_'	c #FE8034",
-":'	c #442D2C",
-"<'	c #311725",
-"['	c #222830",
-"}'	c #B73B36",
-"|'	c #F94C3D",
-"1'	c #FD5543",
-"2'	c #FE5B48",
-"3'	c #FF5E47",
-"4'	c #FE5C48",
-"5'	c #FC5B44",
-"6'	c #F95640",
-"7'	c #C34E3D",
-"8'	c #A45A3A",
-"9'	c #F37438",
-"0'	c #F28935",
-"a'	c #AF422F",
-"b'	c #240D2B",
-"c'	c #88292F",
-"d'	c #FA8E34",
-"e'	c #FC7E38",
-"f'	c #FC5939",
-"g'	c #694A37",
-"h'	c #693437",
-"i'	c #382638",
-"j'	c #142439",
-"k'	c #9F483A",
-"l'	c #C45E3C",
-"m'	c #FD7240",
-"n'	c #FF6645",
-"o'	c #FF6245",
-"p'	c #FF6045",
-"q'	c #FF6146",
-"r'	c #FF6246",
-"s'	c #FF6446",
-"t'	c #FF6545",
-"u'	c #FE763F",
-"v'	c #FE7237",
-"w'	c #C65331",
-"x'	c #3D272A",
-"y'	c #0D1E2B",
-"z'	c #683032",
-"A'	c #F9453A",
-"B'	c #FD5341",
-"C'	c #FE5A46",
-"D'	c #FF5A48",
-"E'	c #FE5948",
-"F'	c #FD5A47",
-"G'	c #FC5D43",
-"H'	c #F95B3D",
-"I'	c #713F37",
-"J'	c #1E2D32",
-"K'	c #C44531",
-"L'	c #EF7A2F",
-"M'	c #6B2E2C",
-"N'	c #0F0E2C",
-"O'	c #F56633",
-"P'	c #FA803A",
-"Q'	c #FC673E",
-"R'	c #FD673E",
-"S'	c #FC6F3C",
-"T'	c #FA6E3B",
-"U'	c #C6633A",
-"V'	c #A06739",
-"W'	c #835638",
-"X'	c #381F38",
-"Y'	c #713B38",
-"Z'	c #7B503C",
-"`'	c #FE7741",
-" )	c #FE7344",
-".)	c #FE6D46",
-"+)	c #FF6946",
-"@)	c #FF5E46",
-"#)	c #FF5D46",
-"$)	c #FF5D47",
-"%)	c #FF5F48",
-"&)	c #FF6248",
-"*)	c #FE6941",
-"=)	c #FC783C",
-"-)	c #C46B35",
-";)	c #892730",
-">)	c #111629",
-",)	c #1F2630",
-"')	c #AD3939",
-"))	c #FC5D41",
-"!)	c #FE5946",
-"~)	c #FF5848",
-"{)	c #FE5549",
-"])	c #FC5E42",
-"^)	c #FA673B",
-"/)	c #DB7033",
-"()	c #392E2B",
-"_)	c #311A28",
-":)	c #3C2127",
-"<)	c #1D1027",
-"[)	c #92102C",
-"})	c #F58336",
-"|)	c #FA673E",
-"1)	c #FD6642",
-"2)	c #FD5A41",
-"3)	c #FC6D41",
-"4)	c #FC6D3F",
-"5)	c #FD683E",
-"6)	c #F38C39",
-"7)	c #CE6535",
-"8)	c #612E34",
-"9)	c #1D2637",
-"0)	c #71513E",
-"a)	c #FF6847",
-"b)	c #FF5F47",
-"c)	c #FF5A46",
-"d)	c #FF5847",
-"e)	c #FF5748",
-"f)	c #FF594A",
-"g)	c #FF5E4B",
-"h)	c #FE654C",
-"i)	c #FE694B",
-"j)	c #FE6B48",
-"k)	c #FC6A43",
-"l)	c #F7683E",
-"m)	c #EC6E39",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                              . + @ # $   %                                                     ",
-"                                                            & * = - ; > , ' ) ! ~                                               ",
-"                                                            { ] ^ / ( _ : < [ } | 1 2                                           ",
-"                                                        3 4 5 6 7 8 9 0 a b c d e f g h i j                                     ",
-"                                                      k l m n o p q r s t u v w x y z A B C D                                   ",
-"                                                    E F G H I J K L M N O P Q R S T U V W X Y Z `                               ",
-"                                                   ...+.@.#.$.%.&.*.=.-.;.>.,.S '.).!.~.{.].^./.(._.                            ",
-"                                              :.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.!.S f.g.h.i.j.k.                          ",
-"                                              l.m.n.o.p.q.r.s.t.u.J v.w.x.y.z.A.c.d.d.B.C.D.E.F.G.H.I.                          ",
-"                                            J.K.L.M.N.O.P.Q.R.t S.T.U.V.W.X.Y.Z.`. +d.d..+B.'.++@+#+$+%+                        ",
-"                                      &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+d.2+3+4+d.5+6+7+8+9+0+                      ",
-"                                    a+b+c+d+e+f+g+h+i+j+k+l+m+n+^+o+p+q+r+s+t+u+v+b.w+x+y+z+A+w+B+C+D+E+F+G+                    ",
-"                                H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+Q ,.X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@#@-@;@>@,@'@                    ",
-"                                )@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@R ,.4@5@6@7@8@9@0@a@#@b@c@=@d@e@f@g@>@h@i@j@                  ",
-"                                k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@^+R S z@A@z...+B@C@D@E@F@G@H@#@e@#@#@f@g@I@J@K@L@                  ",
-"                                M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#+#S A@@###$#%#&#*#=#-#f@B+B+B+f@;#>#,#'#)#                  ",
-"                                !#~#{#]#^#/#(#(#_#:#<#[#}#|#1#^+.#S +#+#z@2#3#4#5#6#7#8#9#0#A.B+B+a#A.@@b#c#d#                  ",
-"                              e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#.#w#S R ^+x#y#z#A#B#C#D#-#A.a#`.`.b.g@E#d#F#                  ",
-"                          G#0@H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#>.W#3@v#R R X+X#Y#s#Z#`# $.$+$@$g@f@5+5+#$6+$$%$&$                  ",
-"                          *$=$-$;$>$,$'$)$!$~${$]$^$/$($_$*$u#:$Q 3@,.X+z.<$[$}$|$1$2$3$4$5$6$7$e@8$#$G@9$0$a$                  ",
-"                        ,.4@E#b$c$d$e$f$g$h$i$j$k$l$m$n$`@>.:$o$3@,. #a.p$q$r$s$t$u$v$w$x$y$z$A$B$#@C$D$E$F$G$                  ",
-"                      R S H$v+I$J$K$n+L$:$o$o$M$N$L$O$P$Q$R$N$o$3@S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%                  ",
-"                      E.,%~.'%Z.4@v W#o$)%)%)%Q !%~%{%]%^%Q$u u#/%(%_%:%<%[%}%|%1%2%3%4%=%5%6%7%8%9%0%a%b%c%d%                  ",
-"                    e%f%g%a#,%,%z@R 3@3@3@)%Q h%i%j%k%l%m%{+n%o%p%q%r%s%t%u%v%w%x%y%z%A%*%B%C%D%E%F%G%H%I%                      ",
-"                    J%K%L%M%N%D.S v#)%)%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&f@a##@=&-&;&>&,&'&)&                        ",
-"                  !&~&{&]&^&.#w#^&/%/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&e@1+5+e@f&g&h&i&j&                            ",
-"                k&l&m&n&o&p&q&r&i%s&3.t&u&v&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&1+`.e@f&Q&R&S&T&                            ",
-"                0 U&V&W&X&<&Y&j%Z&`& *.*+*@*#*$*%*&***=*-*;*>*>*,*'*)*!*~*{*]*^*/*(*a#B+#@_*:*<*[*}*                            ",
-"                |*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*E.w*d.e@x*y*z*A*B*                            ",
-"                C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*l*X*o*o*Y*Z*`* =.=+=@=#='%$=%=e@&=*===-=;=                            ",
-"                >=,='=)=!=~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=p*6=6=7=8=9=0=a=b=c=d=A@~.b.B+e=f=g=h=i=                            ",
-"                    j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=5=Z*B=C=D=E=8=F=G=H=I=J=K=S$R z@'%L=M=N=O=                              ",
-"                    P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-5=p*E=D=%-%-q*&-*-=---;->-,-/%3@^+'-)-!-~-                              ",
-"                  {-]-^-/-(-_-:-<-[-}-|-1-2- -3-4-5-6-7-8-n*m*9-0-9-o*a-b-c-d-e-f-g-(&h%w c h-i-                                ",
-"                j-k-l-m-n-o-p-q-r-s-t-u-v-w-,-x-y-z-A-B-C-D-E-E-F-G-_@m*H-I-J-K-L-M-N-O-P-(+Q-                                  ",
-"                R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;-;;;>;,;';);!;~;{;];^;/;(;_;:;<;[;};                                  ",
-"                |;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;j;k;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;                                    ",
-"                z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;k;Y;Z;`; >r;.>+>@>#>$>                                        ",
-"                %>&>*>=>->;>>>,>'>,>)>F;8;!>~>{>]>^>/>(>_>:>i;<>[>X;}>i;|>1>q;2>3>4>5>6>                                        ",
-"                7>8>=>9>0>a>b>c>d>,>e>e>f>g>h>i>j>k>l>m>n>:>i;o>p>q>W;r>s>t>p;u>v>w>x>y>                                        ",
-"                z>A>9>0>B>C>c>D>E>F>G>G>F>H>I>J>K>L>M>N>O>P>Q>R>o>R>T;s>S>S>S>t>1>T>U>V>W>X>Y>                                  ",
-"                Z>`> ,9>B>.,D>+,@,#,$,%,$,&,*,=,-,;,>,,,',),P>!,!,_>~,t>s>{,],{,],^,/,(,_,:,<,[,},                              ",
-"                |,`>1,2,3,G>+,4,o>o>4,@,@,5,6,7,8,9,0,a,b,c,d,e,f,g,h, >~,|>T;T;T;i,j,k,l,m,n,o,p,q,r,                          ",
-"                s,t,u,v,G>%,@,o>w,R>x,p>@,5,6,y,z,A,B,C,D,E,F,G,H,I,J,K,L,L,i,i;i;i;Q>S;M,N,P>O,P,Q,R,S,                        ",
-"                T,U,V,W,%,X,Y,Z,`,[>q>@, '.'+'@'#'$'%'&'*'='-';'>',''')'!'~'{'N,i,:>_>]'M,M,Q>_>^'/'('_':'<'                    ",
-"                ['}'|'1'$,X,2'p>3'4'2'@,5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'k'l'd,m'g, > >n'o'p'q'r's't'.>u'v'w'x'                  ",
-"                y'z'A'B'C'X,X,2'D'E'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'`' ).)+)r'@)#)$)%)&)l;1>*)=)-);)                ",
-"                >),)')))!)X,E'X,~){)d>!)])^)/)()_):)<)[)})|)1)f,2)3)4)5)6)7)8)9)0)*--*a)b)c)d)e)f)g)h)i)j)k)l)m)                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                "};
Index: ext/json/lib/json/version.rb
===================================================================
--- ext/json/lib/json/version.rb	(revision 24726)
+++ ext/json/lib/json/version.rb	(revision 24727)
@@ -1,9 +1,8 @@
 module JSON
   # JSON version
-  VERSION         = '1.1.4'
+  VERSION         = '1.1.8'
   VERSION_ARRAY   = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
   VERSION_MAJOR   = VERSION_ARRAY[0] # :nodoc:
   VERSION_MINOR   = VERSION_ARRAY[1] # :nodoc:
   VERSION_BUILD   = VERSION_ARRAY[2] # :nodoc:
-  VARIANT_BINARY  = false
 end
Index: ext/json/lib/json/common.rb
===================================================================
--- ext/json/lib/json/common.rb	(revision 24726)
+++ ext/json/lib/json/common.rb	(revision 24727)
@@ -309,6 +309,8 @@
 end
 
 module ::Kernel
+  private
+
   # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
   # one line.
   def j(*objs)
Index: ext/json/lib/json.rb
===================================================================
--- ext/json/lib/json.rb	(revision 24726)
+++ ext/json/lib/json.rb	(revision 24727)
@@ -1,297 +1,10 @@
 require 'json/common'
-# = json - JSON for Ruby
-#
-# == Description
-#
-# This is a implementation of the JSON specification according to RFC 4627
-# (http://www.ietf.org/rfc/rfc4627.txt). Starting from version 1.0.0 on there
-# will be two variants available:
-#
-# * A pure ruby variant, that relies on the iconv and the stringscan
-#   extensions, which are both part of the ruby standard library.
-# * The quite a bit faster C extension variant, which is in parts implemented
-#   in C and comes with its own unicode conversion functions and a parser
-#   generated by the ragel state machine compiler
-#   (http://www.cs.queensu.ca/~thurston/ragel).
-#
-# Both variants of the JSON generator escape all non-ASCII an control
-# characters with \uXXXX escape sequences, and support UTF-16 surrogate pairs
-# in order to be able to generate the whole range of unicode code points. This
-# means that generated JSON text is encoded as UTF-8 (because ASCII is a subset
-# of UTF-8) and at the same time avoids decoding problems for receiving
-# endpoints, that don't expect UTF-8 encoded texts. On the negative side this
-# may lead to a bit longer strings than necessarry.
-#
-# All strings, that are to be encoded as JSON strings, should be UTF-8 byte
-# sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
-# encoded, please use the to_json_raw_object method of String (which produces
-# an object, that contains a byte array) and decode the result on the receiving
-# endpoint.
-#
-# == Author
-#
-# Florian Frank <mailto:flori@p...>
-#
-# == License
-#
-# This software is distributed under the same license as Ruby itself, see
-# http://www.ruby-lang.org/en/LICENSE.txt.
-#
-# == Download
-#
-# The latest version of this library can be downloaded at
-#
-# * http://rubyforge.org/frs?group_id=953
-#
-# Online Documentation should be located at
-#
-# * http://json.rubyforge.org
-#
-# == Usage
-#
-# To use JSON you can
-#   require 'json'
-# to load the installed variant (either the extension 'json' or the pure
-# variant 'json_pure'). If you have installed the extension variant, you can
-# pick either the extension variant or the pure variant by typing
-#   require 'json/ext'
-# or
-#   require 'json/pure'
-#
-# You can choose to load a set of common additions to ruby core's objects if
-# you
-#   require 'json/add/core'
-#
-# After requiring this you can, e. g., serialise/deserialise Ruby ranges:
-#
-#   JSON JSON(1..10) # => 1..10
-#
-# To find out how to add JSON support to other or your own classes, read the
-# Examples section below.
-#
-# To get the best compatibility to rails' JSON implementation, you can
-#   require 'json/add/rails'
-#
-# Both of the additions attempt to require 'json' (like above) first, if it has
-# not been required yet.
-#
-# == Speed Comparisons
-#
-# I have created some benchmark results (see the benchmarks/data-p4-3Ghz
-# subdir of the package) for the JSON-parser to estimate the speed up in the C
-# extension:
-#
-#  Comparing times (call_time_mean):
-#   1 ParserBenchmarkExt#parser   900 repeats:
-#         553.922304770 (  real) ->   21.500x
-#           0.001805307
-#   2 ParserBenchmarkYAML#parser  1000 repeats:
-#         224.513358139 (  real) ->    8.714x
-#           0.004454078
-#   3 ParserBenchmarkPure#parser  1000 repeats:
-#          26.755020642 (  real) ->    1.038x
-#           0.037376163
-#   4 ParserBenchmarkRails#parser 1000 repeats:
-#          25.763381731 (  real) ->    1.000x
-#           0.038814780
-#             calls/sec (  time) ->    speed  covers
-#             secs/call
-#
-# In the table above 1 is JSON::Ext::Parser, 2 is YAML.load with YAML
-# compatbile JSON document, 3 is is JSON::Pure::Parser, and 4 is
-# ActiveSupport::JSON.decode. The ActiveSupport JSON-decoder converts the
-# input first to YAML and then uses the YAML-parser, the conversion seems to
-# slow it down so much that it is only as fast as the JSON::Pure::Parser!
-#
-# If you look at the benchmark data you can see that this is mostly caused by
-# the frequent high outliers - the median of the Rails-parser runs is still
-# overall smaller than the median of the JSON::Pure::Parser runs:
-#
-#  Comparing times (call_time_median):
-#   1 ParserBenchmarkExt#parser   900 repeats:
-#         800.592479481 (  real) ->   26.936x
-#           0.001249075
-#   2 ParserBenchmarkYAML#parser  1000 repeats:
-#         271.002390644 (  real) ->    9.118x
-#           0.003690004
-#   3 ParserBenchmarkRails#parser 1000 repeats:
-#          30.227910865 (  real) ->    1.017x
-#           0.033082008
-#   4 ParserBenchmarkPure#parser  1000 repeats:
-#          29.722384421 (  real) ->    1.000x
-#           0.033644676
-#             calls/sec (  time) ->    speed  covers
-#             secs/call
-#
-# I have benchmarked the JSON-Generator as well. This generated a few more
-# values, because there are different modes that also influence the achieved
-# speed:
-#
-#  Comparing times (call_time_mean):
-#   1 GeneratorBenchmarkExt#generator_fast    1000 repeats:
-#         547.354332608 (  real) ->   15.090x
-#           0.001826970
-#   2 GeneratorBenchmarkExt#generator_safe    1000 repeats:
-#         443.968212317 (  real) ->   12.240x
-#           0.002252414
-#   3 GeneratorBenchmarkExt#generator_pretty  900 repeats:
-#         375.104545883 (  real) ->   10.341x
-#           0.002665923
-#   4 GeneratorBenchmarkPure#generator_fast   1000 repeats:
-#          49.978706968 (  real) ->    1.378x
-#           0.020008521
-#   5 GeneratorBenchmarkRails#generator       1000 repeats:
-#          38.531868759 (  real) ->    1.062x
-#           0.025952543
-#   6 GeneratorBenchmarkPure#generator_safe   1000 repeats:
-#          36.927649925 (  real) ->    1.018x 7 (>=3859)
-#           0.027079979
-#   7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
-#          36.272134441 (  real) ->    1.000x 6 (>=3859)
-#           0.027569373
-#             calls/sec (  time) ->    speed  covers
-#             secs/call
-#
-# In the table above 1-3 are JSON::Ext::Generator methods. 4, 6, and 7 are
-# JSON::Pure::Generator methods and 5 is the Rails JSON generator. It is now a
-# bit faster than the generator_safe and generator_pretty methods of the pure
-# variant but slower than the others.
-#
-# To achieve the fastest JSON text output, you can use the fast_generate
-# method. Beware, that this will disable the checking for circular Ruby data
-# structures, which may cause JSON to go into an infinite loop.
-#
-# Here are the median comparisons for completeness' sake:
-#
-#  Comparing times (call_time_median):
-#   1 GeneratorBenchmarkExt#generator_fast    1000 repeats:
-#         708.258020939 (  real) ->   16.547x
-#           0.001411915
-#   2 GeneratorBenchmarkExt#generator_safe    1000 repeats:
-#         569.105020353 (  real) ->   13.296x
-#           0.001757145
-#   3 GeneratorBenchmarkExt#generator_pretty  900 repeats:
-#         482.825371244 (  real) ->   11.280x
-#           0.002071142
-#   4 GeneratorBenchmarkPure#generator_fast   1000 repeats:
-#          62.717626652 (  real) ->    1.465x
-#           0.015944481
-#   5 GeneratorBenchmarkRails#generator       1000 repeats:
-#          43.965681162 (  real) ->    1.027x
-#           0.022745013
-#   6 GeneratorBenchmarkPure#generator_safe   1000 repeats:
-#          43.929073409 (  real) ->    1.026x 7 (>=3859)
-#           0.022763968
-#   7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
-#          42.802514491 (  real) ->    1.000x 6 (>=3859)
-#           0.023363113
-#             calls/sec (  time) ->    speed  covers
-#             secs/call
-#
-# == Examples
-#
-# To create a JSON text from a ruby data structure, you can call JSON.generate
-# like that:
-#
-#  json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#  # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
-#
-# To create a valid JSON text you have to make sure, that the output is
-# embedded in either a JSON array [] or a JSON object {}. The easiest way to do
-# this, is by putting your values in a Ruby Array or Hash instance.
-#
-# To get back a ruby data structure from a JSON text, you have to call
-# JSON.parse on it:
-#
-#  JSON.parse json
-#  # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
-#
-# Note, that the range from the original data structure is a simple
-# string now. The reason for this is, that JSON doesn't support ranges
-# or arbitrary classes. In this case the json library falls back to call
-# Object#to_json, which is the same as #to_s.to_json.
-#
-# It's possible to add JSON support serialization to arbitrary classes by
-# simply implementing a more specialized version of the #to_json method, that
-# should return a JSON object (a hash converted to JSON with #to_json) like
-# this (don't forget the *a for all the arguments):
-#
-#  class Range
-#    def to_json(*a)
-#      {
-#        'json_class'   => self.class.name, # = 'Range'
-#        'data'         => [ first, last, exclude_end? ]
-#      }.to_json(*a)
-#    end
-#  end
-#
-# The hash key 'json_class' is the class, that will be asked to deserialise the
-# JSON representation later. In this case it's 'Range', but any namespace of
-# the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
-# used to store the necessary data to configure the object to be deserialised.
-#
-# If a the key 'json_class' is found in a JSON object, the JSON parser checks
-# if the given class responds to the json_create class method. If so, it is
-# called with the JSON object converted to a Ruby hash. So a range can
-# be deserialised by implementing Range.json_create like this:
-#
-#  class Range
-#    def self.json_create(o)
-#      new(*o['data'])
-#    end
-#  end
-#
-# Now it possible to serialise/deserialise ranges as well:
-#
-#  json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#  # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
-#  JSON.parse json
-#  # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#
-# JSON.generate always creates the shortest possible string representation of a
-# ruby data structure in one line. This good for data storage or network
-# protocols, but not so good for humans to read. Fortunately there's also
-# JSON.pretty_generate (or JSON.pretty_generate) that creates a more
-# readable output:
-#
-#  puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
-#  [
-#    1,
-#    2,
-#    {
-#      "a": 3.141
-#    },
-#    false,
-#    true,
-#    null,
-#    {
-#      "json_class": "Range",
-#      "data": [
-#        4,
-#        10,
-#        false
-#      ]
-#    }
-#  ]
-#
-# There are also the methods Kernel#j for generate, and Kernel#jj for
-# pretty_generate output to the console, that work analogous to Core Ruby's p
-# and the pp library's pp methods.
-#
-# The script tools/server.rb contains a small example if you want to test, how
-# receiving a JSON object from a webrick server in your browser with the
-# javasript prototype library (http://www.prototypejs.org) works.
-#
 module JSON
   require 'json/version'
 
-  if VARIANT_BINARY
+  begin
     require 'json/ext'
-  else
-    begin
-      require 'json/ext'
-    rescue LoadError
-      require 'json/pure'
-    end
+  rescue LoadError
+    require 'json/pure'
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]