2010年1月15日金曜日

悩ましいLFとCR

Acrobat 8.2アップデートに伴う不具合で大騒ぎになってます。奥さん、事件ですよ!

アップデートしたらCSが起動できなくなった!
Acrobat 8.2アップデートでInDesign CS、CS2が起動できない! / ぴー

lcs_kawamuraの開発記録を読むと原因はCR(0x0d)と書くべきところをLF(0x0a)にしたようだ。

で、思い出したのが異体字のテキストエディタでの入力
(1)すべての異体字を置換するには、Indesignの仕様上タグ付きテキストでの置換が必要なので、タグ付きテキストを介して置換するスクリプトを設計しました。
(2)タグ付きテキストを書き出す際、ユニコードを指定すると、タグ付きテキストはUTF-16LE(リトルエンディアン)・改行コードLFで書き出されました。
(3)書き出したタグ付きテキストを、read()とwrite()を使用して読み込ませ、該当文字を置換後書き出しました。ここでタグ付きテキストの配置には条件があり 、「UTF16BE(ビッグエンディアン)でCR改行」か「UTF16LEでLF改行」でなければならないようです。しかし、write()のencodingで"UTF -16"、"UTF-16LE"を指定すると、データ中の改行コードのLFがCRに変わってしまい、条件を満たせずエラーとなって配置できませんでした。
(4)このため、encodingを"UTF-16BE"とし、タグ付きテキストを「UTF16BEでCR改行」で書き出し配置できるデータにしました。

ということですね。
関わってくる2系統の仕様があります。これらは、Macの歴史ですね。
(1)CPUの処理するデータの並び。
 旧Mac---モトローラとPowerPCのCPU---BE(ビッグエンディアン)
 新IntelMac---Intel系CPU---LE(リトルエンディアン)
(2)改行コード
 OS9まで---CR
 OSX---LF
これらが絡んで、互換性のためにwrite()の"UTF-16"指定ではUTF-16LE・改行コードCRで書き出すようになっているということなんですかね?エンコー ドにunicodeを指定したタグ付きテキスト書き出しでは UTF-16LE・改行コードLFで書き出されるのに?
ううむ納得できない。これはIndesignMac版の内部的な自己矛盾では?
まるで、スクリプト中ではタグ付きテキストの読み書きをすることは想定していないような…。Adobe様、こんなこと、どっかにきちんと文書化しておいてよ〜。ユーザーが 試してみないとわからないというのは…。

1 件のコメント:

茶尾 さんのコメント...

せうぞーさんが、スクリプトを作ったのだが読んでも理解できないのが哀しい。