⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apibuild.py

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 PY
📖 第 1 页 / 共 5 页
字号:
		    l = string.strip(l)		    retdesc = retdesc + " " + l		    del lines[0]	    else:	        desc = desc + " " + l		del lines[0]		     	retdesc = string.strip(retdesc)	desc = string.strip(desc)	if quiet == 0:	     #	     # report missing comments	     #	    i = 0	    while i < nbargs:	        if args[i][2] == None and args[i][0] != "void" and args[i][1] != None:		    self.warning("Function comment for %s lacks description of arg %s" % (name, args[i][1]))		i = i + 1	    if retdesc == "" and ret[0] != "void":		self.warning("Function comment for %s lacks description of return value" % (name))	    if desc == "":	        self.warning("Function comment for %s lacks description of the function" % (name))	return(((ret[0], retdesc), args, desc))    def parsePreproc(self, token):	if debug:	    print "=> preproc ", token, self.lexer.tokens        name = token[1]	if name == "#include":	    token = self.lexer.token()	    if token == None:	        return None	    if token[0] == 'preproc':		self.index_add(token[1], self.filename, not self.is_header,		                "include")		return self.lexer.token()	    return token	if name == "#define":	    token = self.lexer.token()	    if token == None:	        return None	    if token[0] == 'preproc':	         # TODO macros with arguments		name = token[1]	        lst = []		token = self.lexer.token()		while token != None and token[0] == 'preproc' and \		      token[1][0] != '#':		    lst.append(token[1])		    token = self.lexer.token()                try:		    name = string.split(name, '(') [0]                except:                    pass                info = self.parseMacroComment(name, not self.is_header)		self.index_add(name, self.filename, not self.is_header,		                "macro", info)		return token	#	# Processing of conditionals modified by Bill 1/1/05	#	# We process conditionals (i.e. tokens from #ifdef, #ifndef,	# #if, #else and #endif) for headers and mainline code,	# store the ones from the header in libxml2-api.xml, and later	# (in the routine merge_public) verify that the two (header and	# mainline code) agree.	#	# There is a small problem with processing the headers. Some of	# the variables are not concerned with enabling / disabling of	# library functions (e.g. '__XML_PARSER_H__'), and we don't want	# them to be included in libxml2-api.xml, or involved in	# the check between the header and the mainline code.  To	# accomplish this, we ignore any conditional which doesn't include	# the string 'ENABLED'	#	if name == "#ifdef":	    apstr = self.lexer.tokens[0][1]	    try:	        self.defines.append(apstr)		if string.find(apstr, 'ENABLED') != -1:		    self.conditionals.append("defined(%s)" % apstr)    	    except:	        pass	elif name == "#ifndef":	    apstr = self.lexer.tokens[0][1]	    try:	        self.defines.append(apstr)		if string.find(apstr, 'ENABLED') != -1:		    self.conditionals.append("!defined(%s)" % apstr)    	    except:	        pass	elif name == "#if":	    apstr = ""	    for tok in self.lexer.tokens:	        if apstr != "":		    apstr = apstr + " "	        apstr = apstr + tok[1]	    try:	        self.defines.append(apstr)		if string.find(apstr, 'ENABLED') != -1:		    self.conditionals.append(apstr)	    except:	        pass	elif name == "#else":	    if self.conditionals != [] and \	       string.find(self.defines[-1], 'ENABLED') != -1:	        self.conditionals[-1] = "!(%s)" % self.conditionals[-1]	elif name == "#endif":	    if self.conditionals != [] and \	       string.find(self.defines[-1], 'ENABLED') != -1:	        self.conditionals = self.conditionals[:-1]	    self.defines = self.defines[:-1]	token = self.lexer.token()	while token != None and token[0] == 'preproc' and \	    token[1][0] != '#':	    token = self.lexer.token()	return token     #     # token acquisition on top of the lexer, it handle internally     # preprocessor and comments since they are logically not part of     # the program structure.     #    def token(self):        global ignored_words        token = self.lexer.token()	while token != None:	    if token[0] == 'comment':		token = self.parseComment(token)		continue	    elif token[0] == 'preproc':		token = self.parsePreproc(token)		continue	    elif token[0] == "name" and ignored_words.has_key(token[1]):	        (n, info) = ignored_words[token[1]]		i = 0		while i < n:		    token = self.lexer.token()		    i = i + 1		token = self.lexer.token()		continue	    else:	        if debug:		    print "=> ", token	        return token	return None     #     # Parse a typedef, it records the type and its name.     #    def parseTypedef(self, token):        if token == None:	    return None	token = self.parseType(token)	if token == None:	    self.error("parsing typedef")	    return None	base_type = self.type	type = base_type	 #self.debug("end typedef type", token)	while token != None:	    if token[0] == "name":		name = token[1]		signature = self.signature		if signature != None:		    type = string.split(type, '(')[0]		    d = self.mergeFunctionComment(name,			    ((type, None), signature), 1)		    self.index_add(name, self.filename, not self.is_header,				    "functype", d)		else:		    if base_type == "struct":			self.index_add(name, self.filename, not self.is_header,					"struct", type)			base_type = "struct " + name	            else:			self.index_add(name, self.filename, not self.is_header,		                    "typedef", type)		token = self.token()	    else:		self.error("parsing typedef: expecting a name")		return token	     #self.debug("end typedef", token)	    if token != None and token[0] == 'sep' and token[1] == ',':	        type = base_type	        token = self.token()		while token != None and token[0] == "op":		    type = type + token[1]		    token = self.token()	    elif token != None and token[0] == 'sep' and token[1] == ';':	        break;	    elif token != None and token[0] == 'name':	        type = base_type	        continue;	    else:		self.error("parsing typedef: expecting ';'", token)		return token	token = self.token()	return token	          #     # Parse a C code block, used for functions it parse till     # the balancing } included     #    def parseBlock(self, token):        while token != None:	    if token[0] == "sep" and token[1] == "{":	        token = self.token()		token = self.parseBlock(token)	    elif token[0] == "sep" and token[1] == "}":	        self.comment = None	        token = self.token()		return token	    else:	        if self.collect_ref == 1:		    oldtok = token		    token = self.token()		    if oldtok[0] == "name" and oldtok[1][0:3] == "xml":		        if token[0] == "sep" and token[1] == "(":			    self.index_add_ref(oldtok[1], self.filename,			                        0, "function")			    token = self.token()			elif token[0] == "name":			    token = self.token()			    if token[0] == "sep" and (token[1] == ";" or			       token[1] == "," or token[1] == "="):				self.index_add_ref(oldtok[1], self.filename,						    0, "type")		    elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":			self.index_add_ref(oldtok[1], self.filename,					    0, "typedef")		    elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":			self.index_add_ref(oldtok[1], self.filename,					    0, "typedef")			 		else:		    token = self.token()	return token     #     # Parse a C struct definition till the balancing }     #    def parseStruct(self, token):        fields = []	 #self.debug("start parseStruct", token)        while token != None:	    if token[0] == "sep" and token[1] == "{":	        token = self.token()		token = self.parseTypeBlock(token)	    elif token[0] == "sep" and token[1] == "}":		self.struct_fields = fields		 #self.debug("end parseStruct", token)		 #print fields	        token = self.token()		return token	    else:	        base_type = self.type		 #self.debug("before parseType", token)		token = self.parseType(token)		 #self.debug("after parseType", token)		if token != None and token[0] == "name":		    fname = token[1]		    token = self.token()		    if token[0] == "sep" and token[1] == ";":		        self.comment = None		        token = self.token()			fields.append((self.type, fname, self.comment))			self.comment = None		    else:		        self.error("parseStruct: expecting ;", token)		elif token != None and token[0] == "sep" and token[1] == "{":		    token = self.token()		    token = self.parseTypeBlock(token)		    if token != None and token[0] == "name":			token = self.token()		    if token != None and token[0] == "sep" and token[1] == ";":			token = self.token()		    else:		        self.error("parseStruct: expecting ;", token)		else:		    self.error("parseStruct: name", token)		    token = self.token()		self.type = base_type;        self.struct_fields = fields	 #self.debug("end parseStruct", token)	 #print fields	return token     #     # Parse a C enum block, parse till the balancing }     #    def parseEnumBlock(self, token):        self.enums = []	name = None	self.comment = None	comment = ""	value = "0"        while token != None:	    if token[0] == "sep" and token[1] == "{":	        token = self.token()		token = self.parseTypeBlock(token)	    elif token[0] == "sep" and token[1] == "}":		if name != None:		    if self.comment != None:			comment = self.comment			self.comment = None		    self.enums.append((name, value, comment))	        token = self.token()		return token	    elif token[0] == "name":		    if name != None:			if self.comment != None:			    comment = string.strip(self.comment)			    self.comment = None			self.enums.append((name, value, comment))		    name = token[1]		    comment = ""		    token = self.token()		    if token[0] == "op" and token[1][0] == "=":		        value = ""		        if len(token[1]) > 1:			    value = token[1][1:]		        token = self.token()		        while token[0] != "sep" or (token[1] != ',' and			      token[1] != '}'):			    value = value + token[1]			    token = self.token()		    else:		        try:			    value = "%d" % (int(value) + 1)			except:			    self.warning("Failed to compute value of enum %s" % (name))			    value=""		    if token[0] == "sep" and token[1] == ",":			token = self.token()	    else:	        token = self.token()	return token     #     # Parse a C definition block, used for structs it parse till     # the balancing }     #    def parseTypeBlock(self, token):        while token != None:	    if token[0] == "sep" and token[1] == "{":	        token = self.token()		token = self.parseTypeBlock(token)	    elif token[0] == "sep" and token[1] == "}":	        token = self.token()		return token	    else:	        token = self.token()	return token     #     # Parse a type: the fact that the type name can either occur after     #    the definition or within the definition makes it a little harder     #    if inside, the name token is pushed back before returning     #    def parseType(self, token):        self.type = ""	self.struct_fields = []        self.signature = None	if token == None:	    return token	while token[0] == "name" and ( 	      token[1] == "const" or token[1] == "unsigned"):	    if self.type == "":	        self.type = token[1]	    else:	        self.type = self.type + " " + token[1]	    token = self.token()        if token[0] == "name" and (token[1] == "long" or token[1] == "short"):	    if self.type == "":	        self.type = token[1]	    else:	        self.type = self.type + " " + token[1]	    if token[0] == "name" and token[1] == "int":		if self.type == "":		    self.type = tmp[1]		else:		    self.type = self.type + " " + tmp[1]	             elif token[0] == "name" and token[1] == "struct":	    if self.type == "":	        self.type = token[1]	    else:	        self.type = self.type + " " + token[1]	    token = self.token()	    nametok = None	    if token[0] == "name":	        nametok = token		token = self.token()	    if token != None and token[0] == "sep" and token[1] == "{":		token = self.token()		token = self.parseStruct(token)	    elif token != None and token[0] == "op" and token[1] == "*":	        self.type = self.type + " " + nametok[1] + " *"		token = self.token()		while token != None and token[0] == "op" and token[1] == "*":		    self.type = self.type + " *"		    token = self.token()		if token[0] == "name":

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -