1#
2# Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
3#
4
5import sys
6import getopt
7from xml.dom import minidom
8from xml.dom import Node
9
10#
11# User methods
12#
13# Calls to the methods in these classes are generated by generateDS.py.
14# You can replace these methods by re-implementing the following class
15#   in a module named generatedssuper.py.
16
17try:
18    from generatedssuper import GeneratedsSuper
19except ImportError as exp:
20
21    class GeneratedsSuper:
22        def format_string(self, input_data, input_name=''):
23            return input_data
24        def format_integer(self, input_data, input_name=''):
25            return '%d' % input_data
26        def format_float(self, input_data, input_name=''):
27            return '%f' % input_data
28        def format_double(self, input_data, input_name=''):
29            return '%e' % input_data
30        def format_boolean(self, input_data, input_name=''):
31            return '%s' % input_data
32
33
34#
35# If you have installed IPython you can uncomment and use the following.
36# IPython is available from http://ipython.scipy.org/.
37#
38
39## from IPython.Shell import IPShellEmbed
40## args = ''
41## ipshell = IPShellEmbed(args,
42##     banner = 'Dropping into IPython',
43##     exit_msg = 'Leaving Interpreter, back to program.')
44
45# Then use the following line where and when you want to drop into the
46# IPython shell:
47#    ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')
48
49#
50# Globals
51#
52
53ExternalEncoding = 'ascii'
54
55#
56# Support/utility functions.
57#
58
59def showIndent(outfile, level):
60    for idx in range(level):
61        outfile.write('    ')
62
63def quote_xml(inStr):
64    s1 = (isinstance(inStr, basestring) and inStr or
65          '%s' % inStr)
66    s1 = s1.replace('&', '&amp;')
67    s1 = s1.replace('<', '&lt;')
68    s1 = s1.replace('>', '&gt;')
69    return s1
70
71def quote_attrib(inStr):
72    s1 = (isinstance(inStr, basestring) and inStr or
73          '%s' % inStr)
74    s1 = s1.replace('&', '&amp;')
75    s1 = s1.replace('<', '&lt;')
76    s1 = s1.replace('>', '&gt;')
77    if '"' in s1:
78        if "'" in s1:
79            s1 = '"%s"' % s1.replace('"', "&quot;")
80        else:
81            s1 = "'%s'" % s1
82    else:
83        s1 = '"%s"' % s1
84    return s1
85
86def quote_python(inStr):
87    s1 = inStr
88    if s1.find("'") == -1:
89        if s1.find('\n') == -1:
90            return "'%s'" % s1
91        else:
92            return "'''%s'''" % s1
93    else:
94        if s1.find('"') != -1:
95            s1 = s1.replace('"', '\\"')
96        if s1.find('\n') == -1:
97            return '"%s"' % s1
98        else:
99            return '"""%s"""' % s1
100
101
102class MixedContainer:
103    # Constants for category:
104    CategoryNone = 0
105    CategoryText = 1
106    CategorySimple = 2
107    CategoryComplex = 3
108    # Constants for content_type:
109    TypeNone = 0
110    TypeText = 1
111    TypeString = 2
112    TypeInteger = 3
113    TypeFloat = 4
114    TypeDecimal = 5
115    TypeDouble = 6
116    TypeBoolean = 7
117    def __init__(self, category, content_type, name, value):
118        self.category = category
119        self.content_type = content_type
120        self.name = name
121        self.value = value
122    def getCategory(self):
123        return self.category
124    def getContenttype(self, content_type):
125        return self.content_type
126    def getValue(self):
127        return self.value
128    def getName(self):
129        return self.name
130
131
132class _MemberSpec(object):
133    def __init__(self, name='', data_type='', container=0):
134        self.name = name
135        self.data_type = data_type
136        self.container = container
137    def set_name(self, name): self.name = name
138    def get_name(self): return self.name
139    def set_data_type(self, data_type): self.data_type = data_type
140    def get_data_type(self): return self.data_type
141    def set_container(self, container): self.container = container
142    def get_container(self): return self.container
143
144
145#
146# Data representation classes.
147#
148
149class DoxygenType(GeneratedsSuper):
150    subclass = None
151    superclass = None
152    def __init__(self, version=None, compound=None):
153        self.version = version
154        if compound is None:
155            self.compound = []
156        else:
157            self.compound = compound
158    def factory(*args_, **kwargs_):
159        if DoxygenType.subclass:
160            return DoxygenType.subclass(*args_, **kwargs_)
161        else:
162            return DoxygenType(*args_, **kwargs_)
163    factory = staticmethod(factory)
164    def get_compound(self): return self.compound
165    def set_compound(self, compound): self.compound = compound
166    def add_compound(self, value): self.compound.append(value)
167    def insert_compound(self, index, value): self.compound[index] = value
168    def get_version(self): return self.version
169    def set_version(self, version): self.version = version
170    def hasContent_(self):
171        if (
172            self.compound is not None
173            ):
174            return True
175        else:
176            return False
177    def build(self, node_):
178        attrs = node_.attributes
179        self.buildAttributes(attrs)
180        for child_ in node_.childNodes:
181            nodeName_ = child_.nodeName.split(':')[-1]
182            self.buildChildren(child_, nodeName_)
183    def buildAttributes(self, attrs):
184        if attrs.get('version'):
185            self.version = attrs.get('version').value
186    def buildChildren(self, child_, nodeName_):
187        if child_.nodeType == Node.ELEMENT_NODE and \
188            nodeName_ == 'compound':
189            obj_ = CompoundType.factory()
190            obj_.build(child_)
191            self.compound.append(obj_)
192# end class DoxygenType
193
194
195class CompoundType(GeneratedsSuper):
196    subclass = None
197    superclass = None
198    def __init__(self, kind=None, refid=None, name=None, member=None):
199        self.kind = kind
200        self.refid = refid
201        self.name = name
202        if member is None:
203            self.member = []
204        else:
205            self.member = member
206    def factory(*args_, **kwargs_):
207        if CompoundType.subclass:
208            return CompoundType.subclass(*args_, **kwargs_)
209        else:
210            return CompoundType(*args_, **kwargs_)
211    factory = staticmethod(factory)
212    def get_name(self): return self.name
213    def set_name(self, name): self.name = name
214    def get_member(self): return self.member
215    def set_member(self, member): self.member = member
216    def add_member(self, value): self.member.append(value)
217    def insert_member(self, index, value): self.member[index] = value
218    def get_kind(self): return self.kind
219    def set_kind(self, kind): self.kind = kind
220    def get_refid(self): return self.refid
221    def set_refid(self, refid): self.refid = refid
222    def build(self, node_):
223        attrs = node_.attributes
224        self.buildAttributes(attrs)
225        for child_ in node_.childNodes:
226            nodeName_ = child_.nodeName.split(':')[-1]
227            self.buildChildren(child_, nodeName_)
228    def buildAttributes(self, attrs):
229        if attrs.get('kind'):
230            self.kind = attrs.get('kind').value
231        if attrs.get('refid'):
232            self.refid = attrs.get('refid').value
233    def buildChildren(self, child_, nodeName_):
234        if child_.nodeType == Node.ELEMENT_NODE and \
235            nodeName_ == 'name':
236            name_ = ''
237            for text__content_ in child_.childNodes:
238                name_ += text__content_.nodeValue
239            self.name = name_
240        elif child_.nodeType == Node.ELEMENT_NODE and \
241            nodeName_ == 'member':
242            obj_ = MemberType.factory()
243            obj_.build(child_)
244            self.member.append(obj_)
245# end class CompoundType
246
247
248class MemberType(GeneratedsSuper):
249    subclass = None
250    superclass = None
251    def __init__(self, kind=None, refid=None, name=None):
252        self.kind = kind
253        self.refid = refid
254        self.name = name
255    def factory(*args_, **kwargs_):
256        if MemberType.subclass:
257            return MemberType.subclass(*args_, **kwargs_)
258        else:
259            return MemberType(*args_, **kwargs_)
260    factory = staticmethod(factory)
261    def get_name(self): return self.name
262    def set_name(self, name): self.name = name
263    def get_kind(self): return self.kind
264    def set_kind(self, kind): self.kind = kind
265    def get_refid(self): return self.refid
266    def set_refid(self, refid): self.refid = refid
267    def hasContent_(self):
268        if (
269            self.name is not None
270            ):
271            return True
272        else:
273            return False
274    def build(self, node_):
275        attrs = node_.attributes
276        self.buildAttributes(attrs)
277        for child_ in node_.childNodes:
278            nodeName_ = child_.nodeName.split(':')[-1]
279            self.buildChildren(child_, nodeName_)
280    def buildAttributes(self, attrs):
281        if attrs.get('kind'):
282            self.kind = attrs.get('kind').value
283        if attrs.get('refid'):
284            self.refid = attrs.get('refid').value
285    def buildChildren(self, child_, nodeName_):
286        if child_.nodeType == Node.ELEMENT_NODE and \
287            nodeName_ == 'name':
288            name_ = ''
289            for text__content_ in child_.childNodes:
290                name_ += text__content_.nodeValue
291            self.name = name_
292# end class MemberType
293
294
295USAGE_TEXT = """
296Usage: python <Parser>.py [ -s ] <in_xml_file>
297Options:
298    -s        Use the SAX parser, not the minidom parser.
299"""
300
301def usage():
302    print(USAGE_TEXT)
303    sys.exit(1)
304
305
306def parse(inFileName):
307    doc = minidom.parse(inFileName)
308    rootNode = doc.documentElement
309    rootObj = DoxygenType.factory()
310    rootObj.build(rootNode)
311    # Enable Python to collect the space used by the DOM.
312    doc = None
313    sys.stdout.write('<?xml version="1.0" ?>\n')
314    rootObj.export(sys.stdout, 0, name_="doxygenindex",
315        namespacedef_='')
316    return rootObj
317
318
319def parseString(inString):
320    doc = minidom.parseString(inString)
321    rootNode = doc.documentElement
322    rootObj = DoxygenType.factory()
323    rootObj.build(rootNode)
324    # Enable Python to collect the space used by the DOM.
325    doc = None
326    sys.stdout.write('<?xml version="1.0" ?>\n')
327    rootObj.export(sys.stdout, 0, name_="doxygenindex",
328        namespacedef_='')
329    return rootObj
330
331
332def parseLiteral(inFileName):
333    doc = minidom.parse(inFileName)
334    rootNode = doc.documentElement
335    rootObj = DoxygenType.factory()
336    rootObj.build(rootNode)
337    # Enable Python to collect the space used by the DOM.
338    doc = None
339    sys.stdout.write('from index import *\n\n')
340    sys.stdout.write('rootObj = doxygenindex(\n')
341    rootObj.exportLiteral(sys.stdout, 0, name_="doxygenindex")
342    sys.stdout.write(')\n')
343    return rootObj
344
345
346def main():
347    args = sys.argv[1:]
348    if len(args) == 1:
349        parse(args[0])
350    else:
351        usage()
352
353
354
355
356if __name__ == '__main__':
357    main()
358    #import pdb
359    #pdb.run('main()')
360