more work on Relax-NG, implementing interleave augmented/updated the
* relaxng.c: more work on Relax-NG, implementing interleave
* test/relaxng/* result/relaxng/*: augmented/updated the
regression tests
Daniel
diff --git a/relaxng.c b/relaxng.c
index 49b089e..0776147 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -42,7 +42,7 @@
#define DEBUG_CONTENT 1
#define DEBUG_TYPE 1
#define DEBUG_VALID 1
-#define DEBUG_INTERLEAVE 1
+#define DEBUG_INTERLEAVE 1 */
#define UNBOUNDED (1 << 30)
#define TODO \
@@ -1299,7 +1299,8 @@
parent = NULL;
cur = def;
while (cur != NULL) {
- if (cur->type == XML_RELAXNG_ELEMENT) {
+ if ((cur->type == XML_RELAXNG_ELEMENT) ||
+ (cur->type == XML_RELAXNG_TEXT)) {
if (ret == NULL) {
max = 10;
ret = (xmlRelaxNGDefinePtr *)
@@ -1322,13 +1323,16 @@
return(NULL);
}
}
- ret[len++] = def;
+ ret[len++] = cur;
ret[len] = NULL;
} else if ((cur->type == XML_RELAXNG_CHOICE) ||
(cur->type == XML_RELAXNG_INTERLEAVE) ||
(cur->type == XML_RELAXNG_GROUP) ||
(cur->type == XML_RELAXNG_ONEORMORE) ||
- (cur->type == XML_RELAXNG_ZEROORMORE)) {
+ (cur->type == XML_RELAXNG_ZEROORMORE) ||
+ (cur->type == XML_RELAXNG_OPTIONAL) ||
+ (cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_DEF)) {
/*
* Don't go within elements or attributes or string values.
* Just gather the element top list
@@ -3627,7 +3631,7 @@
xmlRelaxNGValidatePartGroup(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGInterleaveGroupPtr *groups,
int nbgroups, xmlNodePtr *nodes, int len) {
- int level = -1, ret = -1, i, j, k;
+ int level, ret = -1, i, j, k;
xmlNodePtr *array = NULL, *list, oldseq;
xmlRelaxNGInterleaveGroupPtr group;
@@ -3662,6 +3666,7 @@
ctxt->state->seq = oldseq;
if (k > 1) {
memset(array, 0, k * sizeof(xmlNodePtr));
+ level = -1;
ret = xmlRelaxNGValidateWalkPermutations(ctxt, group->rule,
list, array, k, &level, -1);
} else {