このサイト配布InDesignスクリプトに下記のような記述のコードが頻繁に見受けられることがありますよね?
Main() function Main(){ app.doScript( "doMain()", ScriptLanguage.JAVASCRIPT, [], UndoModes.fastEntireScript ); } doMain(){ //何か処理 }
処理速度もアップする
「Main」を呼び出してそこから、「doScript」でさらに「doMain」を呼び出しています。何故、そんなまだるっこしいことをするかというと、「doScript」の3つ目の引数「UndoModes.fastEntireScript」とは「指定されたスクリプトをアンドゥ(Undo:取り消し)のことは忘れて、処理に集中します。」という意味なのです。このスクリプトの実行方法の利点は3つあります。
- スクリプト処理速度がアップする(多少)
- 取り消し操作1回でスクリプト実行前まで戻る
- エラーが発生した場合、スクリプト実行前まで戻る(try処理がない場合)
1つ目の利点
まず、1つ目の利点はInDesignがアンドゥを意識しないから、処理速度がアップするみたいです(体感で130%増量くらいと思われます)。大がかりなスクリプトほど効果は増大します。
2つ目の利点
2つ目の利点がこの記事の表題のことなのですが、つまり「Ctrl+z」で一発でスクリプト実行前に戻ることができるのです。例えば拙作「wordルビ振りplus」を例にとると、通常なら下記画像のように、
最後に処理した「ルビフラグをオンにする」動作がアンドゥ処理として記録されていますが、doScript(UndoModes.fastEntireScript)を使用すると、
「スクリプトの取り消し」とスクリプト自体の取り消しに相成るわけなのです。
スポンサーリンク
3つ目の利点
3つ目の利点も2つ目の利点に関連してますが、万一エラーが発生すればスクリプト実行前に戻ってくれるのです。ただしtry処理をしていない場合に限ります。していないと、下記イメージのようなメッセージが表示されちゃったあと、スクリプト実行前に戻ります。私の場合はtry処理を入れて途中まででも実行したことにしています。気に食わなければ、そこでUndoするとスクリプト実行前に戻ります。
引数の受け渡し方法
どうしても引数が必要な場合もあるでしょう、その場合の受け渡し方法は、
Main("文字列") function Main(str){ app.doScript( "doMain(\""+str+"\")", ScriptLanguage.JAVASCRIPT, [], UndoModes.fastEntireScript ); } doMain(){ //何か処理 }
このような感じでコーディングします。文字列を囲む“の前にエスケープ文字の\を付けます。いかがでしょうか?スクリプトを自分で書ける人も書けない人も、誰かに書いてもらったInDesignスクリプトをチェックしてみて、必要ならば書き加えてみてはいかがでしょうか?
スポンサーリンク
More from my site
スポンサーリンク