Exemplo n.º 1
0
 def __parseCStructMember(self, node, structname):
     name = node.find('./name').text
     definition = node.find('./definition').text
     t = definition[0:definition.find(structname + "::" + name)]
     sm = CStructMember(name, t)
     deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
     if deprecatedNode is not None:
         sm.deprecated = True
     sm.briefDescription = ''.join(
         node.find('./briefdescription').itertext()).strip()
     sm.briefDoc = metadoc.Description(node.find('./briefdescription'))
     sm.detailedDescription = self.__cleanDescription(
         node.find('./detaileddescription'))
     return sm
Exemplo n.º 2
0
    def __parseCEnumValue(self, node):
        ev = CEnumValue(node.find('./name').text)
        initializerNode = node.find('./initializer')
        if initializerNode is not None:
            ev.value = self.__parseCEnumValueInitializer(initializerNode.text)

        deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
        if deprecatedNode is not None:
            ev.deprecated = True
        ev.briefDescription = ''.join(
            node.find('./briefdescription').itertext()).strip()
        ev.briefDoc = metadoc.Description(node.find('./briefdescription'))
        ev.detailedDescription = self.__cleanDescription(
            node.find('./detaileddescription'))
        return ev
Exemplo n.º 3
0
 def __parseCStructCompounddef(self, node):
     s = CStruct(node.find('./compoundname').text)
     deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
     if deprecatedNode is not None:
         s.deprecated = True
     s.briefDescription = ''.join(
         node.find('./briefdescription').itertext()).strip()
     s.briefDoc = metadoc.Description(node.find('./briefdescription'))
     s.detailedDescription = self.__cleanDescription(
         node.find('./detaileddescription'))
     structmembers = node.findall(
         "sectiondef/memberdef[@kind='variable'][@prot='public']")
     for structmember in structmembers:
         sm = self.__parseCStructMember(structmember, s.name)
         s.addMember(sm)
     return s
Exemplo n.º 4
0
 def __parseCEnumMemberdef(self, node):
     if not Project.__canBeWrapped(self, node):
         return None
     e = CEnum(node.find('./name').text)
     deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
     if deprecatedNode is not None:
         e.deprecated = True
     e.briefDescription = ''.join(
         node.find('./briefdescription').itertext()).strip()
     e.briefDoc = metadoc.Description(node.find('./briefdescription'))
     e.detailedDescription = self.__cleanDescription(
         node.find('./detaileddescription'))
     enumvalues = node.findall("enumvalue[@prot='public']")
     for enumvalue in enumvalues:
         ev = self.__parseCEnumValue(enumvalue)
         e.addValue(ev)
     return e
Exemplo n.º 5
0
 def __parseCFunctionMemberdef(self, node):
     if not Project.__canBeWrapped(self, node):
         return None
     internal = node.find("./detaileddescription/internal")
     if internal is not None:
         return None
     missingDocWarning = ''
     name = node.find('./name').text
     t = ''.join(node.find('./type').itertext())
     returnarg = CArgument(t, enums=self.enums, structs=self.__structs)
     returndesc = node.find(
         "./detaileddescription/para/simplesect[@kind='return']")
     if returndesc is not None:
         if returnarg.ctype == 'MSList' or returnarg.ctype == 'bctbx_list_t':
             n = returndesc.find('.//bctbxlist')
             if n is not None:
                 returnarg.containedType = n.text
         returnarg.description = self.__cleanDescription(returndesc)
     elif returnarg.completeType != 'void':
         missingDocWarning += "\tReturn value is not documented\n"
     argslist = CArgumentsList()
     argslistNode = node.findall('./param')
     for argNode in argslistNode:
         argType = ''.join(argNode.find('./type').itertext())
         argName = ''
         argNameNode = argNode.find('./declname')
         if argNameNode is not None:
             argName = ''.join(argNameNode.itertext())
         if argType != 'void':
             argslist.addArgument(
                 CArgument(argType, argName, self.enums, self.__structs))
     if len(argslist) > 0:
         paramdescs = node.findall(
             "./detaileddescription/para/parameterlist[@kind='param']/parameteritem"
         )
         if paramdescs:
             for arg in argslist.arguments:
                 for paramdesc in paramdescs:
                     if arg.name == paramdesc.find(
                             './parameternamelist').find(
                                 './parametername').text:
                         if arg.ctype == 'MSList' or arg.ctype == 'bctbx_list_t':
                             n = paramdesc.find('.//bctbxlist')
                             if n is not None:
                                 arg.containedType = n.text
                         arg.description = self.__cleanDescription(
                             paramdesc.find('./parameterdescription'))
             missingDocWarning = ''
             for arg in argslist.arguments:
                 if arg.description == None:
                     missingDocWarning += "\t'" + arg.name + "' parameter not documented\n"
     f = CFunction(name, returnarg, argslist)
     deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
     if deprecatedNode is not None:
         f.deprecated = True
     f.briefDescription = ''.join(
         node.find('./briefdescription').itertext()).strip()
     f.briefDoc = metadoc.Description(node.find('./briefdescription'))
     f.detailedDescription = self.__cleanDescription(
         node.find('./detaileddescription'))
     if f.briefDescription == '' and ''.join(
             f.detailedDescription.itertext()).strip() == '':
         return None
     locationNode = node.find('./location')
     if locationNode is not None:
         f.location = locationNode.get('file')
         if not f.location.endswith('.h'):
             missingDocWarning += "\tNot documented in a header file ('" + f.location + "')\n"
     if missingDocWarning != '':
         print(name + ":\n" + missingDocWarning)
     return f
