Introduced a new project file format version and added reader and writer support for the 'make' parameter set. make_support

Sun, 15 Apr 2018 11:36:43 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 15 Apr 2018 11:36:43 +0200
branch
make_support
changeset 6251
02afc7d22c41
parent 6248
9458a3d45f27
child 6252
5e5e57bf09ed

Introduced a new project file format version and added reader and writer support for the 'make' parameter set.

DTDs/Project-4.6.dtd file | annotate | diff | comparison | revisions
DTDs/Project-5.0.dtd file | annotate | diff | comparison | revisions
DTDs/Project-5.1.dtd file | annotate | diff | comparison | revisions
DTDs/Project-6.0.dtd file | annotate | diff | comparison | revisions
DTDs/Project-6.1.dtd file | annotate | diff | comparison | revisions
E5XML/Config.py file | annotate | diff | comparison | revisions
E5XML/ProjectReader.py file | annotate | diff | comparison | revisions
E5XML/ProjectWriter.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
--- a/DTDs/Project-4.6.dtd	Sat Apr 14 18:48:38 2018 +0200
+++ b/DTDs/Project-4.6.dtd	Sun Apr 15 11:36:43 2018 +0200
@@ -100,7 +100,7 @@
 
 <!ELEMENT   ProjectTypeSpecificData (dict)>
 
-<!ELEMENT   ProjectTypeSpecific (ExtraData?)>
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
 
 <!ELEMENT   DocumentationParams (dict)>
 
@@ -146,7 +146,7 @@
                                  Vcs,
                                  FiletypeAssociations,
                                  LexerAssociations?,
-                                 Extra?,
+                                 ProjectTypeSpecific?,
                                  Documentation?,
                                  Packagers?,
                                  Checkers?,
--- a/DTDs/Project-5.0.dtd	Sat Apr 14 18:48:38 2018 +0200
+++ b/DTDs/Project-5.0.dtd	Sun Apr 15 11:36:43 2018 +0200
@@ -107,7 +107,7 @@
 
 <!ELEMENT   ProjectTypeSpecificData (dict)>
 
-<!ELEMENT   ProjectTypeSpecific (ExtraData?)>
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
 
 <!ELEMENT   DocumentationParams (dict)>
 
