#!/usr/bin/env python # # $Id: parsers_python.py,v 1.2 2003/03/16 23:45:40 doughellmann Exp $ # # Copyright 2003 Doug Hellmann. # # # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and # its documentation for any purpose and without fee is hereby # granted, provided that the above copyright notice appear in all # copies and that both that copyright notice and this permission # notice appear in supporting documentation, and that the name of Doug # Hellmann not be used in advertising or publicity pertaining to # distribution of the software without specific, written prior # permission. # # DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN # NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS # OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # """Python source file parser. """ __rcs_info__ = { # # Creation Information # 'module_name' : '$RCSfile: parsers_python.py,v $', 'rcs_id' : '$Id: parsers_python.py,v 1.2 2003/03/16 23:45:40 doughellmann Exp $', 'creator' : 'Doug Hellmann ', 'project' : 'HappyDoc', 'created' : 'Sat, 18-Jan-2003 12:07:52 EST', # # Current Information # 'author' : '$Author: doughellmann $', 'version' : '$Revision: 1.2 $', 'date' : '$Date: 2003/03/16 23:45:40 $', } try: __version__ = __rcs_info__['version'].split(' ')[1] except: __version__ = '0.0' # # Import system modules # # # Import Local modules # from base import ParserBase import happydoclib from happydoclib.packagetree import PackageTree, ClassTree, FunctionTree from happydoclib.status import statusMessage from happydoclib.trace import trace # # Module # TRACE_LEVEL = 2 class PythonModule(PackageTree): def __init__(self, parent, name): trace.into('PythonModule', '__init__', outputLevel=TRACE_LEVEL) PackageTree.__init__(self, parent, name) # # Derive the filename for this module. # statusMessage('Parsing: %s' % name) # # Figure out if there is a parent node for the # documentation suite. # if parent and hasattr(parent, 'module_info'): docs_parent = parent.module_info else: docs_parent = None trace.writeVar(docs_parent=docs_parent, outputLevel=TRACE_LEVEL) docs = happydoclib.parseinfo.getDocs( parent=docs_parent, fileName=name, ) self.module_info = docs # # Add classes to the tree # for class_name in self.module_info.getClassNames(): class_tree = ClassTree(self, class_name) # # Add functions to the tree # for function_name in self.module_info.getFunctionNames(): function_tree = FunctionTree(self, function_name) trace.outof(outputLevel=TRACE_LEVEL) return def _unquoteString(self, str): "Remove surrounding quotes from a string." str = str.strip() while ( str and (str[0] == str[-1]) and str[0] in ('"', "'") ): str = str[1:-1] return str def getDocStringAndFormat(self): """Returns a tuple containing the actual documentation string and the format of that docstring as understood by the docstring converters plugins. """ docstring = self.module_info.getDocString() docstring = self._unquoteString(docstring) format = self.module_info.getDocStringFormat() return (docstring, format) def getSummaryAndFormat(self): """Returns a tuple containing a one line summary of the documentation for the node and the format of that string as understood by the docstring converter plugins. """ return self.module_info.getSummaryAndFormat() def getImportData(self): return self.module_info.getImportData() class PythonModuleParser(ParserBase): def __call__(self, parent, name): return PythonModule(parent, name) def entryPoint(): return { 'mimetype':'text/x-python', 'factory':PythonModuleParser, }