Exemplo n.º 6
0
 def __parseCTypedefMemberdef(self, node):
     if not Project.__canBeWrapped(self, node):
         return None
     name = node.find('./name').text
     definition = node.find('./definition').text
     if definition.startswith('typedef '):
         definition = definition[8:]
     if name.endswith('Cb'):
         pos = definition.find("(*")
         if pos == -1:
             return None
         returntype = definition[0:pos].strip()
         returnarg = CArgument(returntype,
                               enums=self.enums,
                               structs=self.__structs)
         returndesc = node.find(
             "./detaileddescription/para/simplesect[@kind='return']")
         if returndesc is not None:
             if returnarg.ctype == 'MSList' or returnarg.ctype == 'bctbx_list_t':
                 n = returndesc.find('.//bctbxlist')
                 if n is not None:
                     returnarg.containedType = n.text
             returnarg.description = self.__cleanDescription(returndesc)
         elif returnarg.completeType != 'void':
             missingDocWarning += "\tReturn value is not documented\n"
         definition = definition[pos + 2:]
         pos = definition.find("(")
         definition = definition[pos + 1:-1]
         argslist = CArgumentsList()
         for argdef in definition.split(', '):
             argType = ''
             starPos = argdef.rfind('*')
             spacePos = argdef.rfind(' ')
             if starPos != -1:
                 argType = argdef[0:starPos + 1]
                 argName = argdef[starPos + 1:]
             elif spacePos != -1:
                 argType = argdef[0:spacePos]
                 argName = argdef[spacePos + 1:]
             argslist.addArgument(
                 CArgument(argType, argName, self.enums, self.__structs))
         if len(argslist) > 0:
             paramdescs = node.findall(
                 "detaileddescription/para/parameterlist[@kind='param']/parameteritem"
             )
             if paramdescs:
                 for arg in argslist.arguments:
                     for paramdesc in paramdescs:
                         if arg.name == paramdesc.find(
                                 './parameternamelist').find(
                                     './parametername').text:
                             arg.description = self.__cleanDescription(
                                 paramdesc.find('./parameterdescription'))
                 missingDocWarning = ''
                 for arg in argslist.arguments:
                     if arg.description == None:
                         missingDocWarning += "\t'" + arg.name + "' parameter not documented\n"
                 if missingDocWarning != '':
                     print(name + ":\n" + missingDocWarning)
         f = CEvent(name, returnarg, argslist)
         deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
         if deprecatedNode is not None:
             f.deprecated = True
         f.briefDescription = ''.join(
             node.find('./briefdescription').itertext()).strip()
         f.briefDoc = metadoc.Description(node.find('./briefdescription'))
         f.detailedDescription = self.__cleanDescription(
             node.find('./detaileddescription'))
         return f
     else:
         pos = definition.rfind(" " + name)
         if pos != -1:
             definition = definition[0:pos]
         td = CTypedef(name, definition)
         deprecatedNode = node.find(".//xrefsect[xreftitle='Deprecated']")
         if deprecatedNode is not None:
             td.deprecated = True
         td.briefDescription = ''.join(
             node.find('./briefdescription').itertext()).strip()
         td.briefDoc = metadoc.Description(node.find('./briefdescription'))
         td.detailedDescription = self.__cleanDescription(
             node.find('./detaileddescription'))
         return td
     return None