見出し画像

同じ文字列のテキストオブジェクトを選択するIllustratorのスクリプト

Illustrator 2022(26)から、同じフォント、同じフォントサイズなどの条件でテキストを選択できるようになりました。


同じ文字列のテキストオブジェクトを選択するIllustratorのスクリプト

欠けているのが「同じ文字列の選択」。たとえば、カタログのような制作物で「商品名:xxx」というテキストを選択したいようなときに重宝します。

調べたところ、そのものズバリが見当たらず、クリエイター手抜きプロジェクトの記事を参考にしました。

見よう見まねで「とりあえず、動く」程度のものですので、スクリプトに明るい方のリライトを期待します!


まったく同じ文字列のテキストオブジェクトを選択

フォントやカラーは無視し、文字列のみで判断します。
var sel = app.activeDocument.selection;
var findText = sel[0].contents;

var selObj = activeDocument.textFrames;

for (i=0; i<selObj.length; i++)
{
var temp = selObj[i].contents;
if (temp == findText) 
	selObj[i].selected = true;
}


選択した文字列を含むテキストオブジェクトを選択

テキストオブジェクト内に含まれていれば選択します。
var sel = app.activeDocument.selection;
var findText = sel[0].contents;

var selObj = activeDocument.textFrames;

for (i=0; i<selObj.length; i++)
{
var temp = selObj[i].contents;
if (temp.indexOf(findText) > -1) 
	selObj[i].selected = true;
}


1文字目のみが同じテキストオブジェクトを選択

「・」ではじまるテキストを選択するときに重宝します。
var sel = app.activeDocument.selection;
var findText = sel[0].contents.charAt(0);

var selObj = activeDocument.textFrames;

for (i=0; i<selObj.length; i++)
{
var temp = selObj[i].contents;
if (temp.charAt(0) == findText) 
	selObj[i].selected = true;
}


Keyboard Maestro向け

3つを使い分けるのは面倒ですので、パレットを使って管理しましょう。

  • option + 6でパレットを開く

  • Sキー:正確に選択(Same)

  • Yキー:選択したテキストが含まれている(ゆるく)

  • Fキー:1文字目が同じテキスト(First Letter)

Keyboard Maestroのパレットについては、こちらの記事にまとめています。

Illustrator 2022(26)以前から三階ラボさんのスクリプトを使って「同じフォント」「同じフォントサイズ」「同じフォント、サイズ」を使ってきたので、自分用のパレットはこのようになっています。

QWEはキーボードの並び順です。そういう意味ではSYFでなくSDFにすればよかった…


MaestroPackを使った拡張

さっそく翌日、したたか企画さんがリプライいただきました。

なるほど、このアクションと組み合わせると「選択した文字からはじまる」や「選択した文字で終わる」テキストを選択できます。

option + 6でパレットを開く

  • Aキー:正確に同じテキストを選択(All)

  • Sキー:選択した文字で開始(Start with)

  • Dキー:選択した文字で開始(enD with)

  • Fキー:1文字目が同じテキスト(First Letter)

  • Rキー:選択したテキストが含まれている(Rough)


ほぼ完全版

Illustrator 2022(26)からの同じフォント、同じフォントサイズなどの条件でのテキストを選択を含めたものです。


残りは選択している文字列を含むテキストの検索

せっかくなので一歩踏み込んで、部分的に選択しているテキストを対象にしたいですよね。

こんな感じかな〜と思うんでですが、動かず… おわかりの方がいれば、ぜひ、アドバイスをお願いします!

var sel = app.activeDocument.selection;
var findText = sel[0].textframe.textSelection.contents;

var selObj = activeDocument.textFrames;

for (i=0; i<selObj.length; i++)
{
var temp = selObj[i].contents;
if (temp.indexOf(findText) > -1) 
	selObj[i].selected = true;
}

したたか企画さんから助言をいただきました!

これで動きました。

var findText = app.activeDocument.selection.contents;

selObj = activeDocument.textFrames;
for (i=0; i<selObj.length; i++)
{
temp = selObj[i].contents;
if (temp.indexOf(findText) > -1) selObj[i].selected = true;
}

ところが「Ai Select Text Frames by Grep」がアップデートされ、テキストオブジェクトのテキストを部分的に対象にしている場合もカバーされるようになりました(感謝!!!)。


参考

あるふぁ(仮)さんのスクリプトも喜ぶ人がいそうです!



ダウンロード

したたか企画さんのKeyboard Maestro用追加アクション(プラグイン)MaestroPackが必要です。

MaestroPackは有料ですが、IllustratorやPhotoshopでKeyboard Maestroを使う方にはマストアイテムです。迷わず購入を強くオススメします。

対応はIllustrator 2022(26)以降です。

ここから先は

0字 / 1ファイル

¥ 100

定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5