忍者ブログ

ぼんぷろぐ

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

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

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

[InDesign]
テキストをコピペしてテキストフレームができたときに教えてくれるスクリプト

InDesignでは「テキストカーソルを置いてない状態でテキストをペーストすると、新しく作られたテキストフレーム内にペーストされる」という仕様になっていますが、そういうペーストをしたときに警告を出すスクリプトを書いてみました。



もちろん事故防止のためです。別にやらかしたわけではないんですけどね。考えてみたら怖いなーと思ったので。特に怖いのは「文字ツールを使っているが何も選択していない」とき。普通はペーストしたテキストフレーム等はペースト直後に選択された状態になりますが、このときだけ選択状態は変わらず、静かに画面中央あたりにテキストフレームが生まれます。


ダイアログ文の自信なさげな感じを見てわかるとおり、判定は確実じゃありません。自動生成されるテキストフレームが、いつも150pt×150ptのサイズであることを利用しているため、偶然同じサイズのテキストフレームをペーストしたときにも同じ警告が出てしまいます。まあウチはmm単位系でやってるからまず起きないし…てことで深入りしませんでした。


使い方は以下のコードを拡張子jsxで保存してStartup Scriptsフォルダに入れるだけ。「いいえ」を押したらアンドゥしてくれる機能つき
#targetengine "CopipeCheck"
function myHandler() {
    try{
    var sel0 = app.selection[0];
    if (!sel0) sel0=app.layoutWindows[0].activeLayer.textFrames[0]
    if (sel0.constructor.name != "TextFrame") return;
    app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;
    var vb = sel0.visibleBounds;
    if (Math.abs(vb[2] - vb[0] - 150) + Math.abs(vb[3] - vb[1] - 150) < 0.001) {
        if (!confirm("テキストがテキストフレームとしてペーストされたかも…\nいいですか?")) app.activeDocument.undo()
    }
    }catch(e){}
}

function addEL(obj, eventName, handler, name) {
    var el0 = obj.eventListeners.item(name);
    if (el0.isValid) el0.remove();
    obj.addEventListener(eventName, handler).name = name;
}
addEL(app.menuActions.item("ペースト"), "afterInvoke", myHandler, "CopipeCheck1");
PR

[InDesign]
フレームを選択すると画像がセンタリングされてるか表示してくれるスクリプト

画像フレームを選択すると、中の画像がフレームの縦横中央にそれぞれ配置されてるかどうかをパレット(※1)に表示してくれるスクリプトです。

※1 パレットとはScriptUIで作るウインドウのうち、常に親アプリのウインドウより手前に表示され、アプリをモーダル(入力待ち)状態にはしないものです。「ドッキング可能なパネル」ではありません。



AJABONさんのお題にのっかって作ってみたものです。AJABONさん自身がスクリプト書きなので、必要な要素は適宜書き足して使ってくれるだろうということでかなりシンプルな作りになってます。実用にするなら複数選択時の処理とか中身の画像を選択したときの処理とかを追加しないと使いづらいでしょう。

そんな中途半端なスクリプトですが、「選択アイテムに関する情報をパレットに表示するスクリプト」の例として見るとかなり応用範囲が広いし、それ系のスクリプトが公開されてるのを見たことがないのでせっかくだから記事にしておきました。

#targetengine "testestest"
var w0=new Window("palette");
var tate=w0.add("statictext",undefined,"縦:?")
var yoko=w0.add("statictext",undefined,"横:?")
var ev0=app.addEventListener("afterSelectionChanged", function(ev){
   try{
    var sel=ev.target.selection;
    if (sel.length==1 && sel[0].hasOwnProperty("graphics")  && sel[0].graphics.length==1){
        var c0=checkCenter(sel[0]);
        tate.text=c0[0]?"縦:◯":"縦:×";
        yoko.text=c0[1]?"横:◯":"横:×";
    } else {
        tate.text="縦:?";
        yoko.text="横:?";
    }
    }catch(e){}
})
w0.onClose=function(){ev0.remove()}
w0.show()
function checkCenter(frame){
    var g0=frame.graphics[0];
    var vb1=frame.visibleBounds;
    var vb2=g0.visibleBounds;
    return [Math.pow((vb1[2]+vb1[0])-(vb2[2]+vb2[0]),2)<0.01,Math.pow((vb1[3]+vb1[1])-(vb2[3]+vb2[1]),2)<0.01];
}


[ExtendScript]
ExtendScriptのココがJavaScriptじゃないよ

(追記)なんかごちゃごちゃしてるのでこっちにまとめ直しました


ExtendScriptの独自のものとか、JavaScriptの仕様に反するようなものを知ってる限りあげてみました。といっても1.以外はほんとに重箱の隅みたいなのばかりです。何かほかにもありましたらぜひコメントくださいませ。(「今時のJavaScriptにあるこんな機能がExtendScriptにはない」っていうのは対象外です)

1. File,Folder,Socket,BridgeTalk,UnitValue,$,ScriptUIが使える

Extendというだけあって、様々な組み込みオブジェクトで機能が拡張されています。
File、Folderはそのまんまファイルとフォルダが扱え、SocketはTCP/IP通信、BridgeTalkはアドビアプリの間の通信、UnitValueは長さの単位がついた値の演算や単位変換ができます。$は主にデバッグに使うヘルパーオブジェクトです。ScriptUIはダイアログとかを作るアレです。

2. XMLが使える

XMLを扱うことができます。なんで1.にまとめなかったのかと言えば、独自のリテラル(表記方法)や演算子があることと、XMLがBoolean,null,undefined,Number,String,Objectに次ぐ第7の『型』であることからです。
この機能はE4Xと呼ばれる、ECMAScriptの拡張であるECMA-357に基づいたものであるようです。一時期Firefoxなどでも使えたようですが、今は廃止されています。

3. """でヒアドキュメント

通常『"』1つで囲む文字列を3つにすることで改行やタブなどがそのまま有効な文字列になります。こういうのをヒアドキュメントって言うそうです。

[InDesign]
テキストの右クリックメニューに「字形」を追加するスクリプト




InDesignの字形パネルメニューにある『JIS90字形』『等幅半角字形』などを、テキスト選択時のコンテキストメニュー(右クリックメニュー)から使えるようにするスクリプトです。

//@target "indesign"
var s1 = app.menus.item("文字のコンテキストメニュー").submenus.item("字形");
if (s1.isValid) {
    s1.remove();
} else {
    s1 = app.menus.item("文字のコンテキストメニュー").submenus.add("字形");
    var s2 = app.menus.item("字形パネルメニュー");
    for (var i = 2; i < 15; i++) s1.menuItems.add(s2.menuItems[i].associatedMenuAction);
}

上記スクリプトをInDesignのスクリプトパネルかExtendScript toolkitで1回だけ実行してください。テキストのコンテキストメニューに「字形」が追加されます。消したいときは同じスクリプトをもう一回実行します。


※「字形パネルメニュー」の3項目目~15項目目(サブメニューは含まない)を、「文字のコンテキストメニュー」の下に作った「字形」サブメニューにコピーするという手抜きスクリプトです。ですのでバージョンアップにより字形パネルメニューの順番が変わってたら使えなくなります。
※CS6で開発しています。CCでダメだったらお知らせください。

プロフィール

kawamoto_α
(あるふぁ(仮))


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

ツイッタ

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



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



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



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