From cc3fd0813acc35035133ced59aba88b1f2ccab42 Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Sat, 2 Aug 2008 15:10:04 +0000 Subject: More refactoring. Avoid duplication, add xml string templates svn path=/trunk/; revision=917 --- codegen/docgen.py | 129 ++++++++++++++++++++++++++---------------------------- 1 file changed, 62 insertions(+), 67 deletions(-) (limited to 'codegen/docgen.py') diff --git a/codegen/docgen.py b/codegen/docgen.py index e72a9a0..3c3982a 100644 --- a/codegen/docgen.py +++ b/codegen/docgen.py @@ -100,18 +100,11 @@ class DocWriter: if overrides_file: self.overrides.handle_file(overrides_file) - for obj in self.parser.objects: - if not self.classmap.has_key(obj.c_name): - self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) - for obj in self.parser.interfaces: - if not self.classmap.has_key(obj.c_name): - self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) - for obj in self.parser.boxes: - if not self.classmap.has_key(obj.c_name): - self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) - for obj in self.parser.pointers: - if not self.classmap.has_key(obj.c_name): - self.classmap[obj.c_name] = '%s.%s' % (module_name, obj.name) + for obj in (self.parser.objects + self.parser.interfaces + + self.parser.boxes + self.parser.pointers): + if not obj.c_name in self.classmap: + self.classmap[obj.c_name] = '%s.%s' % ( + module_name, obj.name) def pyname(self, name): return self.classmap.get(name, name) @@ -340,17 +333,8 @@ class DocWriter: prototype = self.create_constructor_prototype(func_def) self._fp.write(prototype + '\n\n') for type, name, dflt, null in func_def.params: - if func_doc: - descr = func_doc.get_param_description(name) - else: - descr = 'a ' + type - self._fp.write(' ' + name + ': ' + descr + '\n') - if func_def.ret and func_def.ret != 'none': - if func_doc and func_doc.ret: - descr = func_doc.ret - else: - descr = 'a ' + func_def.ret - self._fp.write(' Returns: ' + descr + '\n') + self.write_parameter(name, func_doc) + self.write_return_value(func_def, func_doc) if func_doc and func_doc.description: self._fp.write(func_doc.description) self._fp.write('\n\n\n') @@ -359,22 +343,50 @@ class DocWriter: prototype = self.create_method_prototype(meth_def) self._fp.write(prototype + '\n\n') for type, name, dflt, null in meth_def.params: - if func_doc: - descr = func_doc.get_param_description(name) - else: - descr = 'a ' + type - self._fp.write(' ' + name + ': ' + descr + '\n') + self.write_parameter(name, func_doc) + self.write_return_value(meth_def, func_doc) + if func_doc and func_doc.description: + self._fp.write('\n') + self._fp.write(func_doc.description) + self._fp.write('\n\n') + + def write_parameter(self, param_name, func_doc): + if func_doc: + descr = func_doc.get_param_description(param_name) + else: + descr = 'a ' + type + self._fp.write(' ' + param_name + ': ' + descr + '\n') + + def write_return_value(self, meth_def, func_doc): if meth_def.ret and meth_def.ret != 'none': if func_doc and func_doc.ret: descr = func_doc.ret else: descr = 'a ' + meth_def.ret self._fp.write(' Returns: ' + descr + '\n') - if func_doc and func_doc.description: - self._fp.write('\n') - self._fp.write(func_doc.description) - self._fp.write('\n\n') +CLASS_HEADER_TEMPLATE = """ + + %(name)s + 3 + %(miscinfo)s + + + + %(name)s + + +""" +VARIABLE_TEMPLATE = """ + %(parameter)s : + %(description)s + +""" + +DOCBOOK_HEADER = """ + +""" class DocbookDocWriter(DocWriter): @@ -505,9 +517,7 @@ class DocbookDocWriter(DocWriter): for child in node.subclasses: handle_node(child, indent) - self._fp.write('\n') - self._fp.write('\n') + self._fp.write(DOCBOOK_HEADER) self._fp.write('') handle_node(hierarchy) self._fp.write('\n') @@ -573,20 +583,11 @@ class DocbookDocWriter(DocWriter): return string.join(xml, '') def write_class_header(self, obj_name): - self._fp.write('\n') - self._fp.write('\n') - self._fp.write('\n') - self._fp.write(' \n') - self._fp.write(' %s\n' - % self.pyname(obj_name)) - self._fp.write(' 3\n') - self._fp.write(' PyGTK Docs\n') - self._fp.write(' \n\n') - self._fp.write(' \n') - self._fp.write(' %s\n' - % self.pyname(obj_name)) - self._fp.write(' \n\n') + self._fp.write(DOCBOOK_HEADER) + self._fp.write(CLASS_HEADER_TEMPLATE % dict( + entryid=self.make_class_ref(obj_name), + name=self.pyname(obj_name), + miscinfo="PyGTK Docs")) def write_class_footer(self, obj_name): self._fp.write('\n') @@ -625,11 +626,11 @@ class DocbookDocWriter(DocWriter): constructor = self.parser.find_constructor(obj_def, self.overrides) if constructor: self._fp.write('%s\n' % self.create_constructor_prototype(constructor)) - methods = self.parser.find_methods(obj_def) - methods = filter(lambda meth, self=self: - not self.overrides.is_ignored(meth.c_name), methods) - for meth in methods: - self._fp.write('%s\n' % self.create_method_prototype(meth, addlink=1)) + for method in self.parser.find_methods(obj_def): + if self.overrides.is_ignored(method.c_name): + continue + self._fp.write('%s\n' % self.create_method_prototype( + method, addlink=1)) self._fp.write('\n\n') def write_hierarchy(self, obj_name, ancestry): @@ -661,21 +662,17 @@ class DocbookDocWriter(DocWriter): descr = string.strip(func_doc.get_param_description(name)) else: descr = 'a ' + type - self._fp.write(' \n') - self._fp.write(' %s :\n' % name) - self._fp.write(' %s\n' % - self.reformat_text(descr, singleline=1)) - self._fp.write(' \n') + self._fp.write(VARIABLE_TEMPLATE % dict( + parameter=name, + description=self.reformat_text(descr, singleline=1))) if ret and ret != 'none': if func_doc and func_doc.ret: descr = string.strip(func_doc.ret) else: descr = 'a ' + ret - self._fp.write(' \n') - self._fp.write(' Returns :\n') - self._fp.write(' %s\n' % - self.reformat_text(descr, singleline=1)) - self._fp.write(' \n') + self._fp.write(VARIABLE_TEMPLATE % dict( + parameter='Returns', + description=self.reformat_text(descr, singleline=1))) self._fp.write(' \n') def write_constructor(self, func_def, func_doc): @@ -699,9 +696,7 @@ class DocbookDocWriter(DocWriter): self._fp.write(' \n\n\n') def output_toc(self, files, fp=sys.stdout): - self._fp.write('\n') - self._fp.write('\n') + self._fp.write(DOCBOOK_HEADER) #self._fp.write('\n') #self._fp.write(' Class Documentation\n') -- cgit