二分探索っぽくオーバーフロー処理をしてみたサンプル


#target "InDesign"
myDoc = app.documents.add();
frame = myDoc.textFrames.add();
frame.geometricBounds = ["0","0","5","50"];
frame.parentStory.contents = "吾輩(わがはい)は猫である。名前はまだ無い。";

//関数呼び出し
if(chotai(frame,60)) alert("オーバーフロー処理に失敗しました。");

//-------------------------------------------------//
//長体処理する関数、引数三つですが、3つ目は再帰
//なので気にしなくてOK
//気になる方は3つ目の引数を持たせて使ってもOK
//その時はstopより小さい数字にならない事
//第一引数:フレームオブジェクト、第二引数:長体限界値、第三引数:長体開始値
//-------------------------------------------------//
function chotai(frame, stop, start){
if(start == undefined){
if(!frame.overflows) return 0;
start = 100;
}
var pointer = stop + Math.floor((start - stop) / 2);
try{
frame.parentStory.horizontalScale = pointer;
if((start - stop)<=1){
if(frame.overflows){
throw "無理無理無理無理無理";
}else{
return 0;
}
}
if(frame.overflows){
return chotai(frame,stop,pointer);
}else{
return chotai(frame,pointer,start);
}
}catch(e){
$.write (e);
return 1;
}
}

※注意
速いかどうかは解りません・・・だいたい7〜8回程度で終るっぽい。
正常に動くかどうか少しだけ試した。
使うときには

__∧ノ_
(゚д゚)  < 自己責任でおながいします!
゚( )−
/ >

#追記
ちょっと修正しました(2009.9.28)