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


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



Fit Anchors_a.jsx

InDesign CS3以降




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

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

Facebooktwittergoogle_plus

InDesign:Selection Expander もひとつ追加

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

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

 



SelectionExpander.jsx

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

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

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

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

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



 

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

ちょっと補習 その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+”行目ですか”);


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

ちょっと補習 その1

[InDesign]テキストオブジェクトが何行目か取得する
トックラバックラがおぼつかないのでこのようなはっつけ方で失礼しますが
ひとんちのscript記事で珍しく発案してみたところ、要求される物を履き違えてたのかコメント欄でこてんぱんですが orz
アプローチの提案をしたつもりが、根幹コード以外にちょこちょこ分岐を半端に入れてしまったせいか
なんだか提案というよりも提供めいてしまい、かっこよくない事になってます(笑)

せっかく添削いただいたのもあり、かといって「はじめまして」とか書いた記事のコメント欄ずんずら長くするのもナイので
自分のとこでちょこちょこ完成形にしてゆきます。年内に終わるかなー
商品化する気ではなかったとはいえ自分の肥やしになりそうなのでやるだけやる事に。

ウチの発案は、親フレームの先頭からターゲットとなる文字オブジェクト(選択ハニー)の先頭行までをTextオブジェクトとし、そのLines.lengthがターゲットの先頭行の番目になる、という物で、
処理にあたる前に条件のふるい分けをする段階で、選択範囲がテキストフレームの内容物である場合を想定してCharactersがあるか、で分岐させた。
InsertionPointは相手にしていなかった。思い込みで。実用する事を考えれば対象が単独の挿入点な場合も充分ある。正規表現絡みだとなおさら。

で仕切り直すにあたり、
「行の問題なんだからフツーにLineオブジェクトでやりゃいいじゃん」と今さら思ったので
テスト。

app.selection[0].lines[0].select();
はたして、挿入点がいる行がビロンと選択された。
が、行末・行頭の挿入点はエラーだ。なんでだ。どっちつかずだからか。
現に一行目行末の挿入点と二行目行頭の挿入点は視覚的には別物でもindexは一緒なので、混乱するよなコンピュータ様も。
 とか脳の足りないような妄想をしつつ
a=app.selection[0].lines;
とした次の行にブレークポイントを置いてESTKのデータブラウザを覗いてみた。
 結果、テストコードで走る挿入点もエラーになる挿入点も、Lines.Length=0 であった。
じゃあ何で結果が分岐するんだ? 降参。
わからない事には時間をかけないようにして(やなおとなやな)←回文 ←うそ
try{

app.selection[0].lines[0].select();
}

catch(e){ // エラーは行末・行頭の挿入点の場合のみ、という前提で

app.selection[0].parent.insertionPoints.nextItem(app.selection[0]).lines[0].select();
}

としてみてはどうだ。
ダメだった。try{} 内でエラーが出る。
try{} で括った内側でエラーが出る時わりとよくあるな。。
catsh(){} 内だけの1行コードにしてみたら、いちおう挿入点の次の行を拾いはするな。
いや、いや、そもそも、一行目行末がチカチカしてる時はターゲットは一行目であるべきだし、
二行目行頭がチカチカしてたら二行目がターゲットって事にしたくはないか? ないか。そうか。
あ、HorizontalOffsetがあるじゃないか。
 しかし一行目行末チカチカ時のHorizontalOffset値は、行頭のX座標だった。ひどいなこれー。
やっぱ区別はないのか。
でもでも、スタイルの変わり目に挿入点を入れて文字を入力するとき、目的の挿入点より前に入れた挿入点からカーソルで後ろに送っていった時とその逆とじゃ入力した文字にかかるスタイルが違うって事、あるよね。ある。
挿入点両者それぞれプロパティ書き出して比較してみるか。
どこかに違いを見出さないとウチの案は潰れるわけか。
 って、試してみたら元記事のスクリプトも行末行頭ではエラー出るな。。じゃいいのか。いや、ここで抜きん出て、えーと、いばろう(笑)
今日はここまで。
なんというモヤッとした進行。。

Facebooktwittergoogle_plus