patched to have shared libraries for Python regression tests and static
* Makefile.am configure.in: patched to have shared libraries
for Python regression tests and static binaries for gdb debug
in my development environment
* relaxng.c: more bugfixes
found 373 test schemas: 296 success 77 failures
found 529 test instances: 516 success 8 failures
* result/relaxng/*: updated the results
Daniel
diff --git a/relaxng.c b/relaxng.c
index 2fd70af..13beb42 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -2998,9 +2998,24 @@
static xmlRelaxNGDefinePtr
xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
xmlRelaxNGDefinePtr def) {
- xmlRelaxNGDefinePtr ret = def;
+ xmlRelaxNGDefinePtr ret, tmp;
xmlChar *val;
+ ret = def;
+ if ((IS_RELAXNG(node, "name")) || (IS_RELAXNG(node, "anyName")) ||
+ (IS_RELAXNG(node, "nsName"))) {
+ if ((def->type != XML_RELAXNG_ELEMENT) &&
+ (def->type != XML_RELAXNG_ATTRIBUTE)) {
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return(NULL);
+ ret->parent = def;
+ if (ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE)
+ ret->type = XML_RELAXNG_ATTRIBUTE;
+ else
+ ret->type = XML_RELAXNG_ELEMENT;
+ }
+ }
if (IS_RELAXNG(node, "name")) {
val = xmlNodeGetContent(node);
xmlRelaxNGNormExtSpace(val);
@@ -3068,6 +3083,9 @@
(def->type == XML_RELAXNG_ATTRIBUTE));
}
} else if (IS_RELAXNG(node, "choice")) {
+ xmlNodePtr child;
+ xmlRelaxNGDefinePtr last = NULL;
+
ret = xmlRelaxNGNewDefine(ctxt, node);
if (ret == NULL)
return(NULL);
@@ -3080,8 +3098,6 @@
"Element choice is empty\n");
ctxt->nbErrors++;
} else {
- xmlNodePtr child;
- xmlRelaxNGDefinePtr last = NULL, tmp;
child = node->children;
while (child != NULL) {
@@ -3105,6 +3121,17 @@
ctxt->nbErrors++;
return(NULL);
}
+ if (ret != def) {
+ if (def->nameClass == NULL) {
+ def->nameClass = ret;
+ } else {
+ tmp = def->nameClass;
+ while (tmp->next != NULL) {
+ tmp = tmp->next;
+ }
+ tmp->next = ret;
+ }
+ }
return(ret);
}
@@ -5134,6 +5161,8 @@
ctxt->state->value = cur;
while (list != NULL) {
+ if (ctxt->state->value == ctxt->state->endvalue)
+ ctxt->state->value = NULL;
ret = xmlRelaxNGValidateValue(ctxt, list);
if (ret != 0) {
#ifdef DEBUG_LIST
@@ -5148,6 +5177,7 @@
#endif
list = list->next;
}
+
if ((ret == 0) && (ctxt->state->value != NULL) &&
(ctxt->state->value != ctxt->state->endvalue)) {
VALID_CTXT();
@@ -5852,11 +5882,33 @@
}
list = list->next;
}
+ ret = 1;
+ ctxt->flags = oldflags;
+ } else if (define->type == XML_RELAXNG_CHOICE) {
+ xmlRelaxNGDefinePtr list;
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+
+ list = define->nameClass;
+ while (list != NULL) {
+ ret = xmlRelaxNGElementMatch(ctxt, list, elem);
+ if (ret == 1) {
+ ctxt->flags = oldflags;
+ return(1);
+ }
+ if (ret < 0) {
+ ctxt->flags = oldflags;
+ return(ret);
+ }
+ list = list->next;
+ }
+ ret = 0;
ctxt->flags = oldflags;
} else {
TODO
+ ret = -1;
}
- return(1);
+ return(ret);
}
/**
@@ -6284,7 +6336,7 @@
ctxt->state->endvalue = oldendvalue;
if (ret == -1) {
VALID_CTXT();
- VALID_ERROR("internal error validating list\n");
+ VALID_ERROR("error validating list\n");
} else if ((ret == 0) && (node != NULL)) {
ctxt->state->seq = node->next;
}