2008年9月3日水曜日

グループをさかのぼれ

追記20090218:
この記事のスクリプトには間違いがありました!
正しいスクリプトは、別エントリ「pageItemsとallPageItems」に書きましたので、そちらをご確認下さいm(_ _)m

#target "InDesign"
selObjs=app.activeDocument.selection;
//↓toolkitのJavaScriptコンソールに表示するよ
$.writeln ("------Groupを1コとするなら------"+selObjs.length);

var count=0;
groupRoop=function(objs){
for(var i=0;i<objs.length;i++){
var obj=objs[i];
if(obj.constructor.name=="Group"){
var groupObjs=obj.allPageItems;
//↓groupRoop(groupObjs);でいいけど一応
arguments.callee(groupObjs);
}else{
//↓ここの処理を書き換えれば、処理が変わる!
count++;
}
}
return count;
}

groupRoop(selObjs);
$.writeln ("------Groupの中を数えるなら------"+count);

某所の選択したアイテムを数えるスクリプトのInDesign版。
selObjs[i]がグループだった場合は再帰してその中をループし、
そうでなかった場合はcountに1を足す。

これ、elseにcount++じゃなくて他の処理を入れれば、
グループの中全てに処理をかけるスクリプトができる。たとえば、
#target "InDesign"
selObjs=app.activeDocument.selection;

groupRoop=function(objs){
for(var i=0;i<objs.length;i++){
var obj=objs[i];
if(obj.constructor.name=="Group"){
var groupObjs=obj.allPageItems;
arguments.callee(groupObjs);
}else{
if(obj.constructor.name=="TextFrame"){
obj.parentStory.contents="ほげ";
}
}
}
return;
}

groupRoop(selObjs);

これで選択したテキストフレームの中身がぜんぶ「ほげ」になる。

0 件のコメント: