applied patch from Lukas Schroeder for register callbacks modified patch

* tree.c : applied patch from Lukas Schroeder for register callbacks
* valid.c: modified patch from Lukas Schroeder to test
  register callbacks with --chkregister
Daniel
diff --git a/tree.c b/tree.c
index bd78564..4134f59 100644
--- a/tree.c
+++ b/tree.c
@@ -447,6 +447,9 @@
 	    }
 	}
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -1300,6 +1303,9 @@
 	    cur->prev = prev;
 	}
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -1579,6 +1585,9 @@
     
     cur->name = name;
     cur->ns = ns;
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -3202,13 +3211,22 @@
     if (parent != NULL) {
 	xmlNodePtr tmp;
 
+	/*
+	 * this is a tricky part for the node register thing:
+	 * in case ret does get coalesced in xmlAddChild
+	 * the deregister-node callback is called; so we register ret now already
+	 */
+	if (xmlRegisterNodeDefaultValue)
+	    xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
+
         tmp = xmlAddChild(parent, ret);
 	/* node could have coalesced */
 	if (tmp != ret)
 	    return(tmp);
     }
     
-    if (!recursive) return(ret);
+    if (!recursive)
+	goto out;
     if (node->nsDef != NULL)
         ret->nsDef = xmlCopyNamespaceList(node->nsDef);
 
@@ -3255,6 +3273,11 @@
         ret->children = xmlStaticCopyNodeList(node->children, doc, ret);
 	UPDATE_LAST_CHILD_AND_PARENT(ret)
     }
+
+out:
+    /* if parent != NULL we already registered the node above */
+    if (parent == NULL && xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
     return(ret);
 }