今回も前回、前々回のスクリプトと同じネタで長い文章を省略するスクリプトInDesign版です。InDesign CS4は購入していないのですが、CS3と基本的に同じなので多分動くと思います。
以下のスクリプトは選択したテキストフレームに対して文字省略処理を行なうものです。ただし、InDesignはテキストフレームの選択は単ページ内(見開きの場合は、見開きページ内)のみ可能になっており、複数のページにまたがってテキストフレームを選択することはできません。
textLen = 10;
postfix = "...";
selObj = app.activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
temp = selObj[i].contents;
txt = temp.substr(0, textLen);
if (temp.length > textLen) txt = txt + postfix;
selObj[i].contents = txt;
}
設定はこれまでと同じで文字数が何文字以上なら省略表記するかは以下の10の値を変更してください。
textLen = 10;
これは10文字より文字数が多い場合に省略の対象になることを示しています。省略表記した際に文字の末尾に付加する文字は
postfix = "...";
の...の部分を変更してください。
また、先頭の文字と末尾の文字を残して中間を省略したい場合は以下のスクリプトを使ってください。
textLen = 12;
preLen = 5;
postLen = 4;
centerfix = "...";
selObj = app.activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
temp = selObj[i].contents;
txt = temp;
if (temp.length > textLen)
{
preText = temp.substr(0, preLen);
postText = temp.substring(temp.length - postLen, temp.length);
txt = preText + centerfix + postText;
}
selObj[i].contents = txt;
}
省略した場合に先頭の文字を何文字にするかは
preLen = 5;
の値を変更してください。同様に末尾を何文字表示するかは
postLen = 4;
で指定できます。
文字が省略されテキストフレームの下部に隙間ができてしまう場合には自動的にフレームサイズを調整してほしいこともあります。InDesignの場合は、IllustratorやPhotoshopと異なりフレームを内容に合わせる機能がありselObj[i].fit(FitOptions.frameToContent);の行を追加することでサイズ調整が行われます。
以下のスクリプトは省略した後の内容に合わせてフレームを調整します。
textLen = 10;
postfix = "...";
selObj = app.activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
temp = selObj[i].contents;
txt = temp.substr(0, textLen);
if (temp.length > textLen) txt = txt + postfix;
selObj[i].contents = txt;
selObj[i].fit(FitOptions.frameToContent);
}