Helpviewer/Bookmarks/XbelWriter.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
equal deleted inserted replaced
-1:000000000000 0:de9c2efb9d02
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class to write XBEL bookmark files.
8 """
9
10 from PyQt4.QtCore import *
11
12 from BookmarkNode import BookmarkNode
13
14 class XbelWriter(QXmlStreamWriter):
15 """
16 Class implementing a writer object to generate XBEL bookmark files.
17 """
18 def __init__(self):
19 """
20 Constructor
21 """
22 QXmlStreamWriter.__init__(self)
23
24 self.setAutoFormatting(True)
25
26 def write(self, fileNameOrDevice, root):
27 """
28 Public method to write an XBEL bookmark file.
29
30 @param fileNameOrDevice name of the file to write (string)
31 or device to write to (QIODevice)
32 @param root root node of the bookmark tree (BookmarkNode)
33 """
34 if isinstance(fileNameOrDevice, QIODevice):
35 f = fileNameOrDevice
36 else:
37 f = QFile(fileNameOrDevice)
38 if root is None or not f.open(QFile.WriteOnly):
39 return False
40
41 self.setDevice(f)
42 return self.__write(root)
43
44 def __write(self, root):
45 """
46 Private method to write an XBEL bookmark file.
47
48 @param root root node of the bookmark tree (BookmarkNode)
49 """
50 self.writeStartDocument()
51 self.writeDTD("<!DOCTYPE xbel>")
52 self.writeStartElement("xbel")
53 self.writeAttribute("version", "1.0")
54 if root.type() == BookmarkNode.Root:
55 for child in root.children():
56 self.__writeItem(child)
57 else:
58 self.__writeItem(root)
59
60 self.writeEndDocument()
61 return True
62
63 def __writeItem(self, node):
64 """
65 Private method to write an entry for a node.
66
67 @param node reference to the node to be written (BookmarkNode)
68 """
69 if node.type() == BookmarkNode.Folder:
70 self.writeStartElement("folder")
71 self.writeAttribute("folded", node.expanded and "no" or "yes")
72 self.writeTextElement("title", node.title)
73 for child in node.children():
74 self.__writeItem(child)
75 self.writeEndElement()
76 elif node.type() == BookmarkNode.Bookmark:
77 self.writeStartElement("bookmark")
78 if node.url:
79 self.writeAttribute("href", node.url)
80 self.writeTextElement("title", node.title)
81 if node.desc:
82 self.writeTextElement("desc", node.desc)
83 self.writeEndElement()
84 elif node.type() == BookmarkNode.Separator:
85 self.writeEmptyElement("separator")

eric ide

mercurial