E5XML/XMLStreamReaderBase.py

changeset 574
c45f896e4c66
child 575
5a008db344ea
equal deleted inserted replaced
573:3fd49348ea83 574:c45f896e4c66
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))

eric ide

mercurial