48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
require 'html5/treewalkers/base'
|
|
require 'rexml/document'
|
|
|
|
module HTML5
|
|
module TreeWalkers
|
|
module Hpricot
|
|
class TreeWalker < HTML5::TreeWalkers::NonRecursiveTreeWalker
|
|
|
|
def node_details(node)
|
|
case node
|
|
when ::Hpricot::Elem
|
|
if node.name.empty?
|
|
[:DOCUMENT_FRAGMENT]
|
|
else
|
|
[:ELEMENT, node.name,
|
|
node.attributes.map {|name, value| [name, value]},
|
|
!node.empty?]
|
|
end
|
|
when ::Hpricot::Text
|
|
[:TEXT, node.content]
|
|
when ::Hpricot::Comment
|
|
[:COMMENT, node.content]
|
|
when ::Hpricot::Doc
|
|
[:DOCUMENT]
|
|
when ::Hpricot::DocType
|
|
[:DOCTYPE, node.target, node.public_id, node.system_id]
|
|
when ::Hpricot::XMLDecl
|
|
[nil]
|
|
else
|
|
[:UNKNOWN, node.class.inspect]
|
|
end
|
|
end
|
|
|
|
def first_child(node)
|
|
node.children.first
|
|
end
|
|
|
|
def next_sibling(node)
|
|
node.next_node
|
|
end
|
|
|
|
def parent(node)
|
|
node.parent
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|