ExtendScript|ぼんぷろぐぼんぷろぐイラレとも仲良くなりたいInDesign使いのブログ[ExtendScript]#includeはどこに書いてもよく、コードの断片でもいいExtendScriptの#includeって、案外自由度が高くて、1行頭でさえあればどこに書いてもよく、書いた場所にインクルードしたファイルの内容が展開される。2インクルードする側、される側のコードがそれぞれJavascriptのコードとして成立していなくてもいい(インクルード後に成立していれば)という特徴があります。"nanka.jsx"...})()のように書けば、nanka.jsxを関数内のローカルスコープで読み込むことができます。"kakkotoji.txt"を実行すれば、alert(1)と同じになって1がアラートされるのです(kakkotoji.txtは実行するjsxファイルと同じフォルダに入れます)。したという感じですが...唯一役に立ちそうな使い道として思いついたのが、jsonファイルの読み込みです。"hoge.json"とするだけで、変数hogeにhoge.jsonをパースしたオブジェクトが入ります。前にMath.random()使っててやたら値が被るなぁと思って調べんたんですけど、ExtendScriptのMath.randomが作る値は65536通りしかありません。Math.random()*65536は常に整数です。2進数で書くと0.00000000000000000.00000000000000010.00000000000000100.0000000000000011...0.1111111111111111のような小数点以下16桁の数の中からランダムに出てくるわけです。65536通りって案外少ないです。100個の乱数を取得したとすると、その中で値が被ってしまう確率が7%もあります。AfterEffectsにはgenerateRandomNumber()という組み込み関数があって、Math.randomの代わりに使うことが推奨されているそうです。実行方法はほぼ同じで、主に以下の3つの方法があります。Codeを使ってる方もいます。2.エンジンの違いExtendScriptは#targetengineで実行エンジンの名前を指定できます。同じ名前のエンジンで実行するとグローバル変数などを共有できます。1回実行するごとにリセットされ、グローバル変数などが引き継がれない特殊なエンジンもあります(使い捨てのエンジンと呼ぶことにします)。BridgeTalk経由で実行される重要なのは同じ"main"エンジンが、InDesignでは使い捨てであり、Illustratorではそうでないという点です。Illustratorの使い捨てのエンジン名はtransientですが、これをESTKから指定することはできません。したがって、IllustratorでESTKを使う場合、1つのmainエンジンでスクリプトを何度も実行することになります。各所で配布されているIllustratorスクリプトで、全体を(function(){.....})()で囲み、極力グローバル変数を作らないようにしているものが多いのはこうした事情によるものです(たぶん)。3.テキスト選択時のselectionInDesignではテキストオブジェクトが入った配列です。Illustratorではテキストオブジェクトそのものになります。配列のつもりで書いてたらエラーになります。4.y軸の方向InDesignは下が正、Illustratorは上が正です。5.visibleBoundsとかgeometricBoundsとかの順番InDesignは上左下右、Illustratorは左上右下です。6.InDesignはexit()が使える7.Illustratorはなぜかappとか省略できる8.サロゲートペア文字text.charactersにおいて、サロゲートペア文字はInDesignだと1文字、Illustratorだと2文字とカウントされます。9.ScriptUIでモーダルダイアログモーダルダイアログっていうのはダイアログが出ている間アプリを操作できない系のダイアログのことです。Illustratorではモーダルダイアログが出てる間もスクリプトからはDOMをいじることができ、app.redraw()で表示を更新できます。InDesignではできません。InDesignでは、モーダルだけどプレビューを更新できる系のダイアログを作ることができません。BOM付きに相当するものはあるのでしょうか。探すよりバイナリモードで書き込んでやる方が早いと思ったので関数を書いてみました。("a");fileObj.write(txt);fileObj.close();}これができるとどんなおいしいことがあるかというと、AutoHotkey(AHK)スクリプトが書き出せます。AHKで日本語を扱うにはBOM付きで保存しないといけません。AHKを使うと、たとえばクリップボードに文字列を格納するのが超カンタンにできます。クリップボードに入れたい文字列と書くだけです。右辺は""で囲んだりする必要もありません。=(クリップボードに入れたい文字列)のように書きます。※『%』と『`』は特殊な意味を持つ記号なので、クリップボードに入れたい文字列に含まれる場合は『`%』『``』のようにエスケープしてやる必要があります。これを使って、InDesignで選択文字列に適用されているフォントのフォントファミリーネームをクリップボードに入れるExtendScriptを書いてみましょう。拡張子.ahkがAutoHotkeyに関連付けられていることが必要です。Mon.12プロフィールkawamoto_α(あるふぁ(仮))InDesignで新聞組版のようなことをしています。Reserved.忍者ブログ[PR]。