hardened the addChild function added accessors needed for xmlNode, a bit
* tree.c: hardened the addChild function
* python/generator.py python/libxml.c python/libxml2-python-api.xml
python/libxml2class.txt python/libxml_wrap.h python/TODO:
added accessors needed for xmlNode, a bit more testing and
extension of interfaces
* python/tests/Makefile.am python/tests/build.py: added a test
build from scratch/save/load/check
Daniel
diff --git a/python/generator.py b/python/generator.py
index 3d28200..e665a87 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -350,7 +350,7 @@
elif py_types.has_key(ret[0]):
(f, t, n, c) = py_types[ret[0]]
c_return = " %s c_retval;\n" % (ret[0])
- if file == "python_accessor":
+ if file == "python_accessor" and ret[2] != None:
c_call = "\n c_retval = %s->%s;\n" % (args[0][0], ret[2])
else:
c_call = "\n c_retval = %s(%s);\n" % (name, c_call);
@@ -380,6 +380,9 @@
if file == "python":
# Those have been manually generated
return 1
+ if file == "python_accessor" and ret[0] != "void" and ret[2] == None:
+ # Those have been manually generated
+ return 1
output.write("PyObject *\n")
output.write("libxml_%s(PyObject *self, PyObject *args) {\n" % (name))
@@ -559,6 +562,9 @@
elif name[0:12] == "xmlParserSet" and file == "python_accessor":
func = name[12:]
func = string.lower(func[0:1]) + func[1:]
+ elif name[0:10] == "xmlNodeGet" and file == "python_accessor":
+ func = name[10:]
+ func = string.lower(func[0:1]) + func[1:]
elif name[0:l] == classe:
func = name[l:]
func = string.lower(func[0:1]) + func[1:]
@@ -690,6 +696,13 @@
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 == 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:
@@ -701,7 +714,7 @@
classes.write(", ");
classes.write("%s" % arg[0])
if classes_type.has_key(arg[1]):
- classes.write(classes_type[arg[1]][0])
+ classes.write("__o");
n = n + 1
classes.write(")\n");
if ret[0] != "void":
@@ -771,6 +784,15 @@
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 == 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:
@@ -782,10 +804,12 @@
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])
+ if classes_type.has_key(arg[1]):
+ classes.write(classes_type[arg[1]][0])
n = n + 1
classes.write(")\n");
if ret[0] != "void":