|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing a base class for all of eric5s XML stream writers. |
|
8 """ |
|
9 |
|
10 import pickle |
|
11 import base64 |
|
12 |
|
13 from PyQt4.QtCore import QXmlStreamReader, QCoreApplication |
|
14 |
|
15 class XMLStreamReaderBase(QXmlStreamReader): |
|
16 """ |
|
17 Class implementing a base class for all of eric5s XML stream readers. |
|
18 """ |
|
19 def __init__(self, device): |
|
20 """ |
|
21 Constructor |
|
22 |
|
23 @param device reference to the I/O device to read from (QIODevice) |
|
24 """ |
|
25 QXmlStreamReader.__init__(self, device) |
|
26 |
|
27 self.NEWPARA = chr(0x2029) |
|
28 self.NEWLINE = chr(0x2028) |
|
29 |
|
30 def decodedNewLines(self, text): |
|
31 """ |
|
32 Public method to decode newlines and paragraph breaks. |
|
33 |
|
34 @param text text to decode (string) |
|
35 """ |
|
36 return text.replace(self.NEWPARA, "\n\n").replace(self.NEWLINE, "\n") |
|
37 |
|
38 def _skipUnknownElement(self): |
|
39 """ |
|
40 Protected method to skip over all unknown elements. |
|
41 """ |
|
42 if not self.isStartElement(): |
|
43 return |
|
44 |
|
45 while not self.atEnd(): |
|
46 self.readNext() |
|
47 if self.isEndElement(): |
|
48 break |
|
49 |
|
50 if self.isStartElement(): |
|
51 self._skipUnknownElement() |
|
52 |
|
53 def _readBasics(self): |
|
54 """ |
|
55 Protected method to read am object of a basic Python type. |
|
56 |
|
57 @return Python object read |
|
58 """ |
|
59 while not self.atEnd(): |
|
60 self.readNext() |
|
61 if self.isStartElement(): |
|
62 try: |
|
63 if self.name() == "none": |
|
64 return None |
|
65 elif self.name() == "int": |
|
66 return int(self.readElementText()) |
|
67 elif self.name() == "bool": |
|
68 b = self.readElementText() |
|
69 if b == "True": |
|
70 return True |
|
71 else: |
|
72 return False |
|
73 elif self.name() == "float": |
|
74 return float(self.readElementText()) |
|
75 elif self.name() == "complex": |
|
76 real, imag = self.readElementText().split() |
|
77 return float(real) + float(imag)*1j |
|
78 elif self.name() == "string": |
|
79 return self.readElementText() |
|
80 elif self.name() == "bytes": |
|
81 by = bytes( |
|
82 [int(b) for b in self.readElementText().split(",")]) |
|
83 return by |
|
84 elif self.name() == "bytearray": |
|
85 by = bytearray( |
|
86 [int(b) for b in self.readElementText().split(",")]) |
|
87 return by |
|
88 else: |
|
89 self._skipUnknownElement() |
|
90 except ValueError as err: |
|
91 self.raiseError(str(err)) |