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, QIODevice, \ |
11 QFile, QCoreApplication |
11 QFile, QCoreApplication, QXmlStreamNamespaceDeclaration |
12 |
12 |
13 from .BookmarkNode import BookmarkNode |
13 from .BookmarkNode import BookmarkNode |
14 |
14 |
15 |
15 |
16 class XmlEntityResolver(QXmlStreamEntityResolver): |
16 class XmlEntityResolver(QXmlStreamEntityResolver): |
123 self.__readFolder(folder) |
123 self.__readFolder(folder) |
124 elif self.name() == "bookmark": |
124 elif self.name() == "bookmark": |
125 self.__readBookmarkNode(folder) |
125 self.__readBookmarkNode(folder) |
126 elif self.name() == "separator": |
126 elif self.name() == "separator": |
127 self.__readSeparator(folder) |
127 self.__readSeparator(folder) |
|
128 elif self.name() == "info": |
|
129 self.__readInfo() |
128 else: |
130 else: |
129 self.__skipUnknownElement() |
131 self.__skipUnknownElement() |
130 |
132 |
131 def __readTitle(self, node): |
133 def __readTitle(self, node): |
132 """ |
134 """ |
155 Private method to read a separator element. |
157 Private method to read a separator element. |
156 |
158 |
157 @param node reference to the bookmark node the separator belongs to (BookmarkNode) |
159 @param node reference to the bookmark node the separator belongs to (BookmarkNode) |
158 """ |
160 """ |
159 BookmarkNode(BookmarkNode.Separator, node) |
161 BookmarkNode(BookmarkNode.Separator, node) |
|
162 |
160 # empty elements have a start and end element |
163 # empty elements have a start and end element |
161 self.readNext() |
164 while not self.atEnd(): |
|
165 self.readNext() |
|
166 if self.isEndElement(): |
|
167 break |
|
168 |
|
169 if self.isStartElement(): |
|
170 if self.name() == "info": |
|
171 self.__readInfo() |
|
172 else: |
|
173 self.__skipUnknownElement() |
162 |
174 |
163 def __readBookmarkNode(self, node): |
175 def __readBookmarkNode(self, node): |
164 """ |
176 """ |
165 Private method to read and parse a bookmark subtree. |
177 Private method to read and parse a bookmark subtree. |
166 |
178 |
180 if self.isStartElement(): |
192 if self.isStartElement(): |
181 if self.name() == "title": |
193 if self.name() == "title": |
182 self.__readTitle(bookmark) |
194 self.__readTitle(bookmark) |
183 elif self.name() == "desc": |
195 elif self.name() == "desc": |
184 self.__readDescription(bookmark) |
196 self.__readDescription(bookmark) |
|
197 elif self.name() == "info": |
|
198 self.__readInfo() |
185 else: |
199 else: |
186 self.__skipUnknownElement() |
200 self.__skipUnknownElement() |
187 |
201 |
188 if not bookmark.title: |
202 if not bookmark.title: |
189 bookmark.title = QCoreApplication.translate("XbelReader", "Unknown title") |
203 bookmark.title = QCoreApplication.translate("XbelReader", "Unknown title") |
190 |
204 |
|
205 def __readInfo(self): |
|
206 """ |
|
207 Private method to read and parse an info subtree. |
|
208 """ |
|
209 self.addExtraNamespaceDeclaration( |
|
210 QXmlStreamNamespaceDeclaration("bookmark", "http://www.python.org")) |
|
211 self.skipCurrentElement() |
|
212 |
191 def __skipUnknownElement(self): |
213 def __skipUnknownElement(self): |
192 """ |
214 """ |
193 Private method to skip over all unknown elements. |
215 Private method to skip over all unknown elements. |
194 """ |
216 """ |
195 if not self.isStartElement(): |
217 self.skipCurrentElement() |
196 return |
|
197 |
|
198 while not self.atEnd(): |
|
199 self.readNext() |
|
200 if self.isEndElement(): |
|
201 break |
|
202 |
|
203 if self.isStartElement(): |
|
204 self.__skipUnknownElement() |
|