InDesignの索引をCSVに書き出す(CS2〜CS4)

駆け込み寺の掲示板でこんなスレがあって……
InDesign の索引作成について - DTP駆け込み寺 新掲示板 (リニューアル後のページにリンクしてます)
索引の生成時に、入力した読みがなを一緒に書き出せないかという要望でした。
ちょうど索引あたりをいじりまわす勉強中だったので、ごにょっとスクリプト書いて貼り付けてみるなどしたのですが、グループ化したオブジェクトや入れ子になってるテキストフレームに索引マーカーがある可能性を完全に忘れ去っていました(;´д`)ゴメンネ スレ主

というわけでリベンジなのです

(function(){

  var sepChar = "," // CSV用セル区切り文字(任意)
  var pageNumSepChar = " "; // ページ番号の区切り文字(任意、2文字以上でもOK)

  var tmpIndex = app.activeDocument.indexes[0];
  tmpIndex.update(); // 一度索引を更新してページ数などをソート

  var str = ""; // 書き出すテキスト

  // 索引項目すべてについて処理
  for (var i = 0, t_len = tmpIndex.topics.length; i < t_len; i++) {

    var tmpTopic = tmpIndex.topics[i];
    str += tmpTopic.name + sepChar;
    str += tmpTopic.sortOrder + sepChar;

    // 参照先すべてのページ番号を取得していく
    for (var j = 0, ref_len = tmpTopic.pageReferences.length; j < ref_len; j++) {

      // とりあえずマーカーのあるテキストフレームの親を取得してみる
      var tmpObj = tmpTopic.pageReferences[j].sourceText.parentTextFrames[0].parent;

      // PageオブジェクトじゃなかったらPageオブジェクトが得られるまでさかのぼる
      // グループ化したオブジェクトや入れ子のテキストフレームに対応するため
      while (tmpObj.constructor.name != "Page") {
        if (tmpObj.parent.constructor.name != "Story") {
          tmpObj = tmpObj.parent;
        }
        else {
          tmpObj = tmpObj.parentTextFrames[0].parent;
        }
      }

      str += tmpObj.name;

      // 参照先がまだ残っていたらページ番号区切り文字を入れる
      str += (j != ref_len-1) ? pageNumSepChar : "";
    }

    str += "\n"; // 改行

  } // 項目ループここまで

  // テキスト書き出し(ファイル名を指定して保存)
  var file = File.saveDialog("ファイル書き出し","CSVファイル:*.csv");
  if (file) {
    file.open("w");
    file.write(str);
    file.close();
  }

  return;

})();

Windows XP SP2、InDesign CS4でのみ確認。CS2〜CS4までは動くと思います。たぶん。CSは索引関係かなり違うので無理です。
グループ化とか、入れ子とか、表とかもこれで大丈夫なはず。たぶん。whileがちょっと怖いので、万が一使うときはESTK上で動かしたほうがいいかも(無限ループになっても止められるから)。
しかし、なんていうか……変数名ってみんなどうやって決めてるのかなー?

ページ数が倒せない

「あるオブジェクトが配置されているページ」を得るのが結構たいへんなのですね。なんでだろう。
テキストフレームのparentプロパティがPageオブジェクトになるということがわかったので、索引マーカーのあるinsertionPointを含むテキストフレームを探して一つずつループしています。
参考にしたのはこちら(CS用っぽい)。試行錯誤したあとで発見したのだけど、よく見たらまんまだわ……。
(DTPtechNote:1253) [AS Indesign CS] print-current-page.as

そーいえば

Fileオブジェクトまわりはまた今度まとめよう、とか言ったきりなのを思い出した(;´д`)
ていうか私の環境がCS4に移りつつあってやる気が、その、そのうち……。