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

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

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

== フォーマットライブラリの書き方
お手軽編。rd/rd2html-lib.rbを叩き台にするのがいいかも知れません。
  (1) Visitorクラスの名前を決めましょう。((|RD2XXXVisitor|))とか。
      これは(({RD::RDVisitor}))クラスを継承します。忘れずにrd/rdvisitor.rbを
      (({require}))しておいてください。あと、標準では((|RD2XXXVisitor|))
      は(({RD}))モジュールの内部に作られています。これは、別に守らなくても
      大した害は無いと思いますが。
  (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::AutoLabel}))を(({include}))
      した場合には、ここで、

        def visit(tree)
          prepare_labels(tree)
          super
        end

      とかします。
  (7) (({((|RD2XXXVisitor|))#apply_to_((|XXX|))}))というメソッドを定義します。
      これらは、(({RD::RDTree}))のノードを実際にフォーマットするメソッドです。
      第1引数には(({RDElement}))の要素をとり、第2引数以降は第1引数の
      (({RDElement}))以下のサブツリーをフォーマットした結果が与えられます。
      詳しくは(({RD::RDVisitor}))でも見てください。
      
        * (({RD::AutoLabel}))を使っていてラベルが欲しい時には(({refer}))
          メソッドを使います。引数には(({apply_to_((|XXX|))}))の第1引数
          で与えられる(({RDElement}))が直接渡す事ができます。ただし、
          もちろん渡せるのはラベルとして意味がある(({RDElement}))だけです。
          つまり、(({Headline})), (({DescListItem})), (({MethodListItem})),
          (({InlineElement}))のサブクラスです。
        * 脚注用の構文要素が無い言語に変換するのは多少厄介ですが、
          rd/rd2html-lib.rbが参考になるかも知れません。
  (8) 最期に(({$Visitor_Class}))に((|RD2XXXVisitor|))クラスオブジェクトを
      代入しておきます。さらにフォーマットライブラリ固有のコマンドライン
      オプションを取りたい場合は、別のファイルに書いて
      (({$RD2_Sub_OptionParser}))にそのファイル名を代入します。

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

=end
