Fit Anchors ちゃんと直しました orz


こないだ出した Fit Anchors.jsx
ちょっといいもの作った気でいたんですがイザ使いどきに自分で使ってみてアゴ外れそうになりました。
姉妹品からの書き換えで作ってしまったせいでいろいろ不具合。



Fit Anchors_a.jsx

InDesign CS3以降




修正点
・リンクではなくコンテナ(親フレーム)が選択された状態で実行しても動かなかったのを修正
・複数のオブジェクトに対応
・テスト用のコンソール書き出しをコメントアウト(いちいちESTK起動しちゃってたんですな)

謝るのはいやだ、笑っちゃおー
 今から流行語大賞狙ってやる。

InDesign:Selection Expander もひとつ追加

なんか大事な物が抜けてると思ってたら、抜けてました。

 謝るのはいやだ、笑っちゃおう♪

 



SelectionExpander.jsx

今回より、スクリプト置き場としてkamiseto姐御謹製「ScriptClip::Room」を使わせて頂きます。

誰でも使っていいなんて知らなかったんだよう。

DL数は着実にカウントされ、「咳をしてもひとり」的虚無感を慰めてくれます。

※ダウンロード後、zipファイルとして解凍してください。

使用法の概要は過去記事参照。ばっちりめの説明は後日まとめますので。
InDesign CS3以降(Mac-Win)、バーチャルボーイに対応
※ver.dはCS4で起動しない不具合が発覚したためver.eに更新しました



 

 
今回の追加ぶん
 
コレを
 
 
 
ココに追加しました。きっぱり忘れてました。
 
不具合報告、要望のたぐいがありましたらお気軽にどうぞです。
 
 

ちょっと補習 その2

あらまし
・mgさんのスクリプト公開記事「テキストオブジェクトが何行目か取得する
の文中に「(もっと簡単な方法ありますか?)」を見てムラリ
・ビビリつつ提案するも生半可すぎてダメ出しされ
・後味も夢見もよくないので自blogで後始末開始。しかも年の瀬だからだらだらちょっぴりずつ。

・行に関するスクリプトならLineオブジェクトでやってみよう
・なんとなく動いたけど行末・行頭の挿入点で実行すると不具合だ
・そもそも挿入点(InsertionPointオブジェクト)はLinesが格納されてるようだがいつでも中身は空だ
  (エントリ後にmgさんにコメント頂き、CS3までの挙動と知る。あとでCS4で確認しときました)
・果たして行末・行頭の同一挿入点の区別はつくのだろうか

ちょっとテストと割り切って、以下のぶっきらぼうなコードを試した。
 そろそろ本文とゴッチャにコード載せるのも見苦しいな。。

var my_AppleScript = ‘tell application \”System Events\”\r key code 115\r key code 119\r end tell’;
app.doScript (my_AppleScript, ScriptLanguage.APPLESCRIPT_LANGUAGE);

キーコード115は「home」、119は「end」。
InDesign上で同様の動作を手入力で行うと、「home」で先頭行の行頭にカーソルが移動したのち、「end」で行末に行く。
一行目行末で行うとカーソルは一行目行末に行く。
二行目行頭で行うとカーソルは二行目行末に行く。
あとはフレーム(セル)内の先頭行から当該挿入点までの行数を見ればいい。はず。
 だったのだが、実際の挙動は
一行目行末で行うとカーソルは一行目行末を、
二行目行頭で行うとカーソルは一行目行末を指した。
 単に元スクリプトと真逆になっただけ。
key code 115 と key code 119 を2つに分け、間に $.sleep(100) なんぞ差し挟んでみても変化なし。
 ええと、没。


とりゃえず今回は、mgさんの元記事のコメント欄で指摘いただいた部分だけ仕上げて終了とします。
行末に挿入点を置いて実行した場合のみ(次行頭と区別がないので)見た目と異なる結果を返します。これ宿題。
以下次回。
 (お、ちゃっかりCS対応か?と思ったがreflectがダメでエラー。constructorに書き換えたらセルでは動作したけどテキストフレームではparentTextFramesがダメでエラー。それ以上追うのは不毛なので)
CS3以降対応とします。

if(!app.documents.length){exit();}
if(!app.selection.length){exit();}
var sel=app.selection[0], par, ulObj, dlObj, fiObj, LLObj;
switch(sel.parent.reflect.name){
case “Cell” : par=sel.parent; break;
case “Story” : par=sel.parentTextFrames[0]; break;
default : exit();
}
fiObj=(sel.reflect.name==”InsertionPoint”)? sel : sel.insertionPoints[0];
ulObj=par.texts.itemByRange(par.insertionPoints[0], fiObj).lines.length;
dlObj=par.texts.itemByRange(fiObj, par.insertionPoints[-1]).lines.length;
LLObj=(ulObj+dlObj>par.lines.length)? ulObj : ulObj+1;
alert(LLObj+”行目ですか”);


ちょっとコードの晒し方を考えよう。試してくださる人によくない。