@@ -129,11 +129,11 @@
 
 <!ELEMENT   ProjectWordList     (#PCDATA)>
 
-<!ELEMENT   ProjectExcludeList  (#PCDATA)>
-
+<!ELEMENT   ProjectExcludeList  (#PCDATA)>
+
 <!ELEMENT   Hash                (#PCDATA)>
 
-<!ELEMENT   Project             (Language,
+<!ELEMENT   Project             (Language,
                                  ProjectWordList?,
                                  ProjectExcludeList?,
                                  Hash,
@@ -156,7 +156,7 @@
                                  Vcs,
                                  FiletypeAssociations,
                                  LexerAssociations?,
-                                 Extra?,
+                                 ProjectTypeSpecific?,
                                  Documentation?,
                                  Packagers?,
                                  Checkers?,
--- a/DTDs/Project-5.1.dtd	Sat Apr 14 18:48:38 2018 +0200
+++ b/DTDs/Project-5.1.dtd	Sun Apr 15 11:36:43 2018 +0200
@@ -107,7 +107,7 @@
 
 <!ELEMENT   ProjectTypeSpecificData (dict)>
 
-<!ELEMENT   ProjectTypeSpecific (ExtraData?)>
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
 
 <!ELEMENT   DocumentationParams (dict)>
 
@@ -161,7 +161,7 @@
                                  Vcs,
                                  FiletypeAssociations,
                                  LexerAssociations?,
-                                 Extra?,
+                                 ProjectTypeSpecific?,
                                  Documentation?,
                                  Packagers?,
                                  Checkers?,
--- a/DTDs/Project-6.0.dtd	Sat Apr 14 18:48:38 2018 +0200
+++ b/DTDs/Project-6.0.dtd	Sun Apr 15 11:36:43 2018 +0200
@@ -111,7 +111,7 @@
 
 <!ELEMENT   ProjectTypeSpecificData (dict)>
 
-<!ELEMENT   ProjectTypeSpecific (ExtraData?)>
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
 
 <!ELEMENT   DocumentationParams (dict)>
 
@@ -165,7 +165,7 @@
                                  Vcs,
                                  FiletypeAssociations,
                                  LexerAssociations?,
-                                 Extra?,
+                                 ProjectTypeSpecific?,
                                  Documentation?,
                                  Packagers?,
                                  Checkers?,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Project-6.1.dtd	Sun Apr 15 11:36:43 2018 +0200
@@ -0,0 +1,179 @@
+<!-- This is the DTD for eric5's project file version 6.0 -->
+
+<!-- This is a copy of the Basic DTD -->
+<!ELEMENT   int         (#PCDATA)>
+<!ELEMENT   long        (#PCDATA)>
+<!ELEMENT   float       (#PCDATA)>
+<!ELEMENT   complex     (#PCDATA)>
+<!ELEMENT   bool        (#PCDATA)>
+<!ELEMENT   string      (#PCDATA)>
+<!ELEMENT   bytes       (#PCDATA)>
+<!ELEMENT   bytearray   (#PCDATA)>
+<!ELEMENT   none        EMPTY>
+
+<!ELEMENT   pickle      (#PCDATA)>
+<!ATTLIST   pickle
+    method      CDATA   #REQUIRED
+    encoding    CDATA   #REQUIRED>
+
+<!ELEMENT   key         (int | long | float | complex | string | bytes)>
+<!ELEMENT   value       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)>
+
+<!ELEMENT   dict        (key, value)*>
+
+<!ELEMENT   tuple       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   list        (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   set         (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   frozenset   (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+<!-- End of the Basic DTD -->
+
+<!ELEMENT   ProgLanguage        (#PCDATA)>
+<!ATTLIST   ProgLanguage
+    mixed       CDATA   #REQUIRED>
+
+<!ELEMENT   ProjectType         (#PCDATA)>
+
+<!ELEMENT   Description         (#PCDATA)>
+
+<!ELEMENT   Version             (#PCDATA)>
+
+<!ELEMENT   Author              (#PCDATA)>
+
+<!ELEMENT   Email               (#PCDATA)>
+
+<!ELEMENT   TranslationPattern  (#PCDATA)>
+
+<!ELEMENT   TranslationsBinPath (#PCDATA)>
+
+<!ELEMENT   Source              (#PCDATA)>
+
+<!ELEMENT   Sources             (Source*)>
+
+<!ELEMENT   Form                (#PCDATA)>
+
+<!ELEMENT   Forms               (Form*)>
+
+<!ELEMENT   Translation         (#PCDATA)>
+
+<!ELEMENT   Translations        (Translation*)>
+
+<!ELEMENT   TranslationException  (#PCDATA)>
+
+<!ELEMENT   TranslationExceptions (TranslationException*)>
+
+<!ELEMENT   Resource            (#PCDATA)>
+
+<!ELEMENT   Resources           (Resource*)>
+
+<!ELEMENT   Interface           (#PCDATA)>
+
+<!ELEMENT   Interfaces          (Interface*)>
+
+<!ELEMENT   Protocol            (#PCDATA)>
+
+<!ELEMENT   Protocols           (Protocol*)>
+
+<!ELEMENT   Other               (#PCDATA)>
+
+<!ELEMENT   Others              (Other*)>
+
+<!ELEMENT   MainScript          (#PCDATA)>
+
+<!ELEMENT   VcsType             (#PCDATA)>
+<!ELEMENT   VcsOptions          (dict)>
+<!ELEMENT   VcsOtherData        (dict)>
+
+<!ELEMENT   Vcs                 (VcsType?,
+                                 VcsOptions?,
+                                 VcsOtherData?)>
+
+<!ELEMENT   FiletypeAssociation EMPTY>
+<!ATTLIST   FiletypeAssociation
+    pattern     CDATA   #REQUIRED
+    type        CDATA   #REQUIRED>
+
+<!ELEMENT   FiletypeAssociations (FiletypeAssociation*)>
+
+<!ELEMENT   LexerAssociation EMPTY>
+<!ATTLIST   LexerAssociation
+    pattern     CDATA   #REQUIRED
+    lexer       CDATA   #REQUIRED>
+
+<!ELEMENT   LexerAssociations (LexerAssociation*)>
+
+<!ELEMENT   MakeParameters (dict)>
+
+<!ELEMENT   Make (MakeParameters?)>
+
+<!ELEMENT   ProjectTypeSpecificData (dict)>
+
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
+
+<!ELEMENT   DocumentationParams (dict)>
+
+<!ELEMENT   Documentation       (DocumentationParams?)>
+
+<!ELEMENT   PackagersParams     (dict)>
+
+<!ELEMENT   Packagers           (PackagersParams?)>
+
+<!ELEMENT   CheckersParams      (dict)>
+
+<!ELEMENT   Checkers            (CheckersParams?)>
+
+<!ELEMENT   OtherToolsParams    (dict)>
+
+<!ELEMENT   OtherTools          (OtherToolsParams?)>
+
+<!ELEMENT   Language            (#PCDATA)>
+
+<!ELEMENT   ProjectWordList     (#PCDATA)>
+
+<!ELEMENT   ProjectExcludeList  (#PCDATA)>
+
+<!ELEMENT   Hash                (#PCDATA)>
+
+<!ELEMENT   Eol EMPTY>
+<!ATTLIST   Eol
+    index       CDATA   #REQUIRED>
+
+<!ELEMENT   Project             (Language,
+                                 ProjectWordList?,
+                                 ProjectExcludeList?,
+                                 Hash,
+                                 ProgLanguage,
+                                 ProjectType,
+                                 Description?,
+                                 Version?,
+                                 Author?,
+                                 Email?,
+                                 TranslationPattern?,
+                                 TranslationsBinPath?,
+                                 Eol?,
+                                 Sources,
+                                 Forms,
+                                 Translations,
+                                 TranslationExceptions?,
+                                 Resources,
+                                 Interfaces,
+                                 Others,
+                                 MainScript?,
+                                 Vcs,
+                                 FiletypeAssociations,
+                                 LexerAssociations?,
+                                 Make?,
+                                 ProjectTypeSpecific?,
+                                 Documentation?,
+                                 Packagers?,
+                                 Checkers?,
+                                 OtherTools?)>
+<!ATTLIST   Project
+    version     CDATA   #REQUIRED>
--- a/E5XML/Config.py	Sat Apr 14 18:48:38 2018 +0200
+++ b/E5XML/Config.py	Sun Apr 15 11:36:43 2018 +0200
@@ -10,8 +10,9 @@
 # version number of the multi project file
 multiProjectFileFormatVersion = "5.1"
 
-# version number of the project file
-projectFileFormatVersion = "6.0"
+# version numbers of the project file
+projectFileFormatVersion ="6.1"
+projectFileFormatVersionProto = "6.0"
 projectFileFormatVersionAlt = "5.1"
 
 # version number of the user project file
--- a/E5XML/ProjectReader.py	Sat Apr 14 18:48:38 2018 +0200
+++ b/E5XML/ProjectReader.py	Sun Apr 15 11:36:43 2018 +0200
@@ -19,8 +19,7 @@
     """
     Class for reading an XML project file.
     """
-    supportedVersions = ["4.6", "5.0", "5.1", "6.0"]
-    # TODO: add 'make' support
+    supportedVersions = ["4.6", "5.0", "5.1", "6.0", "6.1"]
     
     def __init__(self, device, project):
         """
@@ -113,6 +112,9 @@
                     self.__readFiletypeAssociations()
                 elif self.name() == "LexerAssociations":
                     self.__readLexerAssociations()
+                elif self.name() == "Make":
+                    self.__readBasicDataField(
+                        "Make", "MakeParameters", "MAKEPARAMS")
                 elif self.name() == "ProjectTypeSpecific":
                     self.__readBasicDataField(
                         "ProjectTypeSpecific", "ProjectTypeSpecificData",
--- a/E5XML/ProjectWriter.py	Sat Apr 14 18:48:38 2018 +0200
+++ b/E5XML/ProjectWriter.py	Sun Apr 15 11:36:43 2018 +0200
@@ -14,7 +14,8 @@
 from E5Gui.E5Application import e5App
 
 from .XMLStreamWriterBase import XMLStreamWriterBase
-from .Config import projectFileFormatVersion, projectFileFormatVersionAlt
+from .Config import projectFileFormatVersion, projectFileFormatVersionProto, \
+    projectFileFormatVersionAlt
 
 import Preferences
 import Utilities
@@ -24,7 +25,6 @@
     """
     Class implementing the writer class for writing an XML project file.
     """
-    # TODO: add 'make' support
     def __init__(self, device, projectName):
         """
         Constructor
@@ -43,8 +43,10 @@
         """
         XMLStreamWriterBase.writeXML(self)
         
-        if self.pdata["PROTOCOLS"]:
+        if not e5App().getObject("Project").hasDefaultMakeParameters():
             fileFormatVersion = projectFileFormatVersion
+        elif self.pdata["PROTOCOLS"]:
+            fileFormatVersion = projectFileFormatVersionProto
         else:
             fileFormatVersion = projectFileFormatVersionAlt
         
@@ -215,6 +217,12 @@
                 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 extra project data stuff
         if len(self.pdata["PROJECTTYPESPECIFICDATA"]):
             self.writeStartElement("ProjectTypeSpecific")
--- a/Project/Project.py	Sat Apr 14 18:48:38 2018 +0200
+++ b/Project/Project.py	Sun Apr 15 11:36:43 2018 +0200
@@ -5377,3 +5377,29 @@
         """
         # TODO: implement this
         pass
+    
+    def hasDefaultMakeParameters(self):
+        """
+        Private method to test, if the project contains the default make
+        parameters.
+        
+        @return flag indicating default parameter set
+        @rtype bool
+        """
+        return self.pdata["MAKEPARAMS"] == {
+            "MakeEnabled": False,
+            "MakeExecutable": "",
+            "MakeFile": "",
+            "MakeTarget": "",
+            "MakeParameters": "",
+            "MakeTestOnly": True,
+        }
+    
+    def isMakeEnabled(self):
+        """
+        Public method to test, if make is enabled for the project.
+        
+        @return flag indicating enabled make support
+        @rtype bool
+        """
+        return self.pdata["MAKEPARAMS"]["MakeEnabled"]

eric ide

mercurial