| #!/usr/bin/env python |
| |
| # |
| # Generated Thu Jun 11 18:43:54 2009 by generateDS.py. |
| # |
| |
| import sys |
| import getopt |
| from string import lower as str_lower |
| from xml.dom import minidom |
| from xml.dom import Node |
| |
| # |
| # User methods |
| # |
| # Calls to the methods in these classes are generated by generateDS.py. |
| # You can replace these methods by re-implementing the following class |
| # in a module named generatedssuper.py. |
| |
| try: |
| from generatedssuper import GeneratedsSuper |
| except ImportError, exp: |
| |
| class GeneratedsSuper: |
| def format_string(self, input_data, input_name=''): |
| return input_data |
| def format_integer(self, input_data, input_name=''): |
| return '%d' % input_data |
| def format_float(self, input_data, input_name=''): |
| return '%f' % input_data |
| def format_double(self, input_data, input_name=''): |
| return '%e' % input_data |
| def format_boolean(self, input_data, input_name=''): |
| return '%s' % input_data |
| |
| |
| # |
| # 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') |
| |
| # |
| # Globals |
| # |
| |
| ExternalEncoding = 'ascii' |
| |
| # |
| # Support/utility functions. |
| # |
| |
| def showIndent(outfile, level): |
| for idx in range(level): |
| outfile.write(' ') |
| |
| def quote_xml(inStr): |
| s1 = (isinstance(inStr, basestring) and inStr or |
| '%s' % inStr) |
| s1 = s1.replace('&', '&') |
| s1 = s1.replace('<', '<') |
| s1 = s1.replace('>', '>') |
| return s1 |
| |
| def quote_attrib(inStr): |
| s1 = (isinstance(inStr, basestring) and inStr or |
| '%s' % inStr) |
| s1 = s1.replace('&', '&') |
| s1 = s1.replace('<', '<') |
| s1 = s1.replace('>', '>') |
| if '"' in s1: |
| if "'" in s1: |
| s1 = '"%s"' % s1.replace('"', """) |
| else: |
| s1 = "'%s'" % s1 |
| else: |
| s1 = '"%s"' % s1 |
| 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, namespace): |
| 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, namespace,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') |
| |
| |
| class _MemberSpec(object): |
| def __init__(self, name='', data_type='', container=0): |
| self.name = name |
| self.data_type = data_type |
| self.container = container |
| def set_name(self, name): self.name = name |
| def get_name(self): return self.name |
| def set_data_type(self, data_type): self.data_type = data_type |
| def get_data_type(self): return self.data_type |
| def set_container(self, container): self.container = container |
| def get_container(self): return self.container |
| |
| |
| # |
| # Data representation classes. |
| # |
| |
| class DoxygenType(GeneratedsSuper): |
| subclass = None |
| superclass = None |
| def __init__(self, version=None, compound=None): |
| self.version = version |
| if compound is None: |
| self.compound = [] |
| else: |
| self.compound = compound |
| def factory(*args_, **kwargs_): |
| if DoxygenType.subclass: |
| return DoxygenType.subclass(*args_, **kwargs_) |
| else: |
| return DoxygenType(*args_, **kwargs_) |
| factory = staticmethod(factory) |
| def get_compound(self): return self.compound |
| def set_compound(self, compound): self.compound = compound |
| def add_compound(self, value): self.compound.append(value) |
| def insert_compound(self, index, value): self.compound[index] = value |
| def get_version(self): return self.version |
| def set_version(self, version): self.version = version |
| def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): |
| showIndent(outfile, level) |
| outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) |
| self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') |
| if self.hasContent_(): |
| outfile.write('>\n') |
| self.exportChildren(outfile, level + 1, namespace_, name_) |
| showIndent(outfile, level) |
| outfile.write('</%s%s>\n' % (namespace_, name_)) |
| else: |
| outfile.write(' />\n') |
| def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): |
| outfile.write(' version=%s' % (self.format_string(quote_attrib(self.version).encode(ExternalEncoding), input_name='version'), )) |
| def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): |
| for compound_ in self.compound: |
| compound_.export(outfile, level, namespace_, name_='compound') |
| def hasContent_(self): |
| if ( |
| self.compound is not None |
| ): |
| return True |
| else: |
| return False |
| def exportLiteral(self, outfile, level, name_='DoxygenType'): |
| level += 1 |
| self.exportLiteralAttributes(outfile, level, name_) |
| if self.hasContent_(): |
| self.exportLiteralChildren(outfile, level, name_) |
| def exportLiteralAttributes(self, outfile, level, name_): |
| if self.version is not None: |
| showIndent(outfile, level) |
| outfile.write('version = %s,\n' % (self.version,)) |
| def exportLiteralChildren(self, outfile, level, name_): |
| showIndent(outfile, level) |
| outfile.write('compound=[\n') |
| level += 1 |
| for compound in self.compound: |
| showIndent(outfile, level) |
| outfile.write('model_.compound(\n') |
| compound.exportLiteral(outfile, level, name_='compound') |
| 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('version'): |
| self.version = attrs.get('version').value |
| def buildChildren(self, child_, nodeName_): |
| if child_.nodeType == Node.ELEMENT_NODE and \ |
| nodeName_ == 'compound': |
| obj_ = CompoundType.factory() |
| obj_.build(child_) |
| self.compound.append(obj_) |
| # end class DoxygenType |
| |
| |
| class CompoundType(GeneratedsSuper): |
| subclass = None |
| superclass = None |
| def __init__(self, kind=None, refid=None, name=None, member=None): |
| self.kind = kind |
| self.refid = refid |
| self.name = name |
| if member is None: |
| self.member = [] |
| else: |
| self.member = member |
| def factory(*args_, **kwargs_): |
| if CompoundType.subclass: |
| return CompoundType.subclass(*args_, **kwargs_) |
| else: |
| return CompoundType(*args_, **kwargs_) |
| factory = staticmethod(factory) |
| def get_name(self): return self.name |
| def set_name(self, name): self.name = name |
| def get_member(self): return self.member |
| def set_member(self, member): self.member = member |
| def add_member(self, value): self.member.append(value) |
| def insert_member(self, index, value): self.member[index] = value |
| def get_kind(self): return self.kind |
| def set_kind(self, kind): self.kind = kind |
| def get_refid(self): return self.refid |
| def set_refid(self, refid): self.refid = refid |
| def export(self, outfile, level, namespace_='', name_='CompoundType', namespacedef_=''): |
| showIndent(outfile, level) |
| outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) |
| self.exportAttributes(outfile, level, namespace_, name_='CompoundType') |
| if self.hasContent_(): |
| outfile.write('>\n') |
| self.exportChildren(outfile, level + 1, namespace_, name_) |
| showIndent(outfile, level) |
| outfile.write('</%s%s>\n' % (namespace_, name_)) |
| else: |
| outfile.write(' />\n') |
| def exportAttributes(self, outfile, level, namespace_='', name_='CompoundType'): |
| outfile.write(' kind=%s' % (quote_attrib(self.kind), )) |
| outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) |
| def exportChildren(self, outfile, level, namespace_='', name_='CompoundType'): |
| if self.name is not None: |
| showIndent(outfile, level) |
| outfile.write('<%sname>%s</%sname>\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) |
| for member_ in self.member: |
| member_.export(outfile, level, namespace_, name_='member') |
| def hasContent_(self): |
| if ( |
| self.name is not None or |
| self.member is not None |
| ): |
| return True |
| else: |
| return False |
| def exportLiteral(self, outfile, level, name_='CompoundType'): |
| level += 1 |
| self.exportLiteralAttributes(outfile, level, name_) |
| if self.hasContent_(): |
| self.exportLiteralChildren(outfile, level, name_) |
| def exportLiteralAttributes(self, outfile, level, name_): |
| if self.kind is not None: |
| showIndent(outfile, level) |
| outfile.write('kind = "%s",\n' % (self.kind,)) |
| if self.refid is not None: |
| showIndent(outfile, level) |
| outfile.write('refid = %s,\n' % (self.refid,)) |
| def exportLiteralChildren(self, outfile, level, name_): |
| showIndent(outfile, level) |
| outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) |
| showIndent(outfile, level) |
| outfile.write('member=[\n') |
| level += 1 |
| for member in self.member: |
| showIndent(outfile, level) |
| outfile.write('model_.member(\n') |
| member.exportLiteral(outfile, level, name_='member') |
| 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('kind'): |
| self.kind = attrs.get('kind').value |
| if attrs.get('refid'): |
| self.refid = attrs.get('refid').value |
| def buildChildren(self, child_, nodeName_): |
| if child_.nodeType == Node.ELEMENT_NODE and \ |
| nodeName_ == 'name': |
| name_ = '' |
| for text__content_ in child_.childNodes: |
| name_ += text__content_.nodeValue |
| self.name = name_ |
| elif child_.nodeType == Node.ELEMENT_NODE and \ |
| nodeName_ == 'member': |
| obj_ = MemberType.factory() |
| obj_.build(child_) |
| self.member.append(obj_) |
| # end class CompoundType |
| |
| |
| class MemberType(GeneratedsSuper): |
| subclass = None |
| superclass = None |
| def __init__(self, kind=None, refid=None, name=None): |
| self.kind = kind |
| self.refid = refid |
| self.name = name |
| def factory(*args_, **kwargs_): |
| if MemberType.subclass: |
| return MemberType.subclass(*args_, **kwargs_) |
| else: |
| return MemberType(*args_, **kwargs_) |
| factory = staticmethod(factory) |
| def get_name(self): return self.name |
| def set_name(self, name): self.name = name |
| def get_kind(self): return self.kind |
| def set_kind(self, kind): self.kind = kind |
| def get_refid(self): return self.refid |
| def set_refid(self, refid): self.refid = refid |
| def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef_=''): |
| showIndent(outfile, level) |
| outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) |
| self.exportAttributes(outfile, level, namespace_, name_='MemberType') |
| if self.hasContent_(): |
| outfile.write('>\n') |
| self.exportChildren(outfile, level + 1, namespace_, name_) |
| showIndent(outfile, level) |
| outfile.write('</%s%s>\n' % (namespace_, name_)) |
| else: |
| outfile.write(' />\n') |
| def exportAttributes(self, outfile, level, namespace_='', name_='MemberType'): |
| outfile.write(' kind=%s' % (quote_attrib(self.kind), )) |
| outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) |
| def exportChildren(self, outfile, level, namespace_='', name_='MemberType'): |
| if self.name is not None: |
| showIndent(outfile, level) |
| outfile.write('<%sname>%s</%sname>\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) |
| def hasContent_(self): |
| if ( |
| self.name is not None |
| ): |
| return True |
| else: |
| return False |
| def exportLiteral(self, outfile, level, name_='MemberType'): |
| level += 1 |
| self.exportLiteralAttributes(outfile, level, name_) |
| if self.hasContent_(): |
| self.exportLiteralChildren(outfile, level, name_) |
| def exportLiteralAttributes(self, outfile, level, name_): |
| if self.kind is not None: |
| showIndent(outfile, level) |
| outfile.write('kind = "%s",\n' % (self.kind,)) |
| if self.refid is not None: |
| showIndent(outfile, level) |
| outfile.write('refid = %s,\n' % (self.refid,)) |
| def exportLiteralChildren(self, outfile, level, name_): |
| showIndent(outfile, level) |
| outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) |
| 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('kind'): |
| self.kind = attrs.get('kind').value |
| if attrs.get('refid'): |
| self.refid = attrs.get('refid').value |
| def buildChildren(self, child_, nodeName_): |
| if child_.nodeType == Node.ELEMENT_NODE and \ |
| nodeName_ == 'name': |
| name_ = '' |
| for text__content_ in child_.childNodes: |
| name_ += text__content_.nodeValue |
| self.name = name_ |
| # end class MemberType |
| |
| |
| 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) |
| |
| |
| def parse(inFileName): |
| doc = minidom.parse(inFileName) |
| rootNode = doc.documentElement |
| rootObj = DoxygenType.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_="doxygenindex", |
| namespacedef_='') |
| return rootObj |
| |
| |
| def parseString(inString): |
| doc = minidom.parseString(inString) |
| rootNode = doc.documentElement |
| rootObj = DoxygenType.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_="doxygenindex", |
| namespacedef_='') |
| return rootObj |
| |
| |
| def parseLiteral(inFileName): |
| doc = minidom.parse(inFileName) |
| rootNode = doc.documentElement |
| rootObj = DoxygenType.factory() |
| rootObj.build(rootNode) |
| # Enable Python to collect the space used by the DOM. |
| doc = None |
| sys.stdout.write('from index import *\n\n') |
| sys.stdout.write('rootObj = doxygenindex(\n') |
| rootObj.exportLiteral(sys.stdout, 0, name_="doxygenindex") |
| sys.stdout.write(')\n') |
| return rootObj |
| |
| |
| def main(): |
| args = sys.argv[1:] |
| if len(args) == 1: |
| parse(args[0]) |
| else: |
| usage() |
| |
| |
| |
| |
| if __name__ == '__main__': |
| main() |
| #import pdb |
| #pdb.run('main()') |
| |