#! /usr/local/bin/ruby ## XML Tree viewer for Gtk ## 1998 by yoshidam ## ## Required: ruby-gtk-0.11 (and gtk+-1.0jp) ## xmlparser-0.4.17 ## uconv-0.2.1 require 'gtk' require 'xml/dom/builder-ja' ## Extend the Node class to manipulate the Gtk::Tree module XML module DOM class Node ## append a node to Gtk::Tree def appendNodeToTree(node) if @treeitem.nil? raise "Cannot append tree" end if @tree.nil? @tree = Gtk::Tree::new() @treeitem.set_subtree(@tree) @tree.show @treeitem.expand end @tree.append(node) end ## create Gtk::Tree from XML::Node tree def newTreeItem(parent = nil) if !@treeitem.nil? raise "tree item already exist" end case self.nodeType when TEXT_NODE str = "\"" + self.nodeValue + "\"" when CDATA_SECTION_NODE str = "" when PROCESSING_INSTRUCTION_NODE str = "?" + self.nodeValue when ELEMENT_NODE attr = '' @attr.each do |a| ## self.attributes do |a| attr += a.to_s + ", " end if @attr attr.chop! attr.chop! str = self.nodeName if (attr != ''); str += " (" + attr + ")" end when COMMENT_NODE str = "" when DOCUMENT_TYPE_NODE str = "#doctype: " + self.nodeName else str = self.nodeName end str.gsub!(/\n/, "\\\\n") @treeitem = Gtk::TreeItem::new(str) if (parent.nil? && !self.parentNode.nil?) self.parentNode.appendNodeToTree(@treeitem) else parent.append(@treeitem) end @treeitem.show self.childNodes do |c| c.newTreeItem end end end end end ## Gtk resources #Gtk::RC::parse_string <