RTtoolはシンプルな作表ツール。 RDの売りである可読性とさまざまなフォーマットに変換可能を継承し、 RDtoolの実験的機能ではあるがfilter機能によりRDと融合させることが可能である。 いってみれば兄弟みたいなものである。
今のところ、RTはHTMLとPlain text(要w3m)へ変換できる。 w3mのWindows版はCygwinしかないので、Windowsの人はCygwinを使う必要がある。 HTMLへの変換のみ必要ならばw3mは不要である。
設計の方もRDtoolと似せている。 parserとvisitorに分け、rt2html-lib.rbを作成。
以下のコマンドを実行。
ruby -ropen-uri -e 'URI("http://www.rubyist.net/~rubikitch/archive/rttool-1.0.3.tar.gz").read.display' > rttool-1.0.3.tar.gz
tar xzvf rttool-1.0.3.tar.gz
失敗する場合は次のリンクからダウンロード。
それから次のコマンドでインストール。
cd rttool-1.0.3 ruby setup.rb config ruby setup.rb setup ruby setup.rb install
パッケージにある rt ディレクトリを $LOAD_PATH の通ったディレクトリにコピーする。
require 'rt/rtparse'
と使われるので。rt/dot.rt.rd2rc
RTは3つのBlockで構成される
HeaderBlock, BodyBlock の項目の区切は , かTabである。
==は左の列を伸ばす。 HTMLでいうTH、TD要素のcolspan属性に影響。
||は上の行を伸ばす。 HTMLでいうTH、TD要素のrowspan属性に影響。
ConfigBlockでは次の属性が設定できる。
表のタイトルを設定する。
データの区切を指定する。
左の列を伸ばす指定。(デフォルトは==
)
上の行を伸ばす設定。(デフォルトは||
)
delimiterをデータに含める必要があるときにこの属性で指定された文字を前置する。 デフォルトでは無効となっている。
値をカンマで区切るのが一番簡単なRT。
$ cat examples/easiest.rt 1, 2, 3 4, 5, 6 7, 8, 9 $ rt2 examples/easiest.rt ┌─┬─┬─┐ │ 1│ 2│ 3│ ├─┼─┼─┤ │ 4│ 5│ 6│ ├─┼─┼─┤ │ 7│ 8│ 9│ └─┴─┴─┘ $ rt2 -r rt/rt2html-lib examples/easiest.rt <!-- setup --> <table border="1"> <!-- setup end --> <!-- Header --> <!-- Header end --> <!-- Body --> <tbody> <tr><td align="right">1</td><td align="right">2</td><td align="right">3</td></tr> <tr><td align="right">4</td><td align="right">5</td><td align="right">6</td></tr> <tr><td align="right">7</td><td align="right">8</td><td align="right">9</td></tr> </tbody> <!-- Body end --> <!-- teardown --> </table> <!-- teardown end -->
RTはdelimiterを自由に指定できるが、delimiterを地の文に含める必要があるとき、
エスケープは、delimiter文字の前に置くことで、delimiterではなくて地の文とみなされる。
$ cat examples/escape.rt delimiter = ; escape = \ \z ; \;1 ; 2 $ rt2 examples/escape.rt ┌─┬─┬─┐ │\z│;1│ 2│ └─┴─┴─┘ $ rt2 -r rt/rt2html-lib examples/escape.rt <!-- setup --> <table border="1"> <!-- setup end --> <!-- Header --> <!-- Header end --> <!-- Body --> <tbody> <tr><td align="left">\z</td><td align="left">;1</td><td align="right">2</td></tr> </tbody> <!-- Body end --> <!-- teardown --> </table> <!-- teardown end -->
$ cat examples/test1.rt caption = Test Table , Human, == , Dog , == || , M , F ,M,F x , 1.0 , 2.0, 1.1, 1.2 y , 0.4 , 0.5, 0.3, 0.1 $ rt2 examples/test1.rt Test Table ┌─┬─────┬─────┐ │ │ Human │ Dog │ │ ├──┬──┼──┬──┤ │ │ M │ F │ M │ F │ ├─┼──┼──┼──┼──┤ │x │ 1.0│ 2.0│ 1.1│ 1.2│ ├─┼──┼──┼──┼──┤ │y │ 0.4│ 0.5│ 0.3│ 0.1│ └─┴──┴──┴──┴──┘ $ rt2 -r rt/rt2html-lib examples/test1.rt <!-- setup --> <table border="1"> <caption>Test Table</caption> <!-- setup end --> <!-- Header --> <thead> <tr><th rowspan="2"></th><th colspan="2">Human</th><th colspan="2">Dog</th></tr> <tr><th>M</th><th>F</th><th>M</th><th>F</th></tr> </thead> <!-- Header end --> <!-- Body --> <tbody> <tr><td align="left">x</td><td align="right">1.0</td><td align="right">2.0</td><td align="right">1.1</td><td align="right">1.2</td></tr> <tr><td align="left">y</td><td align="right">0.4</td><td align="right">0.5</td><td align="right">0.3</td><td align="right">0.1</td></tr> </tbody> <!-- Body end --> <!-- teardown --> </table> <!-- teardown end -->
さらに、RDに埋め込むこともできるのだ。 RTはRDではないのでRDのfilter機能を使うことになる。 これで表つきのテキストを生成できる。 beginとendが煩雑なのはRDtoolの仕様なのでしょうがない。 コマンドラインが長くなるのでrdrt2というコマンドを用意。
$ cat examples/rttest.rd =begin = Sample RD/RT This RD contains a table. It is so-called RD/RT. =end =begin RT caption = Test Table , Human, == , Dog , == || , M , F ,M,F x , 1.0 , 2.0, 1.1, 1.2 y , 0.4 , 0.5, 0.3, 0.1 =end =begin It is simple. =end $ rdrt2 examples/rttest.rd | w3m -dump -T text/html = Sample RD/RT This RD contains a table. It is so-called RD/RT. Test Table ┌─┬─────┬─────┐ │ │ Human │ Dog │ │ ├──┬──┼──┬──┤ │ │ M │ F │ M │ F │ ├─┼──┼──┼──┼──┤ │x │ 1.0│ 2.0│ 1.1│ 1.2│ ├─┼──┼──┼──┼──┤ │y │ 0.4│ 0.5│ 0.3│ 0.1│ └─┴──┴──┴──┴──┘ It is simple.
HTMLやLaTeXの表の書き方がちょいイラつく。
RDに表作成機能があればいいが、いろいろ弊害が。
約9年、いろいろなことを考えていたが現在のシンプルな仕様のままがいいと判断した。
Ruby'sとします。