a6429f8c22
Completely removed the html5lib sanitizer. Fixed the string-handling to work in both Ruby 1.8.x and 1.9.2. There are still, inexplicably, two functional tests that fail. But the rest seems to work quite well.
78 lines
1.9 KiB
Ruby
78 lines
1.9 KiB
Ruby
require 'html5/html5parser/phase'
|
|
|
|
module HTML5
|
|
class InCellPhase < Phase
|
|
|
|
# http://www.whatwg.org/specs/web-apps/current-work/#in-cell
|
|
|
|
handle_start 'html', %w( caption col colgroup tbody td tfoot th thead tr ) => 'TableOther'
|
|
|
|
handle_end %w( td th ) => 'TableCell', %w( body caption col colgroup html ) => 'Ignore'
|
|
|
|
handle_end %w( table tbody tfoot thead tr ) => 'Imply'
|
|
|
|
def processCharacters(data)
|
|
@parser.phases[:inBody].processCharacters(data)
|
|
end
|
|
|
|
def startTagTableOther(name, attributes)
|
|
if in_scope?('td', true) or in_scope?('th', true)
|
|
closeCell
|
|
@parser.phase.processStartTag(name, attributes)
|
|
else
|
|
# inner_html case
|
|
parse_error
|
|
end
|
|
end
|
|
|
|
def startTagOther(name, attributes)
|
|
@parser.phases[:inBody].processStartTag(name, attributes)
|
|
end
|
|
|
|
def endTagTableCell(name)
|
|
if in_scope?(name, true)
|
|
@tree.generateImpliedEndTags(name)
|
|
if @tree.open_elements.last.name != name
|
|
parse_error("unexpected-cell-end-tag", {"name" => name})
|
|
|
|
remove_open_elements_until(name)
|
|
else
|
|
@tree.open_elements.pop
|
|
end
|
|
@tree.clearActiveFormattingElements
|
|
@parser.phase = @parser.phases[:inRow]
|
|
else
|
|
parse_error("unexpected-end-tag", {"name" => name})
|
|
end
|
|
end
|
|
|
|
def endTagIgnore(name)
|
|
parse_error("unexpected-end-tag", {"name" => name})
|
|
end
|
|
|
|
def endTagImply(name)
|
|
if in_scope?(name, true)
|
|
closeCell
|
|
@parser.phase.processEndTag(name)
|
|
else
|
|
# sometimes inner_html case
|
|
parse_error "unexpected-end-tag", {:name => name}
|
|
end
|
|
end
|
|
|
|
def endTagOther(name)
|
|
@parser.phases[:inBody].processEndTag(name)
|
|
end
|
|
|
|
protected
|
|
|
|
def closeCell
|
|
if in_scope?('td', true)
|
|
endTagTableCell('td')
|
|
elsif in_scope?('th', true)
|
|
endTagTableCell('th')
|
|
end
|
|
end
|
|
|
|
end
|
|
end |