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('&', '&') 67 s1 = s1.replace('<', '<') 68 s1 = s1.replace('>', '>') 69 return s1 70 71def quote_attrib(inStr): 72 s1 = (isinstance(inStr, basestring) and inStr or 73 '%s' % inStr) 74 s1 = s1.replace('&', '&') 75 s1 = s1.replace('<', '<') 76 s1 = s1.replace('>', '>') 77 if '"' in s1: 78 if "'" in s1: 79 s1 = '"%s"' % s1.replace('"', """) 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