[#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:19419] Re: [] 内での \001 のマッチ

From: UENO Katsuhiro <unnie@...>
Date: 2003-01-22 10:23:52 UTC
List: ruby-dev #19419
うえのです。

On Wed, 22 Jan 2003 18:34:12 +0900
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:

> そうなのかな。いや、上記の「凶悪な仕様」はEUCやSJISの性質
> (0x80-0xffのコードポイントがない)に依存しているので、UTF-8で
> は成立しない(してはいけない)のではないかと思います。
>
> ちゅーことは現状でよいのではないかと。これをむりやり合わせる
> と将来の移行でますます困りそうです。

とすると、こんな感じでしょうか。
[ruby-dev:19380] のパッチと合わせて、やっているのは

  ・コンパイル時、マルチバイト文字でない 0xff 以下の文字は
    とにかくシングルバイト文字として charset に詰める。
    (でも UTF-8 回りの仕様を維持するために set_list_bits もしておく)

  ・マッチ時、マッチの対象がマルチバイト文字ならば、できるだけ
    マルチバイト文字としてマッチを試みる。

の2点だけなので、「凶悪な仕様」にも変化はないはずです。

  p "\001\002\003".scan(/[\001\002\003]/e) # => ["\001","\002","\003"]
  p "\001\002\003".scan(/[\001-\003]/e)    # => ["\001","\002","\003"]
  p "\xa4\xa2".scan(/\xa2/e)               # => ["\242"]
  p "\xa4\xa2".scan(/\xa4/e)               # => ["\244"]
  p "\xa4\xa2".scan(/[\xa2]/e)             # => ["\242"]
  p "\xa4\xa2".scan(/[\xa2-\xa4]/e)        # => ["\244","\242"]
  p "\xa4\xa2".scan(/#{"\xa4\xa2"}/e)      # => ["\244\242"]
  p "\xc2\x80".scan(/[\200]/u)             # => ["\302\200"]
  p "\xc2\x80".scan(/\200/u)               # => ["\200"]
  p "\xc3\x83".scan(/[\303]/u)             # => ["\303\203"]
  p "\xc3\x83".scan(/\303/u)               # => ["\303"]
  p "\xc7\xbf".scan(/[\777]/u)             # => ["\307\277"]
  p "\xc7\xbf".scan(/\777/u)               # => []

# ただ最後の2例はおかしいと思う…


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 10:16:23 -0000
@@ -1685,9 +1685,13 @@ re_compile_pattern(pattern, size, bufp)
 	    last = ':';
 	  }
 	}
-	else if (had_mbchar == 0 && (!current_mbctype || !had_num_literal)) {
-	  SET_LIST_BIT(c);
-	  had_num_literal = 0;
+	else if (had_mbchar == 0) {
+	  if (c < (1<<BYTEWIDTH))
+	    SET_LIST_BIT(c);
+	  if (!current_mbctype)
+	    had_num_literal = 0;
+	  if (current_mbctype && had_num_literal)
+	    set_list_bits(c, c, b);
 	}
 	else
 	  set_list_bits(c, c, b);


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

In This Thread