2011年1月23日日曜日

「InDesign Script勉強会/名古屋」フォローアップ、ライブコーディングの内容について。

さて、先日の「InDesign Script勉強会/名古屋」にて書いた、自分のスクリプトの解説です。
もともと「お題」を準備して、その場でどう書いたらいいのか皆で検討して仕上げる、みたいな勉強会を想定していたため、自分の発表は自然とライブコーディングになりました。
その場にいた人には楽しんでもらえたと思います。(楽しんでもらえましたよね?)

@mkawax @kanemu スクリプトお題① CSVをテキストフレームに入れる 〜ライブコーディング〜

これは@mkawax氏(うちの社長です)が出したお題で、「CSVの2列目と4列目をテキストフレームに入れて、それぞれに段落スタイルを設定してみて」という案件でした。

CSVを読み込むスクリプトについては、@mkawax社長が自分でスクリプトを書いてブログ公開しています。
mkawa.xmldo: InDesignを「連続で開く」「何かする」「上書き保存して閉じる」スクリプト覚え書き

なので、「二次元配列でいいですか?」「いいよ」というやりとりの後、書いたのが下のコード。


ドキュメントを開き、a1、a2という段落スタイルを作り、それぞれC100、M100の色を当てます。
そしてスクリプトを実行すると、画像のようになります。
問題は、上から2つ目のテキストフレームです。広げてみます。
この行にはあえて改行を加えてあるのですが、必要な部分を改行文字でjoinしてまとめてcontentsに入れ、その後で段落スタイルを設定してるため、スタイルがズレるのです。欲しい結果は、こうじゃない!bbb2には同じスタイルがかかってほしい。InDesignでparagraphはaddできないし、いったん改行でsplitして1行1行入れるような方策は考えつくのですが、いまいちスマートな方法が見つからないんですよね。

InDesignのテキストまわりはややこしいです。どなたかこれが一番良い!って方法があったら教えて下さい。

@kanemu スクリプトお題② グループじゃないグループ 〜ライブコーディング〜

このスクリプトは、例えばチラシ作成時にテキストフレームと画像がグループになっていて欲しいけれど、画像と文字でレイヤーが分かれていてほしいような場合。グループじゃないんだけどグループにはなっててほしいなーという場面を想定し、粗結合のグループを実現しようとしたスクリプトです。以下コード。




まず、こんな感じのレイアウトを作り、「kanemu_group_set.jsx」を実行。
次に、いったん位置をバラバラにして、画像だけを選択。
「kanemu_group_collect.jsx」を実行すると、画像に合わせて位置関係が元に戻ります。レイヤーは変わりません。


選択したアイテムのextractLabelに一意のキー(実行時刻をキーにしています)と、その位置を保持して記憶しておき、移動した先で同じキーのアイテムを集め、位置を復帰できるようにしました。
これを書くときは頭の中に構想はあったものの、計算はしてなかったので思った場所になかなか集まらず「そこは違う」「その位置じゃなくて」とかみんなが口を挟みながら直していきました。書き直すたび全然あさってな方向に飛んでくので笑ったw

人前でスクリプトを書くのもなかなか面白いです。次の機会もまたやってみたいと思います。

0 件のコメント: