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

📄 generator.py

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 PY
📖 第 1 页 / 共 4 页
字号:
    for name in functions.keys():	found = 0;	(desc, ret, args, file) = functions[name]	for type in ctypes:	    classe = classes_type[type][2]	    if name[0:3] == "xml" and len(args) >= 1 and args[0][1] == type:		found = 1		func = nameFixup(name, classe, type, file)		info = (0, func, name, ret, args, file)		function_classes[classe].append(info)	    elif name[0:3] == "xml" and len(args) >= 2 and args[1][1] == type \	        and file != "python_accessor":		found = 1		func = nameFixup(name, classe, type, file)		info = (1, func, name, ret, args, file)		function_classes[classe].append(info)	    elif name[0:4] == "html" and len(args) >= 1 and args[0][1] == type:		found = 1		func = nameFixup(name, classe, type, file)		info = (0, func, name, ret, args, file)		function_classes[classe].append(info)	    elif name[0:4] == "html" and len(args) >= 2 and args[1][1] == type \	        and file != "python_accessor":		found = 1		func = nameFixup(name, classe, type, file)		info = (1, func, name, ret, args, file)		function_classes[classe].append(info)	if found == 1:	    continue	if name[0:8] == "xmlXPath":	    continue	if name[0:6] == "xmlStr":	    continue	if name[0:10] == "xmlCharStr":	    continue	func = nameFixup(name, "None", file, file)	info = (0, func, name, ret, args, file)	function_classes['None'].append(info)       classes = open("libxml2class.py", "w")    txt = open("libxml2class.txt", "w")    txt.write("          Generated Classes for libxml2-python\n\n")    txt.write("#\n# Global functions of the module\n#\n\n")    if function_classes.has_key("None"):	flist = function_classes["None"]	flist.sort(functionCompare)	oldfile = ""	for info in flist:	    (index, func, name, ret, args, file) = info	    if file != oldfile:		classes.write("#\n# Functions from module %s\n#\n\n" % file)		txt.write("\n# functions from module %s\n" % file)		oldfile = file	    classes.write("def %s(" % func)	    txt.write("%s()\n" % func);	    n = 0	    for arg in args:		if n != 0:		    classes.write(", ")		classes.write("%s" % arg[0])		n = n + 1	    classes.write("):\n")	    writeDoc(name, args, '    ', classes);	    for arg in args:		if classes_type.has_key(arg[1]):		    classes.write("    if %s is None: %s__o = None\n" %				  (arg[0], arg[0]))		    classes.write("    else: %s__o = %s%s\n" %				  (arg[0], arg[0], classes_type[arg[1]][0]))	    if ret[0] != "void":		classes.write("    ret = ");	    else:		classes.write("    ");	    classes.write("libxml2mod.%s(" % name)	    n = 0	    for arg in args:		if n != 0:		    classes.write(", ");		classes.write("%s" % arg[0])		if classes_type.has_key(arg[1]):		    classes.write("__o");		n = n + 1	    classes.write(")\n");	    if ret[0] != "void":		if classes_type.has_key(ret[0]):		    #		    # Raise an exception		    #		    if functions_noexcept.has_key(name):		        classes.write("    if ret is None:return None\n");		    elif string.find(name, "URI") >= 0:			classes.write(			"    if ret is None:raise uriError('%s() failed')\n"			              % (name))		    elif string.find(name, "XPath") >= 0:			classes.write(			"    if ret is None:raise xpathError('%s() failed')\n"			              % (name))		    elif string.find(name, "Parse") >= 0:			classes.write(			"    if ret is None:raise parserError('%s() failed')\n"			              % (name))		    else:			classes.write(			"    if ret is None:raise treeError('%s() failed')\n"			              % (name))		    classes.write("    return ");		    classes.write(classes_type[ret[0]][1] % ("ret"));		    classes.write("\n");		else:		    classes.write("    return ret\n");	    classes.write("\n");    txt.write("\n\n#\n# Set of classes of the module\n#\n\n")    for classname in classes_list:	if classname == "None":	    pass	else:	    if classes_ancestor.has_key(classname):		txt.write("\n\nClass %s(%s)\n" % (classname,			  classes_ancestor[classname]))		classes.write("class %s(%s):\n" % (classname,			      classes_ancestor[classname]))		classes.write("    def __init__(self, _obj=None):\n")		if classes_ancestor[classname] == "xmlCore" or \		   classes_ancestor[classname] == "xmlNode":		    classes.write("        if type(_obj).__name__ != ")		    classes.write("'PyCObject':\n")		    classes.write("            raise TypeError, ")		    classes.write("'%s needs a PyCObject argument'\n" % \		                classname)		if reference_keepers.has_key(classname):		    rlist = reference_keepers[classname]		    for ref in rlist:		        classes.write("        self.%s = None\n" % ref[1])		classes.write("        self._o = _obj\n")		classes.write("        %s.__init__(self, _obj=_obj)\n\n" % (			      classes_ancestor[classname]))		if classes_ancestor[classname] == "xmlCore" or \		   classes_ancestor[classname] == "xmlNode":		    classes.write("    def __repr__(self):\n")		    format = "<%s (%%s) object at 0x%%x>" % (classname)		    classes.write("        return \"%s\" %% (self.name, id (self))\n\n" % (				  format))	    else:		txt.write("Class %s()\n" % (classname))		classes.write("class %s:\n" % (classname))		classes.write("    def __init__(self, _obj=None):\n")		if reference_keepers.has_key(classname):		    list = reference_keepers[classname]		    for ref in list:		        classes.write("        self.%s = None\n" % ref[1])		classes.write("        if _obj != None:self._o = _obj;return\n")		classes.write("        self._o = None\n\n");	    destruct=None	    if classes_destructors.has_key(classname):		classes.write("    def __del__(self):\n")		classes.write("        if self._o != None:\n")		classes.write("            libxml2mod.%s(self._o)\n" %			      classes_destructors[classname]);		classes.write("        self._o = None\n\n");		destruct=classes_destructors[classname]	    flist = function_classes[classname]	    flist.sort(functionCompare)	    oldfile = ""	    for info in flist:		(index, func, name, ret, args, file) = info		#		# Do not provide as method the destructors for the class		# to avoid double free		#		if name == destruct:		    continue;		if file != oldfile:		    if file == "python_accessor":			classes.write("    # accessors for %s\n" % (classname))			txt.write("    # accessors\n")		    else:			classes.write("    #\n")			classes.write("    # %s functions from module %s\n" % (				      classname, file))			txt.write("\n    # functions from module %s\n" % file)			classes.write("    #\n\n")		oldfile = file		classes.write("    def %s(self" % func)		txt.write("    %s()\n" % func);		n = 0		for arg in args:		    if n != index:			classes.write(", %s" % arg[0])		    n = n + 1		classes.write("):\n")		writeDoc(name, args, '        ', classes);		n = 0		for arg in args:		    if classes_type.has_key(arg[1]):			if n != index:			    classes.write("        if %s is None: %s__o = None\n" %					  (arg[0], arg[0]))			    classes.write("        else: %s__o = %s%s\n" %					  (arg[0], arg[0], classes_type[arg[1]][0]))		    n = n + 1		if ret[0] != "void":		    classes.write("        ret = ");		else:		    classes.write("        ");		classes.write("libxml2mod.%s(" % name)		n = 0		for arg in args:		    if n != 0:			classes.write(", ");		    if n != index:			classes.write("%s" % arg[0])			if classes_type.has_key(arg[1]):			    classes.write("__o");		    else:			classes.write("self");			if classes_type.has_key(arg[1]):			    classes.write(classes_type[arg[1]][0])		    n = n + 1		classes.write(")\n");		if ret[0] != "void":		    if classes_type.has_key(ret[0]):			#			# Raise an exception			#			if functions_noexcept.has_key(name):			    classes.write(			        "        if ret is None:return None\n");			elif string.find(name, "URI") >= 0:			    classes.write(		    "        if ret is None:raise uriError('%s() failed')\n"					  % (name))			elif string.find(name, "XPath") >= 0:			    classes.write(		    "        if ret is None:raise xpathError('%s() failed')\n"					  % (name))			elif string.find(name, "Parse") >= 0:			    classes.write(		    "        if ret is None:raise parserError('%s() failed')\n"					  % (name))			else:			    classes.write(		    "        if ret is None:raise treeError('%s() failed')\n"					  % (name))			#			# generate the returned class wrapper for the object			#			classes.write("        __tmp = ");			classes.write(classes_type[ret[0]][1] % ("ret"));			classes.write("\n");                        #			# Sometime one need to keep references of the source			# class in the returned class object.			# See reference_keepers for the list			#			tclass = classes_type[ret[0]][2]			if reference_keepers.has_key(tclass):			    list = reference_keepers[tclass]			    for pref in list:				if pref[0] == classname:				    classes.write("        __tmp.%s = self\n" %						  pref[1])			#			# return the class			#			classes.write("        return __tmp\n");		    elif converter_type.has_key(ret[0]):			#			# Raise an exception			#			if functions_noexcept.has_key(name):			    classes.write(			        "        if ret is None:return None");			elif string.find(name, "URI") >= 0:			    classes.write(		    "        if ret is None:raise uriError('%s() failed')\n"					  % (name))			elif string.find(name, "XPath") >= 0:			    classes.write(		    "        if ret is None:raise xpathError('%s() failed')\n"					  % (name))			elif string.find(name, "Parse") >= 0:			    classes.write(		    "        if ret is None:raise parserError('%s() failed')\n"					  % (name))			else:			    classes.write(		    "        if ret is None:raise treeError('%s() failed')\n"					  % (name))			classes.write("        return ");			classes.write(converter_type[ret[0]] % ("ret"));			classes.write("\n");		    else:			classes.write("        return ret\n");		classes.write("\n");    #    # Generate enum constants    #    for type,enum in enums.items():        classes.write("# %s\n" % type)        items = enum.items()        items.sort(lambda i1,i2: cmp(long(i1[1]),long(i2[1])))        for name,value in items:            classes.write("%s = %s\n" % (name,value))        classes.write("\n");    txt.close()    classes.close()buildStubs()buildWrappers()

⌨️ 快捷键说明

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