DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

InDesignサンプルスクリプト BreakTextThread を手直しする

はじめに

仕事が忙しくてちょっと空いてしまいましたが、InDesign日本語版20周年イベントの補足というか付録です。
一応、僕のセッションのアーカイブはこちらです。

www.youtube.com

セッションでご紹介した BreakTextThread.jsx というスクリプトに不具合があるというお話をしました。
実際に見ていただいた方はわかると思いますが、このスクリプトはフレームグリッドでの使用を想定していません。しかしおそらく日本語版組版においてはフレームグリッドが多数を占めるでしょうし、せっかく面白いスクリプトなのにこのまま眠らせてしまうのはもったいない! ということで部分的に修正してご紹介するものです。

間に解説を挟んでいますが、いいからスクリプトだけ寄越せ、という場合は最後のGistのURLからダウンロードしてくださいませ。

スクリプト処理の基本的な流れ

だいたいこのような流れになっています。

  1. ストーリーを切断するテキストフレームを特定する
  2. 新たにテキストフレームをひとつ作成
  3. 元のテキストフレームから仮のテキストフレームへテキストを移動させる
  4. 新しいテキストに元のストーリー設定を適用する
  5. 元のテキストフレームを削除する

この間にフレームグリッド設定を引き継ぐ処理が組み込まれていないので、2で作成されたテキストフレームがデフォルト設定のフレームグリッドになってしまいます。

そこで、この流れに2つ処理を組み込みます(下記赤字部分)。

  1. ストーリーを切断するテキストフレームを特定する
  2. フレームグリッドだった場合、現在のフレームグリッド設定を一旦記憶する
  3. 新たにテキストフレームをひとつ作成
  4. 元のテキストフレームから仮のテキストフレームへテキストを移動させる
  5. 新しいテキストに元のストーリー設定を適用する
  6. フレームグリッドだった場合、2の設定を適用する
  7. 元のテキストフレームを削除する

実際にこの2か所をコードで確認してみましょう。

コードの部分解説

スクリプト全文は末尾に掲載しています。
もしくはGistを参照ください。

フレームグリッド設定を記憶する

127行目〜139行目になります。

var mySettings;
if (theStory.storyPreferences.frameType === FrameTypes.FRAME_GRID_TYPE){
    mySettings = {
        gridData: {
            characterAki: theStory.gridData.characterAki,
            horizontalScale: theStory.gridData.horizontalScale,
            lineAki: theStory.gridData.lineAki,
            pointSize: theStory.gridData.pointSize,
            verticalScale: theStory.gridData.verticalScale,
        },
        geometricBounds: secondFrame.geometricBounds,
    };
}

フレームグリッドかどうかの判定を行い、フレームグリッドであれば、mySettings変数に必要な情報を書き込みます。

設定を適用する

157行目〜162行目です。

if (mySettings) {
    for (var k in mySettings.gridData) {
        secondFrame.parentStory.gridData[k] = mySettings.gridData[k];
    }
    secondFrame.geometricBounds = mySettings.geometricBounds;
}

もしmySettings変数になにか情報が書き込まれていたら、フレームグリッド情報を再設定し、最後に位置と大きさ(geometricBounds)を改めて指定します。

最後に

僕が書き加えたのは以上の2か所です。手元で動かした感じは大丈夫そうですが、詳細な検証までは行っていないのでもし何かうまくないところがあればご指摘いただけると助かります。

こんな感じでサンプルスクリプトを紹介していくのも悪くなさそうですね。もしくは、このサンプルスクリプトが気になる! などがあればTwitterなどでお知らせください。
重ね重ねになりますが、InDesign日本語版20周年記念イベントをご視聴くださった皆さまへ多大なる感謝を申し上げます。

さてその20周年記念イベントの延長で、次回の東京のDTP勉強会ラジオにまた顔出しさせていただくことになりました。

dtpstudy.connpass.com

当日の裏話とかするのかな?
イベントをリードしてくださったYUJIさんのほか、大石さん、紺野さん、戸田さんもスピーカーとしていらっしゃるようです。こちらもぜひよろしくお願いいたします!

ダウンロードとコード全文

Gistにアップしていますので、ダウンロードはそちらからどうぞ。

f:id:uske_S:20210213111742p:plain
GistよりzipファイルをDLできます