Migrated project debugger properties handler to project debugger properties reader/writer.

Mon, 13 Sep 2010 15:59:43 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 13 Sep 2010 15:59:43 +0200
changeset 607
d95d60ba16aa
parent 606
cc26d1c27da5
child 608
d8fea1e76975

Migrated project debugger properties handler to project debugger properties reader/writer.

Documentation/Source/eric5.E5XML.DebuggerPropertiesHandler.html file | annotate | diff | comparison | revisions
E5XML/DebuggerPropertiesHandler.py file | annotate | diff | comparison | revisions
E5XML/DebuggerPropertiesReader.py file | annotate | diff | comparison | revisions
E5XML/DebuggerPropertiesWriter.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
--- a/Documentation/Source/eric5.E5XML.DebuggerPropertiesHandler.html	Mon Sep 13 09:06:38 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
-'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
-<html><head>
-<title>eric5.E5XML.DebuggerPropertiesHandler</title>
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body><a NAME="top" ID="top"></a>
-<h1>eric5.E5XML.DebuggerPropertiesHandler</h1>
-<p>
-Module implementing the handler class for reading an XML project debugger properties file.
-</p>
-<h3>Global Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Classes</h3>
-<table>
-<tr>
-<td><a href="#DebuggerPropertiesHandler">DebuggerPropertiesHandler</a></td>
-<td>Class implementing a sax handler to read an XML project debugger properties file.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr /><hr />
-<a NAME="DebuggerPropertiesHandler" ID="DebuggerPropertiesHandler"></a>
-<h2>DebuggerPropertiesHandler</h2>
-<p>
-    Class implementing a sax handler to read an XML project debugger properties file.
-</p>
-<h3>Derived from</h3>
-XMLHandlerBase
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#DebuggerPropertiesHandler.__init__">DebuggerPropertiesHandler</a></td>
-<td>Constructor</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endConsoleDebugger">endConsoleDebugger</a></td>
-<td>Handler method for the "ConsoleDebugger" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endDebugClient">endDebugClient</a></td>
-<td>Handler method for the "DebugClient" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endEnvironment">endEnvironment</a></td>
-<td>Handler method for the "Environment" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endInterpreter">endInterpreter</a></td>
-<td>Handler method for the "Interpreter" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endLocalPath">endLocalPath</a></td>
-<td>Handler method for the "LocalPath" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endRemoteCommand">endRemoteCommand</a></td>
-<td>Handler method for the "RemoteCommand" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endRemoteHost">endRemoteHost</a></td>
-<td>Handler method for the "RemoteHost" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.endRemotePath">endRemotePath</a></td>
-<td>Handler method for the "RemotePath" end tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.getVersion">getVersion</a></td>
-<td>Public method to retrieve the version of the debugger properties.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startConsoleDebugger">startConsoleDebugger</a></td>
-<td>Handler method for the "ConsoleDebugger" start tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startDebuggerProperties">startDebuggerProperties</a></td>
-<td>Handler method for the "DebuggerProperties" start tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startDocumentDebuggerProperties">startDocumentDebuggerProperties</a></td>
-<td>Handler called, when the document parsing is started.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startEnvironment">startEnvironment</a></td>
-<td>Handler method for the "Environment" start tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startNoencoding">startNoencoding</a></td>
-<td>Handler method for the "Noencoding" start tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startPathTranslation">startPathTranslation</a></td>
-<td>Handler method for the "PathTranslation" start tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startRedirect">startRedirect</a></td>
-<td>Handler method for the "Redirect" start tag.</td>
-</tr><tr>
-<td><a href="#DebuggerPropertiesHandler.startRemoteDebugger">startRemoteDebugger</a></td>
-<td>Handler method for the "RemoteDebugger" start tag.</td>
-</tr>
-</table>
-<a NAME="DebuggerPropertiesHandler.__init__" ID="DebuggerPropertiesHandler.__init__"></a>
-<h4>DebuggerPropertiesHandler (Constructor)</h4>
-<b>DebuggerPropertiesHandler</b>(<i>project</i>)
-<p>
-        Constructor
-</p><dl>
-<dt><i>project</i></dt>
-<dd>
-Reference to the project object to store the
-                information into.
-</dd>
-</dl><a NAME="DebuggerPropertiesHandler.endConsoleDebugger" ID="DebuggerPropertiesHandler.endConsoleDebugger"></a>
-<h4>DebuggerPropertiesHandler.endConsoleDebugger</h4>
-<b>endConsoleDebugger</b>(<i></i>)
-<p>
-        Handler method for the "ConsoleDebugger" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endDebugClient" ID="DebuggerPropertiesHandler.endDebugClient"></a>
-<h4>DebuggerPropertiesHandler.endDebugClient</h4>
-<b>endDebugClient</b>(<i></i>)
-<p>
-        Handler method for the "DebugClient" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endEnvironment" ID="DebuggerPropertiesHandler.endEnvironment"></a>
-<h4>DebuggerPropertiesHandler.endEnvironment</h4>
-<b>endEnvironment</b>(<i></i>)
-<p>
-        Handler method for the "Environment" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endInterpreter" ID="DebuggerPropertiesHandler.endInterpreter"></a>
-<h4>DebuggerPropertiesHandler.endInterpreter</h4>
-<b>endInterpreter</b>(<i></i>)
-<p>
-        Handler method for the "Interpreter" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endLocalPath" ID="DebuggerPropertiesHandler.endLocalPath"></a>
-<h4>DebuggerPropertiesHandler.endLocalPath</h4>
-<b>endLocalPath</b>(<i></i>)
-<p>
-        Handler method for the "LocalPath" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endRemoteCommand" ID="DebuggerPropertiesHandler.endRemoteCommand"></a>
-<h4>DebuggerPropertiesHandler.endRemoteCommand</h4>
-<b>endRemoteCommand</b>(<i></i>)
-<p>
-        Handler method for the "RemoteCommand" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endRemoteHost" ID="DebuggerPropertiesHandler.endRemoteHost"></a>
-<h4>DebuggerPropertiesHandler.endRemoteHost</h4>
-<b>endRemoteHost</b>(<i></i>)
-<p>
-        Handler method for the "RemoteHost" end tag.
-</p><a NAME="DebuggerPropertiesHandler.endRemotePath" ID="DebuggerPropertiesHandler.endRemotePath"></a>
-<h4>DebuggerPropertiesHandler.endRemotePath</h4>
-<b>endRemotePath</b>(<i></i>)
-<p>
-        Handler method for the "RemotePath" end tag.
-</p><a NAME="DebuggerPropertiesHandler.getVersion" ID="DebuggerPropertiesHandler.getVersion"></a>
-<h4>DebuggerPropertiesHandler.getVersion</h4>
-<b>getVersion</b>(<i></i>)
-<p>
-        Public method to retrieve the version of the debugger properties.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-String containing the version number.
-</dd>
-</dl><a NAME="DebuggerPropertiesHandler.startConsoleDebugger" ID="DebuggerPropertiesHandler.startConsoleDebugger"></a>
-<h4>DebuggerPropertiesHandler.startConsoleDebugger</h4>
-<b>startConsoleDebugger</b>(<i>attrs</i>)
-<p>
-        Handler method for the "ConsoleDebugger" start tag.
-</p><a NAME="DebuggerPropertiesHandler.startDebuggerProperties" ID="DebuggerPropertiesHandler.startDebuggerProperties"></a>
-<h4>DebuggerPropertiesHandler.startDebuggerProperties</h4>
-<b>startDebuggerProperties</b>(<i>attrs</i>)
-<p>
-        Handler method for the "DebuggerProperties" start tag.
-</p><dl>
-<dt><i>attrs</i></dt>
-<dd>
-list of tag attributes
-</dd>
-</dl><a NAME="DebuggerPropertiesHandler.startDocumentDebuggerProperties" ID="DebuggerPropertiesHandler.startDocumentDebuggerProperties"></a>
-<h4>DebuggerPropertiesHandler.startDocumentDebuggerProperties</h4>
-<b>startDocumentDebuggerProperties</b>(<i></i>)
-<p>
-        Handler called, when the document parsing is started.
-</p><a NAME="DebuggerPropertiesHandler.startEnvironment" ID="DebuggerPropertiesHandler.startEnvironment"></a>
-<h4>DebuggerPropertiesHandler.startEnvironment</h4>
-<b>startEnvironment</b>(<i>attrs</i>)
-<p>
-        Handler method for the "Environment" start tag.
-</p><a NAME="DebuggerPropertiesHandler.startNoencoding" ID="DebuggerPropertiesHandler.startNoencoding"></a>
-<h4>DebuggerPropertiesHandler.startNoencoding</h4>
-<b>startNoencoding</b>(<i>attrs</i>)
-<p>
-        Handler method for the "Noencoding" start tag.
-</p><a NAME="DebuggerPropertiesHandler.startPathTranslation" ID="DebuggerPropertiesHandler.startPathTranslation"></a>
-<h4>DebuggerPropertiesHandler.startPathTranslation</h4>
-<b>startPathTranslation</b>(<i>attrs</i>)
-<p>
-        Handler method for the "PathTranslation" start tag.
-</p><a NAME="DebuggerPropertiesHandler.startRedirect" ID="DebuggerPropertiesHandler.startRedirect"></a>
-<h4>DebuggerPropertiesHandler.startRedirect</h4>
-<b>startRedirect</b>(<i>attrs</i>)
-<p>
-        Handler method for the "Redirect" start tag.
-</p><a NAME="DebuggerPropertiesHandler.startRemoteDebugger" ID="DebuggerPropertiesHandler.startRemoteDebugger"></a>
-<h4>DebuggerPropertiesHandler.startRemoteDebugger</h4>
-<b>startRemoteDebugger</b>(<i>attrs</i>)
-<p>
-        Handler method for the "RemoteDebugger" start tag.
-</p>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/E5XML/DebuggerPropertiesHandler.py	Mon Sep 13 09:06:38 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2003 - 2010 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the handler class for reading an XML project debugger properties file.
-"""
-
-from .Config import debuggerPropertiesFileFormatVersion
-from .XMLHandlerBase import XMLHandlerBase
-
-class DebuggerPropertiesHandler(XMLHandlerBase):
-    """
-    Class implementing a sax handler to read an XML project debugger properties file.
-    """
-    def __init__(self, project):
-        """
-        Constructor
-        
-        @param project Reference to the project object to store the
-                information into.
-        """
-        XMLHandlerBase.__init__(self)
-        
-        self.startDocumentSpecific = self.startDocumentDebuggerProperties
-        
-        self.elements.update({
-            'DebuggerProperties' : (self.startDebuggerProperties, self.defaultEndElement),
-            'Interpreter' : (self.defaultStartElement, self.endInterpreter),
-            'DebugClient' : (self.defaultStartElement, self.endDebugClient),
-            'Environment' : (self.startEnvironment, self.endEnvironment),
-            'RemoteDebugger' : (self.startRemoteDebugger, self.defaultEndElement),
-            'RemoteHost' : (self.defaultStartElement, self.endRemoteHost),
-            'RemoteCommand' : (self.defaultStartElement, self.endRemoteCommand),
-            'PathTranslation' : (self.startPathTranslation, self.defaultEndElement),
-            'RemotePath' : (self.defaultStartElement, self.endRemotePath),
-            'LocalPath' : (self.defaultStartElement, self.endLocalPath),
-            'ConsoleDebugger' : (self.startConsoleDebugger, self.endConsoleDebugger),
-            'Redirect' : (self.startRedirect, self.defaultEndElement),
-            'Noencoding' : (self.startNoencoding, self.defaultEndElement),
-        })
-    
-        self.project = project
-        
-    def startDocumentDebuggerProperties(self):
-        """
-        Handler called, when the document parsing is started.
-        """
-        self.version = ''
-        
-    ###################################################
-    ## below follow the individual handler functions
-    ###################################################
-    
-    def endInterpreter(self):
-        """
-        Handler method for the "Interpreter" end tag.
-        """
-        self.project.debugProperties["INTERPRETER"] = self.buffer
-        
-    def endDebugClient(self):
-        """
-        Handler method for the "DebugClient" end tag.
-        """
-        self.project.debugProperties["DEBUGCLIENT"] = self.buffer
-        
-    def startEnvironment(self, attrs):
-        """
-        Handler method for the "Environment" start tag.
-        """
-        self.buffer = ""
-        self.project.debugProperties["ENVIRONMENTOVERRIDE"] = \
-            int(attrs.get("override", "0"))
-        
-    def endEnvironment(self):
-        """
-        Handler method for the "Environment" end tag.
-        """
-        self.project.debugProperties["ENVIRONMENTSTRING"] = \
-            self.unescape(self.buffer)
-        
-    def startRemoteDebugger(self, attrs):
-        """
-        Handler method for the "RemoteDebugger" start tag.
-        """
-        self.buffer = ""
-        self.project.debugProperties["REMOTEDEBUGGER"] = \
-            int(attrs.get("on", "0"))
-        
-    def endRemoteHost(self):
-        """
-        Handler method for the "RemoteHost" end tag.
-        """
-        self.project.debugProperties["REMOTEHOST"] = self.buffer
-        
-    def endRemoteCommand(self):
-        """
-        Handler method for the "RemoteCommand" end tag.
-        """
-        self.project.debugProperties["REMOTECOMMAND"] = \
-            self.unescape(self.buffer)
-        
-    def startPathTranslation(self, attrs):
-        """
-        Handler method for the "PathTranslation" start tag.
-        """
-        self.buffer = ""
-        self.project.debugProperties["PATHTRANSLATION"] = \
-            int(attrs.get("on", "0"))
-        
-    def endRemotePath(self):
-        """
-        Handler method for the "RemotePath" end tag.
-        """
-        self.project.debugProperties["REMOTEPATH"] = self.buffer
-        
-    def endLocalPath(self):
-        """
-        Handler method for the "LocalPath" end tag.
-        """
-        self.project.debugProperties["LOCALPATH"] = self.buffer
-        
-    def startConsoleDebugger(self, attrs):
-        """
-        Handler method for the "ConsoleDebugger" start tag.
-        """
-        self.buffer = ""
-        self.project.debugProperties["CONSOLEDEBUGGER"] = \
-            int(attrs.get("on", "0"))
-        
-    def endConsoleDebugger(self):
-        """
-        Handler method for the "ConsoleDebugger" end tag.
-        """
-        self.project.debugProperties["CONSOLECOMMAND"] = \
-            self.unescape(self.buffer)
-        
-    def startRedirect(self, attrs):
-        """
-        Handler method for the "Redirect" start tag.
-        """
-        self.project.debugProperties["REDIRECT"] = \
-            int(attrs.get("on", "1"))
-        
-    def startNoencoding(self, attrs):
-        """
-        Handler method for the "Noencoding" start tag.
-        """
-        self.project.debugProperties["NOENCODING"] = \
-            int(attrs.get("on", "0"))
-        
-    def startDebuggerProperties(self, attrs):
-        """
-        Handler method for the "DebuggerProperties" start tag.
-        
-        @param attrs list of tag attributes
-        """
-        self.version = attrs.get('version', debuggerPropertiesFileFormatVersion)
-        
-    def getVersion(self):
-        """
-        Public method to retrieve the version of the debugger properties.
-        
-        @return String containing the version number.
-        """
-        return self.version
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5XML/DebuggerPropertiesReader.py	Mon Sep 13 15:59:43 2010 +0200
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a class for reading an XML project debugger properties file.
+"""
+
+from .Config import debuggerPropertiesFileFormatVersion
+from .XMLStreamReaderBase import XMLStreamReaderBase
+
+class DebuggerPropertiesReader(XMLStreamReaderBase):
+    """
+    Class for reading an XML project debugger properties file.
+    """
+    supportedVersions = ["3.9"]
+    
+    def __init__(self, device, project):
+        """
+        Constructor
+        
+        @param device reference to the I/O device to read from (QIODevice)
+        @param project Reference to the project object to store the
+                information into.
+        """
+        XMLStreamReaderBase.__init__(self, device)
+    
+        self.project = project
+        
+        self.version = ""
+    
+    def readXML(self, quiet = False):
+        """
+        Public method to read and parse the XML document.
+        
+        @param quiet flag indicating quiet operations.
+                If this flag is true, no errors are reported.
+        """
+        while not self.atEnd():
+            self.readNext()
+            if self.isStartElement():
+                if self.name() == "DebuggerProperties":
+                    self.version = \
+                        self.attribute("version", debuggerPropertiesFileFormatVersion)
+                    if self.version not in self.supportedVersions:
+                        self.raiseUnsupportedFormatVersion(self.version)
+                elif self.name() == "Interpreter":
+                    self.project.debugProperties["INTERPRETER"] = self.readElementText()
+                elif self.name() == "DebugClient":
+                    self.project.debugProperties["DEBUGCLIENT"] = self.readElementText()
+                elif self.name() == "Environment":
+                    self.project.debugProperties["ENVIRONMENTOVERRIDE"] = \
+                        int(self.attribute("override", "0"))
+                    self.project.debugProperties["ENVIRONMENTSTRING"] = \
+                        self.readElementText()
+                elif self.name() == "RemoteDebugger":
+                    self.__readRemoteDebugger()
+                elif self.name() == "PathTranslation":
+                    self.__readPathTranslation()
+                elif self.name() == "ConsoleDebugger":
+                    self.project.debugProperties["CONSOLEDEBUGGER"] = \
+                        int(self.attribute("on", "0"))
+                    self.project.debugProperties["CONSOLECOMMAND"] = \
+                        self.readElementText()
+                elif self.name() == "Redirect":
+                    self.project.debugProperties["REDIRECT"] = \
+                        int(self.attribute("on", "1"))
+                elif self.name() == "Noencoding":
+                    self.project.debugProperties["NOENCODING"] = \
+                        int(self.attribute("on", "0"))
+                else:
+                    self.raiseUnexpectedStartTag(self.name())
+        
+        if not quiet:
+            self.showErrorMessage()
+    
+    def __readRemoteDebugger(self):
+        """
+        Private method to read the remote debugger info.
+        """
+        self.project.debugProperties["REMOTEDEBUGGER"] = int(self.attribute("on", "0"))
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isEndElement() and self.name() == "RemoteDebugger":
+                break
+            
+            if self.isStartElement():
+                if self.name() == "RemoteHost":
+                    self.project.debugProperties["REMOTEHOST"] = self.readElementText()
+                elif self.name() == "RemoteCommand":
+                    self.project.debugProperties["REMOTECOMMAND"] = self.readElementText()
+                else:
+                    self.raiseUnexpectedStartTag(self.name())
+    
+    def __readPathTranslation(self):
+        """
+        Private method to read the path translation info.
+        """
+        self.project.debugProperties["PATHTRANSLATION"] = int(self.attribute("on", "0"))
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isEndElement() and self.name() == "PathTranslation":
+                break
+            
+            if self.isStartElement():
+                if self.name() == "RemotePath":
+                    self.project.debugProperties["REMOTEPATH"] = self.readElementText()
+                elif self.name() == "LocalPath":
+                    self.project.debugProperties["LOCALPATH"] = self.readElementText()
+                else:
+                    self.raiseUnexpectedStartTag(self.name())
--- a/E5XML/DebuggerPropertiesWriter.py	Mon Sep 13 09:06:38 2010 +0200
+++ b/E5XML/DebuggerPropertiesWriter.py	Mon Sep 13 15:59:43 2010 +0200
@@ -11,24 +11,24 @@
 
 from E5Gui.E5Application import e5App
 
