E5XML/XMLStreamReaderBase.py

Thu, 09 Sep 2010 08:46:07 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 09 Sep 2010 08:46:07 +0200
changeset 574
c45f896e4c66
child 575
5a008db344ea
permissions
-rw-r--r--

Started implementing the XMLStreamReaderBase class.

# -*- coding: utf-8 -*-

# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a base class for all of eric5s XML stream writers.
"""

import pickle
import base64

from PyQt4.QtCore import QXmlStreamReader, QCoreApplication

class XMLStreamReaderBase(QXmlStreamReader):
    """
    Class implementing a base class for all of eric5s XML stream readers.
    """
    def __init__(self, device):
        """
        Constructor
        
        @param device reference to the I/O device to read from (QIODevice)
        """
        QXmlStreamReader.__init__(self, device)
        
        self.NEWPARA = chr(0x2029)
        self.NEWLINE = chr(0x2028)
    
    def decodedNewLines(self, text):
        """
        Public method to decode newlines and paragraph breaks.
        
        @param text text to decode (string)
        """
        return text.replace(self.NEWPARA, "\n\n").replace(self.NEWLINE, "\n")
    
    def _skipUnknownElement(self):
        """
        Protected method to skip over all unknown elements.
        """
        if not self.isStartElement():
            return
        
        while not self.atEnd():
            self.readNext()
            if self.isEndElement():
                break
            
            if self.isStartElement():
                self._skipUnknownElement()
    
    def _readBasics(self):
        """
        Protected method to read am object of a basic Python type.
        
        @return Python object read
        """
        while not self.atEnd():
            self.readNext()
            if self.isStartElement():
                try:
                    if self.name() == "none":
                        return None
                    elif self.name() == "int":
                        return int(self.readElementText())
                    elif self.name() == "bool":
                        b = self.readElementText()
                        if b == "True":
                            return True
                        else:
                            return False
                    elif self.name() == "float":
                        return float(self.readElementText())
                    elif self.name() == "complex":
                        real, imag = self.readElementText().split()
                        return float(real) + float(imag)*1j
                    elif self.name() == "string":
                        return self.readElementText()
                    elif self.name() == "bytes":
                        by = bytes(
                            [int(b) for b in self.readElementText().split(",")])
                        return by
                    elif self.name() == "bytearray":
                        by = bytearray(
                            [int(b) for b in self.readElementText().split(",")])
                        return by
                    else:
                        self._skipUnknownElement()
                except ValueError as err:
                    self.raiseError(str(err))

eric ide

mercurial