[#8166] jcode.rb for UTF-8 — WATANABE Hirofumi <Hirofumi.Watanabe@...>
わたなべです.
[#8168] {literal}#[]= — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
In message "[ruby-dev:8189] Re: {literal}#[]="
[#8175] yacc generated symbols — Masaki Fukushima <fukusima@...>
福嶋です。
[#8176] Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
まつもと ゆきひろです
もりきゅうです。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
もりきゅうです。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
In message "[ruby-dev:8266] Re: 例外を処理する 2 項演算子"
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#8204] Re: [ruby-list:18281] Re: アクセス制御について — Shugo Maeda <shugo@...>
前田です。
原です。
前田です。
けいじゅ@日本ラショナルソフトウェアです.
前田です。
[#8218] append_features — gotoken@... (GOTO Kentaro)
ごとけんです
[#8234] Syntax check in test.rb — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8259] Re: [ruby-list:18468] Re: Array doesn't include Comparable — ttate@...
立石です。
[#8290] [patch] autoupdate — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
まつもと ゆきひろです
[#8305] [patch] duplicated include in regex.c — Minero Aoki <aamine@...>
あおきです。
[#8315] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
新井です。
まつもと ゆきひろです
新井です。
新井です。
まつもと ゆきひろです
小松です。
まつもと ゆきひろです
ごとけんです
なかだです。
[#8319] Re: Exception handling — Jun Adachi <adachi@...>
安達@沖データと申します。
西@九大です。
けいじゅ@日本ラショナルソフトウェアです.
[#8320] constants definition in extarnal files — nagai@...
永井@知能.九工大です.
In message "[ruby-dev:8320] constants definition in extarnal files"
[#8325] rdtool-0.5.2 and racc-0.9.5/racc-0.10.0 — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8330] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8332] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8353] Regexp <=> — Kazuhiro Nishiyama <nishiyama@...1.tiki.ne.jp>
こんばんは、ZnZです。
まつもと ゆきひろです
こんばんは、ZnZです。
まつもと ゆきひろです
[#8366] Re: Exception handling — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#8375] File test methods for Stat — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#8445] [PATCH] Ruby/Tk and ... — Koji Arai <JCA02266@...>
新井です。
新井です。
永井@知能.九工大です.
[#8446] [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
これつぐです。
まつもと ゆきひろです
[#8451] new Hash (Re: [ruby-list:19043]) — Wakou Aoyama <wakou@...>
青山です。
原です。
松で
青山です。
[ruby-dev:8379] [PATCH] use kconv with stream
岩室@富士通です。
ruby/gtkとhtml-parserとhttp-accessでちょっと遊んでいるのですが、http
経由の入力はけっこうぶつ切れで来るので、文字コードの変換をしようとする
と単にkconvを使うだけではうまくいきません。
文字の区切りとかをちゃんと見てやればいいわけなのですが、せっかく
kconvがあるのに一所懸命自力でパターンマッチ等で調べるのもなんかまぬけ
なので添付のようなパッチを作成してみました。取り込んでいただけると幸い
です。
Kconv::kconvを以下のように変更しています。
Kconv::kconv(STRING, OUT_CODE [, IN_CODE [, INCOMP_FLAG]])
INCOMP_FLAGが真ならば要素が二つの配列(0番目が変換後の文字列、1番目が変
換できなかった文字列)を返します。偽もしくはnilならば従来と同じです。変
換できなかった文字列としては以下のものが返されます。
・完全に変換できた場合は空文字列
・マルチバイト文字の1バイト目のみ
・エスケープシーケンスでASCII以外にdesignateしたまま終わっている場合
はそのときの状態に対応したエスケープシーケンス
・SOの後SIしていない場合はSO
・不完全なエスケープシーケンス (ESCのみも含む)
例えばJISコードで「あいうえお」という文字列が「う」の真ん中で切れてい
る場合、以下のようになります。
test.rb:
------------------------------------------------------------------------------
#!/usr/local/bin/ruby
require "kconv"
jstr1 = "\e$B$\"$$$"
jstr2 = "&$($*\e(B"
estr1, incomp1 = Kconv::kconv(jstr1, Kconv::EUC, Kconv::AUTO, true)
print "estr1 = #{estr1}, incomp1 = #{incomp1.dump}\n"
estr2, incomp2 = Kconv::kconv(incomp1 + jstr2, Kconv::EUC, Kconv::AUTO, true)
print "estr2 = #{estr2}, incomp2 = #{incomp2.dump}\n"
------------------------------------------------------------------------------
実行結果
------------------------------------------------------------------------------
estr1 = あい, incomp1 = "\e$B$"
estr2 = うえお, incomp2 = ""
------------------------------------------------------------------------------
なお、このパッチには以下の問題点があります。
・nkf.cを見ると、nkf1.7/nkf.cには直接手を出さないようにしているよう
に思える。しかし、どうしてもnkf1.7/nkf.cの中でlostしてしまう情報が
必要なので、こちらにもパッチを当ててしまっているがそれでもかまわな
いか?
・手抜きでkconv.rbのKconv::toXXX系関数は修正していない。(取り込まれ
るなら修正します^^;)
・インターフェースは妥当か? (一応これでいいと思ってるんですけれども)
diff -ru1 nkf.ORIG/lib/kconv.rb nkf/lib/kconv.rb
--- nkf.ORIG/lib/kconv.rb Tue Nov 2 13:23:41 1999
+++ nkf/lib/kconv.rb Fri Nov 19 15:24:54 1999
@@ -10,3 +10,3 @@
UNKNOWN = NKF::UNKNOWN
- def kconv(str, out_code, in_code = AUTO)
+ def kconv(str, out_code, in_code = AUTO, incomp = nil)
opt = '-'
@@ -34,3 +34,3 @@
- NKF::nkf(opt, str)
+ NKF::nkf(opt, str, incomp)
end
diff -ru1 nkf.ORIG/nkf.c nkf/nkf.c
--- nkf.ORIG/nkf.c Wed Oct 20 16:10:23 1999
+++ nkf/nkf.c Fri Nov 19 17:21:30 1999
@@ -18,2 +18,7 @@
+#define RUBY_NKF_OCONV_BEGIN \
+ do {void (*oconv) _((int, int)) = rb_nkf_set_incomp
+#define RUBY_NKF_OCONV_END \
+ } while (0)
+
#define INCSIZE 32
@@ -42,2 +47,15 @@
+/* Incomplete multibyte character or escape sequence. */
+#define INCOMP_OFFSET 4 /* Sequence of max length: ESC `$' `B' SO */
+#define MAX_INCOMP_MBC_LEN 5 /* max byte count of UTF-8 char is 6. */
+static int incomp_buf_ctr;
+static unsigned char incomp_buf[INCOMP_OFFSET + MAX_INCOMP_MBC_LEN];
+
+static void
+rb_nkf_set_incomp(c2, c1)
+ int c2, c1;
+{
+ incomp_buf[INCOMP_OFFSET + incomp_buf_ctr++] = c1;
+}
+
#define PERL_XS 1
@@ -46,5 +64,8 @@
static VALUE
-rb_nkf_kconv(obj, opt, src)
- VALUE obj, opt, src;
+rb_nkf_kconv(argc, argv, obj)
+ int argc;
+ VALUE *argv;
+ VALUE obj;
{
+ VALUE opt, src, incomp;
int i;
@@ -53,2 +74,3 @@
+ rb_scan_args(argc, argv, "21", &opt, &src, &incomp);
reinit();
@@ -79,2 +101,4 @@
+ incomp_buf_ctr = 0;
+
kanji_convert(NULL);
@@ -83,2 +107,28 @@
+ if (incomp != Qnil && incomp != Qfalse) {
+ int offset = INCOMP_OFFSET;
+ if (input_mode == X0201) {
+ incomp_buf_ctr += 3;
+ offset -= 3;
+ incomp_buf[offset] = ESC;
+ incomp_buf[offset + 1] = '(';
+ incomp_buf[offset + 2] = 'I';
+ } else {
+ if (shift_mode) {
+ incomp_buf_ctr++;
+ offset--;
+ incomp_buf[offset] = SO;
+ }
+ if (input_mode == X0208) {
+ incomp_buf_ctr += 3;
+ offset -= 3;
+ incomp_buf[offset] = ESC;
+ incomp_buf[offset + 1] = '$';
+ incomp_buf[offset + 2] = 'B';
+ }
+ }
+ return rb_ary_new3(2, dst, rb_str_new(incomp_buf + offset,
+ incomp_buf_ctr));
+ }
+
return dst;
@@ -185,3 +235,3 @@
- rb_define_module_function(mKconv, "nkf", rb_nkf_kconv, 2);
+ rb_define_module_function(mKconv, "nkf", rb_nkf_kconv, -1);
rb_define_module_function(mKconv, "guess", rb_nkf_guess, 1);
diff -ru1 nkf.ORIG/nkf1.7/nkf.c nkf/nkf1.7/nkf.c
--- nkf.ORIG/nkf1.7/nkf.c Mon Oct 4 13:51:06 1999
+++ nkf/nkf1.7/nkf.c Fri Nov 19 16:45:36 1999
@@ -751,3 +751,9 @@
(*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);
+#ifdef RUBY
+ RUBY_NKF_OCONV_BEGIN;
+#endif
(*oconv)(0,SSO);
+#ifdef RUBY
+ RUBY_NKF_OCONV_END;
+#endif
LAST;
@@ -875,3 +881,9 @@
if((c1 = GETC(f)) == EOF) {
+#ifdef RUBY
+ RUBY_NKF_OCONV_BEGIN;
+#endif
(*oconv)(0, ESC);
+#ifdef RUBY
+ RUBY_NKF_OCONV_END;
+#endif
LAST;
@@ -879,4 +891,10 @@
if((c1 = GETC(f)) == EOF) {
+#ifdef RUBY
+ RUBY_NKF_OCONV_BEGIN;
+#endif
(*oconv)(0, ESC);
(*oconv)(0, '$');
+#ifdef RUBY
+ RUBY_NKF_OCONV_END;
+#endif
LAST;
@@ -889,2 +907,5 @@
if((c1 = GETC(f)) == EOF) {
+#ifdef RUBY
+ RUBY_NKF_OCONV_BEGIN;
+#endif
(*oconv)(0, ESC);
@@ -892,2 +913,5 @@
(*oconv)(0, '(');
+#ifdef RUBY
+ RUBY_NKF_OCONV_END;
+#endif
LAST;
@@ -917,4 +941,10 @@
if((c1 = GETC(f)) == EOF) {
+#ifdef RUBY
+ RUBY_NKF_OCONV_BEGIN;
+#endif
(*oconv)(0, ESC);
(*oconv)(0, '(');
+#ifdef RUBY
+ RUBY_NKF_OCONV_END;
+#endif
LAST;
@@ -960,2 +990,6 @@
+#ifdef RUBY
+ if (c2 && c2 != EOF)
+ rb_nkf_set_incomp(0, c2);
+#endif
/* epilogue */
--
岩室元典 [E-Mail: vmi@kw.netlaputa.ne.jp / iwa@mmp.fujitsu.co.jp]
「おばは〜〜〜ん♪」「おばは〜〜〜ん♪」「おばは〜〜〜ん♪」
「さあみなさんごいっしょに」「「「おばは〜〜〜ん♪」」」
(「マール王国の人形姫」日本一ソフトウェア/PlayStation)