guess what ! Relax-NG bugfixing, what a surprize... Daniel
* relaxng.c: guess what ! Relax-NG bugfixing, what a surprize...
Daniel
diff --git a/relaxng.c b/relaxng.c
index 5b0efab..2fd70af 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -102,6 +102,7 @@
XML_RELAXNG_TEXT, /* textual content */
XML_RELAXNG_ELEMENT, /* an element */
XML_RELAXNG_DATATYPE, /* extenal data type definition */
+ XML_RELAXNG_PARAM, /* extenal data type parameter */
XML_RELAXNG_VALUE, /* value from an extenal data type definition */
XML_RELAXNG_LIST, /* a list of patterns */
XML_RELAXNG_ATTRIBUTE, /* an attrbute following a pattern */
@@ -1834,6 +1835,7 @@
static xmlRelaxNGDefinePtr
xmlRelaxNGParseData(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
xmlRelaxNGDefinePtr def = NULL, except, last = NULL;
+ xmlRelaxNGDefinePtr param, lastparam = NULL;
xmlRelaxNGTypeLibraryPtr lib;
xmlChar *type;
xmlChar *library;
@@ -1905,8 +1907,24 @@
while (content != NULL) {
if (!xmlStrEqual(content->name, BAD_CAST "param"))
break;
- TODO
- ctxt->nbErrors++;
+ param = xmlRelaxNGNewDefine(ctxt, node);
+ if (param != NULL) {
+ param->type = XML_RELAXNG_PARAM;
+ param->name = xmlGetProp(content, BAD_CAST "name");
+ if (param->name == NULL) {
+ if (ctxt->error != NULL)
+ ctxt->error(ctxt->userData,
+ "param has no name\n");
+ ctxt->nbErrors++;
+ }
+ param->value = xmlNodeGetContent(content);
+ if (lastparam == NULL) {
+ def->attrs = lastparam = param;
+ } else {
+ lastparam->next = param;
+ lastparam = param;
+ }
+ }
content = content->next;
}
/*
@@ -2882,6 +2900,7 @@
ctxt->nbErrors++;
break;
case XML_RELAXNG_START:
+ case XML_RELAXNG_PARAM:
case XML_RELAXNG_EXCEPT:
if (ctxt->error != NULL)
ctxt->error(ctxt->userData,
@@ -3175,6 +3194,7 @@
ret->attrs = cur;
break;
case XML_RELAXNG_START:
+ case XML_RELAXNG_PARAM:
case XML_RELAXNG_EXCEPT:
TODO
ctxt->nbErrors++;
@@ -4687,6 +4707,7 @@
break;
case XML_RELAXNG_START:
case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_PARAM:
TODO
break;
}
@@ -5796,13 +5817,17 @@
elem->name, define->ns);
return(0);
}
- } else if (define->name != NULL) {
- if (elem->ns != NULL) {
- VALID_CTXT();
- VALID_ERROR2("Expecting no namespace for element %s\n",
- define->name);
- return(0);
- }
+ } else if ((elem->ns != NULL) && (define->ns != NULL) &&
+ (define->name == NULL)) {
+ VALID_CTXT();
+ VALID_ERROR2("Expecting no namespace for element %s\n",
+ define->name);
+ return(0);
+ } else if ((elem->ns != NULL) && (define->name != NULL)) {
+ VALID_CTXT();
+ VALID_ERROR2("Expecting no namespace for element %s\n",
+ define->name);
+ return(0);
}
if (define->nameClass == NULL)
@@ -6269,6 +6294,7 @@
}
case XML_RELAXNG_START:
case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_PARAM:
TODO
ret = -1;
break;