[#8530] Enumerable and rand — Koretsugu Daigoro <tmmcross@...>

これつぐです。

21 messages 1999/12/05
[#8534] Re: Enumerable and rand — matz@... (Yukihiro Matsumoto) 1999/12/06

まつもと ゆきひろです

[#8581] Re: [ruby-list:19228] Ruby 1.4.3 — Katsuyuki Komatsu <komatsu@...>

小松です。

19 messages 1999/12/07
[#8592] Re: [ruby-list:19228] Ruby 1.4.3 — matz@... (Yukihiro Matsumoto) 1999/12/07

まつもと ゆきひろです

[#8645] urllib and httplib — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

47 messages 1999/12/14
[#8646] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/14

なひです.

[#8653] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/14

まつもと ゆきひろです

[#8656] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/15

なひです.

[#8659] Re: urllib and httplib — Wakou Aoyama <wakou@...> 1999/12/15

青山です。

[#8685] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/21

なひです.

[#8687] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/21

高橋征義です。

[#8690] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/21

まつもと ゆきひろです

[#8717] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/24

高橋征義です。

[#8963] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/01/19

なひです.

[#8650] [PATCH] Ruby/Tk — Koji Arai <JCA02266@...>

新井です。

20 messages 1999/12/14
[#8651] Re: [PATCH] Ruby/Tk — Koji Arai <JCA02266@...> 1999/12/14

新井です。

[#8692] [win] dir name — KANEKO Naoshi <wbs01621@...>

金子です。

22 messages 1999/12/21
[#8695] Re: [win] dir name — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/12/22

小田@QNES です。

[#8741] Re: [ruby-list:19945] Re: array + empty string — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/12/27
[#8743] Re: [ruby-list:19945] Re: array + empty string — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8742] [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...>

西@九大です。

64 messages 1999/12/27
[#8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8748] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/28

西@九大です。

[#8751] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8767] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/29

西@九大です。

[#8777] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/30

まつもと ゆきひろです

[#8791] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Minero Aoki <aamine@...> 1999/12/31

あおきです。

[#8792] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/31

まつもと ゆきひろです

[#8793] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — ARIMA Yasuhiro <fit0298@...> 1999/12/31

有馬です。

[#8795] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 1999/12/31

 knuです。

[#8798] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 2000/01/01

まつもと ゆきひろです

[#8811] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 2000/01/03

 knuです。

[ruby-dev:8536] Re: String#rindex for multi-byte chars

From: matz@... (Yukihiro Matsumoto)
Date: 1999-12-06 02:19:54 UTC
List: ruby-dev #8536
まつもと ゆきひろです

In message "[ruby-dev:8529] Re: String#rindex for multi-byte chars"
    on 99/12/05, YANAGAWA Kazuhisa <kjana@os.xaxon.ne.jp> writes:

|> 一応、仕様です。正しいマッチのためにはstartposが文字境界であ
|> ることを期待しているつもりです。マルチバイトならstartposをど
|> うこうってのは、やってないと思うんですが。
|
|まあ,これは regexp.c:re_search() をながめてたら ismbchar() でどうこ
|う,っていうのを見付けただけなので.でも現状でも一番最後の文字について
|はマルチバイト文字でもちゃんとマッチするように見えるので,ほかでもなん
|とかするつもりだったのではと邪推したのです :-)

あんまり考えてなかったです。

で、土曜の夜に風邪引いたあたまでつらつらと考えてみたのですが、
問題なのは、

|半端なマルチバイト文字の一部をどう扱う
|か,というのをちゃんとする必要はあるでしょうが.

という点です。/\244/みたいなパターンがマルチバイト文字の一部
にマッチできるっていう仕様がいかんのかもしれませんが。

つーわけで、パターンの先頭がマルチバイト文字の一部にマッチす
る可能性がある場合以外には、startposのオフセットを文字単位に
正規化するコードを書いてみました。

なんかうまく動いているようです。また様子を見てください。

diff -u -1 -r1.3 regex.h
--- regex.h	1999/08/24 08:21:54	1.3
+++ regex.h	1999/12/06 02:18:36
@@ -79,2 +79,3 @@
 #define RE_OPTIMIZE_NO_BM    (RE_OPTIMIZE_EXACTN<<1)
+#define RE_OPTIMIZE_BMATCH   (RE_OPTIMIZE_NO_BM<<1)
 
--- regex.c	1999/11/11 04:08:26	1.9
+++ regex.c	1999/12/06 02:18:45
@@ -2628,2 +2629,3 @@
 	    fastmap[p[2]] = 2;
+	  bufp->options |= RE_OPTIMIZE_BMATCH;
 	}
@@ -2830,4 +2832,6 @@
 		 single-byte chars.  We must reject them. */
-	      if (c < 0x100)
+	      if (c < 0x100) {
 		fastmap[beg] = 2;
+		bufp->options |= RE_OPTIMIZE_BMATCH;
+	      }
 	      else if (ismbchar(beg))
@@ -2950,2 +2954,29 @@
     re_compile_fastmap(bufp);
+  }
+
+  /* Adjust startpos for mbc string */
+  if (current_mbctype && startpos>0 && !(bufp->options&RE_OPTIMIZE_BMATCH)) {
+    int i = 0;
+
+    if (range > 0) {
+      while (i<size) {
+	i += mbclen(string[i]);
+	if (startpos <= i) {
+	  startpos = i;
+	  break;
+	}
+      }
+    }
+    else {
+      int w;
+
+      while (i<size) {
+	w = mbclen(string[i]);
+	if (startpos < i + w) {
+	  startpos = i;
+	  break;
+	}
+	i += w;
+      }
+    }
   }

In This Thread

Prev Next