須藤です。

あまり(全然?)、力になれなかったようですいませんでした。

From: "NAKAMURA, Hiroshi" <nakahiro / sarion.co.jp>
Subject: [ruby-list:35130] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。
Date: Wed, 15 May 2002 10:37:27 +0900
Message-ID: <000701c1fbb0$b4ada7e0$85222fc0 / sarion.co.jp>

> Ruby界でMTと言えば機械翻訳のことです。うそですすいません。
> 曖昧な略語を使うべきではありませんでした。
> multi-threadのつもりで書きました。
わかりました。どこかに略語録みたいなページありませんかね?


> $ ruby -Ke -e 'Thread.new { $KCODE = "S" }.join; $KCODE.display'
> $KCODEはインタプリタにつき一個しかありません。
> 複数スレッドで、異なる$KCODEでNQXMLを使う、
> なんてことはできません。# 同じなら問題ないんですが。

--snip--

> Parser.new.parse( File.open( "foo.xml", "rb" ))
> みたいに、ファイルを先頭から読みながら解析する
> イメージです。解析中にユーザから触れるAPIは
> SAXでもpullでもDOMでもいいと思いますが
> (MSXMLDOMには初期から非同期解析モードがあります。
> そんな無茶な。。。と誰もが思ったであろう通り、
> バグも多かったけど)、
> なにしろ全部読み終わる前に少しずつ処理したい、という要求です。
> 
> 用語がよくないかもしれません。一般的にはなんというのだろう。
いえ、私の勉強不足です。

> $KCODEにはmulti-threadの壁があるので、明示的に
>   Parser.new( "EUC" ).parse( ... )
> なんてできるとより嬉しいかもしれませんね。

えーと、つまり、なひさん的には(Parser)オブジェクト毎にエンコード情報
($KCODEではない)をもち、それに準じつつ、必要な分ずつだけ、パースして欲
しい、と言うことでいいですか?


なひさんが最初に投稿された内容を、私なりの解釈で作者のSeanさんにメール
したら、

--引用開始--
| REXML's solution to handling multiple encoding formats is to add converters 
| for input and output.
| 
| To support other encodings, you have to do two things.
|
| 1) Change source.rb to support reading your encoding
| 2) Change output.rb to support writing your encoding
| 
| If you can give me the algorithms for translating from %w{ euc-jp shift-jis 
| jis } to UTF-8, and back again, I'll add support for those encodings.
| 
| For example, I convert from ISO-8859-1 to UTF-8 with:
| 
|	array = iso_string.unpack("C*")
|	utf = array.pack( "U*")
--引用終り--

と、いう返事をもらいました(公開していいのかな?)。必要な分ずつだけ、パー
スするのは、難しいかもしれません。しかし、結局、Regexpで解析していきま
すが、ソース(XML文書)を読んだ時点でエンコードが完了し、実際に解析する
部分では(入力されたソースが何であれ)UTF8で処理して(再びエンコードして
書き出して)いるので、オブジェクト毎にエンコード情報を持たせるのは可能
ではないかと思います。
という、私の見解ですけど、また外してます?

> REXML/2.3.*を見ていただいてありがとうございました。
> 少しイメージがわいてきました。自分でもまた見てみようと思います。
大したことはできていないというのは、自他ともに認めるところだと思ってい
ます。もう少し、ソースを覗いてみようと思います。

<><><><><><><><><><><><>
       須藤 功平
     kou / cneti.net
<><><><><><><><><><><><>