From c719ecb535a99defb45d6029d21d3134bec7c5ae Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 1 Sep 2009 16:17:56 +0000 Subject: * ext/json: Update to JSON 1.1.9. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 + ext/json/ext/generator/generator.c | 2 +- ext/json/ext/generator/unicode.c | 2 - ext/json/ext/parser/parser.c | 182 +++-- ext/json/ext/parser/parser.rl | 34 +- ext/json/ext/parser/unicode.c | 2 +- ext/json/lib/json.rb | 293 +------ ext/json/lib/json/Array.xpm | 21 - ext/json/lib/json/FalseClass.xpm | 21 - ext/json/lib/json/Hash.xpm | 21 - ext/json/lib/json/Key.xpm | 73 -- ext/json/lib/json/NilClass.xpm | 21 - ext/json/lib/json/Numeric.xpm | 28 - ext/json/lib/json/String.xpm | 96 --- ext/json/lib/json/TrueClass.xpm | 21 - ext/json/lib/json/common.rb | 2 + ext/json/lib/json/json.xpm | 1499 ------------------------------------ ext/json/lib/json/version.rb | 3 +- 18 files changed, 144 insertions(+), 2181 deletions(-) delete mode 100644 ext/json/lib/json/Array.xpm delete mode 100644 ext/json/lib/json/FalseClass.xpm delete mode 100644 ext/json/lib/json/Hash.xpm delete mode 100644 ext/json/lib/json/Key.xpm delete mode 100644 ext/json/lib/json/NilClass.xpm delete mode 100644 ext/json/lib/json/Numeric.xpm delete mode 100644 ext/json/lib/json/String.xpm delete mode 100644 ext/json/lib/json/TrueClass.xpm delete mode 100644 ext/json/lib/json/json.xpm diff --git a/ChangeLog b/ChangeLog index 70305a3820..91f78938da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Sep 2 01:16:32 2009 NARUSE, Yui + + * ext/json: Update to JSON 1.1.9. + Tue Sep 1 19:56:28 2009 Koichi Sasada * vm_eval.c (eval_string_with_cref): fix to check local_table_size. diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index 108e80fd65..94e59f77fc 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -496,7 +496,7 @@ static VALUE cState_s_allocate(VALUE klass) * 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); diff --git a/ext/json/ext/generator/unicode.c b/ext/json/ext/generator/unicode.c index 76834eadc5..93e8502b08 100644 --- a/ext/json/ext/generator/unicode.c +++ b/ext/json/ext/generator/unicode.c @@ -144,8 +144,6 @@ void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags 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') { diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c index 6928eda9e5..6851e06235 100644 --- a/ext/json/ext/parser/parser.c +++ b/ext/json/ext/parser/parser.c @@ -29,7 +29,7 @@ static VALUE mJSON, mExt, cParser, eParserError, eNestingError; 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 @@ typedef struct JSON_ParserStruct { 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 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul 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_error = 0; 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 @@ case 2: 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 @@ st3: 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 @@ case 8: 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 @@ st9: 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 @@ case 18: 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 @@ case 26: _out: {} } -#line 130 "parser.rl" +#line 133 "parser.rl" if (cs >= JSON_object_first_final) { if (RTEST(json->create_id)) { @@ -424,7 +427,7 @@ case 26: } -#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_error = 0; 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 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul 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 @@ st0: 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 @@ tr2: } goto st21; tr5: -#line 199 "parser.rl" +#line 202 "parser.rl" { char *np; json->current_nesting++; @@ -509,7 +512,7 @@ tr5: } goto st21; tr9: -#line 207 "parser.rl" +#line 210 "parser.rl" { char *np; json->current_nesting++; @@ -519,7 +522,7 @@ tr9: } goto st21; tr16: -#line 169 "parser.rl" +#line 172 "parser.rl" { if (json->allow_nan) { *result = CInfinity; @@ -529,7 +532,7 @@ tr16: } goto st21; tr18: -#line 162 "parser.rl" +#line 165 "parser.rl" { if (json->allow_nan) { *result = CNaN; @@ -539,19 +542,19 @@ tr18: } 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 @@ st21: 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 @@ case 20: _out: {} } -#line 236 "parser.rl" +#line 239 "parser.rl" if (cs >= JSON_value_first_final) { return p; @@ -733,7 +736,7 @@ case 20: } -#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_error = 0; 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 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res 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 @@ case 3: 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 @@ case 4: _out: {} } -#line 261 "parser.rl" +#line 264 "parser.rl" if (cs >= JSON_integer_first_final) { long len = p - json->memo; @@ -829,7 +832,7 @@ case 4: } -#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_error = 0; 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 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul 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 @@ case 5: 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 @@ case 9: _out: {} } -#line 292 "parser.rl" +#line 295 "parser.rl" if (cs >= JSON_float_first_final) { long len = p - json->memo; @@ -992,7 +995,7 @@ case 9: -#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_error = 0; 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 @@ case 2: 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 @@ st3: 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 @@ case 12: 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 @@ case 16: _out: {} } -#line 341 "parser.rl" +#line 345 "parser.rl" if(cs >= JSON_array_first_final) { return p + 1; @@ -1304,7 +1308,7 @@ static VALUE json_string_unescape(char *p, char *pe) } -#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_error = 0; 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 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu *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 @@ case 2: 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 @@ tr2: {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 @@ case 7: _out: {} } -#line 435 "parser.rl" +#line 439 "parser.rl" if (cs >= JSON_string_first_final) { return p + 1; @@ -1459,7 +1463,7 @@ case 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_error = 0; static const int JSON_en_main = 1; -#line 469 "parser.rl" +#line 473 "parser.rl" /* @@ -1502,6 +1506,8 @@ static const int JSON_en_main = 1; * * *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 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) } 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 @@ static VALUE cParser_parse(VALUE self) 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 @@ case 5: goto st1; goto st5; tr3: -#line 458 "parser.rl" +#line 462 "parser.rl" { char *np; json->current_nesting = 1; @@ -1664,7 +1684,7 @@ tr3: } goto st10; tr4: -#line 451 "parser.rl" +#line 455 "parser.rl" { char *np; json->current_nesting = 1; @@ -1676,7 +1696,7 @@ st10: 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 @@ case 9: _out: {} } -#line 594 "parser.rl" +#line 614 "parser.rl" if (cs >= JSON_first_final && p == pe) { return result; @@ -1753,6 +1773,8 @@ static void JSON_mark(JSON_Parser *json) { 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 @@ void Init_parser() 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"); } diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl index ca1876a7fc..384ab9f42f 100644 --- a/ext/json/ext/parser/parser.rl +++ b/ext/json/ext/parser/parser.rl @@ -27,7 +27,7 @@ static VALUE mJSON, mExt, cParser, eParserError, eNestingError; 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 @@ typedef struct JSON_ParserStruct { 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 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu { 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_float(JSON_Parser *json, char *p, char *pe, VALUE *resul 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 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu * * *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 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) } 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 @@ static void JSON_mark(JSON_Parser *json) { 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 @@ void Init_parser() 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"); } diff --git a/ext/json/ext/parser/unicode.c b/ext/json/ext/parser/unicode.c index b2f1e58676..80e5c6f036 100644 --- a/ext/json/ext/parser/unicode.c +++ b/ext/json/ext/parser/unicode.c @@ -81,7 +81,7 @@ char *JSON_convert_UTF16_to_UTF8 ( buf[1] = *p++; buf[2] = *p++; buf[3] = *p++; - tmpPtr[i] = strtol(buf, NULL, 16); + tmpPtr[i] = (UTF16)strtol(buf, NULL, 16); p += 2; } diff --git a/ext/json/lib/json.rb b/ext/json/lib/json.rb index 35fab1e11d..789b0de546 100755 --- a/ext/json/lib/json.rb +++ b/ext/json/lib/json.rb @@ -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 -# -# == 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 diff --git a/ext/json/lib/json/Array.xpm b/ext/json/lib/json/Array.xpm deleted file mode 100644 index 27c48011f9..0000000000 --- a/ext/json/lib/json/Array.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * Array_xpm[] = { -"16 16 2 1", -" c None", -". c #000000", -" ", -" ", -" ", -" .......... ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" .......... ", -" ", -" ", -" "}; diff --git a/ext/json/lib/json/FalseClass.xpm b/ext/json/lib/json/FalseClass.xpm deleted file mode 100644 index 25ce60832d..0000000000 --- a/ext/json/lib/json/FalseClass.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * False_xpm[] = { -"16 16 2 1", -" c None", -". c #FF0000", -" ", -" ", -" ", -" ...... ", -" . ", -" . ", -" . ", -" ...... ", -" . ", -" . ", -" . ", -" . ", -" . ", -" ", -" ", -" "}; diff --git a/ext/json/lib/json/Hash.xpm b/ext/json/lib/json/Hash.xpm deleted file mode 100644 index cd8f6f7b53..0000000000 --- a/ext/json/lib/json/Hash.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * Hash_xpm[] = { -"16 16 2 1", -" c None", -". c #000000", -" ", -" ", -" ", -" . . ", -" . . ", -" . . ", -" ......... ", -" . . ", -" . . ", -" ......... ", -" . . ", -" . . ", -" . . ", -" ", -" ", -" "}; diff --git a/ext/json/lib/json/Key.xpm b/ext/json/lib/json/Key.xpm deleted file mode 100644 index 9fd7281388..0000000000 --- a/ext/json/lib/json/Key.xpm +++ /dev/null @@ -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 ", -" ", -" "}; diff --git a/ext/json/lib/json/NilClass.xpm b/ext/json/lib/json/NilClass.xpm deleted file mode 100644 index 3509f06c99..0000000000 --- a/ext/json/lib/json/NilClass.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * False_xpm[] = { -"16 16 2 1", -" c None", -". c #000000", -" ", -" ", -" ", -" ... ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" ... ", -" ", -" ", -" "}; diff --git a/ext/json/lib/json/Numeric.xpm b/ext/json/lib/json/Numeric.xpm deleted file mode 100644 index e071e2ee9c..0000000000 --- a/ext/json/lib/json/Numeric.xpm +++ /dev/null @@ -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", -" ", -" ", -" ", -" ... +++@#$$$$ ", -" .+ %& $$ ", -" . + $ ", -" . + $$ ", -" . ++$$$$ ", -" . + $$ ", -" . + $ ", -" . + $ ", -" . + $ $$ ", -" .....++++*$$ ", -" ", -" ", -" "}; diff --git a/ext/json/lib/json/String.xpm b/ext/json/lib/json/String.xpm deleted file mode 100644 index f79a89cdc1..0000000000 --- a/ext/json/lib/json/String.xpm +++ /dev/null @@ -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 ", -" 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.q+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) ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/ext/json/lib/json/version.rb b/ext/json/lib/json/version.rb index e2764b0c6e..28bea76b19 100644 --- a/ext/json/lib/json/version.rb +++ b/ext/json/lib/json/version.rb @@ -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 -- cgit v1.2.3