#!/usr/bin/env python

#
# Generated Thu Jul 22 14:11:34 2010 by generateDS.py.
#

import sys
import getopt
from xml.dom import minidom
from xml.dom import Node

#
# If you have installed IPython you can uncomment and use the following.
# IPython is available from http://ipython.scipy.org/.
#

## from IPython.Shell import IPShellEmbed
## args = ''
## ipshell = IPShellEmbed(args,
##     banner = 'Dropping into IPython',
##     exit_msg = 'Leaving Interpreter, back to program.')

# Then use the following line where and when you want to drop into the
# IPython shell:
#    ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')

#
# Support/utility functions.
#

def showIndent(outfile, level):
    for idx in range(level):
        outfile.write('    ')

def quote_xml(inStr):
    s1 = inStr
    s1 = s1.replace('&', '&amp;')
    s1 = s1.replace('<', '&lt;')
    s1 = s1.replace('"', '&quot;')
    return s1

def quote_python(inStr):
    s1 = inStr
    if s1.find("'") == -1:
        if s1.find('\n') == -1:
            return "'%s'" % s1
        else:
            return "'''%s'''" % s1
    else:
        if s1.find('"') != -1:
            s1 = s1.replace('"', '\\"')
        if s1.find('\n') == -1:
            return '"%s"' % s1
        else:
            return '"""%s"""' % s1


class MixedContainer:
    # Constants for category:
    CategoryNone = 0
    CategoryText = 1
    CategorySimple = 2
    CategoryComplex = 3
    # Constants for content_type:
    TypeNone = 0
    TypeText = 1
    TypeString = 2
    TypeInteger = 3
    TypeFloat = 4
    TypeDecimal = 5
    TypeDouble = 6
    TypeBoolean = 7
    def __init__(self, category, content_type, name, value):
        self.category = category
        self.content_type = content_type
        self.name = name
        self.value = value
    def getCategory(self):
        return self.category
    def getContenttype(self, content_type):
        return self.content_type
    def getValue(self):
        return self.value
    def getName(self):
        return self.name
    def export(self, outfile, level, name):
        if self.category == MixedContainer.CategoryText:
            outfile.write(self.value)
        elif self.category == MixedContainer.CategorySimple:
            self.exportSimple(outfile, level, name)
        else:    # category == MixedContainer.CategoryComplex
            self.value.export(outfile, level, name)
    def exportSimple(self, outfile, level, name):
        if self.content_type == MixedContainer.TypeString:
            outfile.write('<%s>%s</%s>' % (self.name, self.value, self.name))
        elif self.content_type == MixedContainer.TypeInteger or \
                self.content_type == MixedContainer.TypeBoolean:
            outfile.write('<%s>%d</%s>' % (self.name, self.value, self.name))
        elif self.content_type == MixedContainer.TypeFloat or \
                self.content_type == MixedContainer.TypeDecimal:
            outfile.write('<%s>%f</%s>' % (self.name, self.value, self.name))
        elif self.content_type == MixedContainer.TypeDouble:
            outfile.write('<%s>%g</%s>' % (self.name, self.value, self.name))
    def exportLiteral(self, outfile, level, name):
        if self.category == MixedContainer.CategoryText:
            showIndent(outfile, level)
            outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \
                (self.category, self.content_type, self.name, self.value))
        elif self.category == MixedContainer.CategorySimple:
            showIndent(outfile, level)
            outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \
                (self.category, self.content_type, self.name, self.value))
        else:    # category == MixedContainer.CategoryComplex
            showIndent(outfile, level)
            outfile.write('MixedContainer(%d, %d, "%s",\n' % \
                (self.category, self.content_type, self.name,))
            self.value.exportLiteral(outfile, level + 1)
            showIndent(outfile, level)
            outfile.write(')\n')


#
# Data representation classes.
#

