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

📄 apibuild.py

📁 xml开源解析代码.版本为libxml2-2.6.29,可支持GB3212.网络消息发送XML时很有用.
💻 PY
📖 第 1 页 / 共 5 页
字号:
			    self.line = line[i+1:]			    line = line[:i]			    l = i			    found = 1			    break			if line[i] == '\\':			    i = i + 1			i = i + 1		    tok = tok + line		    if found == 0:		        line = self.getline()			if line == None:			    return None		self.last = ('string', tok)		return self.last	    if l >= 2 and line[0] == '/' and line[1] == '*':	        line = line[2:]		found = 0		tok = ""		while found == 0:		    i = 0		    l = len(line)		    while i < l:			if line[i] == '*' and i+1 < l and line[i+1] == '/':			    self.line = line[i+2:]			    line = line[:i-1]			    l = i			    found = 1			    break			i = i + 1	            if tok != "":		        tok = tok + "\n"		    tok = tok + line		    if found == 0:		        line = self.getline()			if line == None:			    return None		self.last = ('comment', tok)		return self.last	    if l >= 2 and line[0] == '/' and line[1] == '/':	        line = line[2:]		self.last = ('comment', line)		return self.last	    i = 0	    while i < l:	        if line[i] == '/' and i+1 < l and line[i+1] == '/':		    self.line = line[i:]		    line = line[:i]		    break	        if line[i] == '/' and i+1 < l and line[i+1] == '*':		    self.line = line[i:]		    line = line[:i]		    break		if line[i] == '"' or line[i] == "'":		    self.line = line[i:]		    line = line[:i]		    break		i = i + 1	    l = len(line)	    i = 0	    while i < l:	        if line[i] == ' ' or line[i] == '\t':		    i = i + 1		    continue		o = ord(line[i])		if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \		   (o >= 48 and o <= 57):		    s = i		    while i < l:			o = ord(line[i])			if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \			   (o >= 48 and o <= 57) or string.find(			       " \t(){}:;,+-*/%&!|[]=><", line[i]) == -1:			    i = i + 1			else:			    break		    self.tokens.append(('name', line[s:i]))		    continue		if string.find("(){}:;,[]", line[i]) != -1:#                 if line[i] == '(' or line[i] == ')' or line[i] == '{' or \#		    line[i] == '}' or line[i] == ':' or line[i] == ';' or \#		    line[i] == ',' or line[i] == '[' or line[i] == ']':		    self.tokens.append(('sep', line[i]))		    i = i + 1		    continue		if string.find("+-*><=/%&!|.", line[i]) != -1:#                 if line[i] == '+' or line[i] == '-' or line[i] == '*' or \#		    line[i] == '>' or line[i] == '<' or line[i] == '=' or \#		    line[i] == '/' or line[i] == '%' or line[i] == '&' or \#		    line[i] == '!' or line[i] == '|' or line[i] == '.':		    if line[i] == '.' and  i + 2 < l and \		       line[i+1] == '.' and line[i+2] == '.':			self.tokens.append(('name', '...'))			i = i + 3			continue		    j = i + 1		    if j < l and (		       string.find("+-*><=/%&!|", line[j]) != -1):#		        line[j] == '+' or line[j] == '-' or line[j] == '*' or \#			line[j] == '>' or line[j] == '<' or line[j] == '=' or \#			line[j] == '/' or line[j] == '%' or line[j] == '&' or \#			line[j] == '!' or line[j] == '|'):			self.tokens.append(('op', line[i:j+1]))			i = j + 1		    else:			self.tokens.append(('op', line[i]))			i = i + 1		    continue		s = i		while i < l:		    o = ord(line[i])		    if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \		       (o >= 48 and o <= 57) or (		        string.find(" \t(){}:;,+-*/%&!|[]=><", line[i]) == -1):#		         line[i] != ' ' and line[i] != '\t' and#			 line[i] != '(' and line[i] != ')' and#			 line[i] != '{'  and line[i] != '}' and#			 line[i] != ':' and line[i] != ';' and#			 line[i] != ',' and line[i] != '+' and#			 line[i] != '-' and line[i] != '*' and#			 line[i] != '/' and line[i] != '%' and#			 line[i] != '&' and line[i] != '!' and#			 line[i] != '|' and line[i] != '[' and#			 line[i] != ']' and line[i] != '=' and#			 line[i] != '*' and line[i] != '>' and#			 line[i] != '<'):			i = i + 1		    else:		        break		self.tokens.append(('name', line[s:i]))             	tok = self.tokens[0]	self.tokens = self.tokens[1:]	self.last = tok	return tok      class CParser:    """The C module parser"""    def __init__(self, filename, idx = None):        self.filename = filename	if len(filename) > 2 and filename[-2:] == '.h':	    self.is_header = 1	else:	    self.is_header = 0        self.input = open(filename)	self.lexer = CLexer(self.input)	if idx == None:	    self.index = index()	else:	    self.index = idx	self.top_comment = ""	self.last_comment = ""	self.comment = None	self.collect_ref = 0	self.no_error = 0	self.conditionals = []	self.defines = []    def collect_references(self):        self.collect_ref = 1    def stop_error(self):        self.no_error = 1    def start_error(self):        self.no_error = 0    def lineno(self):        return self.lexer.getlineno()    def index_add(self, name, module, static, type, info=None, extra = None):	if self.is_header == 1:	    self.index.add(name, module, module, static, type, self.lineno(),			   info, extra, self.conditionals)	else:	    self.index.add(name, None, module, static, type, self.lineno(),			   info, extra, self.conditionals)    def index_add_ref(self, name, module, static, type, info=None,                      extra = None):	if self.is_header == 1:	    self.index.add_ref(name, module, module, static, type,	                       self.lineno(), info, extra, self.conditionals)	else:	    self.index.add_ref(name, None, module, static, type, self.lineno(),			       info, extra, self.conditionals)    def warning(self, msg):        if self.no_error:	    return	print msg    def error(self, msg, token=-1):        if self.no_error:	    return        print "Parse Error: " + msg	if token != -1:	    print "Got token ", token	self.lexer.debug()	sys.exit(1)    def debug(self, msg, token=-1):        print "Debug: " + msg	if token != -1:	    print "Got token ", token	self.lexer.debug()    def parseTopComment(self, comment):	res = {}	lines = string.split(comment, "\n")	item = None	for line in lines:	    while line != "" and (line[0] == ' ' or line[0] == '\t'):		line = line[1:]	    while line != "" and line[0] == '*':		line = line[1:]	    while line != "" and (line[0] == ' ' or line[0] == '\t'):		line = line[1:]	    try:		(it, line) = string.split(line, ":", 1)		item = it		while line != "" and (line[0] == ' ' or line[0] == '\t'):		    line = line[1:]		if res.has_key(item):		    res[item] = res[item] + " " + line		else:		    res[item] = line	    except:		if item != None:		    if res.has_key(item):			res[item] = res[item] + " " + line		    else:			res[item] = line	self.index.info = res    def parseComment(self, token):        if self.top_comment == "":	    self.top_comment = token[1]	if self.comment == None or token[1][0] == '*':	    self.comment = token[1];	else:	    self.comment = self.comment + token[1]	token = self.lexer.token()        if string.find(self.comment, "DOC_DISABLE") != -1:	    self.stop_error()        if string.find(self.comment, "DOC_ENABLE") != -1:	    self.start_error()	return token    #    # Parse a comment block associate to a typedef    #    def parseTypeComment(self, name, quiet = 0):        if name[0:2] == '__':	    quiet = 1        args = []	desc = ""        if self.comment == None:	    if not quiet:		self.warning("Missing comment for type %s" % (name))	    return((args, desc))        if self.comment[0] != '*':	    if not quiet:		self.warning("Missing * in type comment for %s" % (name))	    return((args, desc))	lines = string.split(self.comment, '\n')	if lines[0] == '*':	    del lines[0]	if lines[0] != "* %s:" % (name):	    if not quiet:		self.warning("Misformatted type comment for %s" % (name))		self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))	    return((args, desc))	del lines[0]	while len(lines) > 0 and lines[0] == '*':	    del lines[0]	desc = ""	while len(lines) > 0:	    l = lines[0]	    while len(l) > 0 and l[0] == '*':	        l = l[1:]	    l = string.strip(l)	    desc = desc + " " + l	    del lines[0]		     	desc = string.strip(desc)	if quiet == 0:	    if desc == "":	        self.warning("Type comment for %s lack description of the macro" % (name))	return(desc)    #    # Parse a comment block associate to a macro    #    def parseMacroComment(self, name, quiet = 0):        if name[0:2] == '__':	    quiet = 1        args = []	desc = ""        if self.comment == None:	    if not quiet:		self.warning("Missing comment for macro %s" % (name))	    return((args, desc))        if self.comment[0] != '*':	    if not quiet:		self.warning("Missing * in macro comment for %s" % (name))	    return((args, desc))	lines = string.split(self.comment, '\n')	if lines[0] == '*':	    del lines[0]	if lines[0] != "* %s:" % (name):	    if not quiet:		self.warning("Misformatted macro comment for %s" % (name))		self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))	    return((args, desc))	del lines[0]	while lines[0] == '*':	    del lines[0]	while len(lines) > 0 and lines[0][0:3] == '* @':	    l = lines[0][3:]	    try:	        (arg, desc) = string.split(l, ':', 1)		desc=string.strip(desc)		arg=string.strip(arg)            except:		if not quiet:		    self.warning("Misformatted macro comment for %s" % (name))		    self.warning("  problem with '%s'" % (lines[0]))		del lines[0]		continue	    del lines[0]	    l = string.strip(lines[0])	    while len(l) > 2 and l[0:3] != '* @':	        while l[0] == '*':		    l = l[1:]		desc = desc + ' ' + string.strip(l)		del lines[0]		if len(lines) == 0:		    break		l = lines[0]            args.append((arg, desc))	while len(lines) > 0 and lines[0] == '*':	    del lines[0]	desc = ""	while len(lines) > 0:	    l = lines[0]	    while len(l) > 0 and l[0] == '*':	        l = l[1:]	    l = string.strip(l)	    desc = desc + " " + l	    del lines[0]		     	desc = string.strip(desc)	if quiet == 0:	    if desc == "":	        self.warning("Macro comment for %s lack description of the macro" % (name))	return((args, desc))     #     # Parse a comment block and merge the informations found in the     # parameters descriptions, finally returns a block as complete     # as possible     #    def mergeFunctionComment(self, name, description, quiet = 0):        if name == 'main':	    quiet = 1        if name[0:2] == '__':	    quiet = 1	(ret, args) = description	desc = ""	retdesc = ""        if self.comment == None:	    if not quiet:		self.warning("Missing comment for function %s" % (name))	    return(((ret[0], retdesc), args, desc))        if self.comment[0] != '*':	    if not quiet:		self.warning("Missing * in function comment for %s" % (name))	    return(((ret[0], retdesc), args, desc))	lines = string.split(self.comment, '\n')	if lines[0] == '*':	    del lines[0]	if lines[0] != "* %s:" % (name):	    if not quiet:		self.warning("Misformatted function comment for %s" % (name))		self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))	    return(((ret[0], retdesc), args, desc))	del lines[0]	while lines[0] == '*':	    del lines[0]	nbargs = len(args)	while len(lines) > 0 and lines[0][0:3] == '* @':	    l = lines[0][3:]	    try:	        (arg, desc) = string.split(l, ':', 1)		desc=string.strip(desc)		arg=string.strip(arg)            except:		if not quiet:		    self.warning("Misformatted function comment for %s" % (name))		    self.warning("  problem with '%s'" % (lines[0]))		del lines[0]		continue	    del lines[0]	    l = string.strip(lines[0])	    while len(l) > 2 and l[0:3] != '* @':	        while l[0] == '*':		    l = l[1:]		desc = desc + ' ' + string.strip(l)		del lines[0]		if len(lines) == 0:		    break

⌨️ 快捷键说明

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