k_ikiの雑記帳

DTPのこと、創作のことなど、思いつくまま

numberingLabel.jsx

私は以前、カネムーメモ様のエントリ「InDesignでテキストフレームを連結するスクリプト」にコメントし、選択しているテキストフレームにスクリプトラベルをつけるスクリプトの書き方を教えていただいた。
横組であれば上から順に、縦組であれば右から順にスクリプトラベルを付与したいが、
a.geometricBounds[x]-b.geometricBounds[x];
のままでは縦組の際、左から順にラベルが付与されてしまう。
そこで条件分岐を追加した。
ただし、条件判断の部分では sels[0] が縦組か横組かを調べているだけなので、選択中のフレームが縦・横混在の場合の動作は予測できない。
 
【17:30追記】
カネムーメモさんの元記事にて修正されました。
さすがと感心するばかり。
とてもスマートなソースですので、これからInDesignJavascriptを学ぶ方は冒頭のリンク先にあるカネムーさんのソースを参考にしていただくと良いかと思います。
 

(function(){
	var sels=app.activeDocument.selection;
	var startFrame;
	//テキストフレーム以外を削除
	for(var i=sels.length-1;i>-1;i--){
		if(sels[i].constructor.name!=='TextFrame'){
			sels.splice(i,1);
		}
	else {
		sels[i].nextTextFrame=NothingEnum.NOTHING;
		}
	}
//0なら抜ける
if(sels.length==0) {
	alert ("テキストフレームを選択してください");
	return;
}
//ソート用のfuncを返す
var ortn=sels[0].parentStory.storyPreferences.storyOrientation;
var x=(ortn==1752134266)? 0:3;
//sels[0] が縦組か横組かを調べ、横組なら上から順に
if(sels[0].parentStory.storyPreferences.storyOrientation == StoryHorizontalOrVertical.HORIZONTAL){
	var func=(function(x){
		return (function(a,b){
			return a.geometricBounds[x]-b.geometricBounds[x];
		})
	})(x);
}
//縦組なら右から順に
else {
	var func=(function(x){
		return (function(a,b){
			return b.geometricBounds[x]-a.geometricBounds[x];
		})
	})(x);
}
//ソートする
sels.sort(func);
//ラベル付け実行
var cnt = prompt("初期値を入力", "1");
var count = cnt-1;
while(sels.length>0){
	count++;
	var sel=sels.shift();
	sel.label=''+count;
}
alert ("動作完了しました");
})();