InDesign向けJavaScriptでの検索・置換
題字の如く、InDesign向けJavaScriptにおける検索や置換のコードについて実例を示す。なお、Windows版InDesign CS6で動作を確認した。
テキスト検索
基本的な手続きとしては、検索条件のプロパティを設定し、置換テキストを設定し、検索を実行するコードを記述する。
//プロパティの初期化 app.findTextPreferences.findWhat = NothingEnum.nothing; app.changeTextPreferences.changeTo = NothingEnum.nothing; //検索条件と置換後の文字列との設定 app.findTextPreferences.findWhat = "検索文字列"; app.changeTextPreferences.changeTo = "置換後文字列"; //現在編集中の全てのドキュメント app.changeText(); //選択範囲 var text = app.activeDocument.selection; for(var i = 0; i < text.length; i++) { text[i].changeText(); } //ドキュメント全体 for (var i = 0; i < app.activeDocument.pages.length; i++) { var pageObject = app.activeDocument.pages[i]; for (var j = 0; j < pageObject.textFrames.length; j++) { pageObject.textFrames[j].parentStory.changeText(); } } //検索条件等の消去 app.findTextPreferences.findWhat = NothingEnum.nothing; app.changeTextPreferences.changeTo = NothingEnum.nothing;
app.findTextPreferencesオブジェクトのプロパティが、appオブジェクトのメソッドの挙動に影響するのみならず、selectionのメソッドやparentStoryのメソッドの挙動に影響を及ぼすことに注意。
以下の正規表現や字形置換でも同様である。
正規表現
簡潔に設定部分だけを示す。手続きは先と同様である。
//検索 app.findGrepPreferences.findWhat = "(\\d)"; //置換 app.changeGrepPreferences.changeTo = "$1";
置換メソッドはchangeGrep()を使用する。検索範囲に合せて、上記のコードのchangeTextメソッドを置き換えればよい。
字形置換
これも手続きは同じだが上記と比べると設定が少し厄介だ。先と同様に設定部分だけを示すが、フォント名を正しく指定しないとエラーが出る。また、フォント名とウェイトとは「タブ」で繋ぎ、GlyphIDプロパティにCID番号を指定する。
//検索条件 app.findGlyphPreferences.appliedFont = app.fonts.item("小塚明朝 Pro" + " "+"R"); app.findGlyphPreferences.glyphID = 2051; //置換設定 app.changeGlyphPreferences.appliedFont = app.fonts.item("小塚明朝 Pro" + " "+"R"); app.changeGlyphPreferences.glyphID = 4467;
置換メソッドはchangeGlyph()を使用する。今までと同じく検索範囲に応じて呼び出すべきメソッドが属するオブジェクトが異なることに留意する。