Skip to content

Commit

Permalink
* lib/cgi/html5.rb: Add html5 tag maker.
Browse files Browse the repository at this point in the history
    * lib/cgi/core.rb: ditto.
      [Feature ruby#6637]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
xibbar committed Oct 4, 2012
1 parent 4336caf commit aeca965
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 2 deletions.
6 changes: 6 additions & 0 deletions lib/cgi/core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,7 @@ def self.accept_charset=(accept_charset)
# "html4":: HTML 4.0
# "html4Tr":: HTML 4.0 Transitional
# "html4Fr":: HTML 4.0 with Framesets
# "html5":: HTML 5
#
# <tt>block</tt>::
# If provided, the block is called when an invalid encoding is
Expand Down Expand Up @@ -831,6 +832,11 @@ def initialize(options = {}, &block) # :yields: name, value
extend Html4Fr
element_init()
extend HtmlExtension
when "html5"
require 'cgi/html'
extend Html5
element_init()
extend HtmlExtension
end
end

Expand Down
55 changes: 53 additions & 2 deletions lib/cgi/html.rb
Original file line number Diff line number Diff line change
Expand Up @@ -922,7 +922,7 @@ def #{element.downcase}(attributes = {})

# O O or - O
for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
COLGROUP TR TH TD HEAD]
COLGROUP TR TH TD HEAD ]
methods << <<-BEGIN + nO_element_def(element) + <<-END
def #{element.downcase}(attributes = {})
BEGIN
Expand Down Expand Up @@ -1020,6 +1020,57 @@ def #{element.downcase}(attributes = {})
end

end # Html4Fr
end


# Mixin module for HTML version 5 generation methods.
module Html5 # :nodoc:

# The DOCTYPE declaration for this version of HTML
def doctype
%|<!DOCTYPE HTML>|
end

# Initialise the HTML generation methods for this version.
def element_init
extend TagMaker
methods = ""
# - -
for element in %w[ SECTION NAV ARTICLE ASIDE HGROUP
FOOTER FIGURE FIGCAPTION S TIME U MARK RUBY BDI IFRAME
VIDEO AUDIO CANVAS DATALIST OUTPUT PROGRESS METER DETAILS
SUMMARY MENU DIALOG I B SMALL EM STRONG DFN CODE SAMP KBD
VAR CITE ABBR SUB SUP SPAN BDO ADDRESS DIV MAP OBJECT
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
end

# - O EMPTY
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
end

# O O or - O
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
end
eval(methods)
end

end # Html5
end
8 changes: 8 additions & 0 deletions test/cgi/test_cgi_core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,14 @@ def test_cgi_core_htmltype
cgi = CGI.new('html4Fr')
expected = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
assert_equal(expected, cgi.doctype)
## html5
cgi = CGI.new('html5')
expected = '<!DOCTYPE HTML>'
assert_equal(expected, cgi.doctype)
# cgi.header not broken
expected = "Content-Type: text/html\r\n\r\n"
actual = cgi.header
assert_equal(expected, actual)
end


Expand Down

0 comments on commit aeca965

Please sign in to comment.