Update to libxml2 2.9.9 (2019-01-03).
Test: builds and boots
Change-Id: Ia2f383beeb2f6af715e2c44b546ded594f523dc4
diff --git a/relaxng.c b/relaxng.c
index 88d351d..914706a 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -1573,6 +1573,9 @@
#endif
}
}
+ if (xmlRelaxNGRemoveRedefine(ctxt, URL, tmp->children, name) == 1) {
+ found = 1;
+ }
}
tmp = tmp2;
}
@@ -1739,7 +1742,18 @@
xmlFree(name);
}
}
- cur = cur->next;
+ if (IS_RELAXNG(cur, "div") && cur->children != NULL) {
+ cur = cur->children;
+ } else {
+ if (cur->next != NULL) {
+ cur = cur->next;
+ } else {
+ while (cur->parent != node && cur->parent->next == NULL) {
+ cur = cur->parent;
+ }
+ cur = cur->parent != node ? cur->parent->next : NULL;
+ }
+ }
}
@@ -3979,7 +3993,7 @@
* xmlRelaxNGGetElements:
* @ctxt: a Relax-NG parser context
* @def: the definition definition
- * @eora: gather elements (0) or attributes (1)
+ * @eora: gather elements (0), attributes (1) or elements and text (2)
*
* Compute the list of top elements a definition can generate
*
@@ -4005,7 +4019,12 @@
while (cur != NULL) {
if (((eora == 0) && ((cur->type == XML_RELAXNG_ELEMENT) ||
(cur->type == XML_RELAXNG_TEXT))) ||
- ((eora == 1) && (cur->type == XML_RELAXNG_ATTRIBUTE))) {
+ ((eora == 1) && (cur->type == XML_RELAXNG_ATTRIBUTE)) ||
+ ((eora == 2) && ((cur->type == XML_RELAXNG_DATATYPE) ||
+ (cur->type == XML_RELAXNG_ELEMENT) ||
+ (cur->type == XML_RELAXNG_LIST) ||
+ (cur->type == XML_RELAXNG_TEXT) ||
+ (cur->type == XML_RELAXNG_VALUE)))) {
if (ret == NULL) {
max = 10;
ret = (xmlRelaxNGDefinePtr *)
@@ -4360,7 +4379,7 @@
if (cur->type == XML_RELAXNG_TEXT)
is_mixed++;
groups[nbgroups]->rule = cur;
- groups[nbgroups]->defs = xmlRelaxNGGetElements(ctxt, cur, 0);
+ groups[nbgroups]->defs = xmlRelaxNGGetElements(ctxt, cur, 2);
groups[nbgroups]->attrs = xmlRelaxNGGetElements(ctxt, cur, 1);
nbgroups++;
cur = cur->next;
@@ -5347,11 +5366,15 @@
xmlNodePtr child;
xmlRelaxNGDefinePtr last = NULL;
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->parent = def;
- ret->type = XML_RELAXNG_CHOICE;
+ if (def->type == XML_RELAXNG_CHOICE) {
+ ret = def;
+ } else {
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->parent = def;
+ ret->type = XML_RELAXNG_CHOICE;
+ }
if (node->children == NULL) {
xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_EMPTY,
@@ -5363,7 +5386,7 @@
tmp = xmlRelaxNGParseNameClass(ctxt, child, ret);
if (tmp != NULL) {
if (last == NULL) {
- last = ret->nameClass = tmp;
+ last = tmp;
} else {
last->next = tmp;
last = tmp;
@@ -9262,7 +9285,10 @@
return (1);
} else if (((node->type == XML_TEXT_NODE) ||
(node->type == XML_CDATA_SECTION_NODE)) &&
- (cur->type == XML_RELAXNG_TEXT)) {
+ ((cur->type == XML_RELAXNG_DATATYPE) ||
+ (cur->type == XML_RELAXNG_LIST) ||
+ (cur->type == XML_RELAXNG_TEXT) ||
+ (cur->type == XML_RELAXNG_VALUE))) {
return (1);
}
cur = list[i++];