Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2008-10-31

[][][]InDesign - JavaScript小技(2)

InDesignのJavaScriptを使う上でちょっとした小技をメモ。その2。(JSTG == JavaScript Tool Guide)

特殊なフォルダの指定

つい最近知って、とても参考になるサイト「カネムーメモ」さんに教えていただきました。

フォルダ指定いろいろ -- カネムーメモ

デスクトップやゴミ箱、現在のフォルダなどを得る方法。

alert("ドキュメント\n"+Folder.myDocuments);
alert("デスクトップ\n"+Folder.desktop);
alert("ゴミ箱\n"+Folder.trash);
alert("実行中のアプリのパッケージ\n"+Folder.appPackage);
alert("OSの種類\n"+Folder.fs);
alert("システムフォルダ\n"+Folder.system);
alert("ユーザ別アプリケーションデータの場所\n"+Folder.userData);
alert("システム用アプリケーションデータの場所\n"+Folder.appData);
alert("コモンファイルフォルダ\n"+Folder.commonFiles);
alert("テンプフォルダ\n"+Folder.temp);
alert("アプリケーションの実行イメージの場所\n"+Folder.startup);
alert("現在のフォルダ\n"+Folder.current);

ヘルプで見るとこんな感じ。ダウンロードフォルダとかライブラリはないみたい。JSTG p.50-51

f:id:seuzo:20081031150316p:image


単位の換算

UnitValueオブジェクトを使うと、簡単に単位を換算したり、計算できたりします。なお、pointは1/72インチであり、いわゆるDTPポイントってやつ。アメリカンポイント(1/72.27in)を使いたいときは「tpt」が用意されています。ちなみにconvert()メソッドは変換可能かどうかを返します。*1JSTG p.211-214

var my_val = new UnitValue(1, "pt");
my_val.convert("mm");// => true
my_val.as("mm");// => 0.35277777777778
(my_val *72).as("in");// => 1

外部Javascriptを取り込む。(モジュールプログラミング)

モジュールプログラミングの必要を感じるようになったら、#includeで外部プログラムを読み込みます。この時、スクリプトと同じ階層に取り込みたいスクリプトがあればいいのですが、必要に応じて#includepathを使ってパスを通してください。JSTG p.214-217

例としてTen Javascript Tools Everyone Should HaveのSearch an Arrayを同一階層の「test」フォルダに入れて下記スクリプトを実行します。

#includepath "./test"
#include "SearchArray.js"

var tmp = [5,9,12,18,56,1,10,42,'blue',30, 7,97,53,33,30,35,27,30,'35','Ball', 'bubble'];
//         0/1/2 /3 /4/5 /6 /7     /8  /9/10/11/12/13/14/15/16/17/  18/    19/      20
var thirty=tmp.find(30);             // Returns 9, 14, 17
var thirtyfive=tmp.find('35');       // Returns 18
var thirtyfive=tmp.find(35);         // Returns 15
var haveBlue=tmp.find('blue');       // Returns 8
var notFound=tmp.find('not there!'); // Returns false
var regexp1=tmp.find(/^b/);          // returns 8,20    (first letter starts with b)
var regexp1=tmp.find(/^b/i);         // returns 8,19,20 (same as above but ignore case)

選択しているオブジェクトのプロパティと値をコンソールに書き出す

ブレークポイントとかを設定して、データブラウザで見るって方法もありますけれど。とりあえずこんな感じでお手軽ビュー。JSTG p.201-203

function getProperties(my_obj) {
	var my_obj
	var my_prop = my_obj.reflect.properties;
	$.writeln (my_obj.constructor.name);
	$.writeln ("property (dataType : R/O,R/W) = value\n-----------------------------------");
	for (var i = 0; i< my_prop.length; i++) {
		$.writeln (my_prop[i].name + " (" + my_prop[i].dataType + " : "+my_prop[i].type + ") "+" = " + my_obj.properties[my_prop[i].name]);
	}
}

var my_selection = app.activeDocument.selection[0];
getProperties(my_selection);

f:id:seuzo:20081031150317p:image

*1:いうまでもないんですけれど、pt単位系はm単位系とは相容れません。必ず誤差がでます。これについて、メートル信者がアドビに文句たらたらなのはお門違いです。現実世界と折り合いを付けたい人は、すなおにpt単位系を使うのが幸せへの近道。というか実作業でもその方が断然ラクなんだけどなぁ。。。話がそれた。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証