Example #1
0
File: DomNode.c Project: ADTSH/io
void domNodeDestroy(DOM_NODE *node)
{
	DOM_NODE *curr, *next;

	if (!node)
		return;

	curr = node->firstChild;

	while (curr)
	{
		next = curr->nextSibling;

		domNodeDestroy(curr);

		curr = next;
	}

	if (!node->parent)
	{
		for (curr = node->nextSibling;
				curr;
				curr = curr->nextSibling)
			domNodeDestroy(curr);
	}

	domNodeDestroySpecific(node);
}
Example #2
0
File: DomNode.c Project: ADTSH/io
void domNodeDestroySpecific(DOM_NODE *node)
{
	domNodeDestroy(node->attributes);

	if (node->name)
		free(node->name);
	if (node->value)
		free(node->value);

	domNodeRemoveChild(node->parent, node);

	free(node);
}
Example #3
0
void CLocalHtmlFile::Filter(DOM_NODE *node) {
	LOG1(5, "CLocalHtmlFile::Filter(%p)", node);

	DOM_NODE *child = domNodeGetFirstChild(node);
	while (child != NULL) {
		const char *tag = domNodeGetName(child);
		if (_stricmp(tag, "script") == 0 ||
			_stricmp(tag, "noscript") == 0 ||
			_stricmp(tag, "style") == 0 ||
			_stricmp(tag, "link") == 0 ||
			_stricmp(tag, "iframe") == 0 ||
			_stricmp(tag, "object") == 0 ||
			_stricmp(tag, "param") == 0 ||
			_stricmp(tag, "embed") == 0 ||
			_stricmp(tag, "meta") == 0)
		{
			domNodeDestroy(child->attributes);
			child->attributes = NULL;

			Filter(child);
			child = domNodeGetNextSibling(child);
		}
		else if (_strnicmp(tag, "![", 2) == 0) {
			DOM_NODE *prev = domNodeGetPreviousSibling(child);

			for (DOM_NODE *curr = child->firstChild; curr; curr = curr->nextSibling)
				curr->parent = node;

			DOM_NODE *firstChild = child->firstChild;
			if (firstChild != NULL) {
				child->firstChild->prevSibling = prev;
				child->lastChild->nextSibling = child->nextSibling;
				if (child->nextSibling != NULL)
					child->nextSibling->prevSibling = child->lastChild;
				else
					child->lastChild->nextSibling = NULL;

				if (prev == NULL)
					node->firstChild = child->firstChild;
				else
					prev->nextSibling = child->firstChild;


			}
			else {
				firstChild = child->nextSibling;

				if (prev == NULL)
					node->firstChild = child->nextSibling;
				else
					prev->nextSibling = child->nextSibling;

				if (child->nextSibling != NULL)
					child->nextSibling->prevSibling = prev;
				else
					node->firstChild = NULL;
			}

			domNodeDestroy(child->attributes);
			if (child->name) free(child->name);
			if (child->value) free(child->value);
			free(child);

			child = firstChild;
		}
		else {
			Filter(child);
			child = domNodeGetNextSibling(child);
		}
	}
}