5 |
5 |
6 """ |
6 """ |
7 Module implementing a class to read XBEL bookmark files. |
7 Module implementing a class to read XBEL bookmark files. |
8 """ |
8 """ |
9 |
9 |
10 from PyQt4.QtCore import QXmlStreamReader, QXmlStreamEntityResolver, QIODevice, \ |
10 from PyQt4.QtCore import QXmlStreamReader, QXmlStreamEntityResolver, \ |
11 QFile, QCoreApplication, QXmlStreamNamespaceDeclaration, QDateTime, Qt |
11 QIODevice, QFile, QCoreApplication, QXmlStreamNamespaceDeclaration, \ |
|
12 QDateTime, Qt |
12 |
13 |
13 from .BookmarkNode import BookmarkNode |
14 from .BookmarkNode import BookmarkNode |
14 |
15 |
15 |
16 |
16 class XmlEntityResolver(QXmlStreamEntityResolver): |
17 class XmlEntityResolver(QXmlStreamEntityResolver): |
67 if self.name() == "xbel" and \ |
68 if self.name() == "xbel" and \ |
68 (not version or version == "1.0"): |
69 (not version or version == "1.0"): |
69 self.__readXBEL(root) |
70 self.__readXBEL(root) |
70 else: |
71 else: |
71 self.raiseError(QCoreApplication.translate( |
72 self.raiseError(QCoreApplication.translate( |
72 "XbelReader", "The file is not an XBEL version 1.0 file.")) |
73 "XbelReader", |
|
74 "The file is not an XBEL version 1.0 file.")) |
73 |
75 |
74 return root |
76 return root |
75 |
77 |
76 def __readXBEL(self, node): |
78 def __readXBEL(self, node): |
77 """ |
79 """ |
106 if not self.isStartElement() and self.name() != "folder": |
108 if not self.isStartElement() and self.name() != "folder": |
107 return |
109 return |
108 |
110 |
109 folder = BookmarkNode(BookmarkNode.Folder, node) |
111 folder = BookmarkNode(BookmarkNode.Folder, node) |
110 folder.expanded = self.attributes().value("folded") == "no" |
112 folder.expanded = self.attributes().value("folded") == "no" |
111 folder.added = QDateTime.fromString(self.attributes().value("added"), Qt.ISODate) |
113 folder.added = QDateTime.fromString( |
|
114 self.attributes().value("added"), Qt.ISODate) |
112 |
115 |
113 while not self.atEnd(): |
116 while not self.atEnd(): |
114 self.readNext() |
117 self.readNext() |
115 if self.isEndElement(): |
118 if self.isEndElement(): |
116 break |
119 break |
133 |
136 |
134 def __readTitle(self, node): |
137 def __readTitle(self, node): |
135 """ |
138 """ |
136 Private method to read the title element. |
139 Private method to read the title element. |
137 |
140 |
138 @param node reference to the bookmark node title belongs to (BookmarkNode) |
141 @param node reference to the bookmark node title belongs to |
|
142 (BookmarkNode) |
139 """ |
143 """ |
140 if not self.isStartElement() and self.name() != "title": |
144 if not self.isStartElement() and self.name() != "title": |
141 return |
145 return |
142 |
146 |
143 node.title = self.readElementText() |
147 node.title = self.readElementText() |
144 |
148 |
145 def __readDescription(self, node): |
149 def __readDescription(self, node): |
146 """ |
150 """ |
147 Private method to read the desc element. |
151 Private method to read the desc element. |
148 |
152 |
149 @param node reference to the bookmark node desc belongs to (BookmarkNode) |
153 @param node reference to the bookmark node desc belongs to |
|
154 (BookmarkNode) |
150 """ |
155 """ |
151 if not self.isStartElement() and self.name() != "desc": |
156 if not self.isStartElement() and self.name() != "desc": |
152 return |
157 return |
153 |
158 |
154 node.desc = self.readElementText() |
159 node.desc = self.readElementText() |
155 |
160 |
156 def __readSeparator(self, node): |
161 def __readSeparator(self, node): |
157 """ |
162 """ |
158 Private method to read a separator element. |
163 Private method to read a separator element. |
159 |
164 |
160 @param node reference to the bookmark node the separator belongs to (BookmarkNode) |
165 @param node reference to the bookmark node the separator belongs to |
|
166 (BookmarkNode) |
161 """ |
167 """ |
162 sep = BookmarkNode(BookmarkNode.Separator, node) |
168 sep = BookmarkNode(BookmarkNode.Separator, node) |
163 sep.added = QDateTime.fromString(self.attributes().value("added"), Qt.ISODate) |
169 sep.added = QDateTime.fromString( |
|
170 self.attributes().value("added"), Qt.ISODate) |
164 |
171 |
165 # empty elements have a start and end element |
172 # empty elements have a start and end element |
166 while not self.atEnd(): |
173 while not self.atEnd(): |
167 self.readNext() |
174 self.readNext() |
168 if self.isEndElement(): |
175 if self.isEndElement(): |
206 self.__readInfo() |
213 self.__readInfo() |
207 else: |
214 else: |
208 self.__skipUnknownElement() |
215 self.__skipUnknownElement() |
209 |
216 |
210 if not bookmark.title: |
217 if not bookmark.title: |
211 bookmark.title = QCoreApplication.translate("XbelReader", "Unknown title") |
218 bookmark.title = QCoreApplication.translate( |
|
219 "XbelReader", "Unknown title") |
212 |
220 |
213 def __readInfo(self): |
221 def __readInfo(self): |
214 """ |
222 """ |
215 Private method to read and parse an info subtree. |
223 Private method to read and parse an info subtree. |
216 """ |
224 """ |
217 self.addExtraNamespaceDeclaration( |
225 self.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration( |
218 QXmlStreamNamespaceDeclaration("bookmark", "http://www.python.org")) |
226 "bookmark", "http://www.python.org")) |
219 self.skipCurrentElement() |
227 self.skipCurrentElement() |
220 |
228 |
221 def __skipUnknownElement(self): |
229 def __skipUnknownElement(self): |
222 """ |
230 """ |
223 Private method to skip over all unknown elements. |
231 Private method to skip over all unknown elements. |