[#19261] lstripped here-document (Re: comments and continuing strings on the next line) — nobu.nakada@...

なかだです。

29 messages 2003/01/01
[#19360] Re: lstripped here-document (Re: comments and continuing strings on the next line) — "K.Kosako" <kosako@...> 2003/01/15

nobu.nakada@nifty.ne.jpさんの

[#19361] Re: lstripped here-document (Re: comments and continuing strings on the next line) — "NAKAMURA, Hiroshi" <nakahiro@...> 2003/01/15

なひです。

[#19364] Re: lstripped here-document (Re: comments and continuing strings on the next line) — nobu.nakada@... 2003/01/17

なかだです。

[#19366] Re: lstripped here-document (Re: comments and continuing strings on the next line) — "NAKAMURA, Hiroshi" <nakahiro@...> 2003/01/17

なひです。

[#19299] [BUG] errno == 0 — Kazuhiro Yoshida <moriq@...>

もりきゅうです。win32だけかもしれません。

22 messages 2003/01/04
[#19301] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

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

[#19302] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

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

[#19303] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

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

[#19304] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

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

[#19306] Re: [BUG] errno == 0 — nobu.nakada@... 2003/01/05

なかだです。

[ruby-dev:19413] Re: [] 内での \001 のマッチ

From: UENO Katsuhiro <unnie@...>
Date: 2003-01-22 08:14:24 UTC
List: ruby-dev #19413
うえのです。

On Wed, 22 Jan 2003 15:21:58 +0900
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:

> その場合の$KCODEはなんですか?
> いずれにしても先日のうえのさんパッチの副作用でしょうね。

$KCODE が NONE 以外だとダメですね。

p "\001\002\003\004".scan(/[\001\002\003\004]/n)
        # => ["\001", "\002", "\003", "\004"]
p "\001\002\003\004".scan(/[\001\002\003\004]/e)
        # => []
p "\001\002\003\004".scan(/[\001\002\003\004]/u)
        # => []
p "\001\002\003\004".scan(/[\001\002\003\004]/s)
        # => []

範囲指定なら動きます。

p "\001\002\003\004".scan(/[\001-\004]/n)
        # => ["\001", "\002", "\003", "\004"]
p "\001\002\003\004".scan(/[\001-\004]/e)
        # => ["\001", "\002", "\003", "\004"]
p "\001\002\003\004".scan(/[\001-\004]/u)
        # => ["\001", "\002", "\003", "\004"]
p "\001\002\003\004".scan(/[\001-\004]/s)
        # => ["\001", "\002", "\003", "\004"]

$KCODEが指定されているときに [] 内に単独で \xnn や \nnn が現れると
それをマルチバイト文字とみなしているようです。


修正です。

Index: regex.c
===================================================================
RCS file: /src/ruby/regex.c,v
retrieving revision 1.78
diff -u -p -r1.78 regex.c
--- regex.c	20 Jan 2003 08:29:21 -0000	1.78
+++ regex.c	22 Jan 2003 08:02:52 -0000
@@ -1555,7 +1555,7 @@ re_compile_pattern(pattern, size, bufp)
 	  case '0': case '1': case '2': case '3': case '4':
 	  case '5': case '6': case '7': case '8': case '9':
 	    PATUNFETCH;
-	    c = scan_oct(p, 3, &numlen);
+	    c = scan_oct(p, 3, &numlen) & 0xff;
 	    p += numlen;
 	    had_num_literal = 1;
 	    break;
@@ -1685,9 +1685,10 @@ re_compile_pattern(pattern, size, bufp)
 	    last = ':';
 	  }
 	}
-	else if (had_mbchar == 0 && (!current_mbctype || !had_num_literal)) {
+	else if (had_mbchar == 0) {
 	  SET_LIST_BIT(c);
-	  had_num_literal = 0;
+	  if (!current_mbctype)
+	    had_num_literal = 0;
 	}
 	else
 	  set_list_bits(c, c, b);

ただ、この (!current_mbctype || !had_num_literal) という条件の意図が
どうしても読み取れませんでした。一応、had_num_literal というフラグの
変化は変更しないようにしましたが、また何か問題が出るかもしれません。

あと、今までできていたこんなことができなくなります。

  修正前:
    p "\xc2\x80".scan(/\200/u)  # => ["\302\200"]
    p "\xc4\x80".scan(/\400/u)  # => ["\304\200"]
  修正後:
    p "\xc2\x80".scan(/\200/u)  # => []
    p "\xc4\x80".scan(/\400/u)  # => []


 --  ----  -     - - -- -
うえの かつひろ <unnie@blue.sky.or.jp>

In This Thread