字詰めデータを読み込み選択したテキストに反映させる

■プログラム説明(ソースコード説明)
 ai_dataフォルダ内にあるtrack.txtがタブ区切りテキストです。このテキストの内容は「文字」「トラッキング値」となっています。Fileオブジェクトを作成しtrack.txtテキストを一括して読み込みます。読み込んだ後にsplit()を使って改行コードを指定し行数に分けます。選択されたテキストブロックのみ処理を行うためselection配列の数だけ処理を行います。次に1行分の文字、トラッキング値データをsplit()を使ってタブコードを指定し分けます。テキストブロックの文字を1文字ずつ読み出し比較します。一致した場合のみトラッキング値を設定します。

■ソースコード
TABCODE = String.fromCharCode(9); // タブコード
LFCODE = String.fromCharCode(10); // 改行コード
docObj = activeDocument;

fileRef = new File ("/ai_data/track.txt");
flag = fileRef.open ("r","","");
if (flag)
{
tmp = fileRef.read();
trkData = tmp.split(LFCODE);
sel = docObj.selection;
for (i=0; i<sel.length; i++)
{
txtRange = sel[i].textRange;
for (j=0; j<txtRange.characters.length; j++)
{
c = txtRange.characters[j].contents;
for (k=0; k<trkData.length; k++)
{
trackVal = trkData[k].split(TABCODE);
if (trackVal[0] == c)
{
txtRange.characters[j].tracking = trackVal[1];
}
}
}
}
}


■使い方
1:エクセルでデータを入力します。比較する文字、トラッキングの値の順番に入れます。
2:タブ区切りテキストで保存します。文字によっては"、"のようにダブルクオーテーションで囲まれてしまう場合があるため正常に動作しない場合にはテキストエディタで""を削除してください。
3:次にUnicode (UTF-8ではない)、改行コードをLFにして保存します。
4:トラッキング調整を行うテキストブロックを選択します。
5:ファイルメニューからスクリプトを実行します。
6:文字のトラッキングが調整されます。


■ポイント
 エクセルのデータでトラッキング以外にカーニングや縦横比率などの値を設定し、より細かい文字調整を行うこともできます。この場合は、

if (trackVal[0] == c)
{
txtRange.characters[j].tracking = trackVal[1];
}

 の{〜}に追加します。例えばデータが「文字」「トラッキング値」「水平比率値」「垂直比率値」の順番になっている場合には以下のようにします。

if (trackVal[0] == c)
{
txtRange.characters[j].tracking = trackVal[1];
txtRange.characters[j].scaling = [trackVal[2],trackVal[3]];
}

■実際のスクリプトをダウンロード(sample.js.zip)