/** * Get the text of title * * \param ele The title element * \param text The returned text * \return DOM_NO_ERR on success, appropriated dom_exception on failure. */ dom_exception dom_html_title_element_get_text(dom_html_title_element *ele, dom_string **text) { dom_node_internal *node = (dom_node_internal *) ele; dom_node_internal *n = node->first_child; /* There should be only one child of title element */ assert(node->first_child == node->last_child); /* And it should be a text node */ assert(n->type == DOM_TEXT_NODE); return dom_characterdata_get_data(n, text); }
static bool save_complete_node_handler(dom_node *node, save_complete_event_type event_type, void *ctxin) { save_complete_ctx *ctx = ctxin; dom_node_type type; dom_exception error; utf8_convert_ret ret; error = dom_node_get_node_type(node, &type); if (error != DOM_NO_ERR) return false; if (type == DOM_ELEMENT_NODE) { return save_complete_handle_element(ctx, node, event_type); } else if (type == DOM_TEXT_NODE || type == DOM_COMMENT_NODE) { if (event_type != EVENT_ENTER) return true; if (ctx->iter_state != STATE_IN_STYLE) { /* Emit text content */ dom_string *text; const char *text_data; size_t text_len; error = dom_characterdata_get_data(node, &text); if (error != DOM_NO_ERR) { return false; } if (type == DOM_COMMENT_NODE) fwrite("<!--", 1, sizeof("<!--") - 1, ctx->fp); if (text != NULL) { char *escaped; text_data = dom_string_data(text); text_len = dom_string_byte_length(text); ret = utf8_to_html(text_data, "UTF-8", text_len, &escaped); if (ret != UTF8_CONVERT_OK) return false; fwrite(escaped, sizeof(*escaped), strlen(escaped), ctx->fp); free(escaped); dom_string_unref(text); } if (type == DOM_COMMENT_NODE) { fwrite("-->", 1, sizeof("-->") - 1, ctx->fp); } } } else if (type == DOM_DOCUMENT_TYPE_NODE) { dom_string *name; const char *name_data; size_t name_len; if (event_type != EVENT_ENTER) return true; error = dom_document_type_get_name(node, &name); if (error != DOM_NO_ERR) return false; if (name == NULL) return true; name_data = dom_string_data(name); name_len = dom_string_byte_length(name); fputs("<!DOCTYPE ", ctx->fp); fwrite(name_data, sizeof(*name_data), name_len, ctx->fp); dom_string_unref(name); error = dom_document_type_get_public_id(node, &name); if (error != DOM_NO_ERR) return false; if (name != NULL) { name_data = dom_string_data(name); name_len = dom_string_byte_length(name); if (name_len > 0) fprintf(ctx->fp, " PUBLIC \"%.*s\"", (int) name_len, name_data); dom_string_unref(name); } error = dom_document_type_get_system_id(node, &name); if (error != DOM_NO_ERR) return false; if (name != NULL) { name_data = dom_string_data(name); name_len = dom_string_byte_length(name); if (name_len > 0) fprintf(ctx->fp, " \"%.*s\"", (int) name_len, name_data); dom_string_unref(name); } fputc('>', ctx->fp); } else if (type == DOM_DOCUMENT_NODE) { /* Do nothing */ } else { LOG(("Unhandled node type: %d", type)); } return true; }