すいません。あちこちでみなさんがんばっていらっしゃいます。
私も皆さんのブログを見させて頂いており勉強させていただいております。
ただ皆さんちょっと難しく考えすぎているような気もします。
もっとベタにif文いっぱい書いて、ちょっと条件変わったら動かない。
そんなのでいいですよ。練習なので。
●課題1 テキストフレームのプロパティセット
・テキストフレームの中のテキストを上下センターにする
これはさほど難しくないと思うのですが、複数行あったらどうするかとか
悩まれている方がいらっしゃいますよね、最初の1行だけでかまいません。
もし複数行きたかったらparagraphの数を調べて、くり返し処理させると良いでしょう。
●課題2 場所の移動
・1つのテキストフレームを右へ10mm移動
・2つのテキストフレームの間隔を3mmにする。
こちらもさほど難しくないですよね。
visibleBoundsでオブジェクトの領域を調べることができます。
「間隔を3mmにする」はそういうコマンドがあるのですが
今後、オブジェクトを自由自在にコントロールしたい場合は1つずつ座標を取り出してどっちが右かとか調べながらやってもらっても良いかと。
●課題3 テキスト処理1
・テキストフレーム内の文字「楽しく」にルビをふる
こちら意外と難しいですね。課題を出した時点では正規表現とかは考えていませんでした。。。すいません。
汎用性を考えずに楽しくだけにルビを振れば良いので
最初から総当たりで文字をひろっていっていいですよ。
まぁこんな感じで。
var mytf = app.activeDocument.selection[0]; for (var i=0; i<mytf.characters.length; i++) { //ここに処理 }
あと、InDesignではなくJavaScriptにもindexOfという関数があるのです。
検索対象.indexOf('検索ワード',検索位置);
で最初に見つかった文字の位置が返ってきます。
下みたいな感じです。これをつかって繰り返してもいいと思います。
var mytf = app.activeDocument.selection[0]; var mytf_contents = mytf.contents; var findpos = mytf_contents.indexOf('楽しく',0);
もちろんInDesignの正規表現検索をJavaScriptでコントロールしてもらってもOKです。
ただ、ちょっと難しいと思うんですが大丈夫でしょうか?
●課題4 テキスト処理2
・テキストの中の値段をすべて10円アップする。
「バナナ120円りんご100円もも1,000円」
こちらもヒントの古旗さんのところにあるのをいじれば出来ると思うのですが
ルビのときのように総当たりでも良いです。
例えば下みたいな方法。1文字づつひっぱりだして、それが1234567890,のいずれかなら数字。円が来たら数字終わり。で数字は別の変数に入れておくとか。
var mytf = app.activeDocument.selection[0]; var nedan_flg = false; for (var i=0; i<mytf.characters.length; i++) { if(mytf.characters[i].contents == "1"){ nedan_flg = true; }else if(mytf.characters[i].contents == "2"){ nedan_flg = true; }else if(mytf.characters[i].contents == "3"){ nedan_flg = true; }else if(mytf.characters[i].contents == "2"){ nedan_flg = true; }//以下続く。。。 }
値をInDesignにセットするときも意外に難しいかも、もし予想したよりたくさん文字が入ったりしたら、その文字は消せば良いのです。
そしてチャレンジ課題のヒントとさらにチャレンジ課題です。
InDesignをJavaScriptでコントロールする
●お題1 テキストフレームのプロパティセット
・ページすべてのテキストフレームの中のテキストを上下センターにする
ヒント:
lengthとforを使う
alert(app.activeDocument.textFrames.length);
・選択テキストフレーム「全て」の中のテキストを上下センターにする
ヒント:
selectionを使う
alert(app.activeDocument.selection.length);
●お題2 場所の移動
・4つのテキストフレームの間隔を3mmにする。
ヒント:
ここがそのものずばりか?http://d.hatena.ne.jp/oimoh/20100507/1273203847
document直下のdistributeというメソッドを使うみたい。
●お題3 テキスト処理1
・「InDesignのスクリプト作成方法を楽しく学ぶ。」にルビをふる
作成方法と楽しくと学ぶにルビを振ります。こちらは汎用性を考えないとだめですね。
あと、「楽しく」や「学ぶ」の漢字部分だけにルビを振るのです。ちょっと難しいですよね。
僕も初心者でもなんとか理解できるようなのを考えてみます。