とりあえず HTML 3.2 のタグをすべて入れてみました。

#PCDATA だけは PCDATA にしてしまったので、使えません。また、サンプルを
書いていて気がついたのですが、ruby は Perl と異なり文字列中に式を入れ
る事が可能なので、そちらの方が便利かもしれません。

しかし、まあ、無いよりはあった方が良いですし、なんといっても HTML のタ
グだらけよりはずっと ruby らしく見えたりします。

ところで、このやり方だとイテレータが大量に出てきますが、どのくらいのオ
ーバーヘッドなんでしょうか? 文字列中に式を埋めこむ方が早いような気も
しますが。


#!/usr/local/bin/ruby
require "cgi-lib.rb"
include Html32
query = CGI.new
if query.keys.include? "text"
  header
  html do
    head do
      title do print "query result" end
    end
    body do
      a %|HREF= "http://#{ENV['HTTP_HOST']}#{ENV['SCRIPT_NAME']}"| do
        print "retry"
      end
      h1 do print "query result" end
      pre do print query['text'] end
      hr
    end
  end
else
  header
  html do
    head do
      title do print "form test" end
    end
    body do
      h1 do print "form test" end
      form 'METHOD="POST"' do
        textarea 'NAME="text" ROWS=25 COLS=80' do
          print "form test"
        end
        input 'TYPE="submit"'
      end
    end
  end
end


module Html32

  ['html', 'head', 'body', 'plaintext', 'title', 'isindex', 'base', 'link',
    'meta', 'style', 'script', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pcdata',
    'tt', 'i', 'b', 'u', 's', 'big', 'small', 'sub', 'sup', 'em', 'strong',
    'dfn', 'code', 'samp', 'kbd', 'var', 'cite', 'q', 'a', 'img', 'applet',
    'object', 'font', 'basefont', 'br', 'script', 'style', 'map', 'span',
    'bdo', 'input', 'select', 'textarea', 'label', 'p', 'ul', 'ol', 'dir',
    'menu', 'pre', 'xmp', 'listing', 'dl', 'div', 'center', 'blockquote',
    'form', 'isindex', 'hr', 'table', 'fieldset', 'address'].each do |tag|
      eval "
        def #{tag}(opts = '')
          print \"<#{tag.upcase} \#{opts}>\"
          if iterator?
            yield
            print \"</#{tag.upcase}>\"
          end
        end
        public :#{tag}
      "
  end

end


青山 和光 Wakou Aoyama <pxn11625 / niftyserve.or.jp>