From: Shin-ichiro Hara Date: 1999-02-18T11:14:54+09:00 Subject: [ruby-dev:5229] Re: htmlelem.rb (Re: HTML generator) 原です。 > 青山です。 いつ眠っておられるのか。(^^; > すみません。私も書きすぎのような感じはしたのですが、やはりちょっと複雑 > というか、みんなで使おうというには難しいインターフェイスだったものです > から。 もう少しアイデアを解説しますと、HTML はディレクトリ、ファイル構造 によく似たツリー構造をしていますよね。一方 File の open はそのま ま使うとファイルハンドルを返し、ブロックを伴うとパラメータにファイ ルハンドルが入ります。それを模して t() はあるわけです。ただしカレン トディレクトリの概念を導入してブロック内では self が現在の編集起点 になっているわけです。実際の HTML が良くプログラムに反映していて気 に入っているのだけど、難しいのでしょうか。 オブジェクトにして html >> io という出力形式を用いることで出力すべ き文字列の連結をさせないで済んでいるのも一つのアイデアです。 > こんな感じにするとかんださんの案と同じようにすべて後からの変更ができる > ようになるんですね。なるほど。失礼いたしました。 > > html = HtmlElement.new > h2 = HtmlElement.new("H2").i("Hello Ruby.") > html.t("HTML") { > i head = HtmlElement.new.t("HEAD"){ > i title = HtmlElement.new.t("TITLE").i("This is TITLE")} > i "\n" > i body = HtmlElement.new.t("BODY"){ > i h1 = HtmlElement.new("H1").i("Hello Ruby.") > i h2 > i "Hello Ruby." > } > } そんな感じです。。この様にすべてのノードに名前を付けることもできるし、 編集しないノードでは名前を省略できるわけです。今の仕様では h2 = HtmlElement.new.open("H2").i("Hello Ruby.") html = HtmlElement.new.open("HTML") { i head = HtmlElement.new.open("HEAD"){ i title = HtmlElement.new.open("TITLE") { i "This is TITLE" } } i "\n" i body = HtmlElement.new.open("BODY") { i h1 = HtmlElement.new.open("H1").i("Hello Ruby.") i h2 i "Hello Ruby." } } となりますが。 > の話がでていますが、やはり基本的に HTML の再構成が不要である CGI 処理 > には向かないように思われます。 > すでにかんださんの案から色々な HTML をオブジェクトとして扱う事に関して > の話がでていますが、やはり基本的に HTML の再構成が不要である CGI 処理 > には向かないように思われます。 HTML のフォーマットを決めておいて、中身を後で書き換えるのは結構ある でしょう。もっともフォーマットが組み込みになるか、オブジェクトにな るかの違いですが。確かに CGI 処理で入力に応じてフォーマットを編集す るということはあまりあるわけではないですが、たまにはあります。(^^; #私も自分で書いておいて、フェイスマークに対する違和感はあります。:-)