48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
require 'html5/treewalkers/base'
|
|
require 'rexml/document'
|
|
|
|
module HTML5
|
|
module TreeWalkers
|
|
module REXML
|
|
class TreeWalker < HTML5::TreeWalkers::NonRecursiveTreeWalker
|
|
|
|
def node_details(node)
|
|
case node
|
|
when ::REXML::Document
|
|
[:DOCUMENT]
|
|
when ::REXML::Element
|
|
if !node.name
|
|
[:DOCUMENT_FRAGMENT]
|
|
else
|
|
[:ELEMENT, node.name,
|
|
node.attributes.map {|name,value| [name,value]},
|
|
node.has_elements? || node.has_text?]
|
|
end
|
|
when ::REXML::Text
|
|
[:TEXT, node.value]
|
|
when ::REXML::Comment
|
|
[:COMMENT, node.string]
|
|
when ::REXML::DocType
|
|
[:DOCTYPE, node.name, node.public, node.system]
|
|
when ::REXML::XMLDecl
|
|
[nil]
|
|
else
|
|
[:UNKNOWN, node.class.inspect]
|
|
end
|
|
end
|
|
|
|
def first_child(node)
|
|
node.children.first
|
|
end
|
|
|
|
def next_sibling(node)
|
|
node.next_sibling
|
|
end
|
|
|
|
def parent(node)
|
|
node.parent
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|