summaryrefslogtreecommitdiff
path: root/src/dom/debug.c
blob: 468c2f78e8b788a7ad40a84a7db1451039500986 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
 * This file is part of LibNSLayout
 * Licensed under the ISC License, http://opensource.org/licenses/ISC
 * Copyright 2015-2017 Michael Drake <tlsa@netsurf-browser.org>
 */

/** \file src/dom/debug.c
 * DOM debug
 */

#include <stdio.h>

#include <dom/dom.h>

#include "dom/debug.h"


#ifdef NSL_DOM_TRACE

/**
 * Convert a dom node type to a string
 *
 * \param[in]  type		DOM node type
 * \return appropriate string.
 */
static inline const char *nsl__dom_node_type_to_string(dom_node_type type)
{
	static const char *str[DOM_NODE_TYPE_COUNT] = {
		[DOM_ELEMENT_NODE]                = "ELEMENT_NODE",
		[DOM_ATTRIBUTE_NODE]              = "ATTRIBUTE_NODE",
		[DOM_TEXT_NODE]                   = "TEXT_NODE",
		[DOM_CDATA_SECTION_NODE]          = "CDATA_SECTION_NODE",
		[DOM_ENTITY_REFERENCE_NODE]       = "ENTITY_REFERENCE_NODE",
		[DOM_ENTITY_NODE]                 = "ENTITY_NODE",
		[DOM_PROCESSING_INSTRUCTION_NODE] = "PROCESSING_INSTRUCTION_NODE",
		[DOM_COMMENT_NODE]                = "COMMENT_NODE",
		[DOM_DOCUMENT_NODE]               = "DOCUMENT_NODE",
		[DOM_DOCUMENT_TYPE_NODE]          = "DOCUMENT_TYPE_NODE",
		[DOM_DOCUMENT_FRAGMENT_NODE]      = "DOCUMENT_FRAGMENT_NODE",
		[DOM_NOTATION_NODE]               = "NOTATION_NODE"
	};

	return str[type];
}


/* Exported function, documented in src/dom/debug.h */
void nsl__dom_debug_dump_event(const struct dom_event *evt)
{
	dom_event_target *node = NULL;
	dom_node_type node_type;
	dom_string *name = NULL;
	dom_string *type = NULL;
	dom_exception exc;

	printf("  DOM Event: ");

	/* Ugly test to see what events come out */
	exc = dom_event_get_target(evt, &node);
	if ((exc != DOM_NO_ERR) || (node == NULL)) {
		printf("FAILED to get target node!\n");
		goto fail;
	}

	exc = dom_node_get_node_type(node, &node_type);
	if (exc != DOM_NO_ERR) {
		printf("FAILED to get target node type!\n");
		goto fail;
	}

	if (node_type == DOM_ELEMENT_NODE) {
		exc = dom_node_get_node_name(node, &name);
		if ((exc != DOM_NO_ERR) || (name == NULL)) {
			printf("FAILED to get target node name!\n");
			goto fail;
		}
	}

	exc = dom_event_get_type(evt, &type);
	if ((exc != DOM_NO_ERR) || (type == NULL)) {
		printf("FAILED to get event type!\n");
		goto fail;
	}

	if (node_type == DOM_ELEMENT_NODE) {
		printf("<%s> %s",
				dom_string_data(name),
				dom_string_data(type));
	} else {
		printf("%s %s",
				nsl__dom_node_type_to_string(node_type),
				dom_string_data(type));
	}

fail:
	if (type != NULL) dom_string_unref(type);
	if (name != NULL) dom_string_unref(name);
	if (node != NULL) dom_node_unref(node);

	printf("\n");
}

#endif