-from .XMLWriterBase import XMLWriterBase
+from .XMLStreamWriterBase import XMLStreamWriterBase
 from .Config import debuggerPropertiesFileFormatVersion
 
 import Preferences
 
-class DebuggerPropertiesWriter(XMLWriterBase):
+class DebuggerPropertiesWriter(XMLStreamWriterBase):
     """
     Class implementing the writer class for writing an XML project debugger properties
     file.
     """
-    def __init__(self, file, projectName):
+    def __init__(self, device, projectName):
         """
         Constructor
         
-        @param file open file (like) object for writing
+        @param device reference to the I/O device to write to (QIODevice)
         @param projectName name of the project (string)
         """
-        XMLWriterBase.__init__(self, file)
+        XMLStreamWriterBase.__init__(self, device)
         
         self.name = projectName
         self.project = e5App().getObject("Project")
@@ -37,56 +37,63 @@
         """
         Public method to write the XML to the file.
         """
-        XMLWriterBase.writeXML(self)
+        XMLStreamWriterBase.writeXML(self)
         
-        self._write('<!DOCTYPE DebuggerProperties SYSTEM "DebuggerProperties-{0}.dtd">'\
+        self.writeDTD('<!DOCTYPE DebuggerProperties SYSTEM "DebuggerProperties-{0}.dtd">'\
             .format(debuggerPropertiesFileFormatVersion))
         
         # add some generation comments
-        self._write("<!-- eric5 debugger properties file for project {0} -->"\
+        self.writeComment(" eric5 debugger properties file for project {0} "\
             .format(self.name))
-        self._write("<!-- This file was generated automatically, do not edit. -->")
+        self.writeComment(" This file was generated automatically, do not edit. ")
         if Preferences.getProject("XMLTimestamp"):
-            self._write("<!-- Saved: {0} -->".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
+            self.writeComment(" Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
         
         # add the main tag
-        self._write('<DebuggerProperties version="{0}">'.format(
-            debuggerPropertiesFileFormatVersion))
+        self.writeStartElement("DebuggerProperties")
+        self.writeAttribute("version", debuggerPropertiesFileFormatVersion)
         
-        self._write('  <Interpreter>{0}</Interpreter>'.format(
-            self.project.debugProperties["INTERPRETER"]))
+        self.writeTextElement("Interpreter", self.project.debugProperties["INTERPRETER"])
+        
+        self.writeTextElement("DebugClient", self.project.debugProperties["DEBUGCLIENT"])
         
-        self._write('  <DebugClient>{0}</DebugClient>'.format(
-            self.project.debugProperties["DEBUGCLIENT"]))
+        self.writeStartElement("Environment")
+        self.writeAttribute("override", 
+            str(int(self.project.debugProperties["ENVIRONMENTOVERRIDE"])))
+        self.writeCharacters(self.project.debugProperties["ENVIRONMENTSTRING"])
+        self.writeEndElement()
         
-        self._write('  <Environment override="{0:d}">{1}</Environment>'.format(
-            self.project.debugProperties["ENVIRONMENTOVERRIDE"],
-            self.escape(self.project.debugProperties["ENVIRONMENTSTRING"])))
+        self.writeStartElement("RemoteDebugger")
+        self.writeAttribute("on", 
+            str(int(self.project.debugProperties["REMOTEDEBUGGER"])))
+        self.writeTextElement("RemoteHost", 
+            self.project.debugProperties["REMOTEHOST"])
+        self.writeTextElement("RemoteCommand", 
+            self.project.debugProperties["REMOTECOMMAND"])
+        self.writeEndElement()
         
-        self._write('  <RemoteDebugger on="{0:d}">'.format(
-            self.project.debugProperties["REMOTEDEBUGGER"]))
-        self._write('    <RemoteHost>{0}</RemoteHost>'.format(
-            self.project.debugProperties["REMOTEHOST"]))
-        self._write('    <RemoteCommand>{0}</RemoteCommand>'.format(
-            self.escape(self.project.debugProperties["REMOTECOMMAND"])))
-        self._write('  </RemoteDebugger>')
+        self.writeStartElement("PathTranslation")
+        self.writeAttribute("on", 
+            str(int(self.project.debugProperties["PATHTRANSLATION"])))
+        self.writeTextElement("RemotePath", 
+            self.project.debugProperties["REMOTEPATH"])
+        self.writeTextElement("LocalPath", 
+            self.project.debugProperties["LOCALPATH"])
+        self.writeEndElement()
         
-        self._write('  <PathTranslation on="{0:d}">'.format(
-            self.project.debugProperties["PATHTRANSLATION"]))
-        self._write('    <RemotePath>{0}</RemotePath>'.format(
-            self.project.debugProperties["REMOTEPATH"]))
-        self._write('    <LocalPath>{0}</LocalPath>'.format(
-            self.project.debugProperties["LOCALPATH"]))
-        self._write('  </PathTranslation>')
+        self.writeStartElement("ConsoleDebugger")
+        self.writeAttribute("on", 
+            str(int(self.project.debugProperties["CONSOLEDEBUGGER"])))
+        self.writeCharacters(self.project.debugProperties["CONSOLECOMMAND"])
+        self.writeEndElement()
         
-        self._write('  <ConsoleDebugger on="{0:d}">{1}</ConsoleDebugger>'.format(
-            self.project.debugProperties["CONSOLEDEBUGGER"],
-            self.escape(self.project.debugProperties["CONSOLECOMMAND"])))
+        self.writeEmptyElement("Redirect")
+        self.writeAttribute("on", 
+            str(int(self.project.debugProperties["REDIRECT"])))
         
-        self._write('  <Redirect on="{0:d}" />'.format(
-            self.project.debugProperties["REDIRECT"]))
+        self.writeEmptyElement("Noencoding")
+        self.writeAttribute("on", 
+            str(int(self.project.debugProperties["NOENCODING"])))
         
-        self._write('  <Noencoding on="{0:d}" />'.format(
-            self.project.debugProperties["NOENCODING"]))
-        
-        self._write("</DebuggerProperties>", newline = False)
+        self.writeEndElement()
+        self.writeEndDocument()
--- a/Project/Project.py	Mon Sep 13 09:06:38 2010 +0200
+++ b/Project/Project.py	Mon Sep 13 15:59:43 2010 +0200
@@ -49,7 +49,7 @@
 from E5XML.SessionWriter import SessionWriter
 from E5XML.TasksReader import TasksReader
 from E5XML.TasksWriter import TasksWriter
-from E5XML.DebuggerPropertiesHandler import DebuggerPropertiesHandler
+from E5XML.DebuggerPropertiesReader import DebuggerPropertiesReader
 from E5XML.DebuggerPropertiesWriter import DebuggerPropertiesWriter
 
 import VCS
@@ -1003,115 +1003,21 @@
             return
             
         fn, ext = os.path.splitext(os.path.basename(self.pfile))
-        
-        try:
-            if ext.lower() in [".e4pz"]:
-                fn = os.path.join(self.getProjectManagementDir(), '{0}.e4dz'.format(fn))
-                try:
-                    import gzip
-                except ImportError:
-                    if not quiet:
-                        E5MessageBox.critical(self.ui,
-                            self.trUtf8("Read debugger properties"),
-                            self.trUtf8("""Compressed project session files not"""
-                                        """ supported. The compression library is"""
-                                        """ missing."""))
-                    return
-                g = gzip.open(fn, "rb")
-                f = io.StringIO(g.read().decode("utf-8"))
-                g.close()
-            else:
-                fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn))
-                f = open(fn, "r", encoding = "utf-8")
-            line = f.readline()
-            dtdLine = f.readline()
+        fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn))
+        
+        f = QFile(fn)
+        if f.open(QIODevice.ReadOnly):
+            reader = DebuggerPropertiesReader(f, self)
+            reader.readXML(quiet = quiet)
             f.close()
-        except EnvironmentError:
+        else:
             if not quiet:
                 E5MessageBox.critical(self.ui,
                     self.trUtf8("Read debugger properties"),
                     self.trUtf8("<p>The project debugger properties file <b>{0}</b> could"
                                 " not be read.</p>").format(fn))
-            return
-            
-        # now read the file
-        if line.startswith('<?xml'):
-            self.__readXMLDebugProperties(fn, dtdLine.startswith("<!DOCTYPE"), quiet)
-        else:
-            if not quiet:
-                E5MessageBox.critical(self.ui,
-                    self.trUtf8("Read debugger properties"),
-                    self.trUtf8("<p>The project debugger properties file <b>{0}</b> has"
-                                " an unsupported format.</p>").format(fn))
-        
-    def __readXMLDebugProperties(self, fn, validating, quiet):
-        """
-        Public method to read the debugger properties from an XML file.
-        
-        @param fn filename of the project debugger properties file to be read
-            (string)
-        @param validating flag indicating a validation of the XML file is
-            requested (boolean)
-        @param quiet flag indicating quiet operations.
-            If this flag is true, no errors are reported.
-        """
-        if fn.lower().endswith("e4dz"):
-            # work around for a bug in xmlproc
-            validating = False
-        
-        parser = make_parser(validating)
-        handler = DebuggerPropertiesHandler(self)
-        er = XMLEntityResolver()
-        eh = XMLErrorHandler()
-        
-        parser.setContentHandler(handler)
-        parser.setEntityResolver(er)
-        parser.setErrorHandler(eh)
-        
-        try:
-            if fn.lower().endswith("e4dz"):
-                try:
-                    import gzip
-                except ImportError:
-                    if not quiet:
-                        E5MessageBox.critical(self.ui,
-                            self.trUtf8("Read debugger properties"),
-                            self.trUtf8("<p>The project debugger properties file"
-                                        " <b>{0}</b> could not be read.</p>").format(fn))
-                    return
-                g = gzip.open(fn, "rb")
-                f = io.StringIO(g.read().decode("utf-8"))
-                g.close()
-            else:
-                f = open(fn, "r", encoding = "utf-8")
-            try:
-                try:
-                    parser.parse(f)
-                except UnicodeEncodeError:
-                    f.seek(0)
-                    buf = io.StringIO(f.read())
-                    parser.parse(buf)
-                if self.debugProperties["INTERPRETER"]:
-                    self.debugPropertiesLoaded = True
-                else:
-                    self.debugPropertiesLoaded = False
-            finally:
-                f.close()
-        except IOError:
-            if not quiet:
-                E5MessageBox.critical(self.ui,
-                    self.trUtf8("Read debugger properties"),
-                    self.trUtf8("<p>The project debugger properties file <b>{0}</b> could"
-                                " not be read.</p>")
-                        .format(fn))
-            return
-        except XMLFatalParseError:
-            pass
-            
-        if not quiet:
-            eh.showParseMessages()
-        
-    def __writeDebugProperties(self, quiet=0):
+        
+    def __writeDebugProperties(self, quiet = False):
         """
         Private method to write the project debugger properties file (.e4d)
         
@@ -1126,35 +1032,14 @@
             return
             
         fn, ext = os.path.splitext(os.path.basename(self.pfile))
-        
-        try:
-            if ext.lower() == ".e4pz":
-                fn = os.path.join(self.getProjectManagementDir(), '{0}.e4dz'.format(fn))
-                try:
-                    import gzip
-                except ImportError:
-                    if not quiet:
-                        E5MessageBox.critical(self.ui,
-                            self.trUtf8("Save debugger properties"),
-                            self.trUtf8("""Compressed project debugger properties files"""
-                                        """ not supported. The compression library is"""
-                                        """ missing."""))
-                    return
-                f = io.StringIO()
-            else:
-                fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn))
-                f = open(fn, "w", encoding = "utf-8")
-            
+        fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn))
+        
+        f = QFile(fn)
+        if f.open(QIODevice.WriteOnly):
             DebuggerPropertiesWriter(f, os.path.splitext(os.path.basename(fn))[0])\
                 .writeXML()
-            
-            if fn.lower().endswith("e4dz"):
-                g = gzip.open(fn, "wb")
-                g.write(f.getvalue().encode("utf-8"))
-                g.close()
             f.close()
-            
-        except IOError:
+        else:
             if not quiet:
                 E5MessageBox.critical(self.ui,
                     self.trUtf8("Save debugger properties"),
--- a/eric5.e4p	Mon Sep 13 09:06:38 2010 +0200
+++ b/eric5.e4p	Mon Sep 13 15:59:43 2010 +0200
@@ -714,7 +714,6 @@
     <Source>E5XML/ShortcutsWriter.py</Source>
     <Source>E5XML/DebuggerPropertiesWriter.py</Source>
     <Source>E5XML/TemplatesWriter.py</Source>
-    <Source>E5XML/DebuggerPropertiesHandler.py</Source>
     <Source>E5XML/Config.py</Source>
     <Source>E5XML/__init__.py</Source>
     <Source>E5XML/TasksWriter.py</Source>
@@ -821,6 +820,7 @@
     <Source>E5XML/SessionReader.py</Source>
     <Source>E5XML/MultiProjectReader.py</Source>
     <Source>E5XML/UserProjectReader.py</Source>
+    <Source>E5XML/DebuggerPropertiesReader.py</Source>
   </Sources>
   <Forms>
     <Form>PyUnit/UnittestDialog.ui</Form>

eric ide

mercurial