diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-20 04:20:53 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-20 04:20:53 +0000 |
| commit | fcecf4a376d0ba798fc001f4aa626f6482cbd374 (patch) | |
| tree | fd906fc8dd233306c3b07515726ee374eb35881d | |
| parent | f8d3a9dd48d33bcd035e6d9ad7352c4eabf3f367 (diff) | |
| download | ruby-fcecf4a376d0ba798fc001f4aa626f6482cbd374.tar.gz ruby-fcecf4a376d0ba798fc001f4aa626f6482cbd374.tar.xz ruby-fcecf4a376d0ba798fc001f4aa626f6482cbd374.zip | |
* ext/nkf/nkf.c (rb_nkf_convert), ext/nkf/nkf-utf8/nkf.c
(nkf_enc_without_bom): BOM is not a part of encodings.
* ext/nkf/nkf.c (Init_nkf), ext/nkf/nkf-utf8/nkf.c (options):
UTF-{16,32} without endian have no sense.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@16491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 32 | ||||
| -rw-r--r-- | ext/nkf/nkf-utf8/nkf.c | 18 | ||||
| -rw-r--r-- | ext/nkf/nkf.c | 6 |
3 files changed, 24 insertions, 32 deletions
@@ -1,32 +1,10 @@ -Tue May 20 12:13:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> +Tue May 20 13:20:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> - * ruby.c (proc_options, process_options): --dump option. + * ext/nkf/nkf.c (rb_nkf_convert), ext/nkf/nkf-utf8/nkf.c + (nkf_enc_without_bom): BOM is not a part of encodings. -Tue May 20 11:36:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> - - * include/ruby/ruby.h (PRI[diouxX]VALUE): printf format for VALUE. - - * gc.c (assign_heap_slot): suppress a warning. - -Tue May 20 03:42:43 2008 Koichi Sasada <ko1@atdot.net> - - * eval.c, vm_insnhelper.c: fix cref in instance_eval - and cvar_base search protocol. - - * bootstraptest/test_knownbug.rb, test_eval.rb: move soleved test - and add new tests. - - * test/ruby/test_eval.rb: fix tests for spec. - -Tue May 20 01:43:44 2008 Koichi Sasada <ko1@atdot.net> - - * bootstraptest/test_knownbug.rb: fix a test. - "block_given?" returns true if "yield" can be used. - -Tue May 20 01:07:19 2008 Yusuke Endoh <mame@tsg.ne.jp> - - * parse.y (assignable_gen): when "self = 1" was evalueted, unnecessary - error message was output, which might cause null pointer access. + * ext/nkf/nkf.c (Init_nkf), ext/nkf/nkf-utf8/nkf.c (options): + UTF-{16,32} without endian have no sense. Mon May 19 23:32:12 2008 Koichi Sasada <ko1@atdot.net> diff --git a/ext/nkf/nkf-utf8/nkf.c b/ext/nkf/nkf-utf8/nkf.c index 523462362..df062e0a3 100644 --- a/ext/nkf/nkf-utf8/nkf.c +++ b/ext/nkf/nkf-utf8/nkf.c @@ -693,6 +693,20 @@ static int nkf_enc_find_index(const char *name) return index; } +static nkf_encoding *nkf_enc_without_bom(nkf_encoding *enc) +{ + int idx; + switch (enc->id) { + case UTF_8_BOM: idx = UTF_8; break; + case UTF_16BE_BOM: idx = UTF_16BE; break; + case UTF_16LE_BOM: idx = UTF_16LE; break; + case UTF_32BE_BOM: idx = UTF_32BE; break; + case UTF_32LE_BOM: idx = UTF_32LE; break; + default: return enc; + } + return &nkf_encoding_table[idx]; +} + static nkf_encoding *nkf_enc_find(const char *name) { int idx = -1; @@ -5897,8 +5911,7 @@ void options(unsigned char *cp) } else if (cp[0] == 'B') { cp++; } else { - output_encoding = nkf_enc_from_index(enc_idx); - continue; + goto utf_no_endian; } if (cp[0] == '0'){ cp++; @@ -5907,6 +5920,7 @@ void options(unsigned char *cp) : (output_endian == ENDIAN_LITTLE ? UTF_32LE : UTF_32BE); } else { output_bom_f = TRUE; + utf_no_endian: enc_idx = enc_idx == UTF_16 ? (output_endian == ENDIAN_LITTLE ? UTF_16LE_BOM : UTF_16BE_BOM) : (output_endian == ENDIAN_LITTLE ? UTF_32LE_BOM : UTF_32BE_BOM); diff --git a/ext/nkf/nkf.c b/ext/nkf/nkf.c index c11a042c5..eb7d76af1 100644 --- a/ext/nkf/nkf.c +++ b/ext/nkf/nkf.c @@ -160,7 +160,7 @@ rb_nkf_convert(VALUE obj, VALUE opt, VALUE src) rb_str_set_len(result, output_ctr); OBJ_INFECT(result, src); - rb_enc_associate(result, rb_nkf_enc_get(nkf_enc_name(output_encoding))); + rb_enc_associate(result, rb_nkf_enc_get(nkf_enc_name(nkf_enc_without_bom(output_encoding)))); return result; } @@ -480,8 +480,8 @@ Init_nkf() rb_define_const(mNKF, "EUC", rb_enc_from_encoding(rb_nkf_enc_get("EUC-JP"))); rb_define_const(mNKF, "SJIS", rb_enc_from_encoding(rb_nkf_enc_get("Shift_JIS"))); rb_define_const(mNKF, "UTF8", rb_enc_from_encoding(rb_utf8_encoding())); - rb_define_const(mNKF, "UTF16", rb_enc_from_encoding(rb_nkf_enc_get("UTF-16"))); - rb_define_const(mNKF, "UTF32", rb_enc_from_encoding(rb_nkf_enc_get("UTF-32"))); + rb_define_const(mNKF, "UTF16", rb_enc_from_encoding(rb_nkf_enc_get("UTF-16BE"))); + rb_define_const(mNKF, "UTF32", rb_enc_from_encoding(rb_nkf_enc_get("UTF-32BE"))); /* Full version string of nkf */ rb_define_const(mNKF, "VERSION", rb_str_new2(RUBY_NKF_VERSION)); |
