ぐる式 (貳) より引っ越し作業中.未完.

2007年8月10日金曜日

Squeak: Pier #9 超手抜き版文字コード判定 其の貳 軋音慟哭篇

TextConverterManager

こーぼ さんがコメントで煽るので (笑) しつこく超手抜き版文字コード判定の続き.

  • Squeak 3.8.18beta1U
  • Squeak3.10beta.7137 + Squeak-web beta image 0.128
  • または sq3.10-7137web07.08.1

う〜, Seaside 2.8 はいろいろ deprecatedApi があるな〜. 25 個もある.

NREncodingRecognizer 拡張

コード判定にちょいと手入れ. 7 行だったのが 25 行になった (笑).前のバージョンではコンバータが判らん場合,素知らぬ顔で Latin1TextConverter を返していたが,判らんときは「判らん」と意思表示するようになった.一応 TextConverter の実子 13 個を扱えるようになっている (はずだ) が,日本語以外は Mac-Roman と Latin-1 ぐらいしかテストしてないので,はなはだ心もとない.

Pier からの読み出しは, Squeak: Pier #7 超手抜き版文字コード判定 のまま変更なし.

プリファレンスからコントロール

Preferences, Preference Browser からコントロールできるようにしてみた.画像の右半分参照.まぁ,実際のところ, Pier で動かすのしか考慮してないが.ここでコンバータを選択すると,自動判定は用いずに強制的に指定されたコンバータを使う.ただし, Pier で使っているのは NREncodingRecognizer class>>convert: aStream の方なので, NREncodingRecognizer>>converter メソッド自体はここの設定に関わらず動く.

コンバータ・クラスとは関係ないラジオ・ボタンが二つある.

auto-detect
NREncodingRecognizer クラスを使って自動判定する.判定できない場合は下記の through と同じ動作をする.
through
コンバータを使わない.この場合, Pier はデフォルト (下記) と同じ動作を行う.
MAExternalFileModel>>readStreamreadStream	^ (self directory readOnlyFileNamed: self filename) binary

Pier 用のコンポーネント

Pier で使うとなると headless での動作が前提となるので,ブラウザからプリファレンスを触ることができた方が何かと便利.ということでコンポーネントを作ってみた.画像の左半分参照.プリファレンスのラジオ・ボタンがポップアップ・セレクトにかわっただけで,動作はプリファレンスに同じ.

Seaside 2.7 でも動くと思うけど,未テスト.

これでどや?

はてさて,どんなもんでっしゃろ, ykoubo さん?

2 件のコメント:

  1. いいですねー。ていうか、Pierにデフォルトで入れて欲しい。

    返信削除
  2. え〜,「政治的な壁」や「基本的にはどうでもいいI18N関連」とか「WideStringをあそこまで嫌がる気持ち」とかあるんで難しいんじゃないんでしょうか (笑).それ以前に,NREncodingRecognizer の判定ロジックが不安の立像です.

    返信削除