--- a/E5XML/ProjectHandler.py Mon Sep 13 19:55:23 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,660 +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 file. -""" - -import os - -from .Config import projectFileFormatVersion -from .XMLHandlerBase import XMLHandlerBase - -import Utilities - -class ProjectHandler(XMLHandlerBase): - """ - Class implementing a sax handler to read an XML project file. - """ - def __init__(self, project): - """ - Constructor - - @param project Reference to the project object to store the - information into. - """ - XMLHandlerBase.__init__(self) - - self.startDocumentSpecific = self.startDocumentProject - - self.elements.update({ - 'Project' : (self.startProject, self.defaultEndElement), - 'Language' : (self.defaultStartElement, self.endLanguage), - 'ProjectWordList' : (self.defaultStartElement, self.endProjectWordList), - 'ProjectExcludeList' : (self.defaultStartElement, - self.endProjectExcludeList), - 'Hash' : (self.defaultStartElement, self.endHash), - 'ProgLanguage' : (self.startProgLanguage, self.endProgLanguage), - 'ProjectType' : (self.defaultStartElement, self.endProjectType), - 'Description' : (self.defaultStartElement, self.endDescription), - 'Version' : (self.defaultStartElement, self.endVersion), - 'Author' : (self.defaultStartElement, self.endAuthor), - 'Email' : (self.defaultStartElement, self.endEmail), - 'VcsType' : (self.defaultStartElement, self.endVcsType), - 'VcsOptions' : (self.startVcsOptions, self.endVcsOptions), - 'VcsOtherData' : (self.startVcsOtherData, self.endVcsOtherData), - 'Dir' : (self.defaultStartElement, self.endDir), - 'Name' : (self.defaultStartElement, self.endName), - 'Source' : (self.startSource, self.endSource), - 'Form' : (self.startForm, self.endForm), - 'Translation' : (self.startTranslation, self.endTranslation), - 'TranslationPattern' : (self.defaultStartElement, - self.endTranslationPattern), - 'TranslationsBinPath' : (self.startTranslationsBinPath, - self.endTranslationsBinPath), - 'TranslationException' : (self.startTranslationException, - self.endTranslationException), - 'Resource' : (self.startResource, self.endResource), - 'Interface' : (self.startInterface, self.endInterface), - 'Other' : (self.startOther, self.endOther), - 'MainScript' : (self.startMainScript, self.endMainScript), - 'FiletypeAssociation' : (self.startFiletypeAssociation, - self.defaultEndElement), - 'LexerAssociation' : (self.startLexerAssociation, - self.defaultEndElement), - 'ProjectTypeSpecificData' : (self.startProjectTypeSpecificData, - self.endProjectTypeSpecificData), - 'DocumentationParams' : (self.startDocumentationParams, - self.endDocumentationParams), - 'PackagersParams' : (self.startPackagersParams, self.endPackagersParams), - 'CheckersParams' : (self.startCheckersParams, self.endCheckersParams), - 'OtherToolsParams' : (self.startOtherToolsParams, self.endOtherToolsParams), - 'Eol' : (self.startEol, self.defaultEndElement), - # parameters kept for backward compatibility - 'UIType' : (self.defaultStartElement, self.endUIType), - 'TranslationPrefix' : (self.startTranslationPrefix, - self.endTranslationPrefix), - 'Eric4DocParams' : (self.startEric4DocParams, self.endEric4DocParams), - 'Eric4ApiParams' : (self.startEric4ApiParams, self.endEric4ApiParams), - 'CxfreezeParams' : (self.startCxfreezeParams, self.endCxfreezeParams), - 'PyLintParams' : (self.startPyLintParams, self.endPyLintParams), - }) - - self.project = project - - def startDocumentProject(self): - """ - Handler called, when the document parsing is started. - """ - self.version = '' - self.pathStack = [] - - ################################################### - ## below follow the individual handler functions - ################################################### - - def endLanguage(self): - """ - Handler method for the "Language" end tag. - """ - self.project.pdata["SPELLLANGUAGE"] = [self.buffer] - - def endProjectWordList(self): - """ - Handler method for the "ProjectWordList" end tag. - """ - path = Utilities.toNativeSeparators(self.buffer) - self.project.pdata["SPELLWORDS"] = [path] - - def endProjectExcludeList(self): - """ - Handler method for the "ProjectExcludeList" end tag. - """ - path = Utilities.toNativeSeparators(self.buffer) - self.project.pdata["SPELLEXCLUDES"] = [path] - - def endHash(self): - """ - Handler method for the "Hash" end tag. - """ - self.project.pdata["HASH"] = [self.buffer] - - def startProgLanguage(self, attrs): - """ - Handler method for the "Source" start tag. - - @param attrs list of tag attributes - """ - mixedLanguage = int(attrs.get("mixed", "0")) - self.project.pdata["MIXEDLANGUAGE"] = [mixedLanguage] - self.buffer = "" - - def endProgLanguage(self): - """ - Handler method for the "ProgLanguage" end tag. - """ - self.project.pdata["PROGLANGUAGE"] = [self.buffer] - - def endProjectType(self): - """ - Handler method for the "ProjectType" end tag. - """ - self.project.pdata["PROJECTTYPE"] = [self.buffer] - - def endDescription(self): - """ - Handler method for the "Description" end tag. - """ - self.buffer = self.unescape(self.buffer) - if self.version >= '4.3': - self.project.pdata["DESCRIPTION"] = [self.decodedNewLines(self.buffer)] - else: - self.project.pdata["DESCRIPTION"] = [self.buffer] - - def endVersion(self): - """ - Handler method for the "Version" end tag. - """ - self.buffer = self.unescape(self.buffer) - self.project.pdata["VERSION"] = [self.buffer] - - def endAuthor(self): - """ - Handler method for the "Author" end tag. - """ - self.buffer = self.unescape(self.buffer) - self.project.pdata["AUTHOR"] = [self.buffer] - - def endEmail(self): - """ - Handler method for the "Email" end tag. - """ - self.buffer = self.unescape(self.buffer) - self.project.pdata["EMAIL"] = [self.buffer] - - def endVcsType(self): - """ - Handler method for the "VcsType" end tag. - """ - self.project.pdata["VCS"] = [self.buffer] - - def startVcsOptions(self, attrs): - """ - Handler method for the "VcsOptions" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endVcsOptions(self): - """ - Handler method for the "VcsOptions" end tag. - """ - try: - self.project.pdata["VCSOPTIONS"] = [self.stack[-1]] - except IndexError: - self.project.pdata["VCSOPTIONS"] = [] - - def startVcsOtherData(self, attrs): - """ - Handler method for the "VcsOtherData" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endVcsOtherData(self): - """ - Handler method for the "VcsOtherData" end tag. - """ - try: - self.project.pdata["VCSOTHERDATA"] = [self.stack[-1]] - except IndexError: - self.project.pdata["VCSOTHERDATA"] = [] - - def startProjectTypeSpecificData(self, attrs): - """ - Handler method for the "ProjectTypeSpecificData" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endProjectTypeSpecificData(self): - """ - Handler method for the "ProjectTypeSpecificData" end tag. - """ - try: - self.project.pdata["PROJECTTYPESPECIFICDATA"] = self.stack[-1] - except IndexError: - self.project.pdata["PROJECTTYPESPECIFICDATA"] = {} - - def startDocumentationParams(self, attrs): - """ - Handler method for the "DocumentationParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endDocumentationParams(self): - """ - Handler method for the "DocumentationParams" end tag. - """ - try: - self.project.pdata["DOCUMENTATIONPARMS"] = self.stack[-1] - except IndexError: - self.project.pdata["DOCUMENTATIONPARMS"] = {} - - def startPackagersParams(self, attrs): - """ - Handler method for the "PackagersParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endPackagersParams(self): - """ - Handler method for the "PackagersParams" end tag. - """ - try: - self.project.pdata["PACKAGERSPARMS"] = self.stack[-1] - except IndexError: - self.project.pdata["PACKAGERSPARMS"] = {} - - def startCheckersParams(self, attrs): - """ - Handler method for the "CheckersParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endCheckersParams(self): - """ - Handler method for the "CheckersParams" end tag. - """ - try: - self.project.pdata["CHECKERSPARMS"] = self.stack[-1] - except IndexError: - self.project.pdata["CHECKERSPARMS"] = {} - - def startOtherToolsParams(self, attrs): - """ - Handler method for the "OtherToolsParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endOtherToolsParams(self): - """ - Handler method for the "OtherToolsParams" end tag. - """ - try: - self.project.pdata["OTHERTOOLSPARMS"] = self.stack[-1] - except IndexError: - self.project.pdata["OTHERTOOLSPARMS"] = {} - - def endDir(self): - """ - Handler method for the "Dir" end tag. - """ - self.pathStack.append(self.buffer) - - def endName(self): - """ - Handler method for the "Name" end tag. - """ - self.pathStack.append(self.buffer) - - def endTranslationPattern(self): - """ - Handler method for the "TranslationPattern" end tag. - """ - self.project.pdata["TRANSLATIONPATTERN"].append( - Utilities.toNativeSeparators(self.buffer)) - - def startTranslationsBinPath(self, attrs): - """ - Handler method for the "TranslationsBinPath" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endTranslationsBinPath(self): - """ - Handler method for the "TranslationsBinPath" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["TRANSLATIONSBINPATH"].append(path) - - def startSource(self, attrs): - """ - Handler method for the "Source" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endSource(self): - """ - Handler method for the "Source" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["SOURCES"].append(path) - - def startForm(self, attrs): - """ - Handler method for the "Form" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endForm(self): - """ - Handler method for the "Form" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["FORMS"].append(path) - - def startTranslation(self, attrs): - """ - Handler method for the "Translation" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endTranslation(self): - """ - Handler method for the "Translation" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["TRANSLATIONS"].append(path) - - def startTranslationException(self, attrs): - """ - Handler method for the "TranslationException" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endTranslationException(self): - """ - Handler method for the "TranslationException" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["TRANSLATIONEXCEPTIONS"].append(path) - - def startResource(self, attrs): - """ - Handler method for the "Resource" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endResource(self): - """ - Handler method for the "Resource" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["RESOURCES"].append(path) - - def startInterface(self, attrs): - """ - Handler method for the "Interface" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endInterface(self): - """ - Handler method for the "Interface" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["INTERFACES"].append(path) - - def startOther(self, attrs): - """ - Handler method for the "Other" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endOther(self): - """ - Handler method for the "Other" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["OTHERS"].append(path) - - def startMainScript(self, attrs): - """ - Handler method for the "MainScript" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endMainScript(self): - """ - Handler method for the "MainScript" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - self.project.pdata["MAINSCRIPT"] = [path] - - def startFiletypeAssociation(self, attrs): - """ - Handler method for the "FiletypeAssociation" start tag. - - @param attrs list of tag attributes - """ - pattern = attrs.get("pattern", "") - filetype = attrs.get("type", "OTHERS") - if pattern: - self.project.pdata["FILETYPES"][pattern] = filetype - - def startLexerAssociation(self, attrs): - """ - Handler method for the "LexerAssociation" start tag. - - @param attrs list of tag attributes - """ - pattern = attrs.get("pattern", "") - lexer = attrs.get("lexer", "") - if pattern: - self.project.pdata["LEXERASSOCS"][pattern] = lexer - - def startEol(self, attrs): - """ - Handler method for the "Eol" start tag. - - @param attrs list of tag attributes - """ - index = int(attrs.get("index", "0")) - self.project.pdata["EOL"] = [index] - - def __buildPath(self): - """ - Private method to assemble a path. - - @return The ready assembled path. (string) - """ - path = "" - if self.pathStack and not self.pathStack[0]: - self.pathStack[0] = os.sep - for p in self.pathStack: - path = os.path.join(path, p) - return path - - def startProject(self, attrs): - """ - Handler method for the "Project" start tag. - - @param attrs list of tag attributes - """ - self.version = attrs.get('version', projectFileFormatVersion) - - def getVersion(self): - """ - Public method to retrieve the version of the project. - - @return String containing the version number. - """ - return self.version - - ############################################################### - ## below are handler methods kept for backward compatibility - ############################################################### - - def endUIType(self): - """ - Handler method for the "UIType" end tag. - """ - self.project.pdata["PROJECTTYPE"] = [self.buffer] - - def startTranslationPrefix(self, attrs): - """ - Handler method for the "TranslationPrefix" start tag. - - @param attrs list of tag attributes - """ - self.pathStack = [] - self.buffer = "" - - def endTranslationPrefix(self): - """ - Handler method for the "TranslationPrefix" end tag. - """ - if self.version >= '4.3': - path = Utilities.toNativeSeparators(self.buffer) - else: - path = self.__buildPath() - if not path.endswith("_"): - path = "{0}_".format(path) - self.project.pdata["TRANSLATIONPATTERN"].append("{0}%language%.ts".format(path)) - - def startEric4DocParams(self, attrs): - """ - Handler method for the "Eric4DocParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endEric4DocParams(self): - """ - Handler method for the "Eric4DocParams" end tag. - """ - try: - self.project.pdata["DOCUMENTATIONPARMS"]["ERIC4DOC"] = self.stack[-1] - except IndexError: - pass - - def startEric4ApiParams(self, attrs): - """ - Handler method for the "Eric4ApiParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endEric4ApiParams(self): - """ - Handler method for the "Eric4ApiParams" end tag. - """ - try: - self.project.pdata["DOCUMENTATIONPARMS"]["ERIC4API"] = self.stack[-1] - except IndexError: - pass - - def startCxfreezeParams(self, attrs): - """ - Handler method for the "CxfreezeParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endCxfreezeParams(self): - """ - Handler method for the "CxfreezeParams" end tag. - """ - try: - self.project.pdata["PACKAGERSPARMS"]["CXFREEZE"] = self.stack[-1] - except IndexError: - self.project.pdata["PACKAGERSPARMS"] = {} - - def startPyLintParams(self, attrs): - """ - Handler method for the "PyLintParams" start tag. - - @param attrs list of tag attributes - """ - self.defaultStartElement(attrs) - self._prepareBasics() - - def endPyLintParams(self): - """ - Handler method for the "PyLintParams" end tag. - """ - try: - self.project.pdata["CHECKERSPARMS"]["PYLINT"] = self.stack[-1] - except IndexError: - self.project.pdata["CHECKERSPARMS"] = {}