ルビ文字置換
ルビの検索置換 - 名もないテクノ手について、同じくせうぞー師匠んちの「run_Queries」のソースを追加して検索範囲を設定できるようにしました。
ついでに、親文字/ルビ文字/置換後のルビ文字 について、ユーザーが入力できるようにしました。
動作確認環境:WindowsXP sp3/InDesign CS5(7.0.4)
var my_find_p = prompt("検索するルビの親文字(列)を入力してください。"); var my_find_ruby = prompt("検索するルビ文字(列)を入力してください。"); var my_change_str =prompt("置換したいルビ文字(列)を入力してください。"); ////////////////////////////////////////////エラー処理 function myerror(mess) { if (arguments.length > 0) { alert(mess); } exit(); } ////////////////////////////////////////////ラジオダイアログ /* myTitle ダイアログ(バー)のタイトル myPrompt メッセージ myList ラジオボタンに展開するリスト result 選択したリスト番号 */ function radioDialog(my_title, my_prompt, my_list){ var my_dialog = app.dialogs.add({name:my_title, canCancel:true}); with(my_dialog) { with(dialogColumns.add()) { // プロンプト staticTexts.add({staticLabel:my_prompt}); with (borderPanels.add()) { var my_radio_group = radiobuttonGroups.add(); with (my_radio_group) { for (var i = 0; i < my_list.length; i++){ if (i == 0) { radiobuttonControls.add({staticLabel:my_list[i], checkedState:true}); } else { radiobuttonControls.add({staticLabel:my_list[i]}); } } } } } } if (my_dialog.show() == true) { var ans = my_radio_group.selectedButton; //正常にダイアログを片付ける my_dialog.destroy(); //選択したアイテムの番号を返す return ans; } else { // ユーザが「キャンセル」をクリックしたので、メモリからダイアログボックスを削除 my_dialog.destroy(); } } ////////////////////////////////////////////選択テキストのストーリを返す。選択チェックを兼ねる。 function get_story() { var mydocument = app.activeDocument; if (mydocument.selection.length == 0) {myerror("テキストを選択してください")} var myselection = mydocument.selection[0]; var myclass =myselection.reflect.name; myclass = "Text, TextColumn, Story, Paragraph, Line, Word, Character, TextStyleRange".match(myclass); if (myclass == null) {myerror("テキストを選択してください")} return myselection.parentStory;//ストーリーオブジェクトを返す } ////////////////////////////////////////////以下処理 if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")} var mydocument = app.activeDocument; //検索範囲を指定 app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll; var my_range = radioDialog("rubystring_replace", "検索範囲を指定してください", ["選択範囲", "ストーリー", "ドキュメント"]); if (my_range ==0) {//選択範囲 get_story();//選択チェックとして使用 var my_range_obj = mydocument.selection[0]; } else if (my_range == 1) {//ストーリー var my_range_obj = get_story(); } else if (my_range == 2) {//"ドキュメント" var my_range_obj = mydocument; } else { myerror("処理をキャンセルしました"); } function my_RegexFindChange(my_range, my_find) { //検索の初期化 app.findGrepPreferences = NothingEnum.nothing; app.changeGrepPreferences = NothingEnum.nothing; //検索オプション app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか app.findGrepPreferences.properties = my_find;//検索の設定 return my_range.findGrep();//検索のみの場合:マッチしたオブジェクトを返す } var my_doc = app.documents[0]; var my_texts = my_RegexFindChange(my_doc, {findWhat:my_find_p}); for (var i = 0; i < my_texts.length; i++) { my_texts[i].rubyString = my_texts[i].rubyString.replace(my_find_ruby, my_change_str); }