E5XML/ProjectWriter.py

Wed, 11 Mar 2015 18:32:27 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 11 Mar 2015 18:32:27 +0100
changeset 4172
4f20dba37ab6
parent 4021
195a471c327b
child 4175
4db8023ccf32
permissions
-rw-r--r--

Updated Pygments to 2.0.2.

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

# Copyright (c) 2004 - 2015 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

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)
        
        self.writeDTD('<!DOCTYPE Project SYSTEM "Project-{0}.dtd">'.format(
            projectFileFormatVersion))
        
        # 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"][0],
            self.pdata["EMAIL"][0]))
        
        # add the main tag
        self.writeStartElement("Project")
        self.writeAttribute("version", projectFileFormatVersion)
        
        # do the language (used for spell checking)
        self.writeTextElement("Language", self.pdata["SPELLLANGUAGE"][0])
        if len(self.pdata["SPELLWORDS"][0]) > 0:
            self.writeTextElement(
                "ProjectWordList",
                Utilities.fromNativeSeparators(self.pdata["SPELLWORDS"][0]))
        if len(self.pdata["SPELLEXCLUDES"][0]) > 0:
            self.writeTextElement(
                "ProjectExcludeList",
                Utilities.fromNativeSeparators(self.pdata["SPELLEXCLUDES"][0]))
        
        # do the hash
        self.writeTextElement("Hash", self.pdata["HASH"][0])
        
        # do the programming language
        self.writeStartElement("ProgLanguage")
        self.writeAttribute("mixed", str(int(self.pdata["MIXEDLANGUAGE"][0])))
        self.writeCharacters(self.pdata["PROGLANGUAGE"][0])
        self.writeEndElement()
        
        # do the UI type
        self.writeTextElement("ProjectType", self.pdata["PROJECTTYPE"][0])
        
        # do description
        if self.pdata["DESCRIPTION"]:
            self.writeTextElement("Description", self.pdata["DESCRIPTION"][0])
        
        # do version, author and email
        self.writeTextElement("Version", self.pdata["VERSION"][0])
        self.writeTextElement("Author", self.pdata["AUTHOR"][0])
        self.writeTextElement("Email", self.pdata["EMAIL"][0])
            
        # do the translation pattern
        if self.pdata["TRANSLATIONPATTERN"]:
            self.writeTextElement(
                "TranslationPattern",
                Utilities.fromNativeSeparators(
                    self.pdata["TRANSLATIONPATTERN"][0]))
        
        # do the binary translations path
        if self.pdata["TRANSLATIONSBINPATH"]:
            self.writeTextElement(
                "TranslationsBinPath",
                Utilities.fromNativeSeparators(
                    self.pdata["TRANSLATIONSBINPATH"][0]))
        
        # do the eol setting
        if self.pdata["EOL"] and self.pdata["EOL"][0]:
            self.writeEmptyElement("Eol")
            self.writeAttribute("index", str(int(self.pdata["EOL"][0])))
        
        # do the sources
        # TODO: write in sorted order
        self.writeStartElement("Sources")
        for name in self.pdata["SOURCES"]:
            self.writeTextElement(
                "Source", Utilities.fromNativeSeparators(name))
        self.writeEndElement()
        
        # do the forms
        # TODO: write in sorted order
        self.writeStartElement("Forms")
        for name in self.pdata["FORMS"]:
            self.writeTextElement("Form", Utilities.fromNativeSeparators(name))
        self.writeEndElement()
        
        # do the translations
        # TODO: write in sorted order
        self.writeStartElement("Translations")
        for name in self.pdata["TRANSLATIONS"]:
            self.writeTextElement(
                "Translation", Utilities.fromNativeSeparators(name))
        self.writeEndElement()
        
        # do the translation exceptions
        # TODO: write in sorted order
        if self.pdata["TRANSLATIONEXCEPTIONS"]:
            self.writeStartElement("TranslationExceptions")
            for name in self.pdata["TRANSLATIONEXCEPTIONS"]:
                self.writeTextElement(
                    "TranslationException",
                    Utilities.fromNativeSeparators(name))
            self.writeEndElement()
        
        # do the resources
        # TODO: write in sorted order
        self.writeStartElement("Resources")
        for name in self.pdata["RESOURCES"]:
            self.writeTextElement(
                "Resource", Utilities.fromNativeSeparators(name))
        self.writeEndElement()
        
        # do the interfaces (IDL)
        # TODO: write in sorted order
        self.writeStartElement("Interfaces")
        for name in self.pdata["INTERFACES"]:
            self.writeTextElement(
                "Interface", Utilities.fromNativeSeparators(name))
        self.writeEndElement()
        
        # do the others
        # TODO: write in sorted order
        self.writeStartElement("Others")
        for name in 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"][0]))
        
        # do the vcs stuff
        self.writeStartElement("Vcs")
        if self.pdata["VCS"]:
            self.writeTextElement("VcsType", self.pdata["VCS"][0])
        if self.pdata["VCSOPTIONS"]:
            self.writeBasics("VcsOptions", self.pdata["VCSOPTIONS"][0])
        if self.pdata["VCSOTHERDATA"]:
            self.writeBasics("VcsOtherData", self.pdata["VCSOTHERDATA"][0])
        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 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