class GenerateModel:
    subclass = None
    def __init__(self, Module=None, PythonExport=None):
        if Module is None:
            self.Module = []
        else:
            self.Module = Module
        if PythonExport is None:
            self.PythonExport = []
        else:
            self.PythonExport = PythonExport
    def factory(*args_, **kwargs_):
        if GenerateModel.subclass:
            return GenerateModel.subclass(*args_, **kwargs_)
        else:
            return GenerateModel(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getModule(self): return self.Module
    def setModule(self, Module): self.Module = Module
    def addModule(self, value): self.Module.append(value)
    def insertModule(self, index, value): self.Module[index] = value
    def getPythonexport(self): return self.PythonExport
    def setPythonexport(self, PythonExport): self.PythonExport = PythonExport
    def addPythonexport(self, value): self.PythonExport.append(value)
    def insertPythonexport(self, index, value): self.PythonExport[index] = value
    def export(self, outfile, level, name_='GenerateModel'):
        showIndent(outfile, level)
        outfile.write('<%s>\n' % name_)
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='GenerateModel'):
        pass
    def exportChildren(self, outfile, level, name_='GenerateModel'):
        for Module_ in self.getModule():
            Module_.export(outfile, level)
        for PythonExport_ in self.getPythonexport():
            PythonExport_.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='GenerateModel'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        pass
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Module=[\n')
        level += 1
        for Module in self.Module:
            showIndent(outfile, level)
            outfile.write('Module(\n')
            Module.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        showIndent(outfile, level)
        outfile.write('PythonExport=[\n')
        level += 1
        for PythonExport in self.PythonExport:
            showIndent(outfile, level)
            outfile.write('PythonExport(\n')
            PythonExport.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        pass
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Module':
            obj_ = Module.factory()
            obj_.build(child_)
            self.Module.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'PythonExport':
            obj_ = PythonExport.factory()
            obj_.build(child_)
            self.PythonExport.append(obj_)
# end class GenerateModel


class PythonExport:
    subclass = None
    def __init__(self, FatherNamespace='', RichCompare=0, Name='', Reference=0, FatherInclude='', Father='', Namespace='', Twin='', Constructor=0, TwinPointer='', Include='', NumberProtocol=0, Delete=0, Documentation=None, Methode=None, Attribute=None, Sequence=None, CustomAttributes='', ClassDeclarations=''):
        self.FatherNamespace = FatherNamespace
        self.RichCompare = RichCompare
        self.Name = Name
        self.Reference = Reference
        self.FatherInclude = FatherInclude
        self.Father = Father
        self.Namespace = Namespace
        self.Twin = Twin
        self.Constructor = Constructor
        self.TwinPointer = TwinPointer
        self.Include = Include
        self.NumberProtocol = NumberProtocol
        self.Delete = Delete
        self.Documentation = Documentation
        if Methode is None:
            self.Methode = []
        else:
            self.Methode = Methode
        if Attribute is None:
            self.Attribute = []
        else:
            self.Attribute = Attribute
        self.Sequence = Sequence
        self.CustomAttributes = CustomAttributes
        self.ClassDeclarations = ClassDeclarations
    def factory(*args_, **kwargs_):
        if PythonExport.subclass:
            return PythonExport.subclass(*args_, **kwargs_)
        else:
            return PythonExport(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getMethode(self): return self.Methode
    def setMethode(self, Methode): self.Methode = Methode
    def addMethode(self, value): self.Methode.append(value)
    def insertMethode(self, index, value): self.Methode[index] = value
    def getAttribute(self): return self.Attribute
    def setAttribute(self, Attribute): self.Attribute = Attribute
    def addAttribute(self, value): self.Attribute.append(value)
    def insertAttribute(self, index, value): self.Attribute[index] = value
    def getSequence(self): return self.Sequence
    def setSequence(self, Sequence): self.Sequence = Sequence
    def getCustomattributes(self): return self.CustomAttributes
    def setCustomattributes(self, CustomAttributes): self.CustomAttributes = CustomAttributes
    def getClassdeclarations(self): return self.ClassDeclarations
    def setClassdeclarations(self, ClassDeclarations): self.ClassDeclarations = ClassDeclarations
    def getFathernamespace(self): return self.FatherNamespace
    def setFathernamespace(self, FatherNamespace): self.FatherNamespace = FatherNamespace
    def getRichcompare(self): return self.RichCompare
    def setRichcompare(self, RichCompare): self.RichCompare = RichCompare
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def getReference(self): return self.Reference
    def setReference(self, Reference): self.Reference = Reference
    def getFatherinclude(self): return self.FatherInclude
    def setFatherinclude(self, FatherInclude): self.FatherInclude = FatherInclude
    def getFather(self): return self.Father
    def setFather(self, Father): self.Father = Father
    def getNamespace(self): return self.Namespace
    def setNamespace(self, Namespace): self.Namespace = Namespace
    def getTwin(self): return self.Twin
    def setTwin(self, Twin): self.Twin = Twin
    def getConstructor(self): return self.Constructor
    def setConstructor(self, Constructor): self.Constructor = Constructor
    def getTwinpointer(self): return self.TwinPointer
    def setTwinpointer(self, TwinPointer): self.TwinPointer = TwinPointer
    def getInclude(self): return self.Include
    def setInclude(self, Include): self.Include = Include
    def getNumberprotocol(self): return self.NumberProtocol
    def setNumberprotocol(self, NumberProtocol): self.NumberProtocol = NumberProtocol
    def getDelete(self): return self.Delete
    def setDelete(self, Delete): self.Delete = Delete
    def export(self, outfile, level, name_='PythonExport'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='PythonExport')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='PythonExport'):
        outfile.write(' FatherNamespace="%s"' % (self.getFathernamespace(), ))
        if self.getRichcompare() is not None:
            outfile.write(' RichCompare="%s"' % (self.getRichcompare(), ))
        outfile.write(' Name="%s"' % (self.getName(), ))
        if self.getReference() is not None:
            outfile.write(' Reference="%s"' % (self.getReference(), ))
        outfile.write(' FatherInclude="%s"' % (self.getFatherinclude(), ))
        outfile.write(' Father="%s"' % (self.getFather(), ))
        outfile.write(' Namespace="%s"' % (self.getNamespace(), ))
        outfile.write(' Twin="%s"' % (self.getTwin(), ))
        if self.getConstructor() is not None:
            outfile.write(' Constructor="%s"' % (self.getConstructor(), ))
        outfile.write(' TwinPointer="%s"' % (self.getTwinpointer(), ))
        outfile.write(' Include="%s"' % (self.getInclude(), ))
        if self.getNumberprotocol() is not None:
            outfile.write(' NumberProtocol="%s"' % (self.getNumberprotocol(), ))
        if self.getDelete() is not None:
            outfile.write(' Delete="%s"' % (self.getDelete(), ))
    def exportChildren(self, outfile, level, name_='PythonExport'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
        for Methode_ in self.getMethode():
            Methode_.export(outfile, level)
        for Attribute_ in self.getAttribute():
            Attribute_.export(outfile, level)
        if self.Sequence:
            self.Sequence.export(outfile, level)
        showIndent(outfile, level)
        outfile.write('<CustomAttributes>%s</CustomAttributes>\n' % quote_xml(self.getCustomattributes()))
        showIndent(outfile, level)
        outfile.write('<ClassDeclarations>%s</ClassDeclarations>\n' % quote_xml(self.getClassdeclarations()))
    def exportLiteral(self, outfile, level, name_='PythonExport'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('FatherNamespace = "%s",\n' % (self.getFathernamespace(),))
        showIndent(outfile, level)
        outfile.write('RichCompare = "%s",\n' % (self.getRichcompare(),))
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
        showIndent(outfile, level)
        outfile.write('Reference = "%s",\n' % (self.getReference(),))
        showIndent(outfile, level)
        outfile.write('FatherInclude = "%s",\n' % (self.getFatherinclude(),))
        showIndent(outfile, level)
        outfile.write('Father = "%s",\n' % (self.getFather(),))
        showIndent(outfile, level)
        outfile.write('Namespace = "%s",\n' % (self.getNamespace(),))
        showIndent(outfile, level)
        outfile.write('Twin = "%s",\n' % (self.getTwin(),))
        showIndent(outfile, level)
        outfile.write('Constructor = "%s",\n' % (self.getConstructor(),))
        showIndent(outfile, level)
        outfile.write('TwinPointer = "%s",\n' % (self.getTwinpointer(),))
        showIndent(outfile, level)
        outfile.write('Include = "%s",\n' % (self.getInclude(),))
        showIndent(outfile, level)
        outfile.write('NumberProtocol = "%s",\n' % (self.getNumberprotocol(),))
        showIndent(outfile, level)
        outfile.write('Delete = "%s",\n' % (self.getDelete(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        showIndent(outfile, level)
        outfile.write('Methode=[\n')
        level += 1
        for Methode in self.Methode:
            showIndent(outfile, level)
            outfile.write('Methode(\n')
            Methode.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        showIndent(outfile, level)
        outfile.write('Attribute=[\n')
        level += 1
        for Attribute in self.Attribute:
            showIndent(outfile, level)
            outfile.write('Attribute(\n')
            Attribute.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        if self.Sequence:
            showIndent(outfile, level)
            outfile.write('Sequence=Sequence(\n')
            self.Sequence.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        showIndent(outfile, level)
        outfile.write('CustomAttributes=%s,\n' % quote_python(self.getCustomattributes()))
        showIndent(outfile, level)
        outfile.write('ClassDeclarations=%s,\n' % quote_python(self.getClassdeclarations()))
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('FatherNamespace'):
            self.FatherNamespace = attrs.get('FatherNamespace').value
        if attrs.get('RichCompare'):
            if attrs.get('RichCompare').value in ('true', '1'):
                self.RichCompare = 1
            elif attrs.get('RichCompare').value in ('false', '0'):
                self.RichCompare = 0
            else:
                raise ValueError('Bad boolean attribute (RichCompare)')
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
        if attrs.get('Reference'):
            if attrs.get('Reference').value in ('true', '1'):
                self.Reference = 1
            elif attrs.get('Reference').value in ('false', '0'):
                self.Reference = 0
            else:
                raise ValueError('Bad boolean attribute (Reference)')
        if attrs.get('FatherInclude'):
            self.FatherInclude = attrs.get('FatherInclude').value
        if attrs.get('Father'):
            self.Father = attrs.get('Father').value
        if attrs.get('Namespace'):
            self.Namespace = attrs.get('Namespace').value
        if attrs.get('Twin'):
            self.Twin = attrs.get('Twin').value
        if attrs.get('Constructor'):
            if attrs.get('Constructor').value in ('true', '1'):
                self.Constructor = 1
            elif attrs.get('Constructor').value in ('false', '0'):
                self.Constructor = 0
            else:
                raise ValueError('Bad boolean attribute (Constructor)')
        if attrs.get('TwinPointer'):
            self.TwinPointer = attrs.get('TwinPointer').value
        if attrs.get('Include'):
            self.Include = attrs.get('Include').value
        if attrs.get('NumberProtocol'):
            if attrs.get('NumberProtocol').value in ('true', '1'):
                self.NumberProtocol = 1
            elif attrs.get('NumberProtocol').value in ('false', '0'):
                self.NumberProtocol = 0
            else:
                raise ValueError('Bad boolean attribute (NumberProtocol)')
        if attrs.get('Delete'):
            if attrs.get('Delete').value in ('true', '1'):
                self.Delete = 1
            elif attrs.get('Delete').value in ('false', '0'):
                self.Delete = 0
            else:
                raise ValueError('Bad boolean attribute (Delete)')
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Methode':
            obj_ = Methode.factory()
            obj_.build(child_)
            self.Methode.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Attribute':
            obj_ = Attribute.factory()
            obj_.build(child_)
            self.Attribute.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Sequence':
            obj_ = Sequence.factory()
            obj_.build(child_)
            self.setSequence(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'CustomAttributes':
            CustomAttributes_ = ''
            for text__content_ in child_.childNodes:
                CustomAttributes_ += text__content_.nodeValue
            self.CustomAttributes = CustomAttributes_
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'ClassDeclarations':
            ClassDeclarations_ = ''
            for text__content_ in child_.childNodes:
                ClassDeclarations_ += text__content_.nodeValue
            self.ClassDeclarations = ClassDeclarations_
# end class PythonExport


class Methode:
    subclass = None
    def __init__(self, Const=0, Name='', Keyword=0, Documentation=None, Parameter=None):
        self.Const = Const
        self.Name = Name
        self.Keyword = Keyword
        self.Documentation = Documentation
        if Parameter is None:
            self.Parameter = []
        else:
            self.Parameter = Parameter
    def factory(*args_, **kwargs_):
        if Methode.subclass:
            return Methode.subclass(*args_, **kwargs_)
        else:
            return Methode(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getParameter(self): return self.Parameter
    def setParameter(self, Parameter): self.Parameter = Parameter
    def addParameter(self, value): self.Parameter.append(value)
    def insertParameter(self, index, value): self.Parameter[index] = value
    def getConst(self): return self.Const
    def setConst(self, Const): self.Const = Const
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def getKeyword(self): return self.Keyword
    def setKeyword(self, Keyword): self.Keyword = Keyword
    def export(self, outfile, level, name_='Methode'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Methode')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Methode'):
        if self.getConst() is not None:
            outfile.write(' Const="%s"' % (self.getConst(), ))
        outfile.write(' Name="%s"' % (self.getName(), ))
        if self.getKeyword() is not None:
            outfile.write(' Keyword="%s"' % (self.getKeyword(), ))
    def exportChildren(self, outfile, level, name_='Methode'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
        for Parameter_ in self.getParameter():
            Parameter_.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='Methode'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Const = "%s",\n' % (self.getConst(),))
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
        showIndent(outfile, level)
        outfile.write('Keyword = "%s",\n' % (self.getKeyword(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        showIndent(outfile, level)
        outfile.write('Parameter=[\n')
        level += 1
        for Parameter in self.Parameter:
            showIndent(outfile, level)
            outfile.write('Parameter(\n')
            Parameter.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Const'):
            if attrs.get('Const').value in ('true', '1'):
                self.Const = 1
            elif attrs.get('Const').value in ('false', '0'):
                self.Const = 0
            else:
                raise ValueError('Bad boolean attribute (Const)')
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
        if attrs.get('Keyword'):
            if attrs.get('Keyword').value in ('true', '1'):
                self.Keyword = 1
            elif attrs.get('Keyword').value in ('false', '0'):
                self.Keyword = 0
            else:
                raise ValueError('Bad boolean attribute (Keyword)')
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Parameter':
            obj_ = Parameter.factory()
            obj_.build(child_)
            self.Parameter.append(obj_)
# end class Methode


class Attribute:
    subclass = None
    def __init__(self, ReadOnly=0, Name='', Documentation=None, Parameter=None):
        self.ReadOnly = ReadOnly
        self.Name = Name
        self.Documentation = Documentation
        self.Parameter = Parameter
    def factory(*args_, **kwargs_):
        if Attribute.subclass:
            return Attribute.subclass(*args_, **kwargs_)
        else:
            return Attribute(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getParameter(self): return self.Parameter
    def setParameter(self, Parameter): self.Parameter = Parameter
    def getReadonly(self): return self.ReadOnly
    def setReadonly(self, ReadOnly): self.ReadOnly = ReadOnly
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def export(self, outfile, level, name_='Attribute'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Attribute')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Attribute'):
        outfile.write(' ReadOnly="%s"' % (self.getReadonly(), ))
        outfile.write(' Name="%s"' % (self.getName(), ))
    def exportChildren(self, outfile, level, name_='Attribute'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
        if self.Parameter:
            self.Parameter.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='Attribute'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('ReadOnly = "%s",\n' % (self.getReadonly(),))
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        if self.Parameter:
            showIndent(outfile, level)
            outfile.write('Parameter=Parameter(\n')
            self.Parameter.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('ReadOnly'):
            if attrs.get('ReadOnly').value in ('true', '1'):
                self.ReadOnly = 1
            elif attrs.get('ReadOnly').value in ('false', '0'):
                self.ReadOnly = 0
            else:
                raise ValueError('Bad boolean attribute (ReadOnly)')
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Parameter':
            obj_ = Parameter.factory()
            obj_.build(child_)
            self.setParameter(obj_)
# end class Attribute


class Sequence:
    subclass = None
    def __init__(self, sq_slice=0, sq_item=0, sq_concat=0, sq_inplace_repeat=0, sq_ass_slice=0, sq_contains=0, sq_ass_item=0, sq_repeat=0, sq_length=0, sq_inplace_concat=0, valueOf_=''):
        self.sq_slice = sq_slice
        self.sq_item = sq_item
        self.sq_concat = sq_concat
        self.sq_inplace_repeat = sq_inplace_repeat
        self.sq_ass_slice = sq_ass_slice
        self.sq_contains = sq_contains
        self.sq_ass_item = sq_ass_item
        self.sq_repeat = sq_repeat
        self.sq_length = sq_length
        self.sq_inplace_concat = sq_inplace_concat
        self.valueOf_ = valueOf_
    def factory(*args_, **kwargs_):
        if Sequence.subclass:
            return Sequence.subclass(*args_, **kwargs_)
        else:
            return Sequence(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getSq_slice(self): return self.sq_slice
    def setSq_slice(self, sq_slice): self.sq_slice = sq_slice
    def getSq_item(self): return self.sq_item
    def setSq_item(self, sq_item): self.sq_item = sq_item
    def getSq_concat(self): return self.sq_concat
    def setSq_concat(self, sq_concat): self.sq_concat = sq_concat
    def getSq_inplace_repeat(self): return self.sq_inplace_repeat
    def setSq_inplace_repeat(self, sq_inplace_repeat): self.sq_inplace_repeat = sq_inplace_repeat
    def getSq_ass_slice(self): return self.sq_ass_slice
    def setSq_ass_slice(self, sq_ass_slice): self.sq_ass_slice = sq_ass_slice
    def getSq_contains(self): return self.sq_contains
    def setSq_contains(self, sq_contains): self.sq_contains = sq_contains
    def getSq_ass_item(self): return self.sq_ass_item
    def setSq_ass_item(self, sq_ass_item): self.sq_ass_item = sq_ass_item
    def getSq_repeat(self): return self.sq_repeat
    def setSq_repeat(self, sq_repeat): self.sq_repeat = sq_repeat
    def getSq_length(self): return self.sq_length
    def setSq_length(self, sq_length): self.sq_length = sq_length
    def getSq_inplace_concat(self): return self.sq_inplace_concat
    def setSq_inplace_concat(self, sq_inplace_concat): self.sq_inplace_concat = sq_inplace_concat
    def getValueOf_(self): return self.valueOf_
    def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_
    def export(self, outfile, level, name_='Sequence'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Sequence')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Sequence'):
        outfile.write(' sq_slice="%s"' % (self.getSq_slice(), ))
        outfile.write(' sq_item="%s"' % (self.getSq_item(), ))
        outfile.write(' sq_concat="%s"' % (self.getSq_concat(), ))
        outfile.write(' sq_inplace_repeat="%s"' % (self.getSq_inplace_repeat(), ))
        outfile.write(' sq_ass_slice="%s"' % (self.getSq_ass_slice(), ))
        outfile.write(' sq_contains="%s"' % (self.getSq_contains(), ))
        outfile.write(' sq_ass_item="%s"' % (self.getSq_ass_item(), ))
        outfile.write(' sq_repeat="%s"' % (self.getSq_repeat(), ))
        outfile.write(' sq_length="%s"' % (self.getSq_length(), ))
        outfile.write(' sq_inplace_concat="%s"' % (self.getSq_inplace_concat(), ))
    def exportChildren(self, outfile, level, name_='Sequence'):
        outfile.write(self.valueOf_)
    def exportLiteral(self, outfile, level, name_='Sequence'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('sq_slice = "%s",\n' % (self.getSq_slice(),))
        showIndent(outfile, level)
        outfile.write('sq_item = "%s",\n' % (self.getSq_item(),))
        showIndent(outfile, level)
        outfile.write('sq_concat = "%s",\n' % (self.getSq_concat(),))
        showIndent(outfile, level)
        outfile.write('sq_inplace_repeat = "%s",\n' % (self.getSq_inplace_repeat(),))
        showIndent(outfile, level)
        outfile.write('sq_ass_slice = "%s",\n' % (self.getSq_ass_slice(),))
        showIndent(outfile, level)
        outfile.write('sq_contains = "%s",\n' % (self.getSq_contains(),))
        showIndent(outfile, level)
        outfile.write('sq_ass_item = "%s",\n' % (self.getSq_ass_item(),))
        showIndent(outfile, level)
        outfile.write('sq_repeat = "%s",\n' % (self.getSq_repeat(),))
        showIndent(outfile, level)
        outfile.write('sq_length = "%s",\n' % (self.getSq_length(),))
        showIndent(outfile, level)
        outfile.write('sq_inplace_concat = "%s",\n' % (self.getSq_inplace_concat(),))
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,))
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('sq_slice'):
            if attrs.get('sq_slice').value in ('true', '1'):
                self.sq_slice = 1
            elif attrs.get('sq_slice').value in ('false', '0'):
                self.sq_slice = 0
            else:
                raise ValueError('Bad boolean attribute (sq_slice)')
        if attrs.get('sq_item'):
            if attrs.get('sq_item').value in ('true', '1'):
                self.sq_item = 1
            elif attrs.get('sq_item').value in ('false', '0'):
                self.sq_item = 0
            else:
                raise ValueError('Bad boolean attribute (sq_item)')
        if attrs.get('sq_concat'):
            if attrs.get('sq_concat').value in ('true', '1'):
                self.sq_concat = 1
            elif attrs.get('sq_concat').value in ('false', '0'):
                self.sq_concat = 0
            else:
                raise ValueError('Bad boolean attribute (sq_concat)')
        if attrs.get('sq_inplace_repeat'):
            if attrs.get('sq_inplace_repeat').value in ('true', '1'):
                self.sq_inplace_repeat = 1
            elif attrs.get('sq_inplace_repeat').value in ('false', '0'):
                self.sq_inplace_repeat = 0
            else:
                raise ValueError('Bad boolean attribute (sq_inplace_repeat)')
        if attrs.get('sq_ass_slice'):
            if attrs.get('sq_ass_slice').value in ('true', '1'):
                self.sq_ass_slice = 1
            elif attrs.get('sq_ass_slice').value in ('false', '0'):
                self.sq_ass_slice = 0
            else:
                raise ValueError('Bad boolean attribute (sq_ass_slice)')
        if attrs.get('sq_contains'):
            if attrs.get('sq_contains').value in ('true', '1'):
                self.sq_contains = 1
            elif attrs.get('sq_contains').value in ('false', '0'):
                self.sq_contains = 0
            else:
                raise ValueError('Bad boolean attribute (sq_contains)')
        if attrs.get('sq_ass_item'):
            if attrs.get('sq_ass_item').value in ('true', '1'):
                self.sq_ass_item = 1
            elif attrs.get('sq_ass_item').value in ('false', '0'):
                self.sq_ass_item = 0
            else:
                raise ValueError('Bad boolean attribute (sq_ass_item)')
        if attrs.get('sq_repeat'):
            if attrs.get('sq_repeat').value in ('true', '1'):
                self.sq_repeat = 1
            elif attrs.get('sq_repeat').value in ('false', '0'):
                self.sq_repeat = 0
            else:
                raise ValueError('Bad boolean attribute (sq_repeat)')
        if attrs.get('sq_length'):
            if attrs.get('sq_length').value in ('true', '1'):
                self.sq_length = 1
            elif attrs.get('sq_length').value in ('false', '0'):
                self.sq_length = 0
            else:
                raise ValueError('Bad boolean attribute (sq_length)')
        if attrs.get('sq_inplace_concat'):
            if attrs.get('sq_inplace_concat').value in ('true', '1'):
                self.sq_inplace_concat = 1
            elif attrs.get('sq_inplace_concat').value in ('false', '0'):
                self.sq_inplace_concat = 0
            else:
                raise ValueError('Bad boolean attribute (sq_inplace_concat)')
    def buildChildren(self, child_, nodeName_):
        self.valueOf_ = ''
        for child in child_.childNodes:
            if child.nodeType == Node.TEXT_NODE:
                self.valueOf_ += child.nodeValue
# end class Sequence


class Module:
    subclass = None
    def __init__(self, Name='', Documentation=None, Dependencies=None, Content=None):
        self.Name = Name
        self.Documentation = Documentation
        self.Dependencies = Dependencies
        self.Content = Content
    def factory(*args_, **kwargs_):
        if Module.subclass:
            return Module.subclass(*args_, **kwargs_)
        else:
            return Module(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getDependencies(self): return self.Dependencies
    def setDependencies(self, Dependencies): self.Dependencies = Dependencies
    def getContent(self): return self.Content
    def setContent(self, Content): self.Content = Content
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def export(self, outfile, level, name_='Module'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Module')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Module'):
        outfile.write(' Name="%s"' % (self.getName(), ))
    def exportChildren(self, outfile, level, name_='Module'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
        if self.Dependencies:
            self.Dependencies.export(outfile, level)
        if self.Content:
            self.Content.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='Module'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        if self.Dependencies:
            showIndent(outfile, level)
            outfile.write('Dependencies=Dependencies(\n')
            self.Dependencies.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        if self.Content:
            showIndent(outfile, level)
            outfile.write('Content=Content(\n')
            self.Content.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Dependencies':
            obj_ = Dependencies.factory()
            obj_.build(child_)
            self.setDependencies(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Content':
            obj_ = Content.factory()
            obj_.build(child_)
            self.setContent(obj_)
# end class Module


class Dependencies:
    subclass = None
    def __init__(self, Module=None):
        if Module is None:
            self.Module = []
        else:
            self.Module = Module
    def factory(*args_, **kwargs_):
        if Dependencies.subclass:
            return Dependencies.subclass(*args_, **kwargs_)
        else:
            return Dependencies(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getModule(self): return self.Module
    def setModule(self, Module): self.Module = Module
    def addModule(self, value): self.Module.append(value)
    def insertModule(self, index, value): self.Module[index] = value
    def export(self, outfile, level, name_='Dependencies'):
        showIndent(outfile, level)
        outfile.write('<%s>\n' % name_)
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Dependencies'):
        pass
    def exportChildren(self, outfile, level, name_='Dependencies'):
        for Module_ in self.getModule():
            Module_.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='Dependencies'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        pass
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Module=[\n')
        level += 1
        for Module in self.Module:
            showIndent(outfile, level)
            outfile.write('Module(\n')
            Module.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        pass
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Module':
            obj_ = Module.factory()
            obj_.build(child_)
            self.Module.append(obj_)
# end class Dependencies


class Content:
    subclass = None
    def __init__(self, Property=None, Feature=None, DocObject=None, GuiCommand=None, PreferencesPage=None):
        if Property is None:
            self.Property = []
        else:
            self.Property = Property
        if Feature is None:
            self.Feature = []
        else:
            self.Feature = Feature
        if DocObject is None:
            self.DocObject = []
        else:
            self.DocObject = DocObject
        if GuiCommand is None:
            self.GuiCommand = []
        else:
            self.GuiCommand = GuiCommand
        if PreferencesPage is None:
            self.PreferencesPage = []
        else:
            self.PreferencesPage = PreferencesPage
    def factory(*args_, **kwargs_):
        if Content.subclass:
            return Content.subclass(*args_, **kwargs_)
        else:
            return Content(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getProperty(self): return self.Property
    def setProperty(self, Property): self.Property = Property
    def addProperty(self, value): self.Property.append(value)
    def insertProperty(self, index, value): self.Property[index] = value
    def getFeature(self): return self.Feature
    def setFeature(self, Feature): self.Feature = Feature
    def addFeature(self, value): self.Feature.append(value)
    def insertFeature(self, index, value): self.Feature[index] = value
    def getDocobject(self): return self.DocObject
    def setDocobject(self, DocObject): self.DocObject = DocObject
    def addDocobject(self, value): self.DocObject.append(value)
    def insertDocobject(self, index, value): self.DocObject[index] = value
    def getGuicommand(self): return self.GuiCommand
    def setGuicommand(self, GuiCommand): self.GuiCommand = GuiCommand
    def addGuicommand(self, value): self.GuiCommand.append(value)
    def insertGuicommand(self, index, value): self.GuiCommand[index] = value
    def getPreferencespage(self): return self.PreferencesPage
    def setPreferencespage(self, PreferencesPage): self.PreferencesPage = PreferencesPage
    def addPreferencespage(self, value): self.PreferencesPage.append(value)
    def insertPreferencespage(self, index, value): self.PreferencesPage[index] = value
    def export(self, outfile, level, name_='Content'):
        showIndent(outfile, level)
        outfile.write('<%s>\n' % name_)
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Content'):
        pass
    def exportChildren(self, outfile, level, name_='Content'):
        for Property_ in self.getProperty():
            Property_.export(outfile, level)
        for Feature_ in self.getFeature():
            Feature_.export(outfile, level)
        for DocObject_ in self.getDocobject():
            DocObject_.export(outfile, level)
        for GuiCommand_ in self.getGuicommand():
            showIndent(outfile, level)
            outfile.write('<GuiCommand>%s</GuiCommand>\n' % quote_xml(GuiCommand_))
        for PreferencesPage_ in self.getPreferencespage():
            showIndent(outfile, level)
            outfile.write('<PreferencesPage>%s</PreferencesPage>\n' % quote_xml(PreferencesPage_))
    def exportLiteral(self, outfile, level, name_='Content'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        pass
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Property=[\n')
        level += 1
        for Property in self.Property:
            showIndent(outfile, level)
            outfile.write('Property(\n')
            Property.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        showIndent(outfile, level)
        outfile.write('Feature=[\n')
        level += 1
        for Feature in self.Feature:
            showIndent(outfile, level)
            outfile.write('Feature(\n')
            Feature.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        showIndent(outfile, level)
        outfile.write('DocObject=[\n')
        level += 1
        for DocObject in self.DocObject:
            showIndent(outfile, level)
            outfile.write('DocObject(\n')
            DocObject.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        showIndent(outfile, level)
        outfile.write('GuiCommand=[\n')
        level += 1
        for GuiCommand in self.GuiCommand:
            showIndent(outfile, level)
            outfile.write('%s,\n' % quote_python(GuiCommand))
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        showIndent(outfile, level)
        outfile.write('PreferencesPage=[\n')
        level += 1
        for PreferencesPage in self.PreferencesPage:
            showIndent(outfile, level)
            outfile.write('%s,\n' % quote_python(PreferencesPage))
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        pass
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Property':
            obj_ = Property.factory()
            obj_.build(child_)
            self.Property.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Feature':
            obj_ = Feature.factory()
            obj_.build(child_)
            self.Feature.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'DocObject':
            obj_ = DocObject.factory()
            obj_.build(child_)
            self.DocObject.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'GuiCommand':
            GuiCommand_ = ''
            for text__content_ in child_.childNodes:
                GuiCommand_ += text__content_.nodeValue
            self.GuiCommand.append(GuiCommand_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'PreferencesPage':
            PreferencesPage_ = ''
            for text__content_ in child_.childNodes:
                PreferencesPage_ += text__content_.nodeValue
            self.PreferencesPage.append(PreferencesPage_)
# end class Content


class Feature:
    subclass = None
    def __init__(self, Name='', Documentation=None, Property=None, ViewProvider=None):
        self.Name = Name
        self.Documentation = Documentation
        if Property is None:
            self.Property = []
        else:
            self.Property = Property
        self.ViewProvider = ViewProvider
    def factory(*args_, **kwargs_):
        if Feature.subclass:
            return Feature.subclass(*args_, **kwargs_)
        else:
            return Feature(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getProperty(self): return self.Property
    def setProperty(self, Property): self.Property = Property
    def addProperty(self, value): self.Property.append(value)
    def insertProperty(self, index, value): self.Property[index] = value
    def getViewprovider(self): return self.ViewProvider
    def setViewprovider(self, ViewProvider): self.ViewProvider = ViewProvider
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def export(self, outfile, level, name_='Feature'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Feature')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Feature'):
        outfile.write(' Name="%s"' % (self.getName(), ))
    def exportChildren(self, outfile, level, name_='Feature'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
        for Property_ in self.getProperty():
            Property_.export(outfile, level)
        if self.ViewProvider:
            self.ViewProvider.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='Feature'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        showIndent(outfile, level)
        outfile.write('Property=[\n')
        level += 1
        for Property in self.Property:
            showIndent(outfile, level)
            outfile.write('Property(\n')
            Property.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
        if self.ViewProvider:
            showIndent(outfile, level)
            outfile.write('ViewProvider=ViewProvider(\n')
            self.ViewProvider.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Property':
            obj_ = Property.factory()
            obj_.build(child_)
            self.Property.append(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'ViewProvider':
            obj_ = ViewProvider.factory()
            obj_.build(child_)
            self.setViewprovider(obj_)
# end class Feature


class DocObject:
    subclass = None
    def __init__(self, Name='', Documentation=None, Property=None):
        self.Name = Name
        self.Documentation = Documentation
        if Property is None:
            self.Property = []
        else:
            self.Property = Property
    def factory(*args_, **kwargs_):
        if DocObject.subclass:
            return DocObject.subclass(*args_, **kwargs_)
        else:
            return DocObject(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getProperty(self): return self.Property
    def setProperty(self, Property): self.Property = Property
    def addProperty(self, value): self.Property.append(value)
    def insertProperty(self, index, value): self.Property[index] = value
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def export(self, outfile, level, name_='DocObject'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='DocObject')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='DocObject'):
        outfile.write(' Name="%s"' % (self.getName(), ))
    def exportChildren(self, outfile, level, name_='DocObject'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
        for Property_ in self.getProperty():
            Property_.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='DocObject'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        showIndent(outfile, level)
        outfile.write('Property=[\n')
        level += 1
        for Property in self.Property:
            showIndent(outfile, level)
            outfile.write('Property(\n')
            Property.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Property':
            obj_ = Property.factory()
            obj_.build(child_)
            self.Property.append(obj_)
# end class DocObject


class Property:
    subclass = None
    def __init__(self, Type='', Name='', StartValue='', Documentation=None):
        self.Type = Type
        self.Name = Name
        self.StartValue = StartValue
        self.Documentation = Documentation
    def factory(*args_, **kwargs_):
        if Property.subclass:
            return Property.subclass(*args_, **kwargs_)
        else:
            return Property(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getDocumentation(self): return self.Documentation
    def setDocumentation(self, Documentation): self.Documentation = Documentation
    def getType(self): return self.Type
    def setType(self, Type): self.Type = Type
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def getStartvalue(self): return self.StartValue
    def setStartvalue(self, StartValue): self.StartValue = StartValue
    def export(self, outfile, level, name_='Property'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Property')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Property'):
        outfile.write(' Type="%s"' % (self.getType(), ))
        outfile.write(' Name="%s"' % (self.getName(), ))
        if self.getStartvalue() is not None:
            outfile.write(' StartValue="%s"' % (self.getStartvalue(), ))
    def exportChildren(self, outfile, level, name_='Property'):
        if self.Documentation:
            self.Documentation.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='Property'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Type = "%s",\n' % (self.getType(),))
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
        showIndent(outfile, level)
        outfile.write('StartValue = "%s",\n' % (self.getStartvalue(),))
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Documentation:
            showIndent(outfile, level)
            outfile.write('Documentation=Documentation(\n')
            self.Documentation.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Type'):
            self.Type = attrs.get('Type').value
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
        if attrs.get('StartValue'):
            self.StartValue = attrs.get('StartValue').value
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Documentation':
            obj_ = Documentation.factory()
            obj_.build(child_)
            self.setDocumentation(obj_)
# end class Property


class Documentation:
    subclass = None
    def __init__(self, Author=None, DeveloperDocu='', UserDocu=''):
        self.Author = Author
        self.DeveloperDocu = DeveloperDocu
        self.UserDocu = UserDocu
    def factory(*args_, **kwargs_):
        if Documentation.subclass:
            return Documentation.subclass(*args_, **kwargs_)
        else:
            return Documentation(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getAuthor(self): return self.Author
    def setAuthor(self, Author): self.Author = Author
    def getDeveloperdocu(self): return self.DeveloperDocu
    def setDeveloperdocu(self, DeveloperDocu): self.DeveloperDocu = DeveloperDocu
    def getUserdocu(self): return self.UserDocu
    def setUserdocu(self, UserDocu): self.UserDocu = UserDocu
    def export(self, outfile, level, name_='Documentation'):
        showIndent(outfile, level)
        outfile.write('<%s>\n' % name_)
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Documentation'):
        pass
    def exportChildren(self, outfile, level, name_='Documentation'):
        if self.Author:
            self.Author.export(outfile, level)
        showIndent(outfile, level)
        outfile.write('<DeveloperDocu>%s</DeveloperDocu>\n' % quote_xml(self.getDeveloperdocu()))
        showIndent(outfile, level)
        outfile.write('<UserDocu>%s</UserDocu>\n' % quote_xml(self.getUserdocu()))
    def exportLiteral(self, outfile, level, name_='Documentation'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        pass
    def exportLiteralChildren(self, outfile, level, name_):
        if self.Author:
            showIndent(outfile, level)
            outfile.write('Author=Author(\n')
            self.Author.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        showIndent(outfile, level)
        outfile.write('DeveloperDocu=%s,\n' % quote_python(self.getDeveloperdocu()))
        showIndent(outfile, level)
        outfile.write('UserDocu=%s,\n' % quote_python(self.getUserdocu()))
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        pass
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Author':
            obj_ = Author.factory()
            obj_.build(child_)
            self.setAuthor(obj_)
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'DeveloperDocu':
            DeveloperDocu_ = ''
            for text__content_ in child_.childNodes:
                DeveloperDocu_ += text__content_.nodeValue
            self.DeveloperDocu = DeveloperDocu_
        elif child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'UserDocu':
            UserDocu_ = ''
            for text__content_ in child_.childNodes:
                UserDocu_ += text__content_.nodeValue
            self.UserDocu = UserDocu_
# end class Documentation


class Author:
    subclass = None
    def __init__(self, Name='', Licence='', EMail='', valueOf_=''):
        self.Name = Name
        self.Licence = Licence
        self.EMail = EMail
        self.valueOf_ = valueOf_
    def factory(*args_, **kwargs_):
        if Author.subclass:
            return Author.subclass(*args_, **kwargs_)
        else:
            return Author(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def getLicence(self): return self.Licence
    def setLicence(self, Licence): self.Licence = Licence
    def getEmail(self): return self.EMail
    def setEmail(self, EMail): self.EMail = EMail
    def getValueOf_(self): return self.valueOf_
    def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_
    def export(self, outfile, level, name_='Author'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Author')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Author'):
        outfile.write(' Name="%s"' % (self.getName(), ))
        if self.getLicence() is not None:
            outfile.write(' Licence="%s"' % (self.getLicence(), ))
        outfile.write(' EMail="%s"' % (self.getEmail(), ))
    def exportChildren(self, outfile, level, name_='Author'):
        outfile.write(self.valueOf_)
    def exportLiteral(self, outfile, level, name_='Author'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
        showIndent(outfile, level)
        outfile.write('Licence = "%s",\n' % (self.getLicence(),))
        showIndent(outfile, level)
        outfile.write('EMail = "%s",\n' % (self.getEmail(),))
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,))
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
        if attrs.get('Licence'):
            self.Licence = attrs.get('Licence').value
        if attrs.get('EMail'):
            self.EMail = attrs.get('EMail').value
    def buildChildren(self, child_, nodeName_):
        self.valueOf_ = ''
        for child in child_.childNodes:
            if child.nodeType == Node.TEXT_NODE:
                self.valueOf_ += child.nodeValue
# end class Author


class ViewProvider:
    subclass = None
    def __init__(self, Property=None):
        if Property is None:
            self.Property = []
        else:
            self.Property = Property
    def factory(*args_, **kwargs_):
        if ViewProvider.subclass:
            return ViewProvider.subclass(*args_, **kwargs_)
        else:
            return ViewProvider(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getProperty(self): return self.Property
    def setProperty(self, Property): self.Property = Property
    def addProperty(self, value): self.Property.append(value)
    def insertProperty(self, index, value): self.Property[index] = value
    def export(self, outfile, level, name_='ViewProvider'):
        showIndent(outfile, level)
        outfile.write('<%s>\n' % name_)
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='ViewProvider'):
        pass
    def exportChildren(self, outfile, level, name_='ViewProvider'):
        for Property_ in self.getProperty():
            Property_.export(outfile, level)
    def exportLiteral(self, outfile, level, name_='ViewProvider'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        pass
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Property=[\n')
        level += 1
        for Property in self.Property:
            showIndent(outfile, level)
            outfile.write('Property(\n')
            Property.exportLiteral(outfile, level)
            showIndent(outfile, level)
            outfile.write('),\n')
        level -= 1
        showIndent(outfile, level)
        outfile.write('],\n')
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        pass
    def buildChildren(self, child_, nodeName_):
        if child_.nodeType == Node.ELEMENT_NODE and \
            nodeName_ == 'Property':
            obj_ = Property.factory()
            obj_.build(child_)
            self.Property.append(obj_)
# end class ViewProvider


class Parameter:
    subclass = None
    def __init__(self, Type='', Name='', valueOf_=''):
        self.Type = Type
        self.Name = Name
        self.valueOf_ = valueOf_
    def factory(*args_, **kwargs_):
        if Parameter.subclass:
            return Parameter.subclass(*args_, **kwargs_)
        else:
            return Parameter(*args_, **kwargs_)
    factory = staticmethod(factory)
    def getType(self): return self.Type
    def setType(self, Type): self.Type = Type
    def getName(self): return self.Name
    def setName(self, Name): self.Name = Name
    def getValueOf_(self): return self.valueOf_
    def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_
    def export(self, outfile, level, name_='Parameter'):
        showIndent(outfile, level)
        outfile.write('<%s' % (name_, ))
        self.exportAttributes(outfile, level, name_='Parameter')
        outfile.write('>\n')
        self.exportChildren(outfile, level + 1, name_)
        showIndent(outfile, level)
        outfile.write('</%s>\n' % name_)
    def exportAttributes(self, outfile, level, name_='Parameter'):
        outfile.write(' Type="%s"' % (self.getType(), ))
        outfile.write(' Name="%s"' % (self.getName(), ))
    def exportChildren(self, outfile, level, name_='Parameter'):
        outfile.write(self.valueOf_)
    def exportLiteral(self, outfile, level, name_='Parameter'):
        level += 1
        self.exportLiteralAttributes(outfile, level, name_)
        self.exportLiteralChildren(outfile, level, name_)
    def exportLiteralAttributes(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('Type = "%s",\n' % (self.getType(),))
        showIndent(outfile, level)
        outfile.write('Name = "%s",\n' % (self.getName(),))
    def exportLiteralChildren(self, outfile, level, name_):
        showIndent(outfile, level)
        outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,))
    def build(self, node_):
        attrs = node_.attributes
        self.buildAttributes(attrs)
        for child_ in node_.childNodes:
            nodeName_ = child_.nodeName.split(':')[-1]
            self.buildChildren(child_, nodeName_)
    def buildAttributes(self, attrs):
        if attrs.get('Type'):
            self.Type = attrs.get('Type').value
        if attrs.get('Name'):
            self.Name = attrs.get('Name').value
    def buildChildren(self, child_, nodeName_):
        self.valueOf_ = ''
        for child in child_.childNodes:
            if child.nodeType == Node.TEXT_NODE:
                self.valueOf_ += child.nodeValue
# end class Parameter


from xml.sax import handler, make_parser

class SaxStackElement:
    def __init__(self, name='', obj=None):
        self.name = name
        self.obj = obj
        self.content = ''

#
# SAX handler
#
class SaxGeneratemodelHandler(handler.ContentHandler):
    def __init__(self):
        self.stack = []
        self.root = None

    def getRoot(self):
        return self.root

    def setDocumentLocator(self, locator):
        self.locator = locator
    
    def showError(self, msg):
        print '*** (showError):', msg
        sys.exit(-1)

    def startElement(self, name, attrs):
        done = 0
        if name == 'GenerateModel':
            obj = GenerateModel.factory()
            stackObj = SaxStackElement('GenerateModel', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Module':
            obj = Module.factory()
            stackObj = SaxStackElement('Module', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'PythonExport':
            obj = PythonExport.factory()
            val = attrs.get('FatherNamespace', None)
            if val is not None:
                obj.setFathernamespace(val)
            val = attrs.get('RichCompare', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setRichcompare(1)
                elif val in ('false', '0'):
                    obj.setRichcompare(0)
                else:
                    self.reportError('"RichCompare" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            val = attrs.get('Reference', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setReference(1)
                elif val in ('false', '0'):
                    obj.setReference(0)
                else:
                    self.reportError('"Reference" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('FatherInclude', None)
            if val is not None:
                obj.setFatherinclude(val)
            val = attrs.get('Father', None)
            if val is not None:
                obj.setFather(val)
            val = attrs.get('Namespace', None)
            if val is not None:
                obj.setNamespace(val)
            val = attrs.get('Twin', None)
            if val is not None:
                obj.setTwin(val)
            val = attrs.get('Constructor', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setConstructor(1)
                elif val in ('false', '0'):
                    obj.setConstructor(0)
                else:
                    self.reportError('"Constructor" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('TwinPointer', None)
            if val is not None:
                obj.setTwinpointer(val)
            val = attrs.get('Include', None)
            if val is not None:
                obj.setInclude(val)
            val = attrs.get('NumberProtocol', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setNumberprotocol(1)
                elif val in ('false', '0'):
                    obj.setNumberprotocol(0)
                else:
                    self.reportError('"NumberProtocol" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('Delete', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setDelete(1)
                elif val in ('false', '0'):
                    obj.setDelete(0)
                else:
                    self.reportError('"Delete" attribute must be boolean ("true", "1", "false", "0")')
            stackObj = SaxStackElement('PythonExport', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Documentation':
            obj = Documentation.factory()
            stackObj = SaxStackElement('Documentation', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Methode':
            obj = Methode.factory()
            val = attrs.get('Const', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setConst(1)
                elif val in ('false', '0'):
                    obj.setConst(0)
                else:
                    self.reportError('"Const" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            val = attrs.get('Keyword', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setKeyword(1)
                elif val in ('false', '0'):
                    obj.setKeyword(0)
                else:
                    self.reportError('"Keyword" attribute must be boolean ("true", "1", "false", "0")')
            stackObj = SaxStackElement('Methode', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Parameter':
            obj = Parameter.factory()
            val = attrs.get('Type', None)
            if val is not None:
                obj.setType(val)
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            stackObj = SaxStackElement('Parameter', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Attribute':
            obj = Attribute.factory()
            val = attrs.get('ReadOnly', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setReadonly(1)
                elif val in ('false', '0'):
                    obj.setReadonly(0)
                else:
                    self.reportError('"ReadOnly" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            stackObj = SaxStackElement('Attribute', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Sequence':
            obj = Sequence.factory()
            val = attrs.get('sq_slice', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_slice(1)
                elif val in ('false', '0'):
                    obj.setSq_slice(0)
                else:
                    self.reportError('"sq_slice" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_item', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_item(1)
                elif val in ('false', '0'):
                    obj.setSq_item(0)
                else:
                    self.reportError('"sq_item" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_concat', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_concat(1)
                elif val in ('false', '0'):
                    obj.setSq_concat(0)
                else:
                    self.reportError('"sq_concat" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_inplace_repeat', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_inplace_repeat(1)
                elif val in ('false', '0'):
                    obj.setSq_inplace_repeat(0)
                else:
                    self.reportError('"sq_inplace_repeat" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_ass_slice', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_ass_slice(1)
                elif val in ('false', '0'):
                    obj.setSq_ass_slice(0)
                else:
                    self.reportError('"sq_ass_slice" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_contains', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_contains(1)
                elif val in ('false', '0'):
                    obj.setSq_contains(0)
                else:
                    self.reportError('"sq_contains" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_ass_item', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_ass_item(1)
                elif val in ('false', '0'):
                    obj.setSq_ass_item(0)
                else:
                    self.reportError('"sq_ass_item" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_repeat', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_repeat(1)
                elif val in ('false', '0'):
                    obj.setSq_repeat(0)
                else:
                    self.reportError('"sq_repeat" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_length', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_length(1)
                elif val in ('false', '0'):
                    obj.setSq_length(0)
                else:
                    self.reportError('"sq_length" attribute must be boolean ("true", "1", "false", "0")')
            val = attrs.get('sq_inplace_concat', None)
            if val is not None:
                if val in ('true', '1'):
                    obj.setSq_inplace_concat(1)
                elif val in ('false', '0'):
                    obj.setSq_inplace_concat(0)
                else:
                    self.reportError('"sq_inplace_concat" attribute must be boolean ("true", "1", "false", "0")')
            stackObj = SaxStackElement('Sequence', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'CustomAttributes':
            stackObj = SaxStackElement('CustomAttributes', None)
            self.stack.append(stackObj)
            done = 1
        elif name == 'ClassDeclarations':
            stackObj = SaxStackElement('ClassDeclarations', None)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Dependencies':
            obj = Dependencies.factory()
            stackObj = SaxStackElement('Dependencies', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Content':
            obj = Content.factory()
            stackObj = SaxStackElement('Content', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Property':
            obj = Property.factory()
            stackObj = SaxStackElement('Property', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Feature':
            obj = Feature.factory()
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            stackObj = SaxStackElement('Feature', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'ViewProvider':
            obj = ViewProvider.factory()
            stackObj = SaxStackElement('ViewProvider', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'DocObject':
            obj = DocObject.factory()
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            stackObj = SaxStackElement('DocObject', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'GuiCommand':
            stackObj = SaxStackElement('GuiCommand', None)
            self.stack.append(stackObj)
            done = 1
        elif name == 'PreferencesPage':
            stackObj = SaxStackElement('PreferencesPage', None)
            self.stack.append(stackObj)
            done = 1
        elif name == 'Author':
            obj = Author.factory()
            val = attrs.get('Name', None)
            if val is not None:
                obj.setName(val)
            val = attrs.get('Licence', None)
            if val is not None:
                obj.setLicence(val)
            val = attrs.get('EMail', None)
            if val is not None:
                obj.setEmail(val)
            stackObj = SaxStackElement('Author', obj)
            self.stack.append(stackObj)
            done = 1
        elif name == 'DeveloperDocu':
            stackObj = SaxStackElement('DeveloperDocu', None)
            self.stack.append(stackObj)
            done = 1
        elif name == 'UserDocu':
            stackObj = SaxStackElement('UserDocu', None)
            self.stack.append(stackObj)
            done = 1
        if not done:
            self.reportError('"%s" element not allowed here.' % name)

    def endElement(self, name):
        done = 0
        if name == 'GenerateModel':
            if len(self.stack) == 1:
                self.root = self.stack[-1].obj
                self.stack.pop()
                done = 1
        elif name == 'Module':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addModule(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'PythonExport':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addPythonexport(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Documentation':
            if len(self.stack) >= 2:
                self.stack[-2].obj.setDocumentation(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Methode':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addMethode(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Parameter':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addParameter(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Attribute':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addAttribute(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Sequence':
            if len(self.stack) >= 2:
                self.stack[-2].obj.setSequence(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'CustomAttributes':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
                self.stack[-2].obj.setCustomattributes(content)
                self.stack.pop()
                done = 1
        elif name == 'ClassDeclarations':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
                self.stack[-2].obj.setClassdeclarations(content)
                self.stack.pop()
                done = 1
        elif name == 'Dependencies':
            if len(self.stack) >= 2:
                self.stack[-2].obj.setDependencies(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Content':
            if len(self.stack) >= 2:
                self.stack[-2].obj.setContent(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Property':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addProperty(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'Feature':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addFeature(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'ViewProvider':
            if len(self.stack) >= 2:
                self.stack[-2].obj.setViewprovider(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'DocObject':
            if len(self.stack) >= 2:
                self.stack[-2].obj.addDocobject(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'GuiCommand':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
                self.stack[-2].obj.addGuicommand(content)
                self.stack.pop()
                done = 1
        elif name == 'PreferencesPage':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
                self.stack[-2].obj.addPreferencespage(content)
                self.stack.pop()
                done = 1
        elif name == 'Author':
            if len(self.stack) >= 2:
                self.stack[-2].obj.setAuthor(self.stack[-1].obj)
                self.stack.pop()
                done = 1
        elif name == 'DeveloperDocu':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
                self.stack[-2].obj.setDeveloperdocu(content)
                self.stack.pop()
                done = 1
        elif name == 'UserDocu':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
                self.stack[-2].obj.setUserdocu(content)
                self.stack.pop()
                done = 1
        if not done:
            self.reportError('"%s" element not allowed here.' % name)

    def characters(self, chrs, start, end):
        if len(self.stack) > 0:
            self.stack[-1].content += chrs[start:end]

    def reportError(self, mesg):
        locator = self.locator
        sys.stderr.write('Doc: %s  Line: %d  Column: %d\n' % \
            (locator.getSystemId(), locator.getLineNumber(), 
            locator.getColumnNumber() + 1))
        sys.stderr.write(mesg)
        sys.stderr.write('\n')
        sys.exit(-1)
        #raise RuntimeError

USAGE_TEXT = """
Usage: python <Parser>.py [ -s ] <in_xml_file>
Options:
    -s        Use the SAX parser, not the minidom parser.
"""

def usage():
    print USAGE_TEXT
    sys.exit(-1)


#
# SAX handler used to determine the top level element.
#
class SaxSelectorHandler(handler.ContentHandler):
    def __init__(self):
        self.topElementName = None
    def getTopElementName(self):
        return self.topElementName
    def startElement(self, name, attrs):
        self.topElementName = name
        raise StopIteration


def parseSelect(inFileName):
    infile = file(inFileName, 'r')
    topElementName = None
    parser = make_parser()
    documentHandler = SaxSelectorHandler()
    parser.setContentHandler(documentHandler)
    try:
        try:
            parser.parse(infile)
        except StopIteration:
            topElementName = documentHandler.getTopElementName()
        if topElementName is None:
            raise RuntimeError, 'no top level element'
        topElementName = topElementName.replace('-', '_').replace(':', '_')
        if topElementName not in globals():
            raise RuntimeError, 'no class for top element: %s' % topElementName
        topElement = globals()[topElementName]
        infile.seek(0)
        doc = minidom.parse(infile)
    finally:
        infile.close()
    rootNode = doc.childNodes[0]
    rootObj = topElement.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    doc = None
    sys.stdout.write('<?xml version="1.0" ?>\n')
    rootObj.export(sys.stdout, 0)
    return rootObj


def saxParse(inFileName):
    parser = make_parser()
    documentHandler = SaxGeneratemodelHandler()
    parser.setDocumentHandler(documentHandler)
    parser.parse('file:%s' % inFileName)
    root = documentHandler.getRoot()
    sys.stdout.write('<?xml version="1.0" ?>\n')
    root.export(sys.stdout, 0)
    return root


def saxParseString(inString):
    parser = make_parser()
    documentHandler = SaxGeneratemodelHandler()
    parser.setDocumentHandler(documentHandler)
    parser.feed(inString)
    parser.close()
    rootObj = documentHandler.getRoot()
    #sys.stdout.write('<?xml version="1.0" ?>\n')
    #rootObj.export(sys.stdout, 0)
    return rootObj


def parse(inFileName):
    doc = minidom.parse(inFileName)
    rootNode = doc.documentElement
    rootObj = GenerateModel.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    doc = None
    sys.stdout.write('<?xml version="1.0" ?>\n')
    rootObj.export(sys.stdout, 0, name_="GenerateModel")
    return rootObj


def parseString(inString):
    doc = minidom.parseString(inString)
    rootNode = doc.documentElement
    rootObj = GenerateModel.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    doc = None
    sys.stdout.write('<?xml version="1.0" ?>\n')
    rootObj.export(sys.stdout, 0, name_="GenerateModel")
    return rootObj


def parseLiteral(inFileName):
    doc = minidom.parse(inFileName)
    rootNode = doc.documentElement
    rootObj = GenerateModel.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    doc = None
    sys.stdout.write('from generateModel_Module import *\n\n')
    sys.stdout.write('rootObj = GenerateModel(\n')
    rootObj.exportLiteral(sys.stdout, 0, name_="GenerateModel")
    sys.stdout.write(')\n')
    return rootObj


def main():
    args = sys.argv[1:]
    if len(args) == 2 and args[0] == '-s':
        saxParse(args[1])
    elif len(args) == 1:
        parse(args[0])
    else:
        usage()


if __name__ == '__main__':
    main()
    #import pdb
    #pdb.run('main()')

