Class: XbelGenerator

Inherits:
Object show all
Defined in:
ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb

Constant Summary collapse

IndentSize =
4

Instance Method Summary collapse

Constructor Details

#initialize(treeWidget) ⇒ XbelGenerator

Returns a new instance of XbelGenerator.



30
31
32
33
# File 'ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb', line 30

def initialize(treeWidget)
    @treeWidget = treeWidget
	@outf = Qt::TextStream.new
end

Instance Method Details

#escapedAttribute(str) ⇒ Object



62
63
64
65
66
# File 'ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb', line 62

def escapedAttribute(str)
    result = escapedText(str)
    result.gsub!("\"", """)
    return '"' + result + '"'
end

#escapedText(str) ⇒ Object



54
55
56
57
58
59
60
# File 'ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb', line 54

def escapedText(str)
    result = str
    result.gsub!("&", "&")
    result.gsub!("<", "&lt;")
    result.gsub!(">", "&gt;")
    return result
end

#generateItem(item, depth) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb', line 68

def generateItem(item, depth)
    tagName = item.data(0, Qt::UserRole).toString()
    if tagName == "folder"
        folded = !@treeWidget.isItemExpanded(item)
        @outf << indent(depth) << "<folder folded=\"" << (folded ? "yes" : "no") <<
                             "\">\n" <<
            indent(depth + 1) << "<title>" << escapedText(item.text(0)) <<
                                 "</title>\n"

		for i in 0...item.childCount()
            generateItem(item.child(i), depth + 1)
		end

        @outf << indent(depth) << "</folder>\n"
    elsif tagName == "bookmark"
        @outf << indent(depth) << "<bookmark"
        if !item.text(1).empty?
            @outf << " href=" << escapedAttribute(item.text(1))
		end
        @outf << ">\n" <<
            indent(depth + 1) << "<title>" << escapedText(item.text(0)) <<
                                 "</title>\n" <<
            indent(depth) << "</bookmark>\n"
    elsif tagName == "separator"
        @outf << indent(depth) << "<separator/>\n"
    end
end

#indent(depth) ⇒ Object



50
51
52
# File 'ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb', line 50

def indent(depth)
    return " " * (IndentSize * depth)
end

#write(device) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'ext/ruby/qtruby/examples/xml/saxbookmarks/xbelgenerator.rb', line 35

def write(device)
    @outf.device = device
    @outf.codec = "UTF-8"
    @outf << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" <<
        "<!DOCTYPE xbel>\n" <<
        "<xbel version=\"1.0\">\n"
	
	for i in 0...@treeWidget.topLevelItemCount()
        generateItem(@treeWidget.topLevelItem(i), 1)
	end

    @outf << "</xbel>\n"
    return true
end