ちょっと補習 その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座標だった。ひどいなこれー。
やっぱ区別はないのか。
でもでも、スタイルの変わり目に挿入点を入れて文字を入力するとき、目的の挿入点より前に入れた挿入点からカーソルで後ろに送っていった時とその逆とじゃ入力した文字にかかるスタイルが違うって事、あるよね。ある。
挿入点両者それぞれプロパティ書き出して比較してみるか。
どこかに違いを見出さないとウチの案は潰れるわけか。
 って、試してみたら元記事のスクリプトも行末行頭ではエラー出るな。。じゃいいのか。いや、ここで抜きん出て、えーと、いばろう(笑)
今日はここまで。
なんというモヤッとした進行。。

2 thoughts on “ちょっと補習 その1

  1. どうやら、CS3ではinsertionPointはLineオブジェクトの中身を持たないみたいですね。
    行頭行末を含めた1行選択してみる下のを実行してみるとCS3とCS4で結果が違いました。
    var st = app.selection[0].insertionPoints[0].lines.length;
    var en = app.selection[0].insertionPoints[-1].lines.length;
    alert(st + “,” + en);//==>cs3 “0,0”, cs4 “1,1”

  2. うわ、わざわざすみません。ひとりごと路線でやる予定だったんですが登録時に公開のチェック外し忘れてて。
    CS4では出るんですね..
    いま手元にCS3までしかないのが仇でした。
    insertionPointのindexをcharactersに持ち越せばCS3以下での回避はできそうですね。
    あとはモニタ上のカーソル位置が行末か行頭かの差異がどこかで掴めればって感じですかね。home & end 的な事とかできればなあ。

(z-) へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。

*