diff --git a/src/document/dom/node.c b/src/document/dom/node.c index 0f37e6069..d8a96988e 100644 --- a/src/document/dom/node.c +++ b/src/document/dom/node.c @@ -460,26 +460,26 @@ get_dom_node_value(struct dom_node *node, int codepage) return compress_string(value, valuelen); } -unsigned char * +struct dom_string * get_dom_node_type_name(enum dom_node_type type) { - static unsigned char *dom_node_type_names[DOM_NODES] = { - NULL, - /* DOM_NODE_ELEMENT */ "element", - /* DOM_NODE_ATTRIBUTE */ "attribute", - /* DOM_NODE_TEXT */ "text", - /* DOM_NODE_CDATA_SECTION */ "cdata-section", - /* DOM_NODE_ENTITY_REFERENCE */ "entity-reference", - /* DOM_NODE_ENTITY */ "entity", - /* DOM_NODE_PROCESSING_INSTRUCTION */ "proc-instruction", - /* DOM_NODE_COMMENT */ "comment", - /* DOM_NODE_DOCUMENT */ "document", - /* DOM_NODE_DOCUMENT_TYPE */ "document-type", - /* DOM_NODE_DOCUMENT_FRAGMENT */ "document-fragment", - /* DOM_NODE_NOTATION */ "notation", + static struct dom_string dom_node_type_names[DOM_NODES] = { + INIT_DOM_STRING(NULL, 0), + /* DOM_NODE_ELEMENT */ INIT_DOM_STRING("element", -1), + /* DOM_NODE_ATTRIBUTE */ INIT_DOM_STRING("attribute", -1), + /* DOM_NODE_TEXT */ INIT_DOM_STRING("text", -1), + /* DOM_NODE_CDATA_SECTION */ INIT_DOM_STRING("cdata-section", -1), + /* DOM_NODE_ENTITY_REFERENCE */ INIT_DOM_STRING("entity-reference", -1), + /* DOM_NODE_ENTITY */ INIT_DOM_STRING("entity", -1), + /* DOM_NODE_PROCESSING_INSTRUCTION */ INIT_DOM_STRING("proc-instruction", -1), + /* DOM_NODE_COMMENT */ INIT_DOM_STRING("comment", -1), + /* DOM_NODE_DOCUMENT */ INIT_DOM_STRING("document", -1), + /* DOM_NODE_DOCUMENT_TYPE */ INIT_DOM_STRING("document-type", -1), + /* DOM_NODE_DOCUMENT_FRAGMENT */ INIT_DOM_STRING("document-fragment", -1), + /* DOM_NODE_NOTATION */ INIT_DOM_STRING("notation", -1), }; assert(type < DOM_NODES); - return dom_node_type_names[type]; + return &dom_node_type_names[type]; } diff --git a/src/document/dom/node.h b/src/document/dom/node.h index a9428cfb5..8877e27fa 100644 --- a/src/document/dom/node.h +++ b/src/document/dom/node.h @@ -292,7 +292,7 @@ unsigned char *get_dom_node_name(struct dom_node *node); unsigned char *get_dom_node_value(struct dom_node *node, int codepage); /* Returns the name used for identifying the node type. */ -unsigned char *get_dom_node_type_name(enum dom_node_type type); +struct dom_string *get_dom_node_type_name(enum dom_node_type type); /* Returns a pointer to a node list containing attributes. */ #define get_dom_node_attributes(node) \ diff --git a/src/document/dom/renderer.c b/src/document/dom/renderer.c index 7ea2a6e91..4a6a1cc54 100644 --- a/src/document/dom/renderer.c +++ b/src/document/dom/renderer.c @@ -97,8 +97,7 @@ init_dom_renderer(struct dom_renderer *renderer, struct document *document, color_T foreground = document->options.default_fg; static int i_want_struct_module_for_dom; - unsigned char *name = get_dom_node_type_name(type); - int namelen = name ? strlen(name) : 0; + struct dom_string *name = get_dom_node_type_name(type); struct css_selector *selector = NULL; if (!i_want_struct_module_for_dom) { @@ -119,9 +118,10 @@ init_dom_renderer(struct dom_renderer *renderer, struct document *document, } if (name) + if (is_dom_string_set(name)) selector = find_css_selector(&css->selectors, CST_ELEMENT, CSR_ROOT, - name, namelen); + name->string, name->length); if (selector) { struct list_head *properties = &selector->properties;