9: def walk(node)
10: case node
11: when Document, DocumentFragment
12: return
13:
14: when DocumentType
15: yield doctype(node.name, node.public_id, node.system_id)
16:
17: when TextNode
18: text(node.value) {|token| yield token}
19:
20: when Element
21: if VOID_ELEMENTS.include?(node.name)
22: yield empty_tag(node.name, node.attributes, node.hasContent())
23: else
24: yield start_tag(node.name, node.attributes)
25: for child in node.childNodes
26: walk(child) {|token| yield token}
27: end
28: yield end_tag(node.name)
29: end
30:
31: when CommentNode
32: yield comment(node.value)
33:
34: else
35: puts '?'
36: yield unknown(node.class)
37: end
38: end