同じ文字列のテキストオブジェクトを選択する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)以前から三階ラボさんのスクリプトを使って「同じフォント」「同じフォントサイズ」「同じフォント、サイズ」を使ってきたので、自分用のパレットはこのようになっています。
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)以降です。
ここから先は
¥ 100
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5