|
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; } }
|
No.7421 2013/04/03(Wed) 17:08:52
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ja-JP-mac; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28
|