ESTKを使いたおす

このところの冷え込みにやられて鼻水が止まらず困っています。
ご存知ESTKとういうのは開発ツールですが、このアプリケーション単体でJavascriptを評価できるのは皆様ご存知の所だとは思います。
今回は、これをUI等が拡張されたECMAscript実行環境ととらえて利用するとどうかって話なんだね。要はデータの整形やら置換から高度なドキュメント生成処理をさせてしまおうって事なんだね。
一番考えられるのはデータを加工して保存するようなフィルターとしての使用だと思うので一例を

tbCd = String.fromCharCode(9);
rtnCd = String.fromCharCode(13);

fileNm = File.openDialog(“select base file”);
var flObj = new File (fileNm);
var dObj = flObj.open (“r”,””,””);
var tmp = flObj.read();
var filerf = new File (“~/hashtable.html”);
var flag = filerf.open (“w”,””,””);

filerf.write(“<html><head></head><body>”);

var myXml = new XML(tmp);
var nsURI = myXml.namespace();
var nmSpc = new Namespace(nsURI);
setDefaultXMLNamespace(nmSpc);
var myRslt = myXml.child (“package”).classdef;
for (i=0;i<myRslt.length();i++){
    filerf.write (rtnCd + “<b>” + myRslt[i].attribute(“name”) + “</b>” + rtnCd);
    filerf.write (“<table border=’1′ cellspacing=’1′ cellpadding=’0′>” + rtnCd);
    for (j=0;j<myRslt[i].elements.length();j++){
        //filerf.write (tbCd + myRslt[i].elements[j].attribute(“name”) + rtnCd);
        for (k=0;k<myRslt[i].elements[j].property.length();k++){
            prpty1 = myRslt[i].elements[j].property[k].attribute(“name”);
            prpty2 = myRslt[i].elements[j].property[k].attribute(“rwaccess”);
            val = myRslt[i].elements[j].property[k].datatype.value.toString();
            filerf.write (“<tr><td>” + prpty1 + “</td><td>” + prpty2 + “</td><td>” + val + “</td></tr>” + rtnCd);
            }
        }
    filerf.write (“</table><br />”);
    }
filerf.write(“</body>”);
filerf.close();

コードをご覧頂くとわかると思うのだけど、オブジェクトモデルビュアーのomv.xmlを読み込んでhtml化しちゃうスクリプトなんだね。
解説も必要ないぐらい簡単なものでXMLファイルを読み込んでネームスペース定義してあとはひたすらテーブルタグにerementsのnameアトリビュートとrwaccessアトリビュート及びdatatype.valueを書き出しているだけなんだ。
いつもhash値を調べるのが面倒なので一覧する為にこんなコード起こしたのだけど、XSLT使えってトコロなのは口にしてはいけないんだ。
その他文字データの置換処理とかcsvの処理とかに使っています。以前はperlとかshellscript利用してましたが、Javascript一本でいけると楽です。が、いざperlでcgi書くとなると忘れてたりして困る事もしばしばw。
という事で、おまけ

var header = “%!PS-Adobe-3.0 “+”¥n”+
    “%%Creator: Adobe Illustrator(R) 13.0″+”¥n”+
    “%%AI8_CreatorVersion: 13.0.3″+”¥n”+
    “%%For: (Ten_chan) ()”+”¥n”+
    “%%Title: (テストドキュメント.ai)”+”¥n”+
    “%%CreationDate: 8/12/09 9:55 AM”+”¥n”+
    “%%BoundingBox: 251 351 612 572″+”¥n”+
    “%%HiResBoundingBox: 251.5371 351.708 611.0557 571.2261″+”¥n”+
    “%%DocumentProcessColors: Black”+”¥n”+
    “%AI5_FileFormat 9.0″+”¥n”+
    “%AI12_BuildNumber: 483″+”¥n”+
    “%AI3_ColorUsage: Color”+”¥n”+
    “%AI7_ImageSettings: 0″+”¥n”+
    “%%CMYKProcessColor: 1 1 1 1 ([レジストレーション])”+”¥n”+
    “%AI3_TemplateBox: 516.5 364.0039 516.5 364.0039″+”¥n”+
    “%AI3_TileBox: 236.4053 -15.748 795.4053 767.252″+”¥n”+
    “%AI3_DocumentPreview: None”+”¥n”+
    “%AI5_ArtSize: 1031.811 728.504″+”¥n”+
    “%AI5_RulerUnits: 1″+”¥n”+
    “%AI9_ColorModel: 2″+”¥n”+
    “%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0″+”¥n”+
    “%AI5_TargetResolution: 800″+”¥n”+
    “%AI5_NumLayers: 1″+”¥n”+
    “%AI9_OpenToView: -5 728.5039 1.35 1412 995 18 0 0 6 75 0 0 1 1 1 0 1″+”¥n”+
    “%AI5_OpenViewLayers: 7″+”¥n”+
    “%%PageOrigin:0 0″+”¥n”+
    “%AI7_GridSettings: 56.6929 8 56.6929 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9″+”¥n”+
    “%AI9_Flatten: 1″+”¥n”+
    “%AI12_CMSettings: 00.MS”+”¥n”+
    “%%EndComments”+”¥n”+
    “%%BeginProlog”+”¥n”+
    “%%EndProlog”+”¥n”+
    “%%BeginSetup”+”¥n”+
    “%%EndSetup”+”¥n”+
    “%AI5_BeginLayer”+”¥n”+
    “1 1 1 1 0 0 1 0 79 128 255 0 50 0 Lb”+”¥n”+
    “(レイヤー1) Ln 0 A 0 Xw 1 Ap 0 O”+”¥n”+
    “0 0 0 0.2 k”+”¥n”+
    “0 1 0 0 0 Xy 0 J 0 j 1 w 4 M []0 d 0 XR ¥n”;

var footer = “f LB”+”¥n”+
    “%AI5_EndLayer–“+”¥n”+
    “%%PageTrailer”+”¥n”+
    “gsave annotatepage grestore showpage”+”¥n”+
    “%%Trailer”+”¥n”+
    “%%EOF”;

var x = prompt (“width =”, 50, “x”);
var y = prompt (“height =”, 50, “x”);
x = x-0;
y = y-0;
x1 = (100+x)+””;
y1 = (100+y)+””;
var filerf = new File (“/test.ai”);
var flag = filerf.open (“w”,””,””);

filerf.write(header);
filerf.writeln(“100 100 m¥n”);

filerf.writeln(x1 + ” 100 L¥n”);
filerf.writeln(x1 + ”  ” + y1 + ” L¥n”);
filerf.writeln(x1 + ”  ” + y1 + ” L¥n”);
filerf.writeln(“100 ” + y1 + ” L¥n”);
filerf.writeln(“100 100 L¥n”);
filerf.writeln(footer);
filerf.close;

AIを使わずにダイレクトにAIファイルを生成するスクリプトw実用性皆無ですが。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中