48 lines
1.2 KiB
Ruby
48 lines
1.2 KiB
Ruby
require 'html5/treewalkers/base'
|
|
|
|
module HTML5
|
|
module TreeWalkers
|
|
module SimpleTree
|
|
class TreeWalker < HTML5::TreeWalkers::Base
|
|
include HTML5::TreeBuilders::SimpleTree
|
|
|
|
def walk(node)
|
|
case node
|
|
when Document, DocumentFragment
|
|
return
|
|
|
|
when DocumentType
|
|
yield doctype(node.name, node.public_id, node.system_id)
|
|
|
|
when TextNode
|
|
text(node.value) {|token| yield token}
|
|
|
|
when Element
|
|
if VOID_ELEMENTS.include?(node.name)
|
|
yield empty_tag(node.name, node.attributes, node.hasContent())
|
|
else
|
|
yield start_tag(node.name, node.attributes)
|
|
for child in node.childNodes
|
|
walk(child) {|token| yield token}
|
|
end
|
|
yield end_tag(node.name)
|
|
end
|
|
|
|
when CommentNode
|
|
yield comment(node.value)
|
|
|
|
else
|
|
puts '?'
|
|
yield unknown(node.class)
|
|
end
|
|
end
|
|
|
|
def each
|
|
for child in @tree.childNodes
|
|
walk(child) {|node| yield node}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|