[#16211] pstore.rb and sync.rb — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

19 messages 2002/03/04
[#16245] Re: pstore.rb and sync.rb — keiju@... (石塚圭樹) 2002/03/07

けいじゅ@日本ラショナルソフトウェアです.

[#16240] [Oni Guruma] look behind — nobu.nakada@...

なかだです。

14 messages 2002/03/07

[#16283] ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

124 messages 2002/03/08
[#16307] Re: ライブラリ拡大計画 — TAKAHASHI Masayoshi <maki@...> 2002/03/10

高橋征義です。

[#16317] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/11

まつもと ゆきひろです

[#16318] Re: ライブラリ拡大計画 — Tanaka Akira <akr@...17n.org> 2002/03/11

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

[#16320] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/11

まつもと ゆきひろです

[#16347] Re: ライブラリ拡大計画 — Minero Aoki <aamine@...> 2002/03/12

あおきです。

[#16308] Re: ライブラリ拡大計画 — WATANABE Hirofumi <eban@...> 2002/03/11

わたなべです。

[#16626] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/27

まつもと ゆきひろです

[#16628] Re: ライブラリ拡大計画 — Takaaki Tateishi <ttate@...> 2002/03/27

At Wed, 27 Mar 2002 18:56:03 +0900,

[#16629] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/27

まつもと ゆきひろです

[#16647] Re: ライブラリ拡大計画 — Takaaki Tateishi <ttate@...> 2002/03/28

At Thu, 28 Mar 2002 00:12:49 +0900,

[#16674] Re: ライブラリ拡大計画 — Takaaki Tateishi <ttate@...> 2002/03/29

At Thu, 28 Mar 2002 23:45:49 +0900,

[#16675] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/29

まつもと ゆきひろです

[#16680] Re: ライブラリ拡大計画 — nobu.nakada@... 2002/03/29

なかだです。

[#16681] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/29

まつもと ゆきひろです

[#16683] Re: ライブラリ拡大計画 — nobu.nakada@... 2002/03/29

なかだです。

[#16687] Re: ライブラリ拡大計画 — Takaaki Tateishi <ttate@...> 2002/03/30

At Fri, 29 Mar 2002 20:32:17 +0900,

[#16718] Re: ライブラリ拡大計画 — Takaaki Tateishi <ttate@...> 2002/04/02

At Sun, 31 Mar 2002 02:20:04 +0900,

[#16371] Re: ライブラリ拡大計画 — Takaaki Tateishi <ttate@...> 2002/03/13

At Fri, 8 Mar 2002 18:05:01 +0900,

[#16373] Re: ライブラリ拡大計画 — matz@... (Yukihiro Matsumoto) 2002/03/14

まつもと ゆきひろです

[#16397] Re: ライブラリ拡大計画 — nobu.nakada@... 2002/03/14

なかだです。

[#16404] Re: ライブラリ拡大計画 — Tanaka Akira <akr@...17n.org> 2002/03/14

In article <20020314133401.3918E10F3@sharui.nakada.kanuma.tochigi.jp>,

[#16406] Re: ライブラリ拡大計画 — nobu.nakada@... 2002/03/15

なかだです。

[#16290] IO#gets improvement — nobu.nakada@...

なかだです。

27 messages 2002/03/08
[#16291] Re: IO#gets improvement — Tanaka Akira <akr@...17n.org> 2002/03/08

In article <20020308131426.8C36123B9@sharui.nakada.kanuma.tochigi.jp>,

[#16294] Re: IO#gets improvement — nobu.nakada@... 2002/03/09

なかだです。

[#16549] Re: IO#gets improvement — nobu.nakada@... 2002/03/23

なかだです。

[#16486] mswin32 configuration — nobu.nakada@...

なかだです。

20 messages 2002/03/19
[#16488] Re: mswin32 configuration — "U.Nakamura" <usa@...> 2002/03/19

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

[#16489] Re: mswin32 configuration — nobu.nakada@... 2002/03/19

なかだです。

[#16490] Re: mswin32 configuration — "U.Nakamura" <usa@...> 2002/03/19

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

[#16545] BigFloat — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

51 messages 2002/03/23
[#16547] Re: BigFloat — "Akinori MUSHA" <knu@...> 2002/03/23

At Sat, 23 Mar 2002 22:55:45 +0900,

[#16548] Re: BigFloat — "Akinori MUSHA" <knu@...> 2002/03/23

At Sun, 24 Mar 2002 02:20:26 +0900,

[#16550] Re: BigFloat — Tanaka Akira <akr@...17n.org> 2002/03/23

In article <867ko3yyik.wl@archon.local.idaemons.org>,

[#16551] Re: BigFloat — "Akinori MUSHA" <knu@...> 2002/03/23

At Sun, 24 Mar 2002 04:21:59 +0900,

[#16552] Re: BigFloat — Tanaka Akira <akr@...17n.org> 2002/03/23

In article <864rj7yljs.wl@archon.local.idaemons.org>,

[#16553] Re: BigFloat — "Akinori MUSHA" <knu@...> 2002/03/23

At Sun, 24 Mar 2002 07:44:15 +0900,

[#16560] Re: BigFloat — Tanaka Akira <akr@...17n.org> 2002/03/24

In article <861yeazvtg.wl@archon.local.idaemons.org>,

[#16565] Re: BigFloat — "Akinori MUSHA" <knu@...> 2002/03/24

At Sun, 24 Mar 2002 15:41:18 +0900,

[#16575] Re: if Re: BigFloat — keiju@... (石塚圭樹) 2002/03/24

けいじゅ@日本ラショナルソフトウェアです.

[#16715] Re: if Re: BigFloat — keiju@... (石塚圭樹) 2002/04/02

けいじゅ@日本ラショナルソフトウェアです.

[#16725] Re: if Re: BigFloat — "Akinori MUSHA" <knu@...> 2002/04/02

At Tue, 2 Apr 2002 16:16:04 +0900,

[#16789] Re: if Re: BigFloat — "Shigeo Kobayashi" <shigeo@...> 2002/04/08

[#16805] Re: if Re: BigFloat — Shin-ichiro HARA <sinara@...> 2002/04/09

原です。

[#16811] Re: if Re: BigFloat — "Shigeo Kobayashi" <shigeo@...> 2002/04/09

[#16555] File.fnmatch (Re: [rubyist:1286] Re: ARGV の機能) — Koji Arai <JCA02266@...>

新井です。

11 messages 2002/03/24

[#16593] Oniguruma and multibyte character literal — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

15 messages 2002/03/25
[#16594] Re: Oniguruma and multibyte character literal — matz@... (Yukihiro Matsumoto) 2002/03/25

まつもと ゆきひろです

[#16652] [OniGuruma] nested repeat operator — "K.Kosako" <kosako@...>

[ruby-talk:36959]で指摘された

31 messages 2002/03/29
[#16669] Re: [OniGuruma] nested repeat operator — Tanaka Akira <akr@...17n.org> 2002/03/29

In article <20020329022810.68F9E17@helium.ruby-lang.org>,

[#16676] Re: [OniGuruma] nested repeat operator — "K.Kosako" <kosako@...> 2002/03/29

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

[ruby-dev:16649] Re: Oniguruma and multibyte character literal

From: nobu.nakada@...
Date: 2002-03-28 15:32:14 UTC
List: ruby-dev #16649
なかだです。

At Wed, 27 Mar 2002 13:21:42 +0900,
Yukihiro Matsumoto wrote:
> |\x{}では、コードポイントを有効なバイト表現にエンコードする、ということ
> |でしょうか。
> 
> そういうことです。

うむむ。めんどくさっ。


Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.164
diff -u -2 -p -r1.164 parse.y
--- parse.y	2002/03/26 06:18:49	1.164
+++ parse.y	2002/03/28 13:34:52
@@ -2364,4 +2364,14 @@ tokadd(c)
 }
 
+static void
+tokspace(n)
+    int n;
+{
+    if ((tokidx += n) > toksiz) {
+	while ((toksiz *= 2) < tokidx);
+	REALLOC_N(tokenbuf, char, toksiz);
+    }
+}
+
 static int
 read_escape()
@@ -2494,5 +2504,16 @@ tokadd_escape(term)
 	    tokadd('\\');
 	    tokadd(c);
-	    scan_hex(lex_p, 2, &numlen);
+	    if ((c = nextc()) == '{') {
+		char *p = memchr(lex_p, '}', lex_pend - lex_p);
+		if (!p || (scan_hex(lex_p, p - lex_p, &numlen), numlen != p - lex_p)) {
+		    yyerror("Invalid hexadecimal character syntax");
+		    return '\0';
+		}
+		tokadd(c);
+		++numlen;
+	    }
+	    else {
+		scan_hex(lex_p, 2, &numlen);
+	    }
 	    while (numlen--)
 		tokadd(nextc());
@@ -2706,7 +2727,20 @@ parse_string(func, term, paren)
 	    }
 	    else {
-                pushback(c);
                 if (func != '"') tokadd('\\');
-                tokadd(read_escape());
+		if (c == 'x' && peek('{')) {
+		    int numlen;
+		    char *p;
+		    nextc();
+		    p = memchr(lex_p, '}', lex_pend -lex_p);
+		    if (!p) goto unterm_str;
+		    c = scan_hex(lex_p, p - lex_p, &numlen);
+		    if (numlen != lex_pend - lex_p) goto unterm_str;
+		    tokspace(wclen(c));
+		    tokidx += wc2mbs(c, &tokenbuf[tokidx]);
+		}
+		else {
+		    pushback(c);
+		    tokadd(read_escape());
+		}
   	    }
 	    continue;
Index: regex.c
===================================================================
RCS file: /cvs/ruby/src/ruby/regex.c,v
retrieving revision 1.67
diff -u -2 -p -r1.67 regex.c
--- regex.c	2002/03/25 09:08:15	1.67
+++ regex.c	2002/03/28 15:19:15
@@ -499,4 +499,61 @@ utf8_firstbyte(c)
 }
 
+int wclen(c)
+     unsigned long c;
+{
+  switch (current_mbctype) {
+  case MBCTYPE_ASCII:
+    return 1;
+  case MBCTYPE_EUC:
+    if (c < 0x100) return 1;
+    if (c < 0x10000) return 2;
+    return 3;
+  case MBCTYPE_SJIS:
+    if (c < 0x100) return 1;
+    return 2;
+  case MBCTYPE_UTF8:
+    if (c < 0x80) return 1;
+    if (c <= 0x7ff) return 2;
+    if (c <= 0xffff) return 3;
+    if (c <= 0x1fffff) return 4;
+    if (c <= 0x3ffffff) return 5;
+    if (c <= 0x7fffffff) return 6;
+  }
+  return -1;
+}
+
+int wc2mbs(c, s)
+     unsigned long c;
+     char *s;
+{
+  switch (current_mbctype) {
+  case MBCTYPE_ASCII:
+    *s++ = (char)c;
+    return 1;
+  case MBCTYPE_UTF8:
+    {
+      int l = mbclen(*s = utf8_firstbyte(c));
+      int n = l;
+      while (--l > 0) {
+	s[l] = (c & 0x3f) | 0xc0;
+      }
+      return n;
+    }
+    break;
+  default:
+    {
+      char *start = s;
+      if (c >> BYTEWIDTH * 2) {
+	*s++ = (char)(c >> BYTEWIDTH * 2);
+      }
+      if (c >> BYTEWIDTH) {
+	*s++ = (char)(c >> BYTEWIDTH);
+      }
+      *s++ = (char)c;
+      return s - start;
+    }
+  }
+}
+
 static void
 print_mbc(c)
@@ -1530,6 +1587,20 @@ re_compile_pattern(pattern, size, bufp)
 
 	  case 'x':
-	    c = scan_hex(p, 2, &numlen);
-	    p += numlen;
+	    if (*p == '{') {
+	      ++p;
+	      nextp = memchr(p, '}', pend - p);
+	      if (!nextp) goto end_of_pattern;
+	      c = scan_hex(p, nextp - p, &numlen);
+	      if (numlen != nextp - p) goto invalid_escape;
+	      p = nextp + 1;
+	      if (wclen(c) > 1) {
+		++had_mbchar;
+		break;
+	      }
+	    }
+	    else {
+	      c = scan_hex(p, 2, &numlen);
+	      p += numlen;
+	    }
 	    had_num_literal = 1;
 	    break;
@@ -2259,6 +2330,20 @@ re_compile_pattern(pattern, size, bufp)
       case 'x':
 	had_mbchar = 0;
-	c = scan_hex(p, 2, &numlen);
-	p += numlen;
+	if (*p == '{') {
+	  ++p;
+	  nextp = memchr(p, '}', pend - p);
+	  if (!nextp) goto end_of_pattern;
+	  c = scan_hex(p, nextp - p, &numlen);
+	  if (numlen != nextp - p) goto invalid_escape;
+	  p = ++nextp;
+	  if (wclen(c) > 1) {
+	    had_mbchar = 2;
+	    goto wide_char;
+	  }
+	}
+	else {
+	  c = scan_hex(p, 2, &numlen);
+	  p += numlen;
+	}
 	had_num_literal = 1;
 	goto numeric_char;
@@ -2341,4 +2426,5 @@ re_compile_pattern(pattern, size, bufp)
     numeric_char:
       nextp = p + mbclen(c) - 1;
+    wide_char:
       if (!pending_exact || pending_exact + *pending_exact + 1 != b
 	  || *pending_exact >= (c1 ? 0176 : 0177)
@@ -2355,4 +2441,12 @@ re_compile_pattern(pattern, size, bufp)
 	(*pending_exact)++;
 	had_num_literal = 0;
+      }
+      if (had_mbchar == 2) {
+	int len = wclen(c);
+	GET_BUFFER_SPACE(len);
+	wc2mbs(c, b);
+	b += len;
+	*pending_exact += len;
+	continue;
       }
       BUFPUSH(c);
Index: regex.h
===================================================================
RCS file: /cvs/ruby/src/ruby/regex.h,v
retrieving revision 1.15
diff -u -2 -p -r1.15 regex.h
--- regex.h	2002/01/04 14:14:35	1.15
+++ regex.h	2002/03/28 13:35:00
@@ -40,4 +40,6 @@
 # define re_set_casetable ruby_re_set_casetable
 # define register_info_type ruby_register_info_type
+# define wclen ruby_wclen
+# define wc2mbs ruby_wc2mbs
 #endif
 
@@ -101,6 +103,10 @@ const unsigned char *re_mbctab;
 #if defined(__STDC__)
 void re_mbcinit (int);
+int wclen (unsigned long);
+int wc2mbs (unsigned long, char *);
 #else
 void re_mbcinit ();
+int wclen ();
+int wc2mbs ();
 #endif
 


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

In This Thread