[#32945] Shift_JIS variants and UTF-16 support — "U.Nakamura" <usa@...>

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

22 messages 2008/01/07
[#32953] Re: Shift_JIS variants and UTF-16 support — Martin Duerst <duerst@...> 2008/01/07

中村さん、こんにちは。

[#32955] Re: Shift_JIS variants and UTF-16 support — Yukihiro Matsumoto <matz@...> 2008/01/07

まつもと ゆきひろです

[#32959] Re: Shift_JIS variants and UTF-16 support — "NARUSE, Yui" <naruse@...> 2008/01/07

成瀬です。

[#32960] Re: Shift_JIS variants and UTF-16 support — Yukihiro Matsumoto <matz@...> 2008/01/07

まつもと ゆきひろです

[#32992] ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...>

成瀬です。

18 messages 2008/01/08
[#32994] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/09

まつもと ゆきひろです

[#32995] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Martin Duerst <duerst@...> 2008/01/09

At 18:13 08/01/09, Yukihiro Matsumoto wrote:

[#33011] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#33012] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/11

まつもと ゆきひろです

[#33014] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#33015] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/11

まつもと ゆきひろです

[#33239] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Tanaka Akira <akr@...>

In article <200801210259.m0L2x3CW017171@ci.ruby-lang.org>,

11 messages 2008/01/21
[#33240] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Nobuyoshi Nakada <nobu@...> 2008/01/21

なかだです。

[#33303] Time#strftimeのエンコーディング — rubikitch@...

るびきちです。

13 messages 2008/01/23
[#33305] Re: Time#strftimeのエンコーディング — Yukihiro Matsumoto <matz@...> 2008/01/23

まつもと ゆきひろです

[#33368] summary of script encoding — "U.Nakamura" <usa@...>

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

22 messages 2008/01/25
[#33375] Re: summary of script encoding — Yukihiro Matsumoto <matz@...> 2008/01/25

まつもと ゆきひろです

[#33376] Re: summary of script encoding — "U.Nakamura" <usa@...> 2008/01/25

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

[#33387] HashからStructを作る — rubikitch@...

るびきちです。

19 messages 2008/01/25
[#33455] Re: HashからStructを作る — Yukihiro Matsumoto <matz@...> 2008/01/28

まつもと ゆきひろです

[#33505] Re: HashからStructを作る — rubikitch@... 2008/01/29

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33507] Re: HashからStructを作る — Yukihiro Matsumoto <matz@...> 2008/01/29

まつもと ゆきひろです

[#33508] Re: HashからStructを作る — rubikitch@... 2008/01/29

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33433] Win32OLE: set encoding to OLE string — "U.Nakamura" <usa@...>

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

16 messages 2008/01/28

[#33461] Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...>

=1B$B?9ED$H?=3D$7$^$9!#=1B(B

19 messages 2008/01/28
[#33473] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Nobuyoshi Nakada <nobu@...> 2008/01/28

なかだです。

[#33503] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/29

森田です。

[#33514] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Nobuyoshi Nakada <nobu@...> 2008/01/29

なかだです。

[#33518] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/30

森田です。

[#33545] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Ryutaro Amano <wn9r-amn@...> 2008/01/31

天野竜太郎と申します。

[#33546] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/31

森田です。

[#33547] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Ryutaro Amano <wn9r-amn@...> 2008/01/31

天野です。

[#33551] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/31

森田です。

[#33488] 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

20 messages 2008/01/29
[#33491] Re: 現在の script encoding の値を得る方法は? — Yukihiro Matsumoto <matz@...> 2008/01/29

まつもと ゆきひろです

[#33500] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/29

永井@知能.九工大です.

[#33501] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/29

成瀬です。

[#33515] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/30

永井@知能.九工大です.

[#33516] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/30

成瀬です。

[#33519] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/30

永井@知能.九工大です.

[#33522] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/30

成瀬です。

[ruby-dev:32952] Re: replica と alias の違い(encoding)

From: "NARUSE, Yui" <naruse@...>
Date: 2008-01-07 08:43:35 UTC
List: ruby-dev #32952
成瀬です。

KIMURA Koichi wrote:
> Windows版のRuby1.9でのデフォルトエンコーディングのときにちょっと名前が
> でていて気になっていたのですが、レプリカ(replica) と エイリアス (alias)
> の違いってなんでしょうか?
> 
> レプリカ → 実体をコピーするしてそのコピーに名前をつける
> エイリアス → 実体を共有した上で名前をつける
> 
> かなあと思ったのですが、実際のコードを見ても自信がないので解説を
> していただけるとありがたいです。ここを見ろというポインタ指示でも
> かまいません(英語でかかれていても可です)。

わたしの発言ですと、[ruby-dev:32542] [ruby-dev:32885] あたりがまとまって
います。この用途で replica を用いようというのは [ruby-dev:32460] が初め
でしょうか。

端的にいえば、
replica : 「encoding」を定義する
alias   : 「encoding *名*」を定義する
ということになります。

図にするとたぶん以下のような感じです。
                                                               鬼車(CES)
  OnigEncodingSJIS
      │←────────────────┐
───┼─────────────────┼──────────────
      │                                  │     Encoding (文字集合+CES)
      │                                  │
 #<Encoding:Shift_JIS> ─(replica)→ #<Encoding:Windows-31J>
      │          │                      │          │
───┼─────┼───────────┼─────┼────────
      │        (alias)                   │          │      Encoding名
      │          ↓                      │          │     (charset名)
   "Shift_JIS"  "SJIS"              "Windows-31J"  "CP932"

# 鬼車層とEncoding層の区別は正確ではないのですが便宜上こうしておきます。
# Encoding 層 での #<Encoding:Shift_JIS> の実体 rb_encoding* は同じもの

鬼車層では文字単位の操作を行っています。具体的には str[n] が何を返すか、
str.length はどのくらいか。また String#valid_encoding? の true/false 判
定もこのレベルです。鬼車層の実体は、文字の最小バイト数と最大バイト数の指
定や、文字列の長さを算出する関数、大文字を小文字に変換する関数等をひとま
とめにした構造体 OnigEncodingType で、具体的には ONIG_ENCODING_ASCII や
ONIG_ENCODING_SJIS 等があります。

Encoding 層では文字列操作全般を司ります。具体的には文字列の結合可能・比
較可能、正規表現のマッチ可能判定がこの層で行われています。この層での実体
は rb_encoding です。Encoding 層における実体は 鬼車が native に対応して
いる encoding から直結している original encoding、original encoding から
replicate された replica encoding、鬼車が対応していない encoding に便宜
的に与えられる dummy encoding の3種類に分けることができます。これらを見
分けるには Encoding#base_encoding や Encoding#dummy? を見るわけですが、
見たからどうということでもありません。

これらの区別を超越する存在が 7bit のみで構成された文字列で、
String#ascii_only? で判定可能です。これが真になる文字列はいかなる
encoding の文字列とも結合・比較可能となります。

なお、rb_encoding は OnigEncodingType の同じもののため、Encoding 層での
replica でも、鬼車レベルの諸関数、例えば文字群に Unicode Property Name
を与えたり、valid なバイト列の範囲を定義し直すことが可能です。([ruby-
dev:32947] での「レプリカはコピーをした後で関数のいくつかを上書きするこ
とも可能」とはたぶんこのこと)

Encoding名層は、Encoding.find() するためのテーブルです。
ENC_TABLE = {
    'Shift_JIS' => Encoding::Shift_JIS,
    'Windows-31J' => Encoding::Windows_31J,
    'EUC-JP' => Encoding::EUC_JP
}
ENC_TABLE_ALIAS = {
    'SJIS' => Encoding::Shift_JIS,
    'CP932' => Encoding::Windows_31J,
    'EUCJP' => Encoding::EUC_JP
}
def rb_enc_alias(alias, orig)
  ENC_TABLE_ALIAS[alias] = orig
end
def Encoding.find(name)
  return ENC_TABLE[name] if ENC_TABLE[encname]
  return ENC_TABLE_ALIAS[name] if ENC_TABLE_ALIAS[encname]
  return -1
end
という構造になっているとお考えください。alias で追加された名前は、文字列
から rb_encoding を検索する際にのみに用いられます。

# そのため、[ruby-dev:32949] における「alias に対して関数を上書き」とい
う仮定は存在しません


# これはわたしの理解なので間違っているところはツッコミください

# こぴぺしやすいようにこのメールの著作権は放棄しておきます。

-- 
NARUSE, Yui  <naruse@airemix.com>
DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA

In This Thread