28 October 2007

[自由自在Squeak][FileMan] サンプルコードをまとめてBOM付きに


自由自在Squeakプログラミング」は、今から3年前に出た本です。当時はSqueakは3.6で、BOMなしUTF-8をソースとして読む仕様になっていました。現在はBOMつきを読むようになっています。

そのため当時のサンプルコードを最近のSqueak(3.8以降)で読ませるようにするにはBOMをつけるという変換を行わなければなりません。これを我らがFileManで行ったという話です。

まずはBOMを付ける処理です。SampleCodes以下のサブディレクトリ群以下にあるファイル全てについて、BOMを先頭に追加します。以前のファイルを消さずに、ファイル名に'.bom'を付けています。

dir := './SampleCodes' asDirectoryEntry.
bom := {16rEF. 16rBB. 16rBF} asByteArray.
dirs directoriesDo: [:dir |
dir filesDo: [:file |
binContents := file binaryContents.
dir binaryAt: (file name, '.bom') put: (bom, binContents).
]
].

どうやら変換がうまくいったようなので、'.bom'以外のファイルを全て消します。

rootDir := './SampleCodes' asDirectoryEntry.
rootDir allFilesDo: [:file |
(file extension endsWith: '.bom') ifFalse: [file delete]
].

次にファイル名をもとに戻します。

rootDir := './SampleCodes' asDirectoryEntry.
rootDir allFilesDo: [:file |
file rename: (file name copyReplaceAll: '.bom' with: '')
].


ということで、Squeakであればファイル操作も簡単にできますよ。

変換したサンプルは自由自在SqueakプログラミングサポートWikiに置いてあります。