[pygccxml-commit] SF.net SVN: pygccxml: [424] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-08-20 14:17:02
|
Revision: 424 Author: roman_yakovenko Date: 2006-08-20 07:16:39 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=424&view=rev Log Message: ----------- adding documentation strings Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/container_traits.py pygccxml_dev/pygccxml/declarations/decl_printer.py pygccxml_dev/pygccxml/declarations/matcher.py pygccxml_dev/pygccxml/declarations/matchers.py pygccxml_dev/pygccxml/declarations/typedef.py pygccxml_dev/pygccxml/declarations/variable.py pygccxml_dev/setup.py pyplusplus_dev/setup.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2006-08-20 14:16:39 UTC (rev 424) @@ -54,7 +54,7 @@ from cpptypes import member_variable_type_t from cpptypes import declarated_t from cpptypes import type_qualifiers_t -#java types +#java types from cpptypes import java_fundamental_t from cpptypes import jbyte_t from cpptypes import jshort_t @@ -160,7 +160,7 @@ from type_traits import smart_pointer_traits -from container_traits import list_traits +from container_traits import list_traits from container_traits import deque_traits from container_traits import queue_traits from container_traits import priority_queue @@ -175,8 +175,9 @@ from container_traits import multiset_traits from container_traits import hash_multiset_traits -all_container_traits = [ - list_traits +all_container_traits = \ +[ + list_traits , deque_traits , queue_traits , priority_queue @@ -189,8 +190,9 @@ , set_traits , hash_set_traits , multiset_traits - , hash_multiset_traits + , hash_multiset_traits ] +"""list, that contains all STD container traits classes""" import templates import call_invocation @@ -220,10 +222,10 @@ from decl_printer import print_declarations -#implementation details: I need this trick in order to prevent recursive imports import scopedef -scopedef.scopedef_t._impl_all_decl_types = [ +scopedef.scopedef_t._impl_all_decl_types = \ +[ scopedef.scopedef_t , enumeration_t , namespace_t @@ -241,53 +243,53 @@ , member_operator_t , casting_operator_t , free_function_t - , free_operator_t + , free_operator_t ] -impl_matchers = scopedef.scopedef_t._impl_matchers -impl_decl_types = scopedef.scopedef_t._impl_decl_types +__impl_matchers = scopedef.scopedef_t._impl_matchers +__impl_decl_types = scopedef.scopedef_t._impl_decl_types -impl_matchers[ scopedef.scopedef_t.decl ] = declaration_matcher_t +__impl_matchers[ scopedef.scopedef_t.decl ] = declaration_matcher_t -impl_matchers[ scopedef.scopedef_t.class_ ] = declaration_matcher_t -impl_decl_types[ scopedef.scopedef_t.class_ ] = class_t +__impl_matchers[ scopedef.scopedef_t.class_ ] = declaration_matcher_t +__impl_decl_types[ scopedef.scopedef_t.class_ ] = class_t -impl_matchers[ scopedef.scopedef_t.variable ] = variable_matcher_t +__impl_matchers[ scopedef.scopedef_t.variable ] = variable_matcher_t -impl_matchers[ scopedef.scopedef_t.calldef ] = calldef_matcher_t -impl_decl_types[ scopedef.scopedef_t.calldef ] = calldef_t +__impl_matchers[ scopedef.scopedef_t.calldef ] = calldef_matcher_t +__impl_decl_types[ scopedef.scopedef_t.calldef ] = calldef_t -impl_matchers[ scopedef.scopedef_t.operator ] = operator_matcher_t -impl_decl_types[ scopedef.scopedef_t.operator ] = operator_t +__impl_matchers[ scopedef.scopedef_t.operator ] = operator_matcher_t +__impl_decl_types[ scopedef.scopedef_t.operator ] = operator_t -impl_matchers[ scopedef.scopedef_t.member_function ] = calldef_matcher_t -impl_decl_types[ scopedef.scopedef_t.member_function ] = member_function_t +__impl_matchers[ scopedef.scopedef_t.member_function ] = calldef_matcher_t +__impl_decl_types[ scopedef.scopedef_t.member_function ] = member_function_t -impl_matchers[ scopedef.scopedef_t.constructor ] = calldef_matcher_t -impl_decl_types[ scopedef.scopedef_t.constructor ] = constructor_t +__impl_matchers[ scopedef.scopedef_t.constructor ] = calldef_matcher_t +__impl_decl_types[ scopedef.scopedef_t.constructor ] = constructor_t -impl_matchers[ scopedef.scopedef_t.member_operator ] = operator_matcher_t -impl_decl_types[ scopedef.scopedef_t.member_operator ] = member_operator_t +__impl_matchers[ scopedef.scopedef_t.member_operator ] = operator_matcher_t +__impl_decl_types[ scopedef.scopedef_t.member_operator ] = member_operator_t -impl_matchers[ scopedef.scopedef_t.member_operator ] = operator_matcher_t -impl_decl_types[ scopedef.scopedef_t.member_operator ] = member_operator_t +__impl_matchers[ scopedef.scopedef_t.member_operator ] = operator_matcher_t +__impl_decl_types[ scopedef.scopedef_t.member_operator ] = member_operator_t -impl_matchers[ scopedef.scopedef_t.casting_operator ] = calldef_matcher_t -impl_decl_types[ scopedef.scopedef_t.casting_operator ] = casting_operator_t +__impl_matchers[ scopedef.scopedef_t.casting_operator ] = calldef_matcher_t +__impl_decl_types[ scopedef.scopedef_t.casting_operator ] = casting_operator_t -impl_matchers[ scopedef.scopedef_t.enumeration ] = declaration_matcher_t -impl_decl_types[ scopedef.scopedef_t.enumeration ] = enumeration_t +__impl_matchers[ scopedef.scopedef_t.enumeration ] = declaration_matcher_t +__impl_decl_types[ scopedef.scopedef_t.enumeration ] = enumeration_t -impl_matchers[ scopedef.scopedef_t.typedef ] = declaration_matcher_t -impl_decl_types[ scopedef.scopedef_t.typedef ] = typedef_t +__impl_matchers[ scopedef.scopedef_t.typedef ] = declaration_matcher_t +__impl_decl_types[ scopedef.scopedef_t.typedef ] = typedef_t -impl_matchers[ namespace_t.namespace ] = namespace_matcher_t +__impl_matchers[ namespace_t.namespace ] = namespace_matcher_t -impl_matchers[ namespace_t.free_function ] = calldef_matcher_t -impl_decl_types[ namespace_t.free_function ] = free_function_t +__impl_matchers[ namespace_t.free_function ] = calldef_matcher_t +__impl_decl_types[ namespace_t.free_function ] = free_function_t -impl_matchers[ namespace_t.free_operator ] = operator_matcher_t -impl_decl_types[ namespace_t.free_operator ] = free_operator_t +__impl_matchers[ namespace_t.free_operator ] = operator_matcher_t +__impl_decl_types[ namespace_t.free_operator ] = free_operator_t Modified: pygccxml_dev/pygccxml/declarations/container_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/container_traits.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/container_traits.py 2006-08-20 14:16:39 UTC (rev 424) @@ -9,23 +9,40 @@ import calldef import cpptypes -import namespace +import namespace import templates import class_declaration import type_traits - + class container_traits_impl_t: + """this class implements the functionality needed for convinient work with + STD container classes. + + Implemented functionality: + - find out whether a declaration is STD container or not + - find out container value( mapped ) type + + This class tries to be useful as much, as possible. For example, for class + declaration( and not definition ) it parsers the class name in order to + extract all the information. + """ def __init__( self, container_name, element_type_index, element_type_typedef ): + """ + container_name - std container name + element_type_index - position of value\\mapped type within template + arguments list + element_type_typedef - class typedef to the value\\mapped type + """ self.name = container_name self.element_type_index = element_type_index - self.element_type_typedef = element_type_typedef + self.element_type_typedef = element_type_typedef def get_container_or_none( self, type ): """returns reference to the class declaration or None""" type = type_traits.remove_alias( type ) type = type_traits.remove_cv( type ) - - cls = None + + cls = None if isinstance( type, cpptypes.declarated_t ): cls = type_traits.remove_alias( type.declaration ) elif isinstance( type, class_declaration.class_t ): @@ -34,24 +51,27 @@ cls = type else: return - + if not cls.name.startswith( self.name + '<' ): - return - + return + if not type_traits.impl_details.is_defined_in_xxx( 'std', cls ): return return cls def is_my_case( self, type ): + """checks, whether type is STD container or not""" return bool( self.get_container_or_none( type ) ) - + def class_declaration( self, type ): + """returns reference to the class declaration""" cls = self.get_container_or_none( type ) if not cls: raise TypeError( 'Type "%s" is not instantiation of std::%s' % ( type.decl_string, self.name ) ) return cls - + def element_type( self, type ): + """returns reference to the class value\\mapped type declaration""" cls = self.class_declaration( type ) if isinstance( cls, class_declaration.class_t ): value_type = cls.typedef( self.element_type_typedef, recursive=False ).type @@ -60,26 +80,34 @@ value_type_str = templates.args( cls.name )[self.element_type_index] ref = type_traits.impl_details.find_value_type( cls.top_parent, value_type_str ) if None is ref: - raise RuntimeError( "Unable to find out %s '%s' value type." + raise RuntimeError( "Unable to find out %s '%s' value type." % ( self.name, cls.decl_string ) ) return ref + def create_traits_class( container_name, element_type_index, element_type_typedef ): + """ creates concrete container traits class """ + class xxx_traits: + """extract information from the container""" + impl = container_traits_impl_t( container_name, element_type_index, element_type_typedef ) @staticmethod def is_my_case( type ): + """returns True if type is the container class, otherwise False""" return xxx_traits.impl.is_my_case( type ) - + @staticmethod def class_declaration( type ): + """returns reference to the container class""" return xxx_traits.impl.class_declaration( type ) - + @staticmethod def element_type( type ): + """returns reference to container name value\\mapped type class""" return xxx_traits.impl.element_type( type ) - + return xxx_traits list_traits = create_traits_class( 'list', 0, 'value_type' ) Modified: pygccxml_dev/pygccxml/declarations/decl_printer.py =================================================================== --- pygccxml_dev/pygccxml/declarations/decl_printer.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/decl_printer.py 2006-08-20 14:16:39 UTC (rev 424) @@ -3,11 +3,16 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +""" +defines class, decl_printer_t that prints declarations tree in a user friendly format +""" + import os import sys import decl_visitor -import algorithm +import algorithm + class decl_printer_t( decl_visitor.decl_visitor_t ): """Helper class for printing decl tree. @@ -19,7 +24,7 @@ """ JUSTIFY = 20 INDENT_SIZE = 4 - + def __init__( self, level=0, print_details=True, recursive=True, writer=None ): decl_visitor.decl_visitor_t.__init__(self) self.__inst = None @@ -50,7 +55,7 @@ def _set_level(self, lvl): self.__level = lvl level = property( _get_level, _set_level ) - + def _get_print_details(self): return self.__print_details def _set_print_details(self, details): @@ -68,7 +73,7 @@ def _set_inst(self, inst): self.__inst = inst instance = property( _get_inst, _set_inst ) - + def __nice_decl_name( self, inst ): name = inst.__class__.__name__ return name @@ -76,15 +81,15 @@ # name = name[:-len('_t')] #return name.replace( '_', ' ' ) - def print_decl_header(self): + def print_decl_header(self): header = self.__nice_decl_name( self.__inst ) + ": '%s'" % self.__inst.name self.writer( ' ' * self.level * self.INDENT_SIZE + header.ljust( self.JUSTIFY ) + os.linesep ) if self.__print_details: - curr_level = self.level + 1 + curr_level = self.level + 1 if self.__inst.location: location = 'location: [%s]:%s'%(self.__inst.location.file_name, self.__inst.location.line) self.writer( ' ' * curr_level * self.INDENT_SIZE + location + os.linesep ) - artificial = 'artificial: ' + "'%s'" % str(self.__inst.is_artificial) + artificial = 'artificial: ' + "'%s'" % str(self.__inst.is_artificial) self.writer( ' ' * curr_level * self.INDENT_SIZE + artificial.ljust( self.JUSTIFY ) + os.linesep ) def __get_method_signature(self, decl=None): @@ -96,23 +101,23 @@ for arg in decl.arguments: args.append(arg.type.decl_string) return [retval, args] - + def visit_member_function( self ): self.print_decl_header() - self.writer( ' ' * (self.level+1) * self.INDENT_SIZE + self.writer( ' ' * (self.level+1) * self.INDENT_SIZE + "Signature: " + str( self.__get_method_signature() ) + os.linesep ) def visit_constructor( self ): self.print_decl_header() def visit_destructor( self ): - self.print_decl_header() + self.print_decl_header() def visit_member_operator( self ): - self.print_decl_header() + self.print_decl_header() def visit_casting_operator( self ): - self.print_decl_header() + self.print_decl_header() def visit_free_function( self ): self.print_decl_header() @@ -126,23 +131,23 @@ def visit_class(self ): self.print_decl_header() curr_level = self.level + 1 - class_type = 'class type: ' + "'%s'" % str(self.__inst.class_type) + class_type = 'class type: ' + "'%s'" % str(self.__inst.class_type) self.writer( ' ' * curr_level * self.INDENT_SIZE + class_type.ljust( self.JUSTIFY ) + os.linesep ) - + if self.__inst.aliases: aliases = map( lambda typedef: typedef.name, self.__inst.aliases ) msg = 'aliases: ' + `aliases` self.writer( ' ' * curr_level * self.INDENT_SIZE + msg.ljust( self.JUSTIFY ) + os.linesep ) - + def print_hierarchy(hierarchy_type, classes, curr_level): self.writer( ' ' * curr_level * self.INDENT_SIZE + hierarchy_type.ljust( self.JUSTIFY ) + os.linesep ) curr_level += 1 for class_ in classes: - class_str = 'class: ' + "'%s'" % str(class_.related_class.decl_string) + class_str = 'class: ' + "'%s'" % str(class_.related_class.decl_string) self.writer( ' ' * curr_level * self.INDENT_SIZE + class_str.ljust( self.JUSTIFY ) + os.linesep ) - access = 'access: ' + "'%s'" % str(class_.access) + access = 'access: ' + "'%s'" % str(class_.access) self.writer( ' ' * (curr_level + 1)* self.INDENT_SIZE + access.ljust( self.JUSTIFY ) + os.linesep ) - + def print_members(members_type, members, curr_level): self.writer( ' ' * curr_level * self.INDENT_SIZE + members_type.ljust( self.JUSTIFY ) + os.linesep ) if self.__recursive: @@ -151,17 +156,17 @@ prn = self.clone() prn.instance = member algorithm.apply_visitor( prn, member ) - + if self.__inst.bases: print_hierarchy( 'base classes: ', self.__inst.bases, curr_level ) - + if self.__inst.derived: print_hierarchy( 'derived classes: ', self.__inst.derived, curr_level ) print_members( 'public: ', self.__inst.public_members, curr_level ) print_members( 'protected: ', self.__inst.protected_members, curr_level ) print_members( 'private: ', self.__inst.private_members, curr_level ) - + def visit_enumeration(self): self.print_decl_header() curr_level = self.level + 1 @@ -178,7 +183,7 @@ prn = self.clone() prn.instance = decl algorithm.apply_visitor( prn, decl ) - + def visit_typedef(self ): self.print_decl_header() curr_level = self.level + 1 @@ -188,7 +193,7 @@ self.print_decl_header() curr_level = self.level + 1 self.writer( ' ' * curr_level * self.INDENT_SIZE + 'type: %s value: %s'%(self.__inst.type.decl_string, self.__inst.value) + os.linesep) - + def print_declarations( decls, detailed=True, recursive=True, writer=sys.stdout.write ): """ Print decl tree rooted at each of the included nodes. decls - either a single decl or a list of decls. @@ -199,4 +204,4 @@ for d in decls: prn.level = 0 prn.instance = d - algorithm.apply_visitor(prn, d) \ No newline at end of file + algorithm.apply_visitor(prn, d) Modified: pygccxml_dev/pygccxml/declarations/matcher.py =================================================================== --- pygccxml_dev/pygccxml/declarations/matcher.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/matcher.py 2006-08-20 14:16:39 UTC (rev 424) @@ -3,29 +3,42 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +"""implements few "find" algorithms on declarations tree""" + import types import algorithm class matcher: - + """class-namespace, contains implementation of few "find" algorithms and + definition of related exception classes""" + class declaration_not_found_t( RuntimeError ): + """exception, that will be raised, if the declaration could not be found""" def __init__( self, matcher ): RuntimeError.__init__( self ) self.matcher = matcher - + def __str__( self ): return "Unable to find declaration. matcher: [%s]"%str(self.matcher) class multiple_declarations_found_t( RuntimeError ): + """exception, that will be raised, if more than one declaration was found""" def __init__( self, matcher ): RuntimeError.__init__( self ) self.matcher = matcher - + def __str__( self ): return "Multiple declarations has been found. matcher: [%s]"%str(self.matcher) - + @staticmethod def find( decl_matcher, decls, recursive=True ): + """returns a list of declarations that match "decl_matcher" defined criretia or None + + @param decl_matcher: Python callable object, that takes one argument - reference to declaration + @param decls: reference to declaration or list of declarations to be searched in + @param recursive: boolean, if True the method will run decl_matcher, on internal declarations too + """ + where = [] if isinstance( decls, types.ListType ): where.extend( decls ) @@ -35,18 +48,34 @@ where = algorithm.make_flatten( where ) return filter( decl_matcher, where ) - @staticmethod + @staticmethod def find_single( decl_matcher, decls, recursive=True ): + """returns a reference to declaration, that match "decl_matcher" defined + criretia, if a unique declaration could not be found the method will return + None. + + @param decl_matcher: Python callable object, that takes one argument - reference to declaration + @param decls: reference to declaration or list of declarations to be searched in + @param recursive: boolean, if True the method will run decl_matcher, on internal declarations too + """ answer = matcher.find( decl_matcher, decls, recursive ) if len(answer) == 1: return answer[0] - @staticmethod + @staticmethod def get_single( decl_matcher, decls, recursive=True ): + """returns a reference to declaration, that match "decl_matcher" defined + criretia, if a unique declaration could not be found, an appropriate + exception will be raised. + + @param decl_matcher: Python callable object, that takes one argument - reference to declaration + @param decls: reference to declaration or list of declarations to be searched in + @param recursive: boolean, if True the method will run decl_matcher, on internal declarations too + """ answer = matcher.find( decl_matcher, decls, recursive ) if len(answer) == 1: return answer[0] elif len(answer) == 0: raise matcher.declaration_not_found_t( decl_matcher ) else: - raise matcher.multiple_declarations_found_t( decl_matcher ) \ No newline at end of file + raise matcher.multiple_declarations_found_t( decl_matcher ) Modified: pygccxml_dev/pygccxml/declarations/matchers.py =================================================================== --- pygccxml_dev/pygccxml/declarations/matchers.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/matchers.py 2006-08-20 14:16:39 UTC (rev 424) @@ -3,13 +3,18 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +""" +defines all "built-in" classes that implement declarations compare functionality +according to some criteria +""" + import os import re import types import algorithm import variable -import namespace -import calldef +import namespace +import calldef import cpptypes import templates import class_declaration @@ -21,7 +26,7 @@ """ def __init__( self ): object.__init__( self ) - + def __call__(self, decl): raise NotImplementedError( "matcher must always implement the __call__() method." ) @@ -36,13 +41,13 @@ def __or__(self, other): """or-operator (|)""" return or_matcher_t([self, other]) - + def __str__( self ): return "base class for all matchers" class and_matcher_t(matcher_base_t): - """Combine several other matchers with "&". - + """Combine several other matchers with "&". + For example: find all private functions with name XXX C{ matcher = access_type_matcher_t( 'private' ) & calldef_matcher_t( name='XXX' ) } @@ -63,7 +68,7 @@ class or_matcher_t(matcher_base_t): """Combine several other matchers with "|". - + For example: find all functions and variables with name 'XXX' C{ matcher = variable_matcher_t( name='XXX' ) | calldef_matcher_t( name='XXX' ) } @@ -84,8 +89,8 @@ class not_matcher_t(matcher_base_t): - """Return the inverse result of matcher, using "~" - + """Return the inverse result of matcher, using "~" + For example: find all private and protected declarations C{ matcher = ~access_type_matcher_t( 'private' ) } @@ -104,7 +109,7 @@ class declaration_matcher_t( matcher_base_t ): """ Instance of this class will match declarations by next criteria: - - declaration name, also could be fully qualified name + - declaration name, also could be fully qualified name Example: wstring or ::std::wstring - declaration type Example: L{class_t}, L{namespace_t}, L{enumeration_t} @@ -114,7 +119,7 @@ """ @param decl_type: declaration type to match by. For example L{enumeration_t}. @type decl_type: any class that derives from L{declarations.declaration_t} class - + @param name: declaration name, could be full name. @type name: str @@ -125,10 +130,10 @@ @type header_file: str """ - #An other option is that pygccxml will create absolute path using - #os.path.abspath function. But I think this is just wrong, because abspath - #builds path using current working directory. This behavior is fragile - #and very difficult to find a bug. + #An other option is that pygccxml will create absolute path using + #os.path.abspath function. But I think this is just wrong, because abspath + #builds path using current working directory. This behavior is fragile + #and very difficult to find a bug. matcher_base_t.__init__( self ) self.decl_type = decl_type self.__name = None @@ -136,17 +141,17 @@ self.__opt_tmpl_name = None self.__opt_is_full_name = None self.__decl_name_only = None - + self._set_name( name ) - + self.header_dir = header_dir self.header_file = header_file - + if self.header_dir: self.header_dir = utils.normalize_path( self.header_dir ) if not os.path.isabs( self.header_dir ): raise RuntimeError( "Path to header directory should be absolute!" ) - + if self.header_file: self.header_file = utils.normalize_path( self.header_file ) if not os.path.isabs( self.header_file ): @@ -180,7 +185,7 @@ self.__opt_is_full_name = False self.__decl_name_only = self.__name - + name = property( _get_name, _set_name ) def __str__( self ): @@ -196,7 +201,7 @@ if not msg: msg.append( 'any' ) return ' and '.join( msg ) - + def __call__( self, decl ): if not None is self.decl_type: if not isinstance( decl, self.decl_type ): @@ -218,7 +223,7 @@ def check_name( self, decl ): assert not None is self.name - + if self.__opt_is_tmpl_inst: if not self.__opt_is_full_name: if self.name != decl.name: @@ -234,20 +239,20 @@ if self.name != algorithm.full_name( decl ): return False return True - + def is_full_name(self): return self.__opt_is_full_name - + def _get_decl_name_only(self): return self.__decl_name_only decl_name_only = property( _get_decl_name_only ) - + class variable_matcher_t( declaration_matcher_t ): """ Instance of this class will match variables by next criteria: - L{declaration_matcher_t} criteria - variable type. Example: L{int_t} or 'int' - """ + """ def __init__( self, name=None, type=None, header_dir=None, header_file=None ): """ @param type: variable type @@ -259,7 +264,7 @@ , header_dir=header_dir , header_file=header_file ) self.type = type - + def __call__( self, decl ): if not super( variable_matcher_t, self ).__call__( decl ): return False @@ -288,7 +293,7 @@ def __init__( self, name=None ): declaration_matcher_t.__init__( self, name=name, decl_type=namespace.namespace_t) - + def __call__( self, decl ): if self.name and decl.name == '': #unnamed namespace have same name as thier parent, we should prevent @@ -296,15 +301,15 @@ #directly. return False return super( namespace_matcher_t, self ).__call__( decl ) - + class calldef_matcher_t( declaration_matcher_t ): """ Instance of this class will match callable by next criteria: - L{declaration_matcher_t} criteria - return type. Example: L{int_t} or 'int' - argument types - """ + """ def __init__( self, name=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None): """ @@ -312,9 +317,9 @@ @type return_type: string or instance of L{type_t} derived class @param arg_types: list of function argument types. arg_types can contain. - Any item within the list could be string or instance of L{type_t} derived - class. If you don't want some argument to participate in match you can - put None. For example: + Any item within the list could be string or instance of L{type_t} derived + class. If you don't want some argument to participate in match you can + put None. For example: C{ calldef_matcher_t( arg_types=[ 'int &', None ] ) } @@ -332,7 +337,7 @@ self.return_type = return_type self.arg_types = arg_types - + def __call__( self, decl ): if not super( calldef_matcher_t, self ).__call__( decl ): return False @@ -385,7 +390,7 @@ Instance of this class will match operators by next criteria: - L{calldef_matcher_t} criteria - operator symbol: =, !=, (), [] and etc - """ + """ def __init__( self, name=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None): """ @param symbol: operator symbol @@ -401,15 +406,15 @@ , header_dir=header_dir , header_file=header_file) self.symbol = symbol - + def __call__( self, decl ): if not super( operator_matcher_t, self ).__call__( decl ): return False - if not None is self.symbol: + if not None is self.symbol: if self.symbol != decl.symbol: return False return True - + def __str__( self ): msg = [ super( operator_matcher_t, self ).__str__() ] if msg == [ 'any' ]: @@ -418,45 +423,45 @@ msg.append( '(symbol==%s)' % str(self.symbol) ) if not msg: msg.append( 'any' ) - return ' and '.join( msg ) - + return ' and '.join( msg ) + class regex_matcher_t( matcher_base_t ): """ Instance of this class will match declaration using regular expression. - User should supply a function that will extract from declaration desired - information as string. Later, this matcher will match that string using + User should supply a function that will extract from declaration desired + information as string. Later, this matcher will match that string using user regular expression. - """ + """ def __init__( self, regex, function=None ): """ @param regex: regular expression @type regex: string, an instance of this class will compile it for you - + @param function: function that will be called to get an information from declaration as string. As input this function takes 1 argument: reference to declaration. Return value should be string. If function is None, then the matcher will use declaration name. - + """ matcher_base_t.__init__(self) self.regex = re.compile( regex ) self.function = function if None is self.function: self.function = lambda decl: decl.name - + def __call__( self, decl ): text = self.function( decl ) return bool( self.regex.match( text ) ) - + def __str__( self ): return '(regex=%s)' % self.regex - + class access_type_matcher_t( matcher_base_t ): """ - Instance of this class will match declaration by its access type: public, + Instance of this class will match declaration by its access type: public, private or protected. If declarations does not have access type, for example free function, then False will be returned. - """ + """ def __init__( self, access_type ): """ @@ -466,21 +471,21 @@ """ matcher_base_t.__init__( self ) self.access_type = access_type - + def __call__( self, decl ): if not isinstance( decl.parent, class_declaration.class_t ): return False return self.access_type == decl.parent.find_out_member_access_type( decl ) - + def __str__( self ): return '(access type=%s)' % self.access_type class virtuality_type_matcher_t( matcher_base_t ): """ - Instance of this class will match declaration by its virtuality type: not virtual, + Instance of this class will match declaration by its virtuality type: not virtual, virtual or pure virtual. If declarations does not have virtuality type, for example free function, then False will be returned. - """ + """ def __init__( self, virtuality_type ): """ @@ -489,12 +494,12 @@ """ matcher_base_t.__init__( self ) self.virtuality_type = virtuality_type - + def __call__( self, decl ): if not isinstance( decl.parent, class_declaration.class_t ): return False return self.virtuality_type == decl.virtuality - + def __str__( self ): return '(virtuality type=%s)' % self.virtuality_type @@ -502,7 +507,7 @@ class custom_matcher_t( matcher_base_t ): """ Instance of this class will match declaration by user custom criteria. - """ + """ def __init__( self, function ): """ @@ -511,10 +516,9 @@ """ matcher_base_t.__init__( self ) self.function = function - + def __call__( self, decl ): return bool( self.function( decl ) ) - + def __str__( self ): return '(user criteria)' - \ No newline at end of file Modified: pygccxml_dev/pygccxml/declarations/typedef.py =================================================================== --- pygccxml_dev/pygccxml/declarations/typedef.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/typedef.py 2006-08-20 14:16:39 UTC (rev 424) @@ -3,16 +3,22 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +""" +defines class that describes C++ typedef declaration +""" + import declaration class typedef_t( declaration.declaration_t ): + """describes C++ typedef declaration""" + def __init__( self, name='', parent=None, type=None ): declaration.declaration_t.__init__( self, name, parent ) self._type = type def _get__cmp__items( self ): return [self.type] - + def __eq__(self, other): if not declaration.declaration_t.__eq__( self, other ): return False @@ -22,4 +28,5 @@ return self._type def _set_type(self, type): self._type = type - type = property( _get_type, _set_type ) \ No newline at end of file + type = property( _get_type, _set_type + , doc="reference to the original L{type<type_t>}" ) Modified: pygccxml_dev/pygccxml/declarations/variable.py =================================================================== --- pygccxml_dev/pygccxml/declarations/variable.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/pygccxml/declarations/variable.py 2006-08-20 14:16:39 UTC (rev 424) @@ -3,16 +3,17 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) -import declaration +""" +defines class that describes C++ global and member variable declaration +""" +import declaration + class variable_t( declaration.declaration_t ): - def __init__( self - , name='' - , parent=None - , type=None - , type_qualifiers=None - , value=None - , bits=None): + """describes C++ global and member variable declaration""" + + def __init__( self, name='', parent=None, type=None, type_qualifiers=None, value=None, bits=None): + """@undocumented:""" declaration.declaration_t.__init__( self, name, parent ) self._type = type self._type_qualifiers = type_qualifiers @@ -20,9 +21,11 @@ self._bits = bits def _get__cmp__items( self ): + """@undocumented _get__cmp__items:""" return [ self.type, self.type_qualifiers, self.value ] - + def __eq__(self, other): + """@undocumented __eq__:""" if not declaration.declaration_t.__eq__( self, other ): return False return self.type == other.type \ @@ -34,22 +37,26 @@ return self._type def _set_type(self, type): self._type = type - type = property( _get_type, _set_type ) + type = property( _get_type, _set_type + , doc="reference to the variable L{type<type_t>}" ) def _get_type_qualifiers(self): return self._type_qualifiers def _set_type_qualifiers(self, type_qualifiers): self._type_qualifiers = type_qualifiers - type_qualifiers = property( _get_type_qualifiers, _set_type_qualifiers ) + type_qualifiers = property( _get_type_qualifiers, _set_type_qualifiers + , doc="reference to the L{type_qualifiers_t} instance" ) def _get_value(self): return self._value def _set_value(self, value): self._value = value - value = property( _get_value, _set_value ) + value = property( _get_value, _set_value + , doc="string, that contains the variable value" ) def _get_bits(self): return self._bits def _set_bits(self, bits): self._bits = bits - bits = property( _get_bits, _set_bits ) \ No newline at end of file + bits = property( _get_bits, _set_bits + , doc="int, that contains information how many bit takes bit field") Modified: pygccxml_dev/setup.py =================================================================== --- pygccxml_dev/setup.py 2006-08-20 07:45:50 UTC (rev 423) +++ pygccxml_dev/setup.py 2006-08-20 14:16:39 UTC (rev 424) @@ -13,7 +13,7 @@ """Generate the epydoc reference manual. """ print "Generating epydoc files..." - + from epydoc.docbuilder import build_doc_index from epydoc.docwriter.html import HTMLWriter @@ -21,12 +21,12 @@ html_writer = HTMLWriter( docindex , prj_name='pygccxml' , prj_url='http://www.language-binding.net' - , include_sourcecode=False #This will decrease the size of generated documentation + , include_source_code=False #This will decrease the size of generated documentation , show_private=False , show_frames=False) - + html_writer.write( os.path.join('docs', 'apidocs') ) - + class doc_cmd(Command): """This is a new distutils command 'doc' to build the epydoc manual. """ @@ -37,10 +37,10 @@ def initialize_options (self): self.no_doc = 0 - + def finalize_options (self): pass - + def run(self): if self.no_doc: return @@ -63,4 +63,4 @@ 'pygccxml.parser', 'pygccxml.utils' ], cmdclass = {"doc" : doc_cmd} -) \ No newline at end of file +) Modified: pyplusplus_dev/setup.py =================================================================== --- pyplusplus_dev/setup.py 2006-08-20 07:45:50 UTC (rev 423) +++ pyplusplus_dev/setup.py 2006-08-20 14:16:39 UTC (rev 424) @@ -34,30 +34,30 @@ + environment_var_delimiter \ + pygccxml_path print "Setting PYTHONPATH to", os.environ["PYTHONPATH"] - -def generate_doc(): + +def generate_doc(): """Generate the epydoc reference manual. """ if not pygccxml_available: print "Please install pygccxml before generating the docs." sys.exit() - + add_pygccxml_to_PYTHONPATH() from epydoc.docbuilder import build_doc_index from epydoc.docwriter.html import HTMLWriter - print "Generating epydoc files..." + print "Generating epydoc files..." docindex = build_doc_index(['Py++', 'pygccxml']) html_writer = HTMLWriter( docindex , prj_name='Py++' , prj_url='http://www.language-binding.net' - , include_sourcecode=False #This will decrease the size of generated documentation + , include_source_code=False #This will decrease the size of generated documentation , show_private=False , show_frames=False ) - + html_writer.write( os.path.join('docs', 'documentation', 'apidocs') ) @@ -71,10 +71,10 @@ def initialize_options (self): self.no_doc = 0 - + def finalize_options (self): pass - + def run(self): if self.no_doc: return @@ -105,4 +105,4 @@ 'pyplusplus.utils', 'pyplusplus._logging_'], cmdclass = {"doc" : doc_cmd} -) \ No newline at end of file +) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |