[#16732] sharing sub-regexp — Tanaka Akira <akr@...17n.org>

Oniguruma についてひとつ要望があります。

51 messages 2002/04/03
[#16744] Re: sharing sub-regexp — "K.Kosako" <kosako@...> 2002/04/04

Tanaka Akiraさんの<hvopu1hxfyd.fsf@coulee.a02.aist.go.jp>から

[#16746] Re: sharing sub-regexp — matz@... (Yukihiro Matsumoto) 2002/04/04

まつもと ゆきひろです

[#16753] Re: sharing sub-regexp — Tanaka Akira <akr@...17n.org> 2002/04/04

In article <1017890618.302241.17865.nullmailer@ev.netlab.jp>,

[#16755] Re: sharing sub-regexp — "K.Kosako" <kosako@...> 2002/04/05

Tanaka Akiraさんの<hvo7knn93ug.fsf@coulee.a02.aist.go.jp>から

[#16756] Re: sharing sub-regexp — Tanaka Akira <akr@...17n.org> 2002/04/05

In article <20020405044506.D4784349@helium.ruby-lang.org>,

[#16822] Re: sharing sub-regexp — "K.Kosako" <kosako@...> 2002/04/10

Tanaka Akiraさんの<hvopu1e4omy.fsf@coulee.a02.aist.go.jp>から

[#16831] Re: sharing sub-regexp — Tanaka Akira <akr@...17n.org> 2002/04/10

In article <20020410025054.C8DF0915@helium.ruby-lang.org>,

[#16863] Re: sharing sub-regexp — Tanaka Akira <akr@...17n.org> 2002/04/11

In article <hvor8lnchak.fsf@coulee.a02.aist.go.jp>,

[#16877] Re: sharing sub-regexp — Shugo Maeda <shugo@...> 2002/04/12

前田です。

[#16887] Re: sharing sub-regexp — Tanaka Akira <akr@...17n.org> 2002/04/12

In article <87pu15z80q.wl@studly.priv.netlab.jp>,

[#16909] Regexp#to_s — Shugo Maeda <shugo@...> 2002/04/15

前田です。

[#16912] Re: Regexp#to_s — Tanaka Akira <akr@...17n.org> 2002/04/15

In article <87g01x1e6m.wl@studly.priv.netlab.jp>,

[#16931] Re: Regexp#to_s — Kazuhiro NISHIYAMA <zn@...> 2002/04/16

西山和広です。

[#16934] Re: Regexp#to_s — Tanaka Akira <akr@...17n.org> 2002/04/16

In article <20020416180631.988E.ZN@mbf.nifty.com>,

[#16938] Re: Regexp#to_s — Shugo Maeda <shugo@...> 2002/04/17

前田です。

[#16939] Re: Regexp#to_s — Tanaka Akira <akr@...17n.org> 2002/04/17

In article <87u1qaj0xe.wl@studly.priv.netlab.jp>,

[#16947] Re: Regexp#to_s — Shugo Maeda <shugo@...> 2002/04/18

前田です。

[#16950] Re: Regexp#to_s — matz@... (Yukihiro Matsumoto) 2002/04/18

まつもと ゆきひろです

[#16951] Re: Regexp#to_s — Tanaka Akira <akr@...17n.org> 2002/04/18

In article <1019116103.420173.12691.nullmailer@picachu.netlab.jp>,

[#16960] Re: Regexp#to_s — nobu.nakada@... 2002/04/18

なかだです。

[#16761] StringIO — tadf@...

ふなばです。

43 messages 2002/04/05
[#16786] Re: StringIO — nobu.nakada@... 2002/04/08

なかだです。

[#16802] Re: StringIO — tadf@... 2002/04/09

ふなばです。

[#16803] Re: StringIO — nobu.nakada@... 2002/04/09

なかだです。

[#16804] Re: StringIO — tadf@... 2002/04/09

ふなばです。

[#17221] Re: StringIO — Wakou Aoyama <wakou@...> 2002/05/30

青山です。

[#17230] Re: StringIO — matz@... (Yukihiro Matsumoto) 2002/05/30

まつもと ゆきひろです

[#17231] Re: StringIO — Tanaka Akira <akr@...17n.org> 2002/05/30

In article <1022740594.117106.6073.nullmailer@picachu.netlab.jp>,

[#17233] IO#size — Shugo Maeda <shugo@...> 2002/05/30

前田です。

[#17239] Re: IO#size — Tanaka Akira <akr@...17n.org> 2002/05/31

In article <874rgqdt3x.wl@studly.priv.netlab.jp>,

[#17253] Re: IO#size — Wakou Aoyama <wakou@...> 2002/05/31

青山です。

[#16790] Ruby Shim — "Akinori MUSHA" <knu@...>

 1.7 early access kit という仮称で提案した構想ですが、先ほど

27 messages 2002/04/08
[#16796] Re: Ruby Shim — Koji Arai <JCA02266@...> 2002/04/08

新井です。

[#16833] math.c 1.10 — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

23 messages 2002/04/11
[#16834] Re: math.c 1.10 — matz@... (Yukihiro Matsumoto) 2002/04/11

まつもと ゆきひろです

[#16869] Makefiles dependency — nobu.nakada@...

なかだです。

17 messages 2002/04/12

[ruby-dev:16960] Re: Regexp#to_s

From: nobu.nakada@...
Date: 2002-04-18 10:23:43 UTC
List: ruby-dev #16960
なかだです。

At Thu, 18 Apr 2002 17:05:28 +0900,
Tanaka Akira wrote:
> 実装しました。

余分な(?:)を付けないようにしてみましたが、ここまですることもな
い?


Index: re.c
===================================================================
RCS file: /cvs/ruby/src/ruby/re.c,v
retrieving revision 1.63
diff -u -2 -p -r1.63 re.c
--- re.c	2002/04/18 08:46:18	1.63
+++ re.c	2002/04/18 10:18:27
@@ -360,35 +360,92 @@ rb_reg_to_s(re)
     VALUE re;
 {
-    int all;
+    int options;
+    const int embeddable = RE_OPTION_MULTILINE|RE_OPTION_IGNORECASE|RE_OPTION_EXTENDED;
+    long len;
+    const char* ptr;
     VALUE str = rb_str_buf_new2("(?");
 
     rb_reg_check(re);
+
+    options = RREGEXP(re)->ptr->options;
+    ptr = RREGEXP(re)->str;
+    len = RREGEXP(re)->len;
+    if (len >= 4 && ptr[0] == '(' && ptr[1] == '?' && ptr[len-1] == ')') {
+	int nest = 0;
+	ptr += 2;
+	if ((len -= 3) > 0) {
+	    do {
+		if (*ptr == 'm') {
+		    options |= RE_OPTION_MULTILINE;
+		}
+		else if (*ptr == 'i') {
+		    options |= RE_OPTION_IGNORECASE;
+		}
+		else if (*ptr == 'x') {
+		    options |= RE_OPTION_EXTENDED;
+		}
+		else break;
+		++ptr;
+	    } while (--len > 0);
+	}
+	if (len > 1 && *ptr == '-') {
+	    ++ptr;
+	    --len;
+	    do {
+		if (*ptr == 'm') {
+		    options &= ~RE_OPTION_MULTILINE;
+		}
+		else if (*ptr == 'i') {
+		    options &= ~RE_OPTION_IGNORECASE;
+		}
+		else if (*ptr == 'x') {
+		    options &= ~RE_OPTION_EXTENDED;
+		}
+		else break;
+		++ptr;
+	    } while (--len > 0);
+	}
+	if (*ptr == ':') {
+	    const char* p = ++ptr;
+	    long l = --len;
+	    kcode_set_option(re);
+	    while (len > 0) {
+		int n;
+		if (*p == '(') {
+		    ++nest;
+		}
+		else if (*p == ')') {
+		    if (--nest < 0) break;
+		}
+		else if (*p == '\\') {
+		    --l;
+		    ++p;
+		}
+		n = mbclen(*p);
+		l -= n;
+		p += n;
+	    }
+	    kcode_reset_option();
+	}
+	if (nest) {
+	    options = RREGEXP(re)->ptr->options;
+	    ptr = RREGEXP(re)->str;
+	    len = RREGEXP(re)->len;
+	}
+    }
 
-    all = 1;
-    if (RREGEXP(re)->ptr->options & RE_OPTION_MULTILINE)
-	rb_str_buf_cat2(str, "m");
-    else
-	all = 0;
-    if (RREGEXP(re)->ptr->options & RE_OPTION_IGNORECASE)
-	rb_str_buf_cat2(str, "i");
-    else
-	all = 0;
-    if (RREGEXP(re)->ptr->options & RE_OPTION_EXTENDED)
-	rb_str_buf_cat2(str, "x");
-    else
-	all = 0;
+    if (options & RE_OPTION_MULTILINE) rb_str_buf_cat2(str, "m");
+    if (options & RE_OPTION_IGNORECASE) rb_str_buf_cat2(str, "i");
+    if (options & RE_OPTION_EXTENDED) rb_str_buf_cat2(str, "x");
 
-    if (!all) {
+    if ((options & embeddable) != embeddable) {
 	rb_str_buf_cat2(str, "-");
-	if (!(RREGEXP(re)->ptr->options & RE_OPTION_MULTILINE))
-	    rb_str_buf_cat2(str, "m");
-	if (!(RREGEXP(re)->ptr->options & RE_OPTION_IGNORECASE))
-	    rb_str_buf_cat2(str, "i");
-	if (!(RREGEXP(re)->ptr->options & RE_OPTION_EXTENDED))
-	    rb_str_buf_cat2(str, "x");
+	if (!(options & RE_OPTION_MULTILINE)) rb_str_buf_cat2(str, "m");
+	if (!(options & RE_OPTION_IGNORECASE)) rb_str_buf_cat2(str, "i");
+	if (!(options & RE_OPTION_EXTENDED)) rb_str_buf_cat2(str, "x");
     }
 
     rb_str_buf_cat2(str, ":");
-    rb_reg_expr_str(str, RREGEXP(re)->str, RREGEXP(re)->len);
+    rb_reg_expr_str(str, ptr, len);
     rb_str_buf_cat2(str, ")");
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread