InDesignのスクリプト定数(enumerator)は

誰か先に書いていて二番煎じだったらすみません。一応検索して引っかからなかったので書きます。

InDesignのスクリプトを書いていて何が困るかというと、定数(enumerator)が長い、または覚えることのできない数字ということ。

PDFの書き出しであれば

doc.exportFile(ExportFormat.PDF_TYPE, "a.pdf")

または

doc.exportFile(1952403524, "a.pdf")

と書かなければならない。

私は少しでも短くなるように数字を書く方が多いのだけれど、この数字は何なんだ。オブジェクトごとにまとまっているわけでもなく、Adobeの開発者も管理するのが大変だろう。

と、思っていました。

が、この数字をよく見ているとひょっとして? 16進数に変換してみよう。

1952403524 => 745F5044

これを文字コードと仮定して文字に変換してみよう。

0x74、0x5F、0x50、0x44 => t_PD

おお、なんか意味ありそうだ。じゃあ、他のもやってみよう。

EPS_TYPE(1952400720) => “t_EP”
EPUB(1701868898) => “epub”
FIXED_LAYOUT_EPUB(1701865080) => “epfx”
HTML(1213484364) => “HTML”
HTMLFXL(1213490808) => “HTfx”
INCOPY_MARKUP(1768123756) => “icml”
INDESIGN_MARKUP(1768189292) => “idml”
INDESIGN_SNIPPET(1936617588) => “snpt”
INTERACTIVE_PDF(1952409936) => “t_iP”
JPG(1246775072) => “JPG ”
PACKAGED_XFL(1702389356) => “exfl”
PNG_FORMAT(1699761735) => “ePNG”
RTF(1381254688) => “RTF ”
SWF(1702066022) => “eswf”
TAGGED_TEXT(1416066168) => “Tgtx”
TEXT_TYPE(1952412773) => “t_te”
XML(1481460768) => “XML ”
(注:JPG 、RTF 、XML は4文字目は半角スペース)

やられた。Adobeではこの文字列で管理してたのかっ!

でもそれがわかればもっとすっきりしたスクリプトが書けるぞ。

ということで、10進数から元の4文字に戻す関数はこちら。

//arg = 10進数の数値
function transstr(arg){
    var tstr = "";
    do {
        tstr = String.fromCharCode(arg % 256) + tstr;
        arg = Math.floor(arg / 256);
    } while (arg > 0)
    return tstr;
}

実際に使う場合は

doc.exportFile(n("t_PD"), "a.pdf");
function n(arg){
    var tint = 0;
    for(i=0; i<arg.length; i++){
        int1 = arg.charCodeAt(i);
        int1 = int1 * Math.pow(256, arg.length -1 - i);
        tint = tint + int1;
    }
    return tint;
}

これは楽になりそうだぜ。