mirror of
https://github.com/michaelrsweet/mxml.git
synced 2024-11-24 11:25:30 +00:00
Do not write siblings of the passed node (Issue #228)
This commit is contained in:
parent
d32a541211
commit
f86c2671aa
@ -9,6 +9,8 @@
|
||||
trailer "]]" to the string (Issue #216)
|
||||
- Cross-compiling failed on install (Issue #218)
|
||||
- Fixed a crash bug in the `mxmlWrite` functions (Issue #228)
|
||||
- The `mxmlWrite` functions no longer write the siblings of the passed node
|
||||
(Issue #228)
|
||||
- Updated the markdown and ZIP container libraries used for mxmldoc.
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH mxml 3 "Mini-XML API" "09/29/18" "Mini-XML API"
|
||||
.TH mxml 3 "Mini-XML API" "10/01/18" "Mini-XML API"
|
||||
.SH NAME
|
||||
mxml \- Mini-XML API
|
||||
.SH INCLUDE FILE
|
||||
|
58
mxml-file.c
58
mxml-file.c
@ -2972,34 +2972,52 @@ mxml_write_node(mxml_node_t *node, /* I - Node to write */
|
||||
|
||||
if ((next = current->child) == NULL)
|
||||
{
|
||||
while ((next = current->next) == NULL)
|
||||
if (current == node)
|
||||
{
|
||||
if (current == node || !current->parent)
|
||||
break;
|
||||
|
||||
/*
|
||||
* The ? and ! elements are special-cases and have no end tags...
|
||||
*/
|
||||
* Don't traverse to sibling node if we are at the "root" node...
|
||||
*/
|
||||
|
||||
current = current->parent;
|
||||
next = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Try the next sibling, and continue traversing upwards as needed...
|
||||
*/
|
||||
|
||||
if (current->value.element.name[0] != '!' &&
|
||||
current->value.element.name[0] != '?')
|
||||
while ((next = current->next) == NULL)
|
||||
{
|
||||
col = mxml_write_ws(current, p, cb, MXML_WS_BEFORE_CLOSE, col, putc_cb);
|
||||
if (current == node || !current->parent)
|
||||
break;
|
||||
|
||||
if ((*putc_cb)('<', p) < 0)
|
||||
return (-1);
|
||||
if ((*putc_cb)('/', p) < 0)
|
||||
return (-1);
|
||||
if (mxml_write_string(current->value.element.name, p, putc_cb) < 0)
|
||||
return (-1);
|
||||
if ((*putc_cb)('>', p) < 0)
|
||||
return (-1);
|
||||
/*
|
||||
* The ? and ! elements are special-cases and have no end tags...
|
||||
*/
|
||||
|
||||
col += strlen(current->value.element.name) + 3;
|
||||
current = current->parent;
|
||||
|
||||
col = mxml_write_ws(current, p, cb, MXML_WS_AFTER_CLOSE, col, putc_cb);
|
||||
if (current->value.element.name[0] != '!' &&
|
||||
current->value.element.name[0] != '?')
|
||||
{
|
||||
col = mxml_write_ws(current, p, cb, MXML_WS_BEFORE_CLOSE, col, putc_cb);
|
||||
|
||||
if ((*putc_cb)('<', p) < 0)
|
||||
return (-1);
|
||||
if ((*putc_cb)('/', p) < 0)
|
||||
return (-1);
|
||||
if (mxml_write_string(current->value.element.name, p, putc_cb) < 0)
|
||||
return (-1);
|
||||
if ((*putc_cb)('>', p) < 0)
|
||||
return (-1);
|
||||
|
||||
col += strlen(current->value.element.name) + 3;
|
||||
|
||||
col = mxml_write_ws(current, p, cb, MXML_WS_AFTER_CLOSE, col, putc_cb);
|
||||
}
|
||||
|
||||
if (current == node)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user