Rubyで文書

RubyでDSLって話が、巷でようやく騒がれてきた。 なんかいいDSLないかなぁと考えていた時に、文章をRubyで書いたらどうなるかと思って こんな記法で書けるか試してみた。

title "てすと"
ch "はじめに" do
 sec "なぜ世界はこうなったのか?" do
  p "世界が現在のようになったのは、人間が不完全である証拠である。"
  p "人間が#{ref "不完全", "http://hoge.com"}であることを受け入れない限り、世界に明日はない。"
  pre <<-END
  hoge
    hoge
      hoge
  END
 end
 sec "なにをすべきか?" do
  p "今迄の価値観をふりかえり、新たな価値観を創造すること以外に有効な方法はないのだ。"
 end
end

文書構造はまぁいけそうなんだが、やはりインラインのマークアップが難しい。現状だとダブルクォート文字列の中にメソッドを展開する 方法でやってみたが、文字列の評価の時点でインライン展開されてしまうため、評価順がおかしくなる。上記の例で言うと、pの中にある refが先に評価されてしまう。シングルクォート文字列からダブルクォート文字列に変換ってできるんだっけ?

あとは、やはり文字列のためのクォートは面倒だ。コードを書くように文章も書けたら面白いんだけどね。リファクタリングもできるしね。

Error: Failed to load processor AddComment
No macro or processor named 'AddComment' found