#!/usr/bin/env python # create a DocBook XML document documenting the standard library from xml.sax.saxutils import escape, quoteattr import fsymbol import fracttypes import sys def strOfType(t): return fracttypes.strOfType(t).capitalize() class SymbolPrinter: def __init__(self,f): self.f = f self.funcs = {} self.operators = {} self.vars = {} def add_symbol(self,key,val): if key.startswith("@_"): # skip internal symbols return if isinstance(val,fracttypes.Var): self.vars[key] = val elif isinstance(val,fsymbol.OverloadList): if val.is_operator(): self.operators[key] = val else: self.funcs[key] = val def output_entry(self,nrows=1): print >>self.f, \ '' % (nrows-1) def output_refentry_header(self,key,val,type,nrows=1): print >>self.f, '' self.output_entry(nrows) print >>self.f, '%s' % escape(key) def output_overload(self,func): self.output_entry() print >>self.f, ", ".join(map(strOfType,func.args)) print >>self.f, '' self.output_entry() print >>self.f, '%s' % strOfType(func.ret) def output_function(self,val): nrows = len(val) self.output_overload(val[0]) for func in val[1:]: print >>self.f, '' print >>self.f, '' self.output_overload(func) def output_refentry_footer(self): print >>self.f, ' ' print >>self.f, '' def output_refentry_body(self,val,nrows=1): self.output_entry(nrows) text = val.__doc__ or "No documentation yet." print >>self.f, escape(text) print >>self.f, '' def output_symbol(self,key,val,type): if isinstance(val,fsymbol.OverloadList): nrows = len(val) self.output_refentry_header(key,val,type,nrows) self.output_refentry_body(val,nrows) self.output_function(val) else: self.output_refentry_header(key,val,type) self.output_refentry_body(val) print >>self.f, '%s' % strOfType(val.type) self.output_refentry_footer() def output_all(self): self.output_table(self.operators, "Operators", "operator") self.output_table(self.funcs,"Functions", "function") self.output_table(self.vars, "Symbols", "(symbol)") def output_table(self,table,name,type): print >>self.f, '' % name print >>self.f, '%s' % name print >>self.f, '' print >>self.f, '' print >>self.f, ''' Name Description Argument Types Return Type ''' print >>self.f, '' keys = table.keys() keys.sort() for k in keys: self.output_symbol(k,table[k],type) print >>self.f, '' print >>self.f, '' print >>self.f, '' print >>self.f, '' def main(outfile): out = open(outfile,"w") d = fsymbol.T() printer = SymbolPrinter(out) for k in d.default_dict.keys(): printer.add_symbol(d.demangle(k),d[k]) printer.output_all() if __name__ == '__main__': main(sys.argv[1])