忍者ブログ

ぼんぷろぐ

InDesignとかイラレとかのスクリプトよもやま話

新しいブログに引っ越しました。

こちらのブログはもう更新しませんが、コメント欄は生きてますので疑問、ご指摘などありましたらどうぞ。

[ExtendScript]
ExtendScript Toolkitにコード整形機能をつけてみる

Adobeの英語フォーラムかなんかで見かけたんですけど、ESTKのDOMってそのままだとあんまりいじるところが無いですが、
#target estoolkit#dbg
っていうおまじないを書いておくと編集中のテキストを取得したりとかいろいろできるみたいです。ただしいちいち保存しないと実行させてくれない。

てことでなにかと嫌われがちなESTKですが、アレさえあればもっと愛されるツールになるのにっていうアレを実装してみました。



①コード整形には js-beautify を使わせてもらいます。https://github.com/beautify-web/js-beautify からダウンロードしてbeautify.jsを適当な場所に置きます。
(2019/09/11追記)
【ExtendScript】コード自動整形機能の追加方法について | CGメソッド
こちらのブログによると今のjs-beautifyにはExtendScriptで実行可能なbeautify.jsが含まれてないようです。過去のバージョンがダウンロードできるリンクも貼っていただいてます。ありがたやー。
(追記ここまで)

②以下のコードの6行目をbeautify.jsを置いた場所に応じて書き換え、jsxファイルとして保存します。
#target estoolkit#dbg
var toolMenu = MenuElement.find ("toolA") || new MenuElement("menu", "ツール", "at the end of menubar", "toolA");
var beautifyCommand = MenuElement.find ("toolA/beautify") || new MenuElement("command", "整形", "at the end of toolA", "toolA/beautify");
var js_beautify = (function () {
    var exports = {};
    #include "C:\\lib\\beautify.js"
    return exports;
})();

beautifyCommand.onSelect = function() {
    try {
        var editor = document.editor;
        var selText=editor.textselection;
        var code=selText.length>0?selText:editor.text;
        code = code.replace(/^\s*#(?=(target|targetengine|include|includepath|script|strict))/mg, "//@");
        if (code.indexOf("\"\"\"") > -1) {
            if(!confirm("\"\"\"が含まれているため正常に整形できない可能性があります.\n続行しますか?")) return;
        }
        code = js_beautify.js_beautify(code);
        if (selText.length>0) document.editor.textselection = code;
        else editor.text = code;
    } catch (e) {
        alert(e);
    }
}

③これを実行すればメニューにツール>整形が追加されるわけですが、起動時に自動実行させるには、こいつをESTKの実行ファイルがあるフォルダの下の"Required"フォルダ内にぶち込んでやります。

これであんなに汚かったコードが…


なんということでしょう こんなに読みやすく…っていうほどでもないな。こりゃ例が悪いわ。1行目のaと2行目のbもちゃんと等幅フォント使ってれば揃います。


PR

プロフィール

kawamoto_α
(あるふぁ(仮))


InDesignで新聞組版のようなことをしています。

ツイッタ

※ブラウザによっては当ブログからDLしたzipファイルが拡張子なしになることがあるようですが、.zipを補って開いてください。



イラレ用トーンカーブスクリプト(¥1500)



クロソイド式角丸長方形スクリプト(¥500)
Illustrator用
InDesign用



イラレスクリプトをキーボードショートカットで実行するやつ(Win用)