あとがき

最近は、<URL:http://www2.pos.to/~tosh/ruby/rdtool/ja/dev/>に開発情報が 見れるようになっています。

でも更新止まってますね…。

フォーマットライブラリの書き方は残しておきます。ちょっと古いのですが、現在の バージョンでも問題ないはずです。

フォーマットライブラリの書き方

お手軽編。rd/rd2html-lib.rbを叩き台にするのがいいかも知れません。

  1. Visitorクラスの名前を決めましょう。RD2XXXVisitorとか。 これはRD::RDVisitorクラスを継承します。忘れずにrd/rdvisitor.rbを requireしておいてください。あと、標準ではRD2XXXVisitorRDモジュールの内部に作られています。これは、別に守らなくても 大した害は無いと思いますが。
  2. ファイルの名前は上で決めたクラスを使って、rd2xxx-lib.rbとかすると いいかもしれません。
  3. 必要なら、RD::AutoLabel(rd/rdvisitor.rb)をincludeします。 これはラベルの処理をまかせるため。
  4. RD@XXXVisitor::OUTPUT_SUFFIX

    (({((|RD2XXXVisitor|))::INCLUDE_SUFFIX}))

    という定数を用意します。出力ファイルにつけるサフィックスとInclude できるファイルのサフィックスです。後者はArrayにしてください。

  5. RD2XXXVisitor#initializeを定義しましょう。引数を受け取る事は できません。フロントエンドを自分で書くなら話は別ですが。
  6. 必要ならRD2XXXVisitor#visitを再定義します。このメソッドは RD::RDTreeのフォーマットを開始するメソッドです。引数は RD::RDTreeをひとつとります。RD::AutoLabelinclude した場合には、ここで、

    def visit(tree)
      prepare_labels(tree)
      super
    end

    とかします。

  7. RD2XXXVisitor#apply_to_XXXというメソッドを定義します。 これらは、RD::RDTreeのノードを実際にフォーマットするメソッドです。 第1引数にはRDElementの要素をとり、第2引数以降は第1引数の RDElement以下のサブツリーをフォーマットした結果が与えられます。 詳しくはRD::RDVisitorでも見てください。

  8. 最期に$Visitor_ClassRD2XXXVisitorクラスオブジェクトを 代入しておきます。さらにフォーマットライブラリ固有のコマンドライン オプションを取りたい場合は、別のファイルに書いて $RD2_Sub_OptionParserにそのファイル名を代入します。

こんなところでしょうか。詳しくはソースを参照の事。