summaryrefslogtreecommitdiff
path: root/lib/cgi
diff options
context:
space:
mode:
authorxibbar <xibbar@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-04-11 08:04:27 +0000
committerxibbar <xibbar@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-04-11 08:04:27 +0000
commitf75da76ffced0fa99c217646685c8069e5526d14 (patch)
tree9d7dda545a23d9d5af6925ea1c0e2990b104e81e /lib/cgi
parent3ae53e494322acba3804cd22d2209f0315be26f7 (diff)
* lib/cgi/{core,html}.rb : Update define tagmaker
because to delete eval. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40237 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/cgi')
-rw-r--r--lib/cgi/core.rb6
-rw-r--r--lib/cgi/html.rb257
2 files changed, 120 insertions, 143 deletions
diff --git a/lib/cgi/core.rb b/lib/cgi/core.rb
index 323a6a5361..e8cc01186d 100644
--- a/lib/cgi/core.rb
+++ b/lib/cgi/core.rb
@@ -832,29 +832,23 @@ class CGI
when "html3"
require 'cgi/html'
extend Html3
- element_init()
extend HtmlExtension
when "html4"
require 'cgi/html'
extend Html4
- element_init()
extend HtmlExtension
when "html4Tr"
require 'cgi/html'
extend Html4Tr
- element_init()
extend HtmlExtension
when "html4Fr"
require 'cgi/html'
extend Html4Tr
- element_init()
extend Html4Fr
- element_init()
extend HtmlExtension
when "html5"
require 'cgi/html'
extend Html5
- element_init()
extend HtmlExtension
end
end
diff --git a/lib/cgi/html.rb b/lib/cgi/html.rb
index ba19e3d603..c0ab459e53 100644
--- a/lib/cgi/html.rb
+++ b/lib/cgi/html.rb
@@ -8,55 +8,64 @@ class CGI
# Generate code for an element with required start and end tags.
#
# - -
- def nn_element_def(element)
- nOE_element_def(element, <<-END)
- if block_given?
- yield.to_s
- else
- ""
- end +
- "</#{element.upcase}>"
- END
+ def nn_element(element, attributes = {})
+ s = nOE_element(element, attributes)
+ if block_given?
+ s << yield.to_s
+ else
+ ""
+ end
+ s << "</#{element.upcase}>"
+ end
+
+ def nn_element_def(attributes = {}, &block)
+ nn_element(__callee__, attributes, &block)
end
# Generate code for an empty element.
#
# - O EMPTY
- def nOE_element_def(element, append = nil)
- s = <<-END
- attributes={attributes=>nil} if attributes.kind_of?(String)
- "<#{element.upcase}" + attributes.collect{|name, value|
- next unless value
- " " + CGI::escapeHTML(name.to_s) +
- if true == value
- ""
- else
- '="' + CGI::escapeHTML(value.to_s) + '"'
- end
- }.join + ">"
- END
- s.sub!(/\Z/, " +") << append if append
- s
+ def nOE_element(element, attributes = {})
+ attributes={attributes=>nil} if attributes.kind_of?(String)
+ s = "<#{element.upcase}"
+ attributes.each do|name, value|
+ next unless value
+ s << " "
+ s << CGI::escapeHTML(name.to_s)
+ if value != true
+ s << '="'
+ s << CGI::escapeHTML(value.to_s)
+ s << '"'
+ end
+ end
+ s << ">"
+ end
+
+ def nOE_element_def(attributes = {}, &block)
+ nOE_element(__callee__, attributes, &block)
end
+
# Generate code for an element for which the end (and possibly the
# start) tag is optional.
#
# O O or - O
- def nO_element_def(element)
- nOE_element_def(element, <<-END)
- if block_given?
- yield.to_s + "</#{element.upcase}>"
- else
- ""
- end
- END
+ def nO_element(element, attributes = {})
+ s = nOE_element(element)
+ if block_given?
+ s << yield.to_s
+ s << "</#{element.upcase}>"
+ end
+ s
+ end
+
+ def nO_element_def(attributes = {}, &block)
+ nO_element(__callee__, attributes, &block)
end
end # TagMaker
- #
# Mixin module providing HTML generation methods.
#
# For example,
@@ -836,50 +845,38 @@ class CGI
# Mixin module for HTML version 3 generation methods.
module Html3 # :nodoc:
+ include TagMaker
# The DOCTYPE declaration for this version of HTML
def doctype
%|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">|
end
- # Initialise the HTML generation methods for this version.
- def element_init
- extend TagMaker
- return if defined?(html)
- methods = ""
+ instance_method(:nn_element_def).tap do |m|
# - -
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
+ define_method(element.downcase, m)
end
+ end
+ instance_method(:nOE_element_def).tap do |m|
# - 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
+ define_method(element.downcase, m)
end
+ end
+ instance_method(:nO_element_def).tap do |m|
# 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
+ define_method(element.downcase, m)
end
- eval(methods)
end
end # Html3
@@ -887,6 +884,7 @@ class CGI
# Mixin module for HTML version 4 generation methods.
module Html4 # :nodoc:
+ include TagMaker
# The DOCTYPE declaration for this version of HTML
def doctype
@@ -894,42 +892,30 @@ class CGI
end
# Initialise the HTML generation methods for this version.
- def element_init
- extend TagMaker
- return if defined?(html)
- methods = ""
- # - -
+ # - -
+ instance_method(:nn_element_def).tap do |m|
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
+ define_method(element.downcase, m)
end
+ end
# - O EMPTY
+ instance_method(:nOE_element_def).tap do |m|
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
+ define_method(element.downcase, m)
end
+ end
# O O or - O
+ instance_method(:nO_element_def).tap do |m|
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
+ define_method(element.downcase, m)
end
- eval(methods)
end
end # Html4
@@ -937,6 +923,7 @@ class CGI
# Mixin module for HTML version 4 transitional generation methods.
module Html4Tr # :nodoc:
+ include TagMaker
# The DOCTYPE declaration for this version of HTML
def doctype
@@ -944,44 +931,32 @@ class CGI
end
# Initialise the HTML generation methods for this version.
- def element_init
- extend TagMaker
- return if defined?(html)
- methods = ""
- # - -
+ # - -
+ instance_method(:nn_element_def).tap do |m|
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
+ define_method(element.downcase, m)
end
+ end
- # - O EMPTY
+ # - O EMPTY
+ instance_method(:nOE_element_def).tap do |m|
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
+ define_method(element.downcase, m)
end
+ end
- # O O or - O
+ # O O or - O
+ instance_method(:nO_element_def).tap do |m|
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
+ define_method(element.downcase, m)
end
- eval(methods)
end
end # Html4Tr
@@ -989,6 +964,7 @@ class CGI
# Mixin module for generating HTML version 4 with framesets.
module Html4Fr # :nodoc:
+ include TagMaker
# The DOCTYPE declaration for this version of HTML
def doctype
@@ -996,27 +972,18 @@ class CGI
end
# Initialise the HTML generation methods for this version.
- def element_init
- return if defined?(frameset)
- methods = ""
- # - -
+ # - -
+ instance_method(:nn_element_def).tap do |m|
for element in %w[ FRAMESET ]
- methods << <<-BEGIN + nn_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
+ define_method(element.downcase, m)
end
+ end
- # - O EMPTY
+ # - O EMPTY
+ instance_method(:nOE_element_def).tap do |m|
for element in %w[ FRAME ]
- methods << <<-BEGIN + nOE_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
+ define_method(element.downcase, m)
end
- eval(methods)
end
end # Html4Fr
@@ -1024,6 +991,7 @@ class CGI
# Mixin module for HTML version 5 generation methods.
module Html5 # :nodoc:
+ include TagMaker
# The DOCTYPE declaration for this version of HTML
def doctype
@@ -1031,11 +999,8 @@ class CGI
end
# Initialise the HTML generation methods for this version.
- def element_init
- extend TagMaker
- return if defined?(html)
- methods = ""
- # - -
+ # - -
+ instance_method(:nn_element_def).tap do |m|
for element in %w[ SECTION NAV ARTICLE ASIDE HGROUP HEADER
FOOTER FIGURE FIGCAPTION S TIME U MARK RUBY BDI IFRAME
VIDEO AUDIO CANVAS DATALIST OUTPUT PROGRESS METER DETAILS
@@ -1044,34 +1009,52 @@ class CGI
H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT
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
+ define_method(element.downcase, m)
end
+ end
- # - O EMPTY
+ # - O EMPTY
+ instance_method(:nOE_element_def).tap do |m|
for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META
COMMAND EMBED KEYGEN SOURCE TRACK WBR ]
- methods += <<-BEGIN + nOE_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
+ define_method(element.downcase, m)
end
+ end
- # O O or - O
+ # O O or - O
+ instance_method(:nO_element_def).tap do |m|
for element in %w[ HTML HEAD BODY P DT DD LI OPTION THEAD TFOOT TBODY
OPTGROUP COLGROUP RT RP TR TH TD ]
- methods += <<-BEGIN + nO_element_def(element) + <<-END
- def #{element.downcase}(attributes = {})
- BEGIN
- end
- END
+ define_method(element.downcase, m)
end
- eval(methods)
end
end # Html5
+
+ class HTML3
+ include Html3
+ include HtmlExtension
+ end
+
+ class HTML4
+ include Html4
+ include HtmlExtension
+ end
+
+ class HTML4Tr
+ include Html4Tr
+ include HtmlExtension
+ end
+
+ class HTML4Fr
+ include Html4Tr
+ include Html4Fr
+ include HtmlExtension
+ end
+
+ class HTML5
+ include Html5
+ include HtmlExtension
+ end
+
end