version 1.49, 2019/04/23 14:01:55 |
version 1.50, 2019/04/23 15:47:23 |
Line 638 xml_elem_end(struct parse *p, const char *name) |
|
Line 638 xml_elem_end(struct parse *p, const char *name) |
|
if (p->del == 0) |
if (p->del == 0) |
pnode_closetext(p, 0); |
pnode_closetext(p, 0); |
|
|
|
n = p->cur; |
node = name == NULL ? p->ncur : xml_name2node(p, name); |
node = name == NULL ? p->ncur : xml_name2node(p, name); |
|
|
switch (node) { |
switch (node) { |
Line 650 xml_elem_end(struct parse *p, const char *name) |
|
Line 651 xml_elem_end(struct parse *p, const char *name) |
|
case NODE_UNKNOWN: |
case NODE_UNKNOWN: |
break; |
break; |
case NODE_INCLUDE: |
case NODE_INCLUDE: |
n = p->cur; |
p->cur = n->parent; |
p->cur = p->cur->parent; |
|
cp = pnode_getattr_raw(n, ATTRKEY_HREF, NULL); |
cp = pnode_getattr_raw(n, ATTRKEY_HREF, NULL); |
if (cp == NULL) |
if (cp == NULL) |
error_msg(p, "<xi:include> element " |
error_msg(p, "<xi:include> element " |
Line 667 xml_elem_end(struct parse *p, const char *name) |
|
Line 667 xml_elem_end(struct parse *p, const char *name) |
|
p->flags &= ~PFLAG_EEND; |
p->flags &= ~PFLAG_EEND; |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
default: |
default: |
if (p->cur == NULL || node != p->cur->node) { |
if (n == NULL || node != n->node) { |
warn_msg(p, "element not open: </%s>", name); |
warn_msg(p, "element not open: </%s>", name); |
break; |
break; |
} |
} |
Line 681 xml_elem_end(struct parse *p, const char *name) |
|
Line 681 xml_elem_end(struct parse *p, const char *name) |
|
* obviously better than discarding it or crashing. |
* obviously better than discarding it or crashing. |
*/ |
*/ |
|
|
if (p->cur->parent != NULL || node == NODE_DOCTYPE) { |
if (n->parent != NULL || node == NODE_DOCTYPE) { |
p->cur = p->cur->parent; |
p->cur = n->parent; |
if (p->cur != NULL) |
if (p->cur != NULL) |
p->ncur = p->cur->node; |
p->ncur = p->cur->node; |
} else |
} else |
p->tree->flags |= TREE_CLOSED; |
p->tree->flags |= TREE_CLOSED; |
p->flags &= ~PFLAG_SPC; |
p->flags &= ~PFLAG_SPC; |
|
|
|
/* Include a file containing entity declarations. */ |
|
|
|
if (node == NODE_ENTITY && strcmp("%", |
|
pnode_getattr_raw(n, ATTRKEY_NAME, "")) == 0 && |
|
(cp = pnode_getattr_raw(n, ATTRKEY_SYSTEM, NULL)) != NULL) |
|
parse_file(p, -1, cp); |
|
|
break; |
break; |
} |
} |
assert(p->del == 0); |
assert(p->del == 0); |