[#31692] cannot run test-all — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
9 messages
2007/09/01
[#31697] Re: [ruby-list:43970] 次の1.8.6 — Tadayoshi Funaba <tadf@...>
> * [ruby-dev:31379]がペンディング
10 messages
2007/09/01
[#31699] Re: [ruby-list:43970] 次の1.8.6
— Urabe Shyouhei <shyouhei@...>
2007/09/01
Tadayoshi Funaba wrote:
[#31700] Re: [ruby-list:43970] 次の1.8.6
— Tadayoshi Funaba <tadf@...>
2007/09/01
> > WIN32OLE も Time も担当でないし、この報告が何をいいたいのかもよくわか
[#31703] Re: [ruby-list:43970] 次の1.8.6
— Urabe Shyouhei <shyouhei@...>
2007/09/01
Tadayoshi Funaba wrote:
[#31706] Re: [ruby-list:43970] 次の1.8.6
— Tadayoshi Funaba <tadf@...>
2007/09/01
> 今後サポートを続けるべきかはご判断にお任せします。OLEで使われてるん
[#31709] [BUG] non-initialized struct — Tanaka Akira <akr@...>
以下のようにすると [BUG] が出ます。
6 messages
2007/09/02
[#31715] string literal encoding — Nobuyoshi Nakada <nobu@...>
なかだです。
12 messages
2007/09/02
[#31716] Re: string literal encoding
— Yukihiro Matsumoto <matz@...>
2007/09/02
まつもと ゆきひろです
[#31729] packed st_table — Nobuyoshi Nakada <nobu@...>
なかだです。
8 messages
2007/09/04
[#31734] [m17n] String#chop & String#succ — Nobuyoshi Nakada <nobu@...>
なかだです。
2 messages
2007/09/05
[#31744] [m17n] String#encode — Nobuyoshi Nakada <nobu@...>
なかだです。
7 messages
2007/09/06
[#31768] shellescape — "Akinori MUSHA" <knu@...>
shellwords.rb に shellescape() 等を追加しようと思います。
5 messages
2007/09/10
[#31774] RSTRING(value)->ptr == NULL ? — Tietew <tietew+ruby-dev@...>
Tietew です。
7 messages
2007/09/11
[#31778] Re: RSTRING(value)->ptr == NULL ?
— Yukihiro Matsumoto <matz@...>
2007/09/12
まつもと ゆきひろです
[#31781] `scan': character encodings differ (ArgumentError) — Kouhei Sutou <kou@...>
須藤です。
5 messages
2007/09/15
[#31787] 文字列のinspect — eklerni <eklerni@...>
eklerniといいます。
5 messages
2007/09/15
[#31798] generator from Enumerable#map — "Yusuke ENDOH" <mame@...>
遠藤と申します。
7 messages
2007/09/19
[#31810] rb_obj_is_kind_of — Tanaka Akira <akr@...>
rb_obj_is_kind_of の TYPE(cl) ですが、[ruby-dev:31805] の例
5 messages
2007/09/21
[#31815] 文字列の式展開 — eklerni <eklerni@...>
eklerniといいます。
6 messages
2007/09/22
[#31835] Kernel#` is blocked with Ruby/GLib2 on Intel Mac — Kouhei Sutou <kou@...>
須藤です。
5 messages
2007/09/24
[#31842] 拡張ライブラリ内での SIGVTALRM — とみたまさひろ <tommy@...>
とみたです。
10 messages
2007/09/24
[#31848] huge `if' dumps core — "Yusuke ENDOH" <mame@...>
遠藤と申します。
5 messages
2007/09/24
[#31850] meta programming might dump core — "Yusuke ENDOH" <mame@...>
遠藤と申します。
2 messages
2007/09/24
[#31853] optimize T_OBJECT space — Tanaka Akira <akr@...>
T_OBJECT なインスタンスで、インスタンス変数の名前をクラス側
7 messages
2007/09/25
[#31880] Re: optimize T_OBJECT space
— Tanaka Akira <akr@...>
2007/09/28
In article <87r6kne799.fsf@fsij.org>,
[ruby-dev:31744] [m17n] String#encode
From:
Nobuyoshi Nakada <nobu@...>
Date:
2007-09-06 05:08:26 UTC
List:
ruby-dev #31744
なかだです。
String#encodeをためしに実装してみました。
なぜか"sjis"で登録されているのに"Shift_JIS"と出てきたりするので、
別名を付けられるようにしてrb_enc_name()にあわせてみました。
Index: encoding.c
===================================================================
--- encoding.c (revision 13347)
+++ encoding.c (working copy)
@@ -24,4 +24,5 @@ struct rb_encoding_entry {
static struct rb_encoding_entry *enc_table;
static int enc_table_size;
+static st_table *enc_table_alias;
void
@@ -44,10 +45,21 @@ rb_enc_register(const char *name, rb_enc
void
+rb_enc_alias(const char *alias, const char *orig)
+{
+ if (!enc_table_alias) {
+ enc_table_alias = st_init_strtable();
+ }
+ st_insert(enc_table_alias, (st_data_t)alias, (st_data_t)orig);
+}
+
+void
rb_enc_init(void)
{
rb_enc_register("ascii", ONIG_ENCODING_ASCII);
- rb_enc_register("sjis", ONIG_ENCODING_SJIS);
+ rb_enc_register("shift_jis", ONIG_ENCODING_SJIS);
rb_enc_register("euc-jp", ONIG_ENCODING_EUC_JP);
rb_enc_register("utf-8", ONIG_ENCODING_UTF8);
+ rb_enc_alias("binary", "ascii");
+ rb_enc_alias("sjis", "shift_jis");
}
@@ -68,8 +80,10 @@ rb_enc_find(const char *name)
{
int i;
+ st_data_t alias = 0;
if (!enc_table) {
rb_enc_init();
}
+ find:
for (i=0; i<enc_table_size; i++) {
if (strcmp(name, enc_table[i].name) == 0) {
@@ -77,4 +91,10 @@ rb_enc_find(const char *name)
}
}
+ if (!alias && enc_table_alias) {
+ if (st_lookup(enc_table_alias, (st_data_t)name, &alias)) {
+ name = (const char *)alias;
+ goto find;
+ }
+ }
return ONIG_ENCODING_ASCII;
}
Index: string.c
===================================================================
--- string.c (revision 13347)
+++ string.c (working copy)
@@ -194,5 +194,5 @@ rb_tainted_str_new2(const char *ptr)
static VALUE
-str_new3(VALUE klass, VALUE str)
+str_new_shared(VALUE klass, VALUE str)
{
VALUE str2 = str_alloc(klass);
@@ -210,9 +210,17 @@ str_new3(VALUE klass, VALUE str)
FL_SET(str2, ELTS_SHARED);
}
- rb_enc_copy((VALUE)str2, str);
return str2;
}
+static VALUE
+str_new3(VALUE klass, VALUE str)
+{
+ VALUE str2 = str_new_shared(klass, str);
+
+ rb_enc_copy(str2, str);
+ return str2;
+}
+
VALUE
rb_str_new3(VALUE str)
@@ -401,4 +409,21 @@ rb_str_init(int argc, VALUE *argv, VALUE
}
+static VALUE
+rb_str_encode(VALUE str, VALUE encode)
+{
+ int idx = rb_enc_get_index(str);
+ rb_encoding *enc = rb_enc_find(StringValueCStr(encode));
+ VALUE str2;
+
+ if (idx && rb_enc_from_index(idx) != enc) {
+ rb_raise(rb_eArgError, "cannot convert encoding from %s to %s",
+ rb_enc_name(rb_enc_from_index(idx)), rb_enc_name(enc));
+ }
+ str2 = str_new_shared(rb_obj_class(str), str);
+ rb_enc_associate(str2, enc);
+ OBJ_INFECT(str2, str);
+ return str2;
+}
+
static long
str_strlen(VALUE str, rb_encoding *enc)
@@ -5429,4 +5454,5 @@ Init_String(void)
rb_define_method(rb_cString, "encoding", str_encoding, 0);
+ rb_define_method(rb_cString, "encode", rb_str_encode, 1);
id_to_s = rb_intern("to_s");
Index: include/ruby/encoding.h
===================================================================
--- include/ruby/encoding.h (revision 13347)
+++ include/ruby/encoding.h (working copy)
@@ -28,4 +28,5 @@ typedef OnigEncodingType rb_encoding;
int rb_enc_to_index(rb_encoding*);
+int rb_enc_get_index(VALUE obj);
rb_encoding* rb_enc_get(VALUE);
rb_encoding* rb_enc_check(VALUE,VALUE);
@@ -65,4 +66,5 @@ int rb_enc_codelen(int, rb_encoding*);
#define rb_enc_prev_char(s,p,enc) (char *)onigenc_get_prev_char_head(enc,(UChar*)s,(UChar*)p)
+#define rb_enc_isctype(c,t,enc) ONIGENC_IS_CODE_CTYPE(enc,c,t)
#define rb_enc_isascii(c,enc) ONIGENC_IS_CODE_ASCII(c)
#define rb_enc_isalpha(c,enc) ONIGENC_IS_CODE_ALPHA(enc,c)
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