InDesignのDOMをprototypeで拡張するメモ

自分で書かないと忘れるのでメモしておきます。

たとえばParagraphに「指定した数値だけポイントサイズを下げる」ってメソッドを生やすとか。

(function(){

  // Paragraph拡張
  // 引数に指定した数値ずつサイズを下げる。単位は無視して数値しか見ない
  // 成功するとtrueを返す
  Paragraph.prototype.downSize = function(num){
    var origin = this.pointSize;
    var size;
    if( num.constructor.name != "Number" ){ throw "downSize Error: 引数が数値ではありません"; }

    size = origin - num;
    if( size <= 0 ) { throw "downSize Error: これ以上サイズを下げられません"; }

    this.pointSize = size;
    return true;
  }

  // 例:段落が一行におさまるまで0.5ずつ文字を小さくする
 // エラー投げられたら止まるようにしておく
  var p = app.selection[0].paragraphs[0];
  while(p.lines.length > 1){
    try {
      p.downSize(0.5);
    }
    catch(e) {
      alert(e);
      break;
    }
  }

}());

エラー処理はてきとーです。

Paragraph(インスタンス)のpointSizeの値しか見てないので、段落内で文字サイズが違う場合対応できない。実験だとpointSizeは最初の文字のサイズが返ってきてるみたい。