49 lines
1.1 KiB
Ruby
49 lines
1.1 KiB
Ruby
|
require 'html5lib/treewalkers/base'
|
||
|
|
||
|
module HTML5lib
|
||
|
module TreeWalkers
|
||
|
module SimpleTree
|
||
|
class TreeWalker < HTML5lib::TreeWalkers::Base
|
||
|
include HTML5lib::TreeBuilders::SimpleTree
|
||
|
|
||
|
def walk(node)
|
||
|
case node
|
||
|
when Document, DocumentFragment
|
||
|
return
|
||
|
|
||
|
when DocumentType
|
||
|
yield doctype(node.name)
|
||
|
|
||
|
when TextNode
|
||
|
text(node.value) {|token| yield token}
|
||
|
|
||
|
when Element
|
||
|
if VOID_ELEMENTS.include?(node.name)
|
||
|
yield emptyTag(node.name, node.attributes, node.hasContent())
|
||
|
else
|
||
|
yield startTag(node.name, node.attributes)
|
||
|
for child in node.childNodes
|
||
|
walk(child) {|token| yield token}
|
||
|
end
|
||
|
yield endTag(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
|