[#33169] a cool Ruby script. — Yuji Asakawa <namu@...>
From: Yuji Asakawa <namu@venus.dti.ne.jp>
From: Yuji Asakawa <namu@venus.dti.ne.jp>
[#33172] [ANN] Ruby/zlib 0.5.0-pre1 — UENO Katsuhiro <unnie@...>
うえのです。
[#33183] [ANN] TMail 0.10 — Minero Aoki <aamine@...>
あおきです。
[#33185] rd-mode: rd-intelligent-newline — "Shirai,Kaoru" <shirai@...1jp.com>
白井といいます。
[#33208] Method passing block — sinara@...
原(信)です。
[#33229] ruby のインストールがうまくいかない — satoshi SAKAI <gau_sato@...9.dion.ne.jp>
はじめまして。
At Tue, 8 Jan 2002 19:58:55 +0900,
サカイです。
なかだです。
サカイです。
From: satoshi SAKAI <gau_sato@d9.dion.ne.jp>
In the message <20020109102738.TQIO11600.femail11.im.home.ne.jp@witch>,
さくです。
いわおかです。
さくです。
In message <20020110020553.61dd3936.crouton@weatherlight.org>
[#33234] DB のカラム名をもった各行のオブジェクトへ向けて — encore ann <i@...>
もりかわです。
[#33235] " 差分ベースモジュール " in Ruby — Taku Nakajima <tnakajima@...>
中島@ブレーンです。
ただただしです。
Toshです。
In article <A5EF3ECC-04BE-11D6-B67B-003065DC8B1C@yb3.so-net.ne.jp>,
In article <hvoell014rl.fsf@coulee.a02.aist.go.jp>,
まつもと ゆきひろです
In article <1010559765.279084.16212.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1010566232.053696.16272.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1010568827.806757.16317.nullmailer@ev.netlab.jp>,
なかだです。
nobu.nakada@nifty.ne.jpさんの
[#33263] RDtool インストールでの疑問 — satoshi SAKAI <gau_sato@...9.dion.ne.jp>
サカイです。
[#33288] HTML から BODY を抜き出す — m_seki@...
坂野 正明です。
MoonWolfです。
[#33300] 日付順のソートについて — "Tatsuaki Nagai" <Tatsuaki_Nagai@...>
永井@KCです。
[#33326] [ 質問 ] クラスメソッドのモジュールによる実現方法 — Hiroyuki Komatsu <komatsu@...>
小松と申します. はじめまして.
[#33346] IPSocket.getaddress — "Sadayuki Sakamoto" <sakacom@...>
酒本です。
酒本です。
In article <009501c19c02$aaa39740$65bc80da@pc0>,
In article <hvo66668ztc.fsf@coulee.a02.aist.go.jp>,
まつもと ゆきひろです
[#33356] about pty and expect on 1.7.x — YANAGAWA Kazuhisa <kjana@...4lab.to>
ruby-talk の話見ててちょっと思いだしたんですが....
[#33367] [ANN] rb2exe-preview1 — Yuya Kato <yuya@4th.to>
[#33381] [ANN] WString 0.0.8 — takuma ozawa <metal@...>
小澤といいます。
[#33392] Re: [ANN] rb2exe-preview1 — Nagai T <idonagai@...>
なかだです。
ひだかです。
ふたたびひだかです。
またひだかですが(^_^;
[#33398] ruby-mode のインデント不具合 (} + の次の行) — MALTA Koji <malta@...>
丸田と申します。
[#33416] No such file to load -- dbm — satoshi SAKAI <gau_sato@...9.dion.ne.jp>
サカイと言います。(以前もお世話になりました。)
まつもと ゆきひろです
ただただしです。まいどどうも(?)。
サカイです。
[#33427] CGI でキャッシュ — Fujikawa Norihide <ruby@...>
てんしゅう@ねむぅ。
[#33443] libpgsql-ruby-0.6.5 で Linux+PostgreSQL+Ruby について — "井上 浩一" <kyoui32@...>
井上です。
[#33462] Re: Mysql/Ruby のコンパイル — "井上 浩一" <kyoui32@...>
井上です。
ひだかです。
なかだです。
ひだかです。
なかだです。
ひだかです。
なかだです。
ひだかです。
なかだです。
ひだかです。
たむらです。
なかだです。
たむらです。
西山和広です。
たむらです。
高橋征義です。
たむらです。
[#33477] about nest class — sheepman <sheepman@...>
こんにちは
まつもと ゆきひろです
あおきです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#33517] [BUG] Can't compile ruby on Solaris2.6 — IWAMURO Motonori <iwa@...>
岩室です。
まつもと ゆきひろです
岩室です。
わたなべです。
[#33520] IP に関するライブラリ cygwin & linux — "井上 浩一" <kyoui32@...>
井上です。
さくです。
In article <20020125163631.076601cb.crouton@weatherlight.org>,
さくです。
[#33535] broken symbolic link and File::mtime — Go Nakagawa <nakagawa@...>
中川といいます。
まつもと ゆきひろです
In message <1012002148.661980.9788.nullmailer@ev.netlab.jp>
西山和広です。
In message <20020127213735.2369.ZN@mbf.nifty.com>
西山和広です。
まつもと ゆきひろです
In article <1012194192.456224.19148.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1012208486.646506.19793.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1012212090.162851.19949.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1012227444.855288.20722.nullmailer@ev.netlab.jp>,
In message <hvoy9ii4eon.fsf@coulee.a02.aist.go.jp>
In article <200201281639.g0SGdRH29664@edge.sky.yamashina.kyoto.jp>,
さくです。
うぅむ。もうすこし早く Subject: を変えるべきであった...
まつもと ゆきひろです
In article <1012282185.518684.23103.nullmailer@ev.netlab.jp>,
In article <1012208486.646506.19793.nullmailer@ev.netlab.jp>,
[#33547] racc fails on alpha-freebsd — Minero Aoki <aamine@...>
あおきです。
In message <20020126123640V.aamine@mx.edit.ne.jp>
あおきです。
[#33556] Cgi::session in eRuby — kyosuke kiyooka <k@7ruby.com>
きよおかです。
きよおかです。
[#33570] NHK スペシャル「変革の世紀」 — rubiben <ozaki@...>
[#33613] Re: ある文字列以外の部分にマッチさせる方法 — "Tatsuaki Nagai" <Tatsuaki_Nagai@...>
永井です。
[#33664] rd2 コマンド( RDtool )が動かない。 — Seiji Yoneda <yoneda@...>
米田と申します。はじめて投稿します。
有馬です。
サイトウさん、有馬さん、ありがとうございます。
たむらです。
ひだかです。
[#33689] Windows をリブートするスクリプトはありますか?。 — Take_tk <ggb03124@...>
どちら様か、Windows をリブートするスクリプトを既に作っておられないでしょ
[ruby-list:33409] Re: cgi-ng ( Re: ruby-mode のインデント不具合 (} + の次の行))
なかだです。
あまりにもデカくなってしまったので、ruby-devに。
At Wed, 16 Jan 2002 16:20:14 +0900,
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:
> できれば次世代CGIライブラリは
>
> require 'cgi-ng'
> cgi = CGI.new('html4')
> cgi.out {
> cgi.html {
> cgi.head {
> cgi.title {'title'}
> }
> cgi.body {
> cgi.h1 {'title'}
> cgi.p {'contents'}
> }
> }
> }
>
> というインターフェースであってほしいものです。あるいは
こんな感じでしょうか。とりあえず上くらいの単純なものなら、今の
とだいたい同じ結果になりそうな気が。
Index: cgi.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/lib/cgi.rb,v
retrieving revision 1.33
diff -u -2 -p -r1.33 cgi.rb
--- cgi.rb 2001/11/21 03:30:22 1.33
+++ cgi.rb 2002/01/16 10:00:26
@@ -560,5 +560,6 @@ convert string charset, and set language
options = { "type" => options } if options.kind_of?(String)
- content = yield
+ yield
+ content = @content.join("\n") << "\n"
if options.has_key?("charset")
@@ -584,4 +585,12 @@ convert string charset, and set language
end
+ def <<(s)
+ if s and !s.empty?
+ @nest -= 1 if /\A<\// =~ s
+ @content << (@pretty and @nest > 0 ? (@pretty * @nest) << s : s)
+ @nest += 1 if /\A<[^!\/]/ =~ s and /\/>\z/ !~ s
+ end
+ self
+ end
=begin
@@ -1000,5 +1009,7 @@ convert string charset, and set language
def nn_element_def(element)
<<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase)
- "<element.upcase" + attributes.collect{|name, value|
+ def #{element.downcase}(attributes = {})
+ nest = @nest
+ self << "<element.downcase" + attributes.collect{|name, value|
next unless value
" " + CGI::escapeHTML(name) +
@@ -1008,11 +1019,12 @@ convert string charset, and set language
'="' + CGI::escapeHTML(value) + '"'
end
- }.to_s + ">" +
+ }.to_s + ">"
if block_given?
- yield.to_s
- else
- ""
- end +
- "</element.upcase>"
+ self << yield
+ end
+ self << "</element.downcase>"
+ @nest = nest
+ ""
+ end
END
end
@@ -1021,5 +1033,6 @@ convert string charset, and set language
def nOE_element_def(element)
<<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase)
- "<element.upcase" + attributes.collect{|name, value|
+ def #{element.downcase}(attributes = {})
+ self << "<element.downcase" + attributes.collect{|name, value|
next unless value
" " + CGI::escapeHTML(name) +
@@ -1030,4 +1043,6 @@ convert string charset, and set language
end
}.to_s + ">"
+ ""
+ end
END
end
@@ -1036,5 +1051,7 @@ convert string charset, and set language
def nO_element_def(element)
<<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase)
- "<element.upcase" + attributes.collect{|name, value|
+ def #{element.downcase}(attributes = {})
+ nest = @nest
+ self << "<element.downcase" + attributes.collect{|name, value|
next unless value
" " + CGI::escapeHTML(name) +
@@ -1044,13 +1061,14 @@ convert string charset, and set language
'="' + CGI::escapeHTML(value) + '"'
end
- }.to_s + ">" +
+ }.to_s + ">"
if block_given?
- yield.to_s + "</element.upcase>"
- else
- ""
+ self << yield
+ self << "</element.downcase>"
+ @nest = nest
end
+ ""
+ end
END
end
-
end # TagMaker
@@ -1191,15 +1209,14 @@ convert string charset, and set language
values.collect{|value|
if value.kind_of?(String)
- checkbox(name, value) + value
+ checkbox(name, value)
+ self << value
+ elsif value[-1] == true
+ checkbox(name, value[0], true)
+ self << value[-2]
else
- if value[value.size - 1] == true
- checkbox(name, value[0], true) +
- value[value.size - 2]
- else
- checkbox(name, value[0]) +
- value[value.size - 1]
- end
+ checkbox(name, value[0])
+ self << value[-1]
end
- }.to_s
+ }
end
@@ -1261,16 +1278,11 @@ The hash keys are case sensitive. Ask th
method
end
- if block_given?
- body = yield
- else
- body = ""
- end
+ yield if block_given?
if @output_hidden
- hidden = @output_hidden.collect{|k,v|
- "<INPUT TYPE=HIDDEN NAME=\"#{k}\" VALUE=\"#{v}\">"
- }.to_s
- body += hidden
+ @output_hidden.collect{|k,v|
+ self << "<input type=hidden name=\"#{k.downcase}\" value=\"#{v}\">"
+ }
end
- super(attributes){body}
+ super(attributes)
end
@@ -1338,30 +1350,20 @@ The hash keys are case sensitive. Ask th
attributes = { "PRETTY" => true }
end
- pretty = attributes.delete("PRETTY")
- pretty = " " if true == pretty
- buf = ""
+ @pretty = attributes.delete("PRETTY")
+ @pretty = " " if @pretty == true
if attributes.has_key?("DOCTYPE")
- if attributes["DOCTYPE"]
- buf += attributes.delete("DOCTYPE")
- else
- attributes.delete("DOCTYPE")
+ if d = attributes.delete("DOCTYPE")
+ self << d
end
else
- buf += doctype
+ self << doctype
end
if block_given?
- buf += super(attributes){ yield }
- else
- buf += super(attributes)
- end
-
- if pretty
- CGI::pretty(buf, pretty)
+ super(attributes){ yield }
else
- buf
+ super(attributes)
end
-
end
@@ -1516,17 +1518,15 @@ The hash keys are case sensitive. Ask th
values.collect{|value|
if value.kind_of?(String)
- option({ "VALUE" => value }){ value }
+ option({ "VALUE" => value }){ self << value }
+ elsif value[-1] == true
+ option({ "VALUE" => value[0], "SELECTED" => true }){
+ self << value[-2]
+ }
else
- if value[value.size - 1] == true
- option({ "VALUE" => value[0], "SELECTED" => true }){
- value[value.size - 2]
- }
- else
- option({ "VALUE" => value[0] }){
- value[value.size - 1]
- }
- end
+ option({ "VALUE" => value[0] }){
+ self << value[-1]
+ }
end
- }.to_s
+ }
}
@@ -1588,17 +1588,16 @@ The hash keys are case sensitive. Ask th
name = name["NAME"]
end
- values.collect{|value|
+ values.each {|value|
if value.kind_of?(String)
- radio_button(name, value) + value
+ radio_button(name, value)
+ self << value
+ elsif value[-1] == true
+ radio_button(name, value[0], true)
+ self << value[-2]
else
- if value[value.size - 1] == true
- radio_button(name, value[0], true) +
- value[value.size - 2]
- else
- radio_button(name, value[0]) +
- value[value.size - 1]
- end
+ radio_button(name, value[0])
+ self << value[-1]
end
- }.to_s
+ }
end
@@ -1718,6 +1717,31 @@ The hash keys are case sensitive. Ask th
end # HtmlExtension
+ extend TagMaker
+ methods = ""
+
+ methods << nn_element_def("PRE").sub(/(\n\s+)self << yield/, '\1@nest = 0\&')
+
+ # - -
+ for element in %w[A ADDRESS B BIG BLOCKQUOTE CAPTION CITE CODE
+ DFN DIV DL EM FORM H1 H2 H3 H4 H5 H6 I KBD MAP OL SAMP
+ SCRIPT SELECT SMALL STRONG STYLE SUB SUP TABLE TEXTAREA
+ TITLE TT UL VAR]
+ methods << nn_element_def(element)
+ end
+
+ # - O EMPTY
+ for element in %w[AREA BASE BR HR IMG INPUT LINK META PARAM]
+ methods << nOE_element_def(element)
+ end
+
+ # O O or - O
+ for element in %w[HTML BODY P DT DD LI OPTION TR TH TD HEAD]
+ methods << nO_element_def(element)
+ end
+
+ eval(methods)
module Html3
+ extend TagMaker
def doctype
@@ -1725,46 +1749,27 @@ The hash keys are case sensitive. Ask th
end
- def element_init
- extend TagMaker
- methods = ""
- # - -
- for element in %w[ A TT I B U STRIKE BIG SMALL SUB SUP EM STRONG
- DFN CODE SAMP KBD VAR CITE FONT ADDRESS DIV center MAP
- APPLET PRE XMP LISTING DL OL UL DIR MENU SELECT table TITLE
- STYLE SCRIPT H1 H2 H3 H4 H5 H6 TEXTAREA FORM BLOCKQUOTE
- CAPTION ]
- methods += <<-BEGIN + nn_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ methods = ""
- # - O EMPTY
- for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
- ISINDEX META ]
- methods += <<-BEGIN + nOE_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ # - -
+ for element in %w[APPLET center DIR FONT LISTING MENU STRIKE U XMP]
+ methods << nn_element_def(element)
+ end
- # O O or - O
- for element in %w[ HTML HEAD BODY P PLAINTEXT DT DD LI OPTION tr
- th td ]
- methods += <<-BEGIN + nO_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
- eval(methods)
+ # - O EMPTY
+ for element in %w[BASEFONT ISINDEX]
+ methods << nOE_element_def(element)
end
+ # O O or - O
+ for element in %w[PLAINTEXT]
+ methods << nO_element_def(element)
+ end
+
+ eval(methods)
end # Html3
module Html4
+ extend TagMaker
def doctype
@@ -1772,45 +1777,29 @@ The hash keys are case sensitive. Ask th
end
- def element_init
- extend TagMaker
- methods = ""
- # - -
- for element in %w[ TT I B BIG SMALL EM STRONG DFN CODE SAMP KBD
- VAR CITE ABBR ACRONYM SUB SUP SPAN BDO ADDRESS DIV MAP OBJECT
- H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT OPTGROUP
- FIELDSET LEGEND BUTTON TABLE TITLE STYLE SCRIPT NOSCRIPT
- TEXTAREA FORM A BLOCKQUOTE CAPTION ]
- methods += <<-BEGIN + nn_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ methods = ""
- # - O EMPTY
- for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META ]
- methods += <<-BEGIN + nOE_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ # - -
+ for element in %w[ABBR ACRONYM BDO BUTTON DEL FIELDSET INS LABEL
+ LEGEND NOSCRIPT OBJECT OPTGROUP Q SPAN]
+ methods << nn_element_def(element)
+ end
- # O O or - O
- for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
- COLGROUP TR TH TD HEAD]
- methods += <<-BEGIN + nO_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
- eval(methods)
+ # - O EMPTY
+ for element in %w[COL]
+ methods << nOE_element_def(element)
+ end
+
+ # O O or - O
+ for element in %w[THEAD TFOOT TBODY COLGROUP]
+ methods << nO_element_def(element)
end
+ eval(methods)
end # Html4
module Html4Tr
+ extend TagMaker
+ include Html4
def doctype
@@ -1818,47 +1807,28 @@ The hash keys are case sensitive. Ask th
end
- def element_init
- extend TagMaker
- methods = ""
- # - -
- for element in %w[ TT I B U S STRIKE BIG SMALL EM STRONG DFN
- CODE SAMP KBD VAR CITE ABBR ACRONYM FONT SUB SUP SPAN BDO
- ADDRESS DIV CENTER MAP OBJECT APPLET H1 H2 H3 H4 H5 H6 PRE Q
- INS DEL DL OL UL DIR MENU LABEL SELECT OPTGROUP FIELDSET
- LEGEND BUTTON TABLE IFRAME NOFRAMES TITLE STYLE SCRIPT
- NOSCRIPT TEXTAREA FORM A BLOCKQUOTE CAPTION ]
- methods += <<-BEGIN + nn_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ methods = ""
- # - O EMPTY
- for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
- COL ISINDEX META ]
- methods += <<-BEGIN + nOE_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ # - -
+ for element in %w[APPLET CENTER DIR FONT IFRAME MENU NOFRAMES S
+ STRIKE U]
+ methods << nn_element_def(element)
+ end
- # O O or - O
- for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
- COLGROUP TR TH TD HEAD ]
- methods += <<-BEGIN + nO_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
- eval(methods)
+ # - O EMPTY
+ for element in %w[BASEFONT ISINDEX META]
+ methods << nOE_element_def(element)
+ end
+
+ # O O or - O
+ for element in %w[]
+ methods << nO_element_def(element)
end
+ eval(methods)
end # Html4Tr
module Html4Fr
+ extend TagMaker
def doctype
@@ -1866,26 +1836,17 @@ The hash keys are case sensitive. Ask th
end
- def element_init
- methods = ""
- # - -
- for element in %w[ FRAMESET ]
- methods += <<-BEGIN + nn_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
+ methods = ""
- # - O EMPTY
- for element in %w[ FRAME ]
- methods += <<-BEGIN + nOE_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
- end
- eval(methods)
+ # - -
+ for element in %w[FRAMESET]
+ methods << nn_element_def(element)
+ end
+
+ # - O EMPTY
+ for element in %w[ FRAME ]
+ methods << nOE_element_def(element)
end
+ eval(methods)
end # Html4Fr
@@ -1907,22 +1868,19 @@ The hash keys are case sensitive. Ask th
when "html3"
extend Html3
- element_init()
extend HtmlExtension
when "html4"
extend Html4
- element_init()
extend HtmlExtension
when "html4Tr"
extend Html4Tr
- element_init()
extend HtmlExtension
when "html4Fr"
extend Html4Tr
- element_init()
extend Html4Fr
- element_init()
extend HtmlExtension
end
+ @content = []
+ @nest = 0
end
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