現在、新しいコメントを受け付けない設定になっています。
スクリプトを使用後に、アンドゥを実行すると複数回実施されます。その結果、最後に保存した状態にまで戻ります。
Mac OSX 10.6.8、CS4で発生します。
なんらかの不具合でしょうか。
なお、CS5ではなぜか発生しないようです。
うーん、分かりませんけど、
app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.FAST_ENTIRE_SCRIPT);
のところを
main();
に書き換えたら普通に使えるようにはなるんじゃないかと思います。
FAST_ENTIRE_SCRIPTの恩恵は受けられなくなりますが
早速の回答をいただき、ありがとうございます。
ご教示の通り書き換えしたところ、正常に動作するようになりました。
InDesign CS4には、FAST_ENTIRE_SCRIPTに関するバグが潜んでいるんですかね?
あるふぁさんのスクリプトは縦組みに対応しているので重宝しています。実務でよく使うので、今回のアドバイスは大変助かりました。
本当にありがとうございました。
スクリプト初心者なのでおかしな質問でしたらすいません。
Mac OS10.6.8、cs5で使用したいと思っています。
まず、スクリプトの記述ですが、「var Gyousuu=1;//何行にする? マイナスにしたら今の行数から減らす」から最後のカッコ閉じまでをコピーしてjsxの形式で保存すればいいのでしょうか。
上記で使用してみたのですが、「行数の指定と、水平(垂直)比率の最大値の指定」のメニューが出ることなく、一行になってしまいました。
バージョンが合っていない、もしくはコピペなどがおかしいのでしょうか。
なんかすいません。
何もメニューとか出ないのが仕様通りで、単にスクリプトの先頭部分を少し書き換えれば設定できるよ、ということなんですが、すごく分かりづらい書き方してますね。
このスクリプト書いたのは6年ほど前ですが自分にはプログラミング的なことをやり始めたばかりで、今見直すとお恥ずかしいことばかりです。
ダイアログ出す仕様にしたものも追記しましたのでお試しください。しかしこれ指定行数が6行以上になると正常に動かないっぽい?
早速の対応ありがとうございました。
こちらで試してみます。
お手数をお掛けしました。
//(2014.08.03 グループに空のテキストフレームがあったらエラーが出るのを修正)
var Gyousuu=1;//何行にする? マイナスにしたら今の行数から減らす
var MaxScale=100;//水平比率(縦書なら垂直比率)の最大値
app.scriptPreferences.enableRedraw=false;
app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.FAST_ENTIRE_SCRIPT);
function main(){
var Sel=app.activeDocument.selection;
if(Sel.length==0) exit();
if(isTextObj(Sel[0])){
for(var i=0;i<Sel[0].paragraphs.length;i++){
Para1gyou(Sel[0].paragraphs[i]);
}
exit();
}
for (var i=0;i<Sel.length;i++){
if (Sel[i].constructor.name=="TextFrame") {
Para1gyou(Sel[i].paragraphs[0]);
} else if (Sel[i].constructor.name=="Group") {
GroupPara1gyou(Sel[i]);
}
}
}
function GroupPara1gyou(myGroup){
for (var i=0;i<myGroup.groups.length;i++){
GroupPara1gyou(myGroup.groups[i]);
}
for (i=0;i<myGroup.textFrames.length;i++){
if (myGroup.textFrames[i].paragraphs.length>0) Para1gyou(myGroup.textFrames[i].paragraphs[0]);
}
}
function Para1gyou(myPara) {
var myGyousuu=(Gyousuu>0)?(Gyousuu):(myPara.lines.length+Gyousuu);
if((myPara.parent.constructor.name=="Cell" && myPara.parent.writingDirection==HorizontalOrVertical.VERTICAL)
|| (myPara.parent.constructor.name=="Story" && myPara.parentStory.storyPreferences.storyOrientation==StoryHorizontalOrVertical.VERTICAL)){
myPara.verticalScale=MaxScale;
if(myPara.lines.length<=myGyousuu) return;
myPara.verticalScale-=32;
for(var i=16;i>=1;i=i/2) {
myPara.verticalScale+=((myPara.lines.length==myGyousuu)?(+1):(-1))*i;
}
if(myPara.lines.length>myGyousuu) myPara.verticalScale-=1;
} else if((myPara.parent.constructor.name=="Cell" && myPara.parent.writingDirection==HorizontalOrVertical.HORIZONTAL)
|| (myPara.parent.constructor.name=="Story" && myPara.parentStory.storyPreferences.storyOrientation==StoryHorizontalOrVertical.HORIZONTAL)){
myPara.horizontalScale=MaxScale;
if(myPara.lines.length<=myGyousuu) return;
myPara.horizontalScale-=32;
for(var i=16;i>=1;i=i/2) {
myPara.horizontalScale+=((myPara.lines.length==myGyousuu)?(+1):(-1))*i;
}
if(myPara.lines.length>myGyousuu) myPara.horizontalScale-=1;
}
}
function isTextObj(obj){
var s=obj.constructor.name;
if (s=="Text"||s=="Character"||s=="Word"||s=="Line"||s=="TextColumn"||s=="Paragraph"||s=="TextStyleRange"||s=="InsertionPoint") return true;
return false;
}
(2020.10.21 追記)ダイアログを出すようにしてみた。
var myDiag=app.dialogs.item("段落の行数減らす");
if(!myDiag.isValid){
myDiag=app.dialogs.add({name:"段落の行数減らす"});
var cl1=myDiag.dialogColumns.add();
var rw1=cl1.dialogRows.add();
rw1.staticTexts.add({staticLabel:"行数",minWidth:60});
rw1.textEditboxes.add({editContents:"1",minWidth:100});
var rw2=cl1.dialogRows.add();
rw2.staticTexts.add({staticLabel:"比率MAX",minWidth:60});
rw2.textEditboxes.add({editContents:"100",minWidth:100});
}
if (myDiag.show()) {
var Gyousuu=myDiag.dialogColumns[0].dialogRows[0].textEditboxes[0].editContents-0;
var MaxScale=myDiag.dialogColumns[0].dialogRows[1].textEditboxes[0].editContents-0;
if(-1000) Para1gyou(myGroup.textFrames[i].paragraphs[0]);
}
}
function Para1gyou(myPara) {
var myGyousuu=(Gyousuu>0)?(Gyousuu):(myPara.lines.length+Gyousuu);
if((myPara.parent.constructor.name=="Cell" && myPara.parent.writingDirection==HorizontalOrVertical.VERTICAL)
|| (myPara.parent.constructor.name=="Story" && myPara.parentStory.storyPreferences.storyOrientation==StoryHorizontalOrVertical.VERTICAL)){
myPara.verticalScale=MaxScale;
if(myPara.lines.length<=myGyousuu) return;
myPara.verticalScale-=32;
for(var i=16;i>=1;i=i/2) {
myPara.verticalScale+=((myPara.lines.length==myGyousuu)?(+1):(-1))*i;
}
if(myPara.lines.length>myGyousuu) myPara.verticalScale-=1;
} else if((myPara.parent.constructor.name=="Cell" && myPara.parent.writingDirection==HorizontalOrVertical.HORIZONTAL)
|| (myPara.parent.constructor.name=="Story" && myPara.parentStory.storyPreferences.storyOrientation==StoryHorizontalOrVertical.HORIZONTAL)){
myPara.horizontalScale=MaxScale;
if(myPara.lines.length<=myGyousuu) return;
myPara.horizontalScale-=32;
for(var i=16;i>=1;i=i/2) {
myPara.horizontalScale+=((myPara.lines.length==myGyousuu)?(+1):(-1))*i;
}
if(myPara.lines.length>myGyousuu) myPara.horizontalScale-=1;
}
}
function isTextObj(obj){
var s=obj.constructor.name;
if (s=="Text"||s=="Character"||s=="Word"||s=="Line"||s=="TextColumn"||s=="Paragraph"||s=="TextStyleRange"||s=="InsertionPoint") return true;
return false;
}
スクリプトを使用後に、アンドゥを実行すると複数回実施されます。その結果、最後に保存した状態にまで戻ります。
Mac OSX 10.6.8、CS4で発生します。
なんらかの不具合でしょうか。
なお、CS5ではなぜか発生しないようです。
うーん、分かりませんけど、
app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.FAST_ENTIRE_SCRIPT);
のところを
main();
に書き換えたら普通に使えるようにはなるんじゃないかと思います。
FAST_ENTIRE_SCRIPTの恩恵は受けられなくなりますが
早速の回答をいただき、ありがとうございます。
ご教示の通り書き換えしたところ、正常に動作するようになりました。
InDesign CS4には、FAST_ENTIRE_SCRIPTに関するバグが潜んでいるんですかね?
あるふぁさんのスクリプトは縦組みに対応しているので重宝しています。実務でよく使うので、今回のアドバイスは大変助かりました。
本当にありがとうございました。
スクリプト初心者なのでおかしな質問でしたらすいません。
Mac OS10.6.8、cs5で使用したいと思っています。
まず、スクリプトの記述ですが、「var Gyousuu=1;//何行にする? マイナスにしたら今の行数から減らす」から最後のカッコ閉じまでをコピーしてjsxの形式で保存すればいいのでしょうか。
上記で使用してみたのですが、「行数の指定と、水平(垂直)比率の最大値の指定」のメニューが出ることなく、一行になってしまいました。
バージョンが合っていない、もしくはコピペなどがおかしいのでしょうか。
なんかすいません。
何もメニューとか出ないのが仕様通りで、単にスクリプトの先頭部分を少し書き換えれば設定できるよ、ということなんですが、すごく分かりづらい書き方してますね。
このスクリプト書いたのは6年ほど前ですが自分にはプログラミング的なことをやり始めたばかりで、今見直すとお恥ずかしいことばかりです。
ダイアログ出す仕様にしたものも追記しましたのでお試しください。しかしこれ指定行数が6行以上になると正常に動かないっぽい?
早速の対応ありがとうございました。
こちらで試してみます。
お手数をお掛けしました。
プロフィール
最近の記事