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
|