javascrptのループ処理について

[7421]javascrptのループ処理について 投稿者:きじまえみ 投稿日:2013/04/03 17:08:52
indesignのjavascrptを勉強中です。
公開されているスクリプトを参考に、ルビの一括置換を考えているのですが
選択されたテキストボックスを処理するものだった為、
ドキュメント全体のテキストボックスを対象にできればと模索中です。

ループ処理が上手くいっていない気がするのですが
どうにもつまずいて進まなくなってしまったので
ヒントだけでもいただけるとありがたいです。
どうぞよろしくお願いいたします。


★作業環境★
MacOS:10.6.8
indesign:CS4


★javascrpt
var rubyPos = [];
var count = 0;

//ココがおかしい気がしています
(function(){
var docObj = app.activeDocument;
for (var i=0; i<docObj.pages.length; i++)
{
var selObj = docObj.pages[i].textFrames;
for (var j=0; j<selObj.length; j++)
{
checkRuby(selObj[j]);
setRuby(selObj[j]);
}
}
})();
//ココまで

var startRubyChar = "(";
var endRubyChar = ")";
var srcText = tfObj.parentStory.contents
for (var i=0; i<srcText.length; i++){
var c = srcText[i];
if (c != startRubyChar) continue;
var sp = i;
for (var j=i; j<srcText.length; j++){
if (srcText[j] != endRubyChar) continue;
var ep = j;
break;
}
var rStr = srcText.substring(sp+1,ep);
var flag = rStr.match(/^[ぁ-ん|ァ-ン]/g);
if (flag != null){
for (var k=sp-1; k>-1; k--){
c = srcText.charAt(k);
flag = c.match(/^[一-龠|々]/);
if (k == 0) {
k = -1;
flag = null;
}
if (flag != null) continue;
var spk = k+1;
rubyPos[count] = [spk, sp, sp+1, ep];
count++;
break;
}
}
}
}

function setRuby(tfObj){
for (var i=count-1; count>1; i--){
try{
var rubyStr = tfObj.parentStory.contents.substring(rubyPos[i][2], rubyPos[i][3]);
}catch(e){ return; }
tfObj.parentStory.characters.itemByRange(rubyPos[i][2]-1, rubyPos[i][3]).remove();
charaObj = tfObj.parentStory.characters.itemByRange(rubyPos[i][0], rubyPos[i][1]-1);
charaObj.rubyFlag = true;
charaObj.rubyType = RubyTypes.groupRuby;
charaObj.rubyString = rubyStr;
}
}
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア