忍者ブログ

ぼんぷろぐ

InDesign、イラレ、フォトショ(CS6 Win)の勉強中。。。(旧まとめいみブログ)

[InDesign]
InDesignの置換クエリをメニューから直接実行できるようにしてみる

(2015.07.17 あたらしいの→スクリプトをフォルダ構造のままInDesignメニューにするスクリプト


InDesignの検索置換機能はとっても多機能ですごいんだけど、
どうにも実行するまでの手数が多い。
びゃーーーっとテキスト範囲選択してぽぽんっといきたいものです。

てことでScriptMenuActionのお勉強がてら作ってみました。
スクリプトを実行すると、メニューバーに「置換」が追加され、クエリ名を選択すれば即置換が実行されます。
置換の対象は、テキストにカーソルを置いてた場合はストーリー全体、テキストを範囲選択してた場合はその範囲、テキストフレームやセルを選択してた場合はその中身です。
オブジェクトの置換には対応してません。



ダウンロード

[置換クエリをメニューにver1.0]

初期仕様

・自分で定義したすべての検索置換クエリ(オブジェクトを除く)をメニューにします。
・プリセットのクエリから、使い所のありそうな"末尾の空白文字を削除"、"複数改行から単一改行"の2つをメニューに追加します。
・置換関連のメニューをまとめておきたいので、コンテキストメニューにもある「すべて大文字」「すべて小文字」もメニューに加えます。

ちゅうい

・クエリ名を取得するうまいメソッドが見つからないので、クエリ保存フォルダ内のxmlファイルのファイル名から取得してます。フォルダの場所は「Scripts Panel」フォルダの上の上のフォルダにある「Find-Change Queries」フォルダ、としてるんですが環境によって違うかもしれません。違ってる場合は
12行目 var QueriesFolderName= app.scriptPreferences.scriptsFolder.parent.parent.fullName+"/Find-Change Queries";
をうまく書き換えるか、下記のクエリ名を直接記述する方式を使って下さい。

・InDesignを再起動するとメニューバーに[置換]は残りますが、中のメニューは消えます。
[置換]を消したい場合は同梱の「置換メニューを削除.jsx」を実行します。
毎回置換クエリメニューを生成させる場合は「置換クエリをメニューに.jsx」を「Startup Scripts」フォルダに入れときます。

・InDesignスクリプトでの「メニューのいじり方」はある程度分かるのですが、滅茶苦茶にいじっちゃったメニューの「初期状態への戻し方」は、私にはよく分かってません。メニューをいじるのはある程度リスクがあることかもしれません。改造して使ったりする場合はお気をつけて。

カスタマイズ

・全部をメニューにしたくない場合

クエリが大量にあるとかで全部をメニューにしたくない場合は
15行目からの
var TextQueries= getDisplayNames(Folder(QueriesFolderName+"/Text").getFiles("*.xml"));
var GREPQueries= getDisplayNames(Folder(QueriesFolderName+"/GREP").getFiles("*.xml"));
var GlyphQueries= getDisplayNames(Folder(QueriesFolderName+"/Glyph").getFiles("*.xml"));
var TransliterateQueries= getDisplayNames(Folder(QueriesFolderName+"/Transliterate").getFiles("*.xml"));
を削除し、かわりに
var TextQueries=["テキストクエリ名1","テキストクエリ名2"];
var GREPQueries=["正規表現クエリ名1","正規表現クエリ名2"];
var GlyphQueries=["字形クエリ名1","字形クエリ名2"];
var TransliterateQueries=["文字種変換クエリ名1","文字種変換クエリ名2"];
のように、メニューにしたいクエリ名だけを直接、文字列の配列として記述します。

・プリセットのクエリを追加または削除したい場合

 ファイル名からクエリ名を取得する方式では、プリセットのクエリ("点線から EN ダッシュ"とか)は取得できないため、使いたい場合は25行目からの
TextQueries=TextQueries.concat([]);
GREPQueries= GREPQueries.concat(["末尾の空白文字を削除","複数改行から単一改行"]);
GlyphQueries=GlyphQueries.concat([]);
TransliterateQueries=TransliterateQueries.concat([]);
のconcat()内にクエリ名を文字列の配列として書きます。

デフォルトでは"末尾の空白文字を削除"と"複数改行から単一改行"を追加してますがいらない場合は消します。
 なお、自分で定義したクエリは全取得しつつ、下記の複数実行クエリなどを追加したい場合もここのconcat()内に書きます。

・メニュー表示名をクエリ名と別にしたい場合

 上記の方法でクエリ名を文字列の配列として記述するとき、
"テキストクエリ名1"と書いてた部分を
{name:"メニュー表示名",query:"テキストクエリ名1"}
と書くと、"テキストクエリ名1"のクエリを実行するメニューが、"メニュー表示名"の名前で作られます。

・複数のクエリを続けて実行するメニューを作りたい場合

 "テキストクエリ名1"と書いてた部分を
{name:"メニュー表示名",query:["テキストクエリ名1","テキストクエリ名2"]}
と書くと、"テキストクエリ名1"と"テキストクエリ名2"のクエリを続けて実行するメニューが、"メニュー表示名"の名前で作られます。3つ以上でもOK。

・任意のメニューを追加したい場合

置換クエリ実行とはまったく別のメニューを追加できます。

42行目の
var MenuNames=["$ID/To Uppercase","$ID/To Lowercase"];
の配列内にメニューの名前を追記していきます。

デフォルトでは「すべて大文字」と「すべて小文字」を追加してます。日本語版じゃないInDesignでも通用するIDを使って書いてますが、"すべて大文字","すべて小文字"と書いても同じことです。"保存"とか"開く"みたいなコマンド名を書くだけで、MenuActionItemsからMenuActionを取得して実行できます。
スクリプトパネルにあるスクリプトであれば、"スクリプト名.jsx"でそのスクリプトを実行するメニューになります。

今気づいた

・正規表現置換と字形置換の組み合わせとかできないねこれ
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

あるふぁ(仮)
InDesignで新聞組版のようなことをしてる人です。

InDesignスクリプトについて

つくったInDesignスクリプトのまとめ

twitter

5つの「く」

ハタハタのすばらしさをまとめました。