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

ruby-changes:38150

From: hsbt <ko1@a...>
Date: Sat, 11 Apr 2015 20:15:10 +0900 (JST)
Subject: [ruby-changes:38150] hsbt:r50231 (trunk): * ext/json/*, test/json/*, defs/default_gems: Gemify JSON library.

hsbt	2015-04-11 20:14:36 +0900 (Sat, 11 Apr 2015)

  New Revision: 50231

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

  Log:
    * ext/json/*, test/json/*, defs/default_gems: Gemify JSON library.
      [fix GH-867][Feature #11057]
    * test/ruby/test_extlibs.rb: removed json gem from existence extentions.
    * gems/bundled_gems: added json gem into bundled gem.
    * lib/rdoc/rubygems_hook.rb: ignored no json environment.
    * lib/rubygems/test_case.rb, test/rubygems/*: ditto.
    * lib/rdoc/test_case.rb, test/rdoc/*: ditto.

  Removed files:
    trunk/ext/json/extconf.rb
    trunk/ext/json/fbuffer/fbuffer.h
    trunk/ext/json/generator/depend
    trunk/ext/json/generator/extconf.rb
    trunk/ext/json/generator/generator.c
    trunk/ext/json/generator/generator.h
    trunk/ext/json/lib/json/add/bigdecimal.rb
    trunk/ext/json/lib/json/add/complex.rb
    trunk/ext/json/lib/json/add/core.rb
    trunk/ext/json/lib/json/add/date.rb
    trunk/ext/json/lib/json/add/date_time.rb
    trunk/ext/json/lib/json/add/exception.rb
    trunk/ext/json/lib/json/add/ostruct.rb
    trunk/ext/json/lib/json/add/range.rb
    trunk/ext/json/lib/json/add/rational.rb
    trunk/ext/json/lib/json/add/regexp.rb
    trunk/ext/json/lib/json/add/struct.rb
    trunk/ext/json/lib/json/add/symbol.rb
    trunk/ext/json/lib/json/add/time.rb
    trunk/ext/json/lib/json/common.rb
    trunk/ext/json/lib/json/ext.rb
    trunk/ext/json/lib/json/generic_object.rb
    trunk/ext/json/lib/json/version.rb
    trunk/ext/json/lib/json.rb
    trunk/ext/json/parser/depend
    trunk/ext/json/parser/extconf.rb
    trunk/ext/json/parser/parser.c
    trunk/ext/json/parser/parser.h
    trunk/ext/json/parser/parser.rl
    trunk/ext/json/parser/prereq.mk
    trunk/test/json/fixtures/fail1.json
    trunk/test/json/fixtures/fail10.json
    trunk/test/json/fixtures/fail11.json
    trunk/test/json/fixtures/fail12.json
    trunk/test/json/fixtures/fail13.json
    trunk/test/json/fixtures/fail14.json
    trunk/test/json/fixtures/fail18.json
    trunk/test/json/fixtures/fail19.json
    trunk/test/json/fixtures/fail2.json
    trunk/test/json/fixtures/fail20.json
    trunk/test/json/fixtures/fail21.json
    trunk/test/json/fixtures/fail22.json
    trunk/test/json/fixtures/fail23.json
    trunk/test/json/fixtures/fail24.json
    trunk/test/json/fixtures/fail25.json
    trunk/test/json/fixtures/fail27.json
    trunk/test/json/fixtures/fail28.json
    trunk/test/json/fixtures/fail3.json
    trunk/test/json/fixtures/fail4.json
    trunk/test/json/fixtures/fail5.json
    trunk/test/json/fixtures/fail6.json
    trunk/test/json/fixtures/fail7.json
    trunk/test/json/fixtures/fail8.json
    trunk/test/json/fixtures/fail9.json
    trunk/test/json/fixtures/pass1.json
    trunk/test/json/fixtures/pass15.json
    trunk/test/json/fixtures/pass16.json
    trunk/test/json/fixtures/pass17.json
    trunk/test/json/fixtures/pass2.json
    trunk/test/json/fixtures/pass26.json
    trunk/test/json/fixtures/pass3.json
    trunk/test/json/setup_variant.rb
    trunk/test/json/test_json.rb
    trunk/test/json/test_json_addition.rb
    trunk/test/json/test_json_encoding.rb
    trunk/test/json/test_json_fixtures.rb
    trunk/test/json/test_json_generate.rb
    trunk/test/json/test_json_generic_object.rb
    trunk/test/json/test_json_string_matching.rb
    trunk/test/json/test_json_unicode.rb
  Modified files:
    trunk/ChangeLog
    trunk/defs/default_gems
    trunk/gems/bundled_gems
    trunk/lib/rdoc/rubygems_hook.rb
    trunk/lib/rdoc/test_case.rb
    trunk/lib/rubygems/test_case.rb
    trunk/test/rdoc/test_rdoc_generator_darkfish.rb
    trunk/test/rdoc/test_rdoc_generator_json_index.rb
    trunk/test/rdoc/test_rdoc_rubygems_hook.rb
    trunk/test/rdoc/test_rdoc_servlet.rb
    trunk/test/ruby/test_extlibs.rb
    trunk/test/rubygems/test_gem_commands_install_command.rb
    trunk/test/rubygems/test_gem_commands_update_command.rb
Index: defs/default_gems
===================================================================
--- defs/default_gems	(revision 50230)
+++ defs/default_gems	(revision 50231)
@@ -1,3 +1,2 @@ https://github.com/ruby/ruby/blob/trunk/defs/default_gems#L1
 # gem		base directory		versioning file			[executable files under bin]
 rdoc		lib/rdoc		lib/rdoc.rb			[rdoc ri]
-json		ext/json		ext/json/lib/json/version.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 50230)
+++ ChangeLog	(revision 50231)
@@ -1,3 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sat Apr 11 20:14:21 2015  SHIBATA Hiroshi  <shibata.hiroshi@g...>
+
+	* ext/json/*, test/json/*, defs/default_gems: Gemify JSON library.
+	  [fix GH-867][Feature #11057]
+	* test/ruby/test_extlibs.rb: removed json gem from existence extentions.
+	* gems/bundled_gems: added json gem into bundled gem.
+	* lib/rdoc/rubygems_hook.rb: ignored no json environment.
+	* lib/rubygems/test_case.rb, test/rubygems/*: ditto.
+	* lib/rdoc/test_case.rb, test/rdoc/*: ditto.
+
 Sat Apr 11 15:56:58 2015  Tanaka Akira  <akr@f...>
 
 	* test/ruby/test_file_exhaustive.rb: Create sample files lazily.
Index: gems/bundled_gems
===================================================================
--- gems/bundled_gems	(revision 50230)
+++ gems/bundled_gems	(revision 50231)
@@ -2,3 +2,4 @@ power_assert 0.2.2 https://github.com/ruby/ruby/blob/trunk/gems/bundled_gems#L2
 test-unit 3.0.9
 minitest 5.4.3
 rake 10.4.2
+json 1.8.2
Index: lib/rubygems/test_case.rb
===================================================================
--- lib/rubygems/test_case.rb	(revision 50230)
+++ lib/rubygems/test_case.rb	(revision 50231)
@@ -24,6 +24,11 @@ unless Gem::Dependency.new('rdoc', '>= 3 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/test_case.rb#L24
   gem 'json'
 end
 
+begin
+  require 'json'
+rescue LoadError
+end
+
 require 'minitest/autorun'
 
 require 'rubygems/deprecate'
Index: lib/rdoc/rubygems_hook.rb
===================================================================
--- lib/rdoc/rubygems_hook.rb	(revision 50230)
+++ lib/rdoc/rubygems_hook.rb	(revision 50231)
@@ -3,6 +3,11 @@ require 'rubygems/user_interaction' https://github.com/ruby/ruby/blob/trunk/lib/rdoc/rubygems_hook.rb#L3
 require 'fileutils'
 require 'rdoc'
 
+begin
+  require 'json'
+rescue LoadError
+end
+
 ##
 # Gem::RDoc provides methods to generate RDoc and ri data for installed gems
 # upon gem installation.
@@ -200,7 +205,7 @@ class RDoc::RubygemsHook https://github.com/ruby/ruby/blob/trunk/lib/rdoc/rubygems_hook.rb#L205
       @generate_ri   and (@force or not File.exist? @ri_dir)
 
     document 'darkfish', options, @rdoc_dir if
-      @generate_rdoc and (@force or not File.exist? @rdoc_dir)
+      defined?(JSON) and @generate_rdoc and (@force or not File.exist? @rdoc_dir)
   end
 
   ##
@@ -250,4 +255,3 @@ class RDoc::RubygemsHook https://github.com/ruby/ruby/blob/trunk/lib/rdoc/rubygems_hook.rb#L255
   end
 
 end
-
Index: lib/rdoc/test_case.rb
===================================================================
--- lib/rdoc/test_case.rb	(revision 50230)
+++ lib/rdoc/test_case.rb	(revision 50231)
@@ -6,6 +6,11 @@ rescue NoMethodError, Gem::LoadError https://github.com/ruby/ruby/blob/trunk/lib/rdoc/test_case.rb#L6
   # for ruby tests
 end
 
+begin
+  require 'json'
+rescue LoadError
+end
+
 require 'minitest/autorun'
 require 'minitest/benchmark' if ENV['BENCHMARK']
 
@@ -214,4 +219,3 @@ $LOAD_PATH.each do |load_path| https://github.com/ruby/ruby/blob/trunk/lib/rdoc/test_case.rb#L219
   break if load_path[0] == ?/
   load_path.replace File.expand_path load_path
 end if RUBY_VERSION < '1.9'
-
Index: ext/json/extconf.rb
===================================================================
--- ext/json/extconf.rb	(revision 50230)
+++ ext/json/extconf.rb	(revision 50231)
@@ -1,3 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/ext/json/extconf.rb#L0
-require 'mkmf'
-create_makefile('json')
-
Index: ext/json/fbuffer/fbuffer.h
===================================================================
--- ext/json/fbuffer/fbuffer.h	(revision 50230)
+++ ext/json/fbuffer/fbuffer.h	(revision 50231)
@@ -1,190 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/ext/json/fbuffer/fbuffer.h#L0
-
-#ifndef _FBUFFER_H_
-#define _FBUFFER_H_
-
-#include "ruby.h"
-
-#ifndef RHASH_SIZE
-#define RHASH_SIZE(hsh) (RHASH(hsh)->tbl->num_entries)
-#endif
-
-#ifndef RFLOAT_VALUE
-#define RFLOAT_VALUE(val) (RFLOAT(val)->value)
-#endif
-
-#ifndef RARRAY_PTR
-#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
-#endif
-#ifndef RARRAY_LEN
-#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
-#endif
-#ifndef RSTRING_PTR
-#define RSTRING_PTR(string) RSTRING(string)->ptr
-#endif
-#ifndef RSTRING_LEN
-#define RSTRING_LEN(string) RSTRING(string)->len
-#endif
-
-#ifdef PRIsVALUE
-# define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj)
-# define RB_OBJ_STRING(obj) (obj)
-#else
-# define PRIsVALUE "s"
-# define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj)
-# define RB_OBJ_STRING(obj) StringValueCStr(obj)
-#endif
-
-#ifdef HAVE_RUBY_ENCODING_H
-#include "ruby/encoding.h"
-#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding())
-#else
-#define FORCE_UTF8(obj)
-#endif
-
-/* We don't need to guard objects for rbx, so let's do nothing at all. */
-#ifndef RB_GC_GUARD
-#define RB_GC_GUARD(object)
-#endif
-
-typedef struct FBufferStruct {
-    unsigned long initial_length;
-    char *ptr;
-    unsigned long len;
-    unsigned long capa;
-} FBuffer;
-
-#define FBUFFER_INITIAL_LENGTH_DEFAULT 1024
-
-#define FBUFFER_PTR(fb) (fb->ptr)
-#define FBUFFER_LEN(fb) (fb->len)
-#define FBUFFER_CAPA(fb) (fb->capa)
-#define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb)
-
-static FBuffer *fbuffer_alloc(unsigned long initial_length);
-static void fbuffer_free(FBuffer *fb);
-static void fbuffer_clear(FBuffer *fb);
-static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len);
-#ifdef JSON_GENERATOR
-static void fbuffer_append_long(FBuffer *fb, long number);
-#endif
-static void fbuffer_append_char(FBuffer *fb, char newchr);
-#ifdef JSON_GENERATOR
-static FBuffer *fbuffer_dup(FBuffer *fb);
-static VALUE fbuffer_to_s(FBuffer *fb);
-#endif
-
-static FBuffer *fbuffer_alloc(unsigned long initial_length)
-{
-    FBuffer *fb;
-    if (initial_length <= 0) initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT;
-    fb = ALLOC(FBuffer);
-    memset((void *) fb, 0, sizeof(FBuffer));
-    fb->initial_length = initial_length;
-    return fb;
-}
-
-static void fbuffer_free(FBuffer *fb)
-{
-    if (fb->ptr) ruby_xfree(fb->ptr);
-    ruby_xfree(fb);
-}
-
-static void fbuffer_clear(FBuffer *fb)
-{
-    fb->len = 0;
-}
-
-static void fbuffer_inc_capa(FBuffer *fb, unsigned long requested)
-{
-    unsigned long required;
-
-    if (!fb->ptr) {
-        fb->ptr = ALLOC_N(char, fb->initial_length);
-        fb->capa = fb->initial_length;
-    }
-
-    for (required = fb->capa; requested > required - fb->len; required <<= 1);
-
-    if (required > fb->capa) {
-        REALLOC_N(fb->ptr, char, required);
-        fb->capa = required;
-    }
-}
-
-static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len)
-{
-    if (len > 0) {
-        fbuffer_inc_capa(fb, len);
-        MEMCPY(fb->ptr + fb->len, newstr, char, len);
-        fb->len += len;
-    }
-}
-
-#ifdef JSON_GENERATOR
-static void fbuffer_append_str(FBuffer *fb, VALUE str)
-{
-    const char *newstr = StringValuePtr(str);
-    unsigned long len = RSTRING_LEN(str);
-
-    RB_GC_GUARD(str);
-
-    fbuffer_append(fb, newstr, len);
-}
-#endif
-
-static void fbuffer_append_char(FBuffer *fb, char newchr)
-{
-    fbuffer_inc_capa(fb, 1);
-    *(fb->ptr + fb->len) = newchr;
-    fb->len++;
-}
-
-#ifdef JSON_GENERATOR
-static void freverse(char *start, char *end)
-{
-    char c;
-
-    while (end > start) {
-        c = *end, *end-- = *start, *start++ = c;
-    }
-}
-
-static long fltoa(long number, char *buf)
-{
-    static char digits[] = "0123456789";
-    long sign = number;
-    char* tmp = buf;
-
-    if (sign < 0) number = -number;
-    do *tmp++ = digits[number % 10]; while (number /= 10);
-    if (sign < 0) *tmp++ = '-';
-    freverse(buf, tmp - 1);
-    return tmp - buf;
-}
-
-static void fbuffer_append_long(FBuffer *fb, long number)
-{
-    char buf[20];
-    unsigned long len = fltoa(number, buf);
-    fbuffer_append(fb, buf, len);
-}
-
-static FBuffer *fbuffer_dup(FBuffer *fb)
-{
-    unsigned long len = fb->len;
-    FBuffer *result;
-
-    result = fbuffer_alloc(len);
-    fbuffer_append(result, FBUFFER_PAIR(fb));
-    return result;
-}
-
-static VALUE fbuffer_to_s(FBuffer *fb)
-{
-    VALUE result = rb_str_new(FBUFFER_PTR(fb), FBUFFER_LEN(fb));
-    fbuffer_free(fb);
-    FORCE_UTF8(result);
-    return result;
-}
-#endif
-#endif
Index: ext/json/generator/depend
===================================================================
--- ext/json/generator/depend	(revision 50230)
+++ ext/json/generator/depend	(revision 50231)
@@ -1,21 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/ext/json/generator/depend#L0
-$(OBJS): $(ruby_headers)
-generator.o: generator.c generator.h $(srcdir)/../fbuffer/fbuffer.h
-
-# AUTOGENERATED DEPENDENCIES START
-generator.o: $(RUBY_EXTCONF_H)
-generator.o: $(arch_hdrdir)/ruby/config.h
-generator.o: $(hdrdir)/ruby/defines.h
-generator.o: $(hdrdir)/ruby/encoding.h
-generator.o: $(hdrdir)/ruby/intern.h
-generator.o: $(hdrdir)/ruby/missing.h
-generator.o: $(hdrdir)/ruby/oniguruma.h
-generator.o: $(hdrdir)/ruby/re.h
-generator.o: $(hdrdir)/ruby/regex.h
-generator.o: $(hdrdir)/ruby/ruby.h
-generator.o: $(hdrdir)/ruby/st.h
-generator.o: $(hdrdir)/ruby/subst.h
-generator.o: $(top_srcdir)/ext/json/fbuffer/fbuffer.h
-generator.o: $(top_srcdir)/include/ruby.h
-generator.o: generator.c
-generator.o: generator.h
-# AUTOGENERATED DEPENDENCIES END
Index: ext/json/generator/generator.c
===================================================================
--- ext/json/generator/generator.c	(revision 50230)
+++ ext/json/generator/generator.c	(revision 50231)
@@ -1,1463 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/ext/json/generator/generator.c#L0
-#include "../fbuffer/fbuffer.h"
-#include "generator.h"
-
-#ifdef HAVE_RUBY_ENCODING_H
-static VALUE CEncoding_UTF_8;
-static ID i_encoding, i_encode;
-#endif
-
-static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
-             mHash, mArray, mFixnum, mBignum, mFloat, mString, mString_Extend,
-             mTrueClass, mFalseClass, mNilClass, eGeneratorError,
-             eNestingError, CRegexp_MULTILINE, CJSON_SAFE_STATE_PROTOTYPE,
-             i_SAFE_STATE_PROTOTYPE;
-
-static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
-          i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only,
-          i_quirks_mode, i_pack, i_unpack, i_create_id, i_extend, i_key_p,
-          i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth,
-          i_buffer_initial_length, i_dup;
-
-/*
- * Copyright 2001-2004 Unicode, Inc.
- *
- * Disclaimer
- *
- * This source code is provided as is by Unicode, Inc. No claims are
- * made as to fitness for any particular purpose. No warranties of any
- * kind are expressed or implied. The recipient agrees to determine
- * applicability of information provided. If this file has been
- * purchased on magnetic or optical media from Unicode, Inc., the
- * sole remedy for any claim will be exchange of defective media
- * within 90 days of receipt.
- *
- * Limitations on Rights to Redistribute This Code
- *
- * Unicode, Inc. hereby grants the right to freely use the information
- * supplied in this file in the creation of products supporting the
- * Unicode Standard, and to make copies of this file in any form
- * for internal or external distribution as long as this notice
- * remains attached.
- */
-
-/*
- * Index into the table below with the first byte of a UTF-8 sequence to
- * get the number of trailing bytes that are supposed to follow it.
- * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
- * left as-is for anyone who may want to do such conversion, which was
- * allowed in earlier algorithms.
- */
-static const char trailingBytesForUTF8[256] = {
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
-};
-
-/*
- * Magic values subtracted from a buffer value during UTF8 conversion.
- * This table contains as many values as there might be trailing bytes
- * in a UTF-8 sequence.
- */
-static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
-    0x03C82080UL, 0xFA082080UL, 0x82082080UL };
-
-/*
- * Utility routine to tell whether a sequence of bytes is legal UTF-8.
- * This must be called with the length pre-determined by the first byte.
- * If not calling this from ConvertUTF8to*, then the length can be set by:
- *  length = trailingBytesForUTF8[*source]+1;
- * and the sequence is illegal right away if there aren't that many bytes
- * available.
- * If presented with a length > 4, this returns 0.  The Unicode
- * definition of UTF-8 goes up to 4-byte sequences.
- */
-static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length)
-{
-    UTF8 a;
-    const UTF8 *srcptr = source+length;
-    switch (length) {
-        default: return 0;
-                 /* Everything else falls through when "1"... */
-        case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
-        case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
-        case 2: if ((a = (*--srcptr)) > 0xBF) return 0;
-
-                    switch (*source) {
-                        /* no fall-through in this inner switch */
-                        case 0xE0: if (a < 0xA0) return 0; break;
-                        case 0xED: if (a > 0x9F) return 0; break;
-                        case 0xF0: if (a < 0x90) return 0; break;
-                        case 0xF4: if (a > 0x8F) return 0; break;
-                        default:   if (a < 0x80) return 0;
-                    }
-
-        case 1: if (*source >= 0x80 && *source < 0xC2) return 0;
-    }
-    if (*source > 0xF4) return 0;
-    return 1;
-}
-
-/* Escapes the UTF16 character and stores the result in the buffer buf. */
-static void unicode_escape(char *buf, UTF16 character)
-{
-    const char *digits = "0123456789abcdef";
-
-    buf[2] = digits[character >> 12];
-    buf[3] = digits[(character >> 8) & 0xf];
-    buf[4] = digits[(character >> 4) & 0xf];
-    buf[5] = digits[character & 0xf];
-}
-
-/* Escapes the UTF16 character and stores the result in the buffer buf, then
- * the buffer buf is appended to the FBuffer buffer. */
-static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16
-        character)
-{
-    unicode_escape(buf, character);
-    fbuffer_append(buffer, buf, 6);
-}
-
-/* Converts string to a JSON string in FBuffer buffer, where all but the ASCII
- * and control characters are JSON escaped. */
-static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string)
-{
-    const UTF8 *source = (UTF8 *) RSTRING_PTR(string);
-    const UTF8 *sourceEnd = source + RSTRING_LEN(string);
-    char buf[6] = { '\\', 'u' };
-
-    while (source < sourceEnd) {
-        UTF32 ch = 0;
-        unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
-        if (source + extraBytesToRead >= sourceEnd) {
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "partial character in source, but hit end");
-        }
-        if (!isLegalUTF8(source, extraBytesToRead+1)) {
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "source sequence is illegal/malformed utf-8");
-        }
-        /*
-         * The cases all fall through. See "Note A" below.
-         */
-        switch (extraBytesToRead) {
-            case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
-            case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
-            case 3: ch += *source++; ch <<= 6;
-            case 2: ch += *source++; ch <<= 6;
-            case 1: ch += *source++; ch <<= 6;
-            case 0: ch += *source++;
-        }
-        ch -= offsetsFromUTF8[extraBytesToRead];
-
-        if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */
-            /* UTF-16 surrogate values are illegal in UTF-32 */
-            if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
-#if UNI_STRICT_CONVERSION
-                source -= (extraBytesToRead+1); /* return to the illegal value itself */
-                rb_raise(rb_path2class("JSON::GeneratorError"),
-                        "source sequence is illegal/malformed utf-8");
-#else
-                unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR);
-#endif
-            } else {
-                /* normal case */
-                if (ch >= 0x20 && ch <= 0x7f) {
-                    switch (ch) {
-                        case '\\':
-                            fbuffer_append(buffer, "\\\\", 2);
-                            break;
-                        case '"':
-                            fbuffer_append(buffer, "\\\"", 2);
-                            break;
-                        default:
-                            fbuffer_append_char(buffer, (char)ch);
-                            break;
-                    }
-                } else {
-                    switch (ch) {
-                        case '\n':
-                            fbuffer_append(buffer, "\\n", 2);
-                            break;
-                        case '\r':
-                            fbuffer_append(buffer, "\\r", 2);
-                            break;
-                        case '\t':
-                            fbuffer_append(buffer, "\\t", 2);
-                            break;
-                        case '\f':
-                            fbuffer_append(buffer, "\\f", 2);
-                            break;
-                        case '\b':
-                            fbuffer_append(buffer, "\\b", 2);
-                            break;
-                        default:
-                            unicode_escape_to_buffer(buffer, buf, (UTF16) ch);
-                            break;
-                    }
-                }
-            }
-        } else if (ch > UNI_MAX_UTF16) {
-#if UNI_STRICT_CONVERSION
-            source -= (extraBytesToRead+1); /* return to the start */
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "source sequence is illegal/malformed utf8");
-#else
-            unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR);
-#endif
-        } else {
-            /* target is a character in range 0xFFFF - 0x10FFFF. */
-            ch -= halfBase;
-            unicode_escape_to_buffer(buffer, buf, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START));
-            unicode_escape_to_buffer(buffer, buf, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START));
-        }
-    }
-}
-
-/* Converts string to a JSON string in FBuffer buffer, where only the
- * characters required by the JSON standard are JSON escaped. The remaining
- * characters (should be UTF8) are just passed through and appended to the
- * result. */
-static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string)
-{
-    const char *ptr = RSTRING_PTR(string), *p;
-    unsigned long len = RSTRING_LEN(string), start = 0, end = 0;
-    const char *escape = NULL;
-    int escape_len (... truncated)

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

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