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

昨日かいたやつがeveryItem()やitemByRange()で取得したオブジェクトに対応できてなかったことに気付きまして。

twitterで騒いだところ、判別しないで対応すればいいじゃないと教えていただきました。

https://twitter.com/peprintenpa/status/570915349459136512

というわけで、書き直し。

(function(){

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

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

      tmp.pointSize = size;
    } // ループ終わり
 
    return true;
  }


  // 例:全ページの「target」って名前のテキストフレーム内の全段落のサイズを1下げる
  try {
      app.activeDocument.pages.everyItem().textFrames.item("target").paragraphs.everyItem().downSize(1);
  }
  catch(e) { }


}());

最近everyItem()の便利さにちょっと目覚めました。