GString*
xml_node_text_insert_len (xml_GNode* tree,
gssize pos, const gchar* str, gssize len)
{
g_return_val_if_fail (tree, 0);
g_return_val_if_fail (tree->text, tree->text);
if (len < 0) { if (str) len = strlen (str); else return tree->text; } |
if (! len) return tree->text;
if (pos > tree->text->len) pos = tree->text->len;
___ xml_GNode* node = tree;
___ xml_GNode* next;
for (; node ; node = next)
{
if (node->children) next = node->children;
else if (node->next) next = node->next;
else if ((next = node->parent)) do {
if (next->next) { next = next->next; break; } |
} | while ((next = next->parent));
if (next == tree) next = 0;
if (pos == node->end) {
if (pos <= node->end) node->end += len;
if (pos <= node->off) node->off += len;
} | else{
if (pos < node->end) node->end += len;
if (pos < node->off) node->off += len;
} |
} |
____;
if (str)
return g_string_insert_len (tree->text, pos, str, len);
g_string_set_size (tree->text, tree->text->len + len);
g_memmove (tree->text->str + pos + len,
tree->text->str + pos, tree->text->len - len - pos);
memset (tree->text->str + pos, ' ', len);
return tree->text;
____;
} |
|