最近は、<URL:http://www2.pos.to/~tosh/ruby/rdtool/ja/dev/>に開発情報が 見れるようになっています。
でも更新止まってますね…。
フォーマットライブラリの書き方は残しておきます。ちょっと古いのですが、現在の バージョンでも問題ないはずです。
お手軽編。rd/rd2html-lib.rbを叩き台にするのがいいかも知れません。
RD::RDVisitor
クラスを継承します。忘れずにrd/rdvisitor.rbを
require
しておいてください。あと、標準ではRD2XXXVisitor
はRD
モジュールの内部に作られています。これは、別に守らなくても
大した害は無いと思いますが。RD::AutoLabel
(rd/rdvisitor.rb)をinclude
します。
これはラベルの処理をまかせるため。RD@XXXVisitor::OUTPUT_SUFFIX
と
(({((|RD2XXXVisitor|))::INCLUDE_SUFFIX}))
という定数を用意します。出力ファイルにつけるサフィックスとInclude
できるファイルのサフィックスです。後者はArray
にしてください。
RD2XXXVisitor#initialize
を定義しましょう。引数を受け取る事は
できません。フロントエンドを自分で書くなら話は別ですが。必要ならRD2XXXVisitor#visit
を再定義します。このメソッドは
RD::RDTree
のフォーマットを開始するメソッドです。引数は
RD::RDTree
をひとつとります。RD::AutoLabel
をinclude
した場合には、ここで、
def visit(tree) prepare_labels(tree) super end
とかします。
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
のサブクラスです。$Visitor_Class
にRD2XXXVisitorクラスオブジェクトを
代入しておきます。さらにフォーマットライブラリ固有のコマンドライン
オプションを取りたい場合は、別のファイルに書いて
$RD2_Sub_OptionParser
にそのファイル名を代入します。こんなところでしょうか。詳しくはソースを参照の事。