eric6/E5XML/ProjectWriter.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/E5XML/ProjectWriter.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,294 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2004 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the writer class for writing an XML project file.
+"""
+
+from __future__ import unicode_literals
+
+import time
+
+from E5Gui.E5Application import e5App
+
+from .XMLStreamWriterBase import XMLStreamWriterBase
+from .Config import projectFileFormatVersion, projectFileFormatVersionUic, \
+    projectFileFormatVersionIdl, projectFileFormatVersionMake, \
+    projectFileFormatVersionProto, projectFileFormatVersionAlt
+
+import Preferences
+import Utilities
+
+
+class ProjectWriter(XMLStreamWriterBase):
+    """
+    Class implementing the writer class for writing an XML project file.
+    """
+    def __init__(self, device, projectName):
+        """
+        Constructor
+        
+        @param device reference to the I/O device to write to (QIODevice)
+        @param projectName name of the project (string)
+        """
+        XMLStreamWriterBase.__init__(self, device)
+        
+        self.pdata = e5App().getObject("Project").pdata
+        self.name = projectName
+        
+    def writeXML(self):
+        """
+        Public method to write the XML to the file.
+        """
+        XMLStreamWriterBase.writeXML(self)
+        
+        project = e5App().getObject("Project")
+        if not project.hasDefaultRccCompilerParameters():
+            fileFormatVersion = projectFileFormatVersion
+        elif not project.hasDefaultUicCompilerParameters():
+            fileFormatVersion = projectFileFormatVersionUic
+        elif not project.hasDefaultIdlCompilerParameters():
+            fileFormatVersion = projectFileFormatVersionIdl
+        elif not project.hasDefaultMakeParameters():
+            fileFormatVersion = projectFileFormatVersionMake
+        elif self.pdata["PROTOCOLS"]:
+            fileFormatVersion = projectFileFormatVersionProto
+        else:
+            fileFormatVersion = projectFileFormatVersionAlt
+        
+        self.writeDTD('<!DOCTYPE Project SYSTEM "Project-{0}.dtd">'.format(
+            fileFormatVersion))
+        
+        # add some generation comments
+        self.writeComment(
+            " eric project file for project {0} ".format(self.name))
+        if Preferences.getProject("XMLTimestamp"):
+            self.writeComment(
+                " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
+        self.writeComment(" Copyright (C) {0} {1}, {2} ".format(
+            time.strftime('%Y'),
+            self.pdata["AUTHOR"],
+            self.pdata["EMAIL"]))
+        
+        # add the main tag
+        self.writeStartElement("Project")
+        self.writeAttribute("version", fileFormatVersion)
+        
+        # do the language (used for spell checking)
+        self.writeTextElement("Language", self.pdata["SPELLLANGUAGE"])
+        if self.pdata["SPELLWORDS"]:
+            self.writeTextElement(
+                "ProjectWordList",
+                Utilities.fromNativeSeparators(self.pdata["SPELLWORDS"]))
+        if self.pdata["SPELLEXCLUDES"]:
+            self.writeTextElement(
+                "ProjectExcludeList",
+                Utilities.fromNativeSeparators(self.pdata["SPELLEXCLUDES"]))
+        
+        # do the hash
+        self.writeTextElement("Hash", self.pdata["HASH"])
+        
+        # do the programming language
+        self.writeStartElement("ProgLanguage")
+        self.writeAttribute("mixed", str(int(self.pdata["MIXEDLANGUAGE"])))
+        self.writeCharacters(self.pdata["PROGLANGUAGE"])
+        self.writeEndElement()
+        
+        # do the UI type
+        self.writeTextElement("ProjectType", self.pdata["PROJECTTYPE"])
+        
+        # do description
+        if self.pdata["DESCRIPTION"]:
+            self.writeTextElement("Description", self.pdata["DESCRIPTION"])
+        
+        # do version, author and email
+        self.writeTextElement("Version", self.pdata["VERSION"])
+        self.writeTextElement("Author", self.pdata["AUTHOR"])
+        self.writeTextElement("Email", self.pdata["EMAIL"])
+            
+        # do the translation pattern
+        if self.pdata["TRANSLATIONPATTERN"]:
+            self.writeTextElement(
+                "TranslationPattern",
+                Utilities.fromNativeSeparators(
+                    self.pdata["TRANSLATIONPATTERN"]))
+        
+        # do the binary translations path
+        if self.pdata["TRANSLATIONSBINPATH"]:
+            self.writeTextElement(
+                "TranslationsBinPath",
+                Utilities.fromNativeSeparators(
+                    self.pdata["TRANSLATIONSBINPATH"]))
+        
+        # do the eol setting
+        if self.pdata["EOL"] >= 0:
+            self.writeEmptyElement("Eol")
+            self.writeAttribute("index", str(int(self.pdata["EOL"])))
+        
+        # do the sources
+        if self.pdata["SOURCES"]:
+            self.writeStartElement("Sources")
+            for name in sorted(self.pdata["SOURCES"]):
+                self.writeTextElement(
+                    "Source", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the forms
+        if self.pdata["FORMS"]:
+            self.writeStartElement("Forms")
+            for name in sorted(self.pdata["FORMS"]):
+                self.writeTextElement(
+                    "Form", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the translations
+        if self.pdata["TRANSLATIONS"]:
+            self.writeStartElement("Translations")
+            for name in sorted(self.pdata["TRANSLATIONS"]):
+                self.writeTextElement(
+                    "Translation", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the translation exceptions
+        if self.pdata["TRANSLATIONEXCEPTIONS"]:
+            self.writeStartElement("TranslationExceptions")
+            for name in sorted(self.pdata["TRANSLATIONEXCEPTIONS"]):
+                self.writeTextElement(
+                    "TranslationException",
+                    Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the resources
+        if self.pdata["RESOURCES"]:
+            self.writeStartElement("Resources")
+            for name in sorted(self.pdata["RESOURCES"]):
+                self.writeTextElement(
+                    "Resource", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the interfaces (IDL)
+        if self.pdata["INTERFACES"]:
+            self.writeStartElement("Interfaces")
+            for name in sorted(self.pdata["INTERFACES"]):
+                self.writeTextElement(
+                    "Interface", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the protocols (protobuf)
+        if self.pdata["PROTOCOLS"]:
+            self.writeStartElement("Protocols")
+            for name in sorted(self.pdata["PROTOCOLS"]):
+                self.writeTextElement(
+                    "Protocol", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the others
+        if self.pdata["OTHERS"]:
+            self.writeStartElement("Others")
+            for name in sorted(self.pdata["OTHERS"]):
+                self.writeTextElement(
+                    "Other", Utilities.fromNativeSeparators(name))
+            self.writeEndElement()
+        
+        # do the main script
+        if self.pdata["MAINSCRIPT"]:
+            self.writeTextElement(
+                "MainScript",
+                Utilities.fromNativeSeparators(self.pdata["MAINSCRIPT"]))
+        
+        # do the vcs stuff
+        self.writeStartElement("Vcs")
+        if self.pdata["VCS"]:
+            self.writeTextElement("VcsType", self.pdata["VCS"])
+        if self.pdata["VCSOPTIONS"]:
+            self.writeBasics("VcsOptions", self.pdata["VCSOPTIONS"])
+        if self.pdata["VCSOTHERDATA"]:
+            self.writeBasics("VcsOtherData", self.pdata["VCSOTHERDATA"])
+        self.writeEndElement()
+        
+        # do the filetype associations
+        self.writeStartElement("FiletypeAssociations")
+        for pattern, filetype in sorted(self.pdata["FILETYPES"].items()):
+            self.writeEmptyElement("FiletypeAssociation")
+            self.writeAttribute("pattern", pattern)
+            self.writeAttribute("type", filetype)
+        self.writeEndElement()
+        
+        # do the lexer associations
+        if self.pdata["LEXERASSOCS"]:
+            self.writeStartElement("LexerAssociations")
+            for pattern, lexer in sorted(self.pdata["LEXERASSOCS"].items()):
+                self.writeEmptyElement("LexerAssociation")
+                self.writeAttribute("pattern", pattern)
+                self.writeAttribute("lexer", lexer)
+            self.writeEndElement()
+        
+        # do the 'make' parameters
+        if not e5App().getObject("Project").hasDefaultMakeParameters():
+            self.writeStartElement("Make")
+            self.writeBasics("MakeParameters", self.pdata["MAKEPARAMS"])
+            self.writeEndElement()
+        
+        # do the 'IDL' parameters
+        if not e5App().getObject("Project").hasDefaultIdlCompilerParameters():
+            self.writeStartElement("IdlCompiler")
+            self.writeBasics("IdlCompilerParameters", self.pdata["IDLPARAMS"])
+            self.writeEndElement()
+        
+        # do the 'uic' parameters
+        if not e5App().getObject("Project").hasDefaultUicCompilerParameters():
+            self.writeStartElement("UicCompiler")
+            self.writeBasics("UicCompilerParameters", self.pdata["UICPARAMS"])
+            self.writeEndElement()
+        
+        # do the 'rcc' parameters
+        if not e5App().getObject("Project").hasDefaultRccCompilerParameters():
+            self.writeStartElement("RccCompiler")
+            self.writeBasics("RccCompilerParameters", self.pdata["RCCPARAMS"])
+            self.writeEndElement()
+        
+        # do the extra project data stuff
+        if len(self.pdata["PROJECTTYPESPECIFICDATA"]):
+            self.writeStartElement("ProjectTypeSpecific")
+            if self.pdata["PROJECTTYPESPECIFICDATA"]:
+                self.writeBasics(
+                    "ProjectTypeSpecificData",
+                    self.pdata["PROJECTTYPESPECIFICDATA"])
+            self.writeEndElement()
+        
+        # do the documentation generators stuff
+        if len(self.pdata["DOCUMENTATIONPARMS"]):
+            self.writeStartElement("Documentation")
+            if self.pdata["DOCUMENTATIONPARMS"]:
+                self.writeBasics(
+                    "DocumentationParams", self.pdata["DOCUMENTATIONPARMS"])
+            self.writeEndElement()
+        
+        # do the packagers stuff
+        if len(self.pdata["PACKAGERSPARMS"]):
+            self.writeStartElement("Packagers")
+            if self.pdata["PACKAGERSPARMS"]:
+                self.writeBasics(
+                    "PackagersParams", self.pdata["PACKAGERSPARMS"])
+            self.writeEndElement()
+        
+        # do the checkers stuff
+        if len(self.pdata["CHECKERSPARMS"]):
+            self.writeStartElement("Checkers")
+            if self.pdata["CHECKERSPARMS"]:
+                self.writeBasics(
+                    "CheckersParams", self.pdata["CHECKERSPARMS"])
+            self.writeEndElement()
+        
+        # do the other tools stuff
+        if len(self.pdata["OTHERTOOLSPARMS"]):
+            self.writeStartElement("OtherTools")
+            if self.pdata["OTHERTOOLSPARMS"]:
+                self.writeBasics(
+                    "OtherToolsParams", self.pdata["OTHERTOOLSPARMS"])
+            self.writeEndElement()
+        
+        self.writeEndElement()
+        self.writeEndDocument()

eric ide

mercurial