[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1114) 「フィルタ参照形式によるオブジェクトの抽出」と「文字コード」の関係



ゴールデン・ウィーク前から悩んでいることがあります。
どうにも自分だけでは解決できそうにないので、お知恵を拝借したくて投稿いたしました。

私は InDesign CS_J で AppleScriptによる自動組版のプログラムを作成しています。
悩んでいる点は「フィルタ参照形式によるオブジェクトの抽出」と「文字コード」の関係です。
そして、現在つまづいている部分で、私が最終的にしたいことは、
スォッチのカラー名からカラーのオブジェクトを得ることです。

例えば、スウォッチ名に「lineColor」という名の色があるとします。

set aColor to item 1 of (every color whose (name of it is "lineColor"))

これで「lineColor」という名のカラー・オブジェクトを得ることができます。
次はカラー名を変数で指定することにします。

set swatchName to "lineColor"
set aColor to item 1 of (every color whose (name of it is swatchName))

当然、成功します。ところがこの swatchNameに代入するカラー名を外部ファイルから読み込んだ
文字列で実行するとオブジェクトが見つけられないようです。次のようなエラーが発生します。

  get item 1 of every color of active document whose name = "lineColor"
    "変数 aColor が定義されていません。"

テキストの文字コードは UTF8 です。swatchName には改行コードは含まれていません。
テキストファイルからの読み込みは AppleScriptから シェルコマンド(cat)で読み込んでいます。

AppleScriptの readコマンドで読み込んだ場合は成功します。シェルコマンドで読み込むと失敗するのです。

試しに、シェルから読み込んだ値を代入した変数と
リテラル記述の値を比較演算子で評価するとイコールなんです。

if swatchName is "lineColor" then
  display dialog "OK"
else
  display dialog "NO"
end if

結果は "OK" が表示。

… … …

私が、わざわざシェルコマンドでテキストを読み込んでいる理由ですが、
ソースファイルとしてのテキストの文字コードを、ユニコード対応にしようと
プログラムの変更をし始めた時に、UTF8のテキストを readコマンドで読み込むと、
日本語が含まれている変数は扱えなくなってしまったのです。(ダイアログへの表示もできない)
Shift_JISへ変換するわけにもいかないので、シェルコマンドで試しました。
AppleScriptでテキスト操作は何もしません。
すると問題なくその後のいろいろな処理ができたので、シェルコマンドに切り換えました。

… … …

関連するスクリプトの部分をすべて掲載するのが望ましいと思いますが、
長くなりますので、とりあえず概要だけ述べさせていただきました。

perlでの文字コードの取り扱いも悶絶しながら覚えましたが、AppleScriptも簡単には済まないようで疲れてしまいました。
何か良いアドバイスをお待ちします。


[環境]
  Mac OS : 10.3.8
  InDesign : 3.0.1J