かんだです。
% 1.3 メインになって、-dev が盛んですね。

matz / netlab.co.jp (Yukihiro Matsumoto)さんの書かれた、
	「[ruby-dev:4677] Re: cookie on cgi-lib.rb」
からの引用です。

> まつもと ゆきひろです
> 
> In message "[ruby-dev:4660] Re: cookie on cgi-lib.rb"
>     on 99/02/04, Wakou Aoyama <wakou / fsinet.or.jp> writes:
> 
> |青山です。
> 
> |ところで、この CGI.tag というのは面白いアイディアですね。次のような感
> |じにすると汎用性のあるインターフェイスになりますが、いかがでしょう。
> 
> 面白いアイディアですね.パッチ取り込んでみました.
> 将来に渡って残るかどうかはともかく.

  CGI.rb は使ったことないんで見当違いかもしれないですけど。
  tag をオブジェクトにしてしまうと綺麗じゃないかしら?

  class Element
    def initialize(name)
      @name = name
      @attr = Hash.new()
      @children = Array.new()
    end
    def set_attribute(key, val)
      @attr[key] = val
      self
    end
    def insert(child)
      @children << child
      self
    end
    def to_s
      ret = "<" + @name
      @attr.each { |k,v| ret << format(" %s=\"%s\"", k, v) }
      ret << ">"
      @children.each do |child|
        ret << child.to_s
      end
      ret << format("</%s>\n", @name)
    end
  end



> つまり,
> 
> |input1 = CGI.tag("INPUT", {"TYPE"=>"BUTTON", "VALUE"=>"BUTTON"})
> |input2 = CGI.tag("INPUT", {"TYPE"=>"TEXT", "VALUE"=>"TEXT"})
> |form1  = CGI.tag("FORM"){ input1 + input2 }
> |msg1   = CGI.tag("P"){ "message" + CGI.tag("BR") }
> |
> |print CGI.header,
> |      CGI.tag("HTML"){
> |        CGI.tag("HEAD"){ CGI.tag("TITLE"){"TITLE"} } +
> |        CGI.tag("BODY"){ msg1 + form1 }
> |      }
> 
> を以下のようにするって話ですが.
> 
>  CGI.header
>  CGI.tag("HTML") {
>    CGI.tag("HEAD") {
>      CGI.tag("HEAD"){ CGI.tag("TITLE"){print "TITLE"} }
>      CGI.tag("BODY"){ 
>        CGI.tag("P"){ print "message"; CGI.tag("BR") }
>        CGI.tag("FORM"){ 
>          CGI.tag("INPUT", {"TYPE"=>"BUTTON", "VALUE"=>"BUTTON"})
>          CGI.tag("INPUT", {"TYPE"=>"TEXT", "VALUE"=>"TEXT"})
>        }
>      }
>    }
>  }


  ぼくのだとこうかな。

html = Element::new("html")
html.insert(head = Element::new("head"))
  head.insert(title = Element::new("title"))
    title.insert("ruby home")
html.insert(body = Element::new("body"))
  body.insert(msg1 = Element::new("P"))
    msg1.insert("ruby is ")
    msg1.insert(Element::new("BR"))
    msg1.insert("beautiful!")
  body.insert(form = Element::new("Form"))
    form.insert(in1 = Element::new("input"))
      in1.set_attribute("type", "button")
      in1.set_attribute("value", "button")
    form.insert(in2 = Element::new("input"))
      in2.set_attribute("type", "text")
      in2.set_attribute("value", "text")
print html.to_s
  
  各エレメントをあらかじめサブクラスで定義しておくと、もう少し簡単。
  <br></br> もそれで修正かしら。

-- 
  楓の街のダイ                       「ジョゼットは、体は機械だけれど…
    MAP2303 / mapletown.net              でも、心は人間なの!」
    http://www.minato.net/~j2/                   -> Wonder Project J2