青山です。

だいたいまとまったので、http://www.ruby-lang.org/~wakou/lib/test/ に置
いてみました。

XHTML にも対応し、new(:check=>true) により、包括関係のチェックが働くよ
うになります。

チェック時には、そのクラスでの NoMethodError の場合は、HTML の記述ミス
とみなし、例えば、head 内で p を使用すると、次のように、そこで利用でき
るエレメントを提示するようにしました。

Exception `NoMethodError' at test.rb:20 - undefined method `p' for #<HTML::Html3:0x402baffc>
  You can use these elements here.
title, isindex, base, script, style, meta, link

メソッドの生成は require 時に行われるので、ruby を起動したままにする、
mod_ruby のような環境では、1ファイルに詰め込んである cgi.rb の HTML
生成機能を利用するよりも高速になると思われます。



require "cgi"
cgi = CGI.new

require "cgi/session"
session = CGI::Session.new(cgi)

require "html/xhtml1"
html = HTML::XHtml1.new(:cgi=>cgi, :encoding=>"euc-jp", :check=>$DEBUG, :pretty=>$DEBUG) do
  html("ja") do                # == html(:lang=>"ja") do
    head{ title{"TITLE"} }
    body("white", "black") do  # == body(:bgcolor=>"white", :text=>"black") do
      h1{"head 1"}
      p do
        "some text"
      end
      p do
        pcdata(:escape){"<Ruby's home page> is "}
        a("http://www.ruby-lang.org/"){"here"}
        pcdata(:escape){"."}
      end
      form do
        fieldset do
          textarea("field_name")
          br
          submit
        end
      end
      pre do
        pcdata(:escape){cgi.params.inspect}  # auto escape &\"<>
      end
    end
  end
end
cgi.out{html.to_s}


require "html/xhtml1fr"
html = HTML::XHtml1Fr.new(:cgi=>cgi, :encoding=>"euc-jp", :check=>$DEBUG, :pretty=>$DEBUG) do
  html("ja") do                # == html(:lang=>"ja") do
    head{ title{"TITLE"} }
    frameset(:cols=>"50%,*") do
      frame("url", "name")     # == frame(:src=>"url", :name=>"name")
      frame(:src=>"url", :name=>"name", :noresize=>true)
      noframes do
        body("white", "black") do
          "body"
        end
      end
    end
  end
end


-- 
青山 和光 Wakou Aoyama  <wakou / ruby-lang.org>