if (app.documents.length == 0) { alert("ドキュメントが開かれていません。"); } else { // 選択オブジェクト var idSelect = null; // 検索実行 var bFind = false; // ストーリー配列 var storyObjs=[]; // 検索位置 var nStroyIndex = 0; var nCharIndex = 0; // UIパラメータ var uiParam = { rubiStr : '', posX : -1, posY : -1, }; // UIパラメータ読み込み readUIParam(); // メイン画面リソース var mainDlgRes = "dialog { \ mainGroup: Group { orientation:'column', \ findGroup: Group { orientation:'row', alignment:'left', \ findText: StaticText { text:'ルビ文字:', justify:'right' }, \ findEdit: EditText { characters:30, text:'' }, \ }, \ buttonGroup: Group { orientation:'row', alignment:'right', \ findButton: Button { text:'検索', properties:{name:'ok'} }, \ } \ } \ }"; // 画面作成 var mainDlg = new Window(mainDlgRes, "ルビ検索"); // 表示 mainDlg.onShow = function () { // 初期値設定 mainDlg.mainGroup.findGroup.findEdit.text = uiParam.rubiStr; if ((uiParam.posX > -1) && (uiParam.posY > -1)) { dlgWid = mainDlg.bounds.width; dlgHei = mainDlg.bounds.height; mainDlg.bounds.left = uiParam.posX; mainDlg.bounds.right = uiParam.posX + dlgWid; mainDlg.bounds.top = uiParam.posY; mainDlg.bounds.bottom = uiParam.posY + dlgHei; } } // 検索ボタン mainDlg.mainGroup.buttonGroup.findButton.onClick = function() { // 入力値 var szFind = mainDlg.mainGroup.findGroup.findEdit.text; if (szFind.length == 0) { alert("検索文字を設定して下さい。"); } else { // アクティブドキュメント var idDoc = app.activeDocument; // 検索処理 if (idDoc == null) { alert("ドキュメントが開かれていません。"); } else { bFind = true; // すべてのストーリー { var nStroyCnt = idDoc.stories.length; for (var nStroyPos = 0; nStroyPos < nStroyCnt; nStroyPos++) { var idStory = idDoc.stories[nStroyPos]; if (storyObjsIndex(idStory) == -1) { storyObjs.push(idStory); } // 表 var nTableCnt =idStory.tables.length; for (var nTablePos = 0; nTablePos < nTableCnt; nTablePos++) { var idTable = idStory.tables[nTablePos]; // セル var nCellCnt = idTable.cells.length; for (var nCellPos = 0; nCellPos < nCellCnt; nCellPos++) { var idCell = idTable.cells[nCellPos]; if (storyObjsIndex(idCell) == -1) { storyObjs.push(idCell); } } } } } // 選択位置 { var selObj= idDoc.selection; for (var nPos = 0; nPos < selObj.length; nPos++) { var idObj = selObj[nPos]; if (idObj instanceof Character) { nCharIndex = idObj.index + 1; nStroyIndex = storyObjsIndex(idObj.parent); } else if (idObj instanceof InsertionPoint) { nCharIndex = idObj.index; nStroyIndex = storyObjsIndex(idObj.parent); } } } // story var nStroyCnt = storyObjs.length; for (var nStroyPos = 0; nStroyPos < nStroyCnt; nStroyPos++) { nStroyFind = nStroyIndex + nStroyPos; if (nStroyFind >= nStroyCnt) { nStroyFind -= nStroyCnt; } var idStory = storyObjs[nStroyFind]; // Characters var nCharCnt = idStory.characters.length; var nCharPos = 0; if (nStroyPos == 0) { nCharPos = nCharIndex; } for (; nCharPos < nCharCnt; nCharPos++) { var idChar = idStory.characters[nCharPos]; // Characterルビ if ((idChar.rubyFlag == true) && (idChar.rubyString.indexOf(szFind) > -1)) { // Characterを選択する idSelect = idChar; break; } } if (nCharPos < nCharCnt) { break; } } mainDlg.close(true); } } } // 画面表示 mainDlg.show(); if (bFind) { uiParam.rubiStr = mainDlg.mainGroup.findGroup.findEdit.text; uiParam.posX = mainDlg.bounds.x; uiParam.posY = mainDlg.bounds.y; // UIパラメータ書き込み writeUIParam(); if (idSelect != null) { var zoomPer = app.activeWindow.zoomPercentage; app.activeWindow.select(idSelect); app.activeWindow.zoomPercentage = zoomPer; } else { alert("ルビ文字が見つかりません。"); } } // ストーリー配列内の位置を取得 function storyObjsIndex(storyObj) { var ret = -1; var nStoryCnt = storyObjs.length; for (var nStoryPos = 0; nStoryPos < nStoryCnt; nStoryPos++) { if (storyObjs[nStoryPos].id == storyObj.id) { ret = nStoryPos; break; } } return ret; } // UIパラメータパス function getUIParamPath() { var ret = "" var szUserData = Folder.userData; var szFolder = szUserData + "/IDScript"; var scriptFolder = new Folder(szFolder); if (scriptFolder.exists == false) { scriptFolder.create(); } return szFolder + "/_FindRubi.txt"; } // UIパラメータ読み込み function readUIParam() { // パラメータパス var szParam = getUIParamPath(); // Fileオブジェクト var paramFile = new File(szParam); if (paramFile.exists == true) { paramFile.open('r'); uiParam = eval(paramFile.read()); paramFile.close(); } } // UIパラメータ書き込み function writeUIParam() { // パラメータパス var szParam = getUIParamPath(); // Fileオブジェクト var paramFile = new File(szParam); paramFile.open('w'); paramFile.write(uneval(uiParam)); paramFile.close(); } }