こーぼ さんがコメントで煽るので (笑) しつこく超手抜き版文字コード判定の続き.
- 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 ぐらいしかテストしてないので,はなはだ心もとない.
- 文字コード判定クラス: NR-TextConversion.3.cs
- ユニット・テスト: NR-Tests-TextConversion.2.zip
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
- Preferences, Preference Browser 用の views: NR-TextConversion-Support.2.cs
Pier 用のコンポーネント
Pier で使うとなると headless での動作が前提となるので,ブラウザからプリファレンスを触ることができた方が何かと便利.ということでコンポーネントを作ってみた.画像の左半分参照.プリファレンスのラジオ・ボタンがポップアップ・セレクトにかわっただけで,動作はプリファレンスに同じ.
- Pier 用のコンポーネント・ウィジット: NPier-TextConversionManager.2.cs
Seaside 2.7 でも動くと思うけど,未テスト.
これでどや?
はてさて,どんなもんでっしゃろ, ykoubo さん?
いいですねー。ていうか、Pierにデフォルトで入れて欲しい。
返信削除え〜,「政治的な壁」や「基本的にはどうでもいいI18N関連」とか「WideStringをあそこまで嫌がる気持ち」とかあるんで難しいんじゃないんでしょうか (笑).それ以前に,NREncodingRecognizer の判定ロジックが不安の立像です.
返信削除