忍者ブログ

ぼんぷろぐ

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

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

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

[イラレ]
全角英数←→半角英数を変換するイラレスクリプト

選択物の中の全角英数を半角英数にするスクリプトと、その逆の2点セットです。

いやこんなものとっくに誰かが作ってると思うんですが、これを使ったテキストの複数選択に対応したものが欲しかったので自分で書いてみました。たとえば「2文字以上の数字を半角にする」などという操作も正規表現検索選択との合わせ技で柔軟にできるわけです。

[ダウンロード]

以下ソース(全角→半角の方)

(function(){

var sel=app.selection;
var selTexts=[];
if (sel.constructor.name=="TextRange") {
    selTexts.push(sel)
} else {
    (function (items){
        for (var i=0;i<items.length;i++){
            switch (items[i].constructor.name){
                case "TextRange":
                    selTexts.push(items[i])
                    break;
                case "TextFrame":
                    if (!lockedOrHidden(items[i])) selTexts=selTexts.concat(items[i].textSelection);
                    break;
                case "GroupItem":
                    if (!lockedOrHidden(items[i])) arguments.callee(items[i].pageItems);
                    break;
            }
        }
    })(sel);
}

for (var i=0;i<selTexts.length;i++){
    var str=selTexts[i].contents;
    var offset=selTexts[i].characterOffset;
    var c=selTexts[i].characters[0];
    var n,s;
    for (var j=0;j<str.length;j++){
        n=str.charCodeAt(j);
        s="";
        if (n==0x3000) s=" ";
        else if (0xFF01<=n && n<=0xFF5E) s=String.fromCharCode(n-0xFEE0);
        if (s!=="") {
            c.characterOffset=offset+j-1;
            c.contents=s;
        }
    }
}

function lockedOrHidden(pageItem){
    return pageItem.locked || pageItem.hidden || pageItem.layer.locked || pageItem.layer.hidden;
}
})();
PR

[イラレ]
イラレスクリプトで正規表現検索したテキストを「すべて同時に選択」しちゃう

イラレってスクリプトからだと離れた箇所のテキストを同時に選択できるのですが、それを使ったスクリプトが出回ってるのを全く見ないあたり、単に知られてないのか、特定のバージョンでしかできないのか、はたまた何か深刻なバグを抱えているから避けられてるのか、よく分からないのです。別に私が発見したわけじゃなく、かなり前に誰かのツイートか何かで知ったので、知ってる人は知ってることだと思うんですが。

そういう事情ですので何かあっても泣かずに怒らずに報告してくれる人だけ使ってみてください。
・選択範囲内
・選択テキストまたはカーソルを含むストーリー(連結された一連のテキスト)
・ドキュメント全体
のいずれかを対象に正規表現でテキスト検索し、マッチした部分をすべて選択するスクリプトです。非表示やロックされてるオブジェクトは対象にしません。

選択しちゃえば文字スタイルを当てたり前後のアキを調整したりなんてことはすべて同時にできるので、使いどころは割りと多いのでは。


[ダウンロード]

なお正規表現はExtendScriptのRegExpをほぼそのまま使ったもので、
・\dは全角数字にヒットしない([0-9]を使おう)
・先読み(前に◯がつく△を検索)、否定先読みができない
などの特徴があります。

「正規表現」のチェックを外せば普通のテキスト検索ができます。

(16.04.17)$がちゃんと段落終わりにマッチするように修正)
(16.05.22)
 検索文字列入力欄を長くした
 \.で.にマッチしない問題を修正
 \kで漢字にマッチするようにした
(16.05.23)
 
$.writelnの消し忘れを修正

[イラレ]
無変換キー押下中に線幅・効果・パターンの拡大縮小をONにする(AutoHotkey)

イラレでページアイテムの四隅をドラッグして変形するとき、Shiftを押しながらだと縦横比保持とか、Alt押しながらだと中心位置を保持とかっていう機能がありますが、そんな感じで無変換キーを押してると線幅・効果・パターンも変形されるようにしてみましょう。日本語キーボードの負の遺産、無変換キーを有効活用できるというのもAutoHotkeyの大きな利点です。

環境設定の「パターンも変形する」「線幅と効果も拡大縮小」をONにするExtendScriptはこうです。trueをfalseにしたらOFFになります。
app.preferences.setBooleanPreference("transformPatterns",true);
app.preferences.setBooleanPreference("scaleLineWeight",true);

あとはこれを無変換キー+左クリック押し始めに実行して、放した瞬間にOFFの方を実行する、というのをAHKスクリプトで書きます。vk1Dsc07Bというのが無変換キーを表す文字列。キーボードやマウスの入力はAutoHotkeyがホットキーとして受け取るとイラレ側には送られないので、左クリックだけはちゃんとSendコマンドで送ってやります。

vk1Dsc07B & LButton::
    js=
    (
    app.preferences.setBooleanPreference("transformPatterns",true);
    app.preferences.setBooleanPreference("scaleLineWeight",true);
    )
    app:=ComObjActive("Illustrator.Application")
    app.DoJavaScript(js)
    Send, {LButton down}
Return

vk1Dsc07B & LButton Up::
    Send, {LButton up}
    js=
    (
    app.preferences.setBooleanPreference("transformPatterns",false);
    app.preferences.setBooleanPreference("scaleLineWeight",false);
    )
    app:=ComObjActive("Illustrator.Application")
    app.DoJavaScript(js)
Return

できあがりー

追記:
上記のスクリプトでは、自由変形ツールでShiftやAltキーと無変換キーを組み合わせて使った場合にShift、Altが無効化されてしまうことがわかりました(選択ツールだと大丈夫なのに…)。
で、下記のようにマウスの左ボタンを放すときに押されてるキーも一緒に送ってやれば大丈夫そう。

vk1Dsc07B & LButton::
    js=
    (
    app.preferences.setBooleanPreference("transformPatterns",true);
    app.preferences.setBooleanPreference("scaleLineWeight",true);
    )
    app:=ComObjActive(AiProgId)
    app.DoJavaScript(js)
    Send, {LButton down}
Return
vk1Dsc07B & LButton Up::
    if (GetKeyState("Shift")=1)
    {
        if(GetKeyState("Alt")=1)
            Send, !+{LButton up}
        else
            Send, +{LButton up}
    }
    else
    {
        if(GetKeyState("Alt")=1)
            Send, !{LButton up}
        else
            Send, {LButton up}
    }
    js=
    (
    app.preferences.setBooleanPreference("transformPatterns",false);
    app.preferences.setBooleanPreference("scaleLineWeight",false);
    )
    app:=ComObjActive(AiProgId)
    app.DoJavaScript(js)
Return

[イラレ]
テキストエリアを文字サイズの整数倍にするスクリプト

長方形のエリアテキストを選択して実行すると、テキストエリアの横幅(縦組みなら縦幅)を1文字目の文字サイズ×水平比率(縦組みなら垂直比率)の整数倍にします。
エリア内文字オプションの段組みやオフセットにも対応してます。

※回転とかシアーがかかってるとダメです

[ダウンロード]

プロフィール

kawamoto_α
(あるふぁ(仮))


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

ツイッタ

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



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



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



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