static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR text, IHTMLDOMNode **newTextNode) { HTMLDocument *This = impl_from_IHTMLDocument3(iface); nsIDOMText *nstext; HTMLDOMNode *node; nsAString text_str; nsresult nsres; HRESULT hres; TRACE("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode); if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_InitDepend(&text_str, text); nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc_node->nsdoc, &text_str, &nstext); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); return E_FAIL; } hres = HTMLDOMTextNode_Create(This->doc_node, (nsIDOMNode*)nstext, &node); nsIDOMText_Release(nstext); if(FAILED(hres)) return hres; *newTextNode = &node->IHTMLDOMNode_iface; return S_OK; }
static HRESULT create_node(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNode **ret) { UINT16 node_type; HRESULT hres; nsIDOMNode_GetNodeType(nsnode, &node_type); switch(node_type) { case ELEMENT_NODE: { HTMLElement *elem; hres = HTMLElement_Create(doc, nsnode, FALSE, &elem); if(FAILED(hres)) return hres; *ret = &elem->node; break; } case TEXT_NODE: hres = HTMLDOMTextNode_Create(doc, nsnode, ret); if(FAILED(hres)) return hres; break; /* doctype nodes are represented as comment nodes (at least in quirks mode) */ case DOCUMENT_TYPE_NODE: case COMMENT_NODE: { HTMLElement *comment; hres = HTMLCommentElement_Create(doc, nsnode, &comment); if(FAILED(hres)) return hres; *ret = &comment->node; break; } case ATTRIBUTE_NODE: ERR("Called on attribute node\n"); return E_UNEXPECTED; default: { HTMLDOMNode *node; node = heap_alloc_zero(sizeof(HTMLDOMNode)); if(!node) return E_OUTOFMEMORY; node->vtbl = &HTMLDOMNodeImplVtbl; HTMLDOMNode_Init(doc, node, nsnode); *ret = node; } } TRACE("type %d ret %p\n", node_type, *ret); return S_OK; }
static HRESULT create_node(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNode **ret) { PRUint16 node_type; HRESULT hres; nsIDOMNode_GetNodeType(nsnode, &node_type); switch(node_type) { case ELEMENT_NODE: { HTMLElement *elem; hres = HTMLElement_Create(doc, nsnode, FALSE, &elem); if(FAILED(hres)) return hres; *ret = &elem->node; break; } case TEXT_NODE: hres = HTMLDOMTextNode_Create(doc, nsnode, ret); if(FAILED(hres)) return hres; break; case COMMENT_NODE: { HTMLElement *comment; hres = HTMLCommentElement_Create(doc, nsnode, &comment); if(FAILED(hres)) return hres; *ret = &comment->node; break; } default: { HTMLDOMNode *node; node = heap_alloc_zero(sizeof(HTMLDOMNode)); if(!node) return E_OUTOFMEMORY; node->vtbl = &HTMLDOMNodeImplVtbl; HTMLDOMNode_Init(doc, node, nsnode); *ret = node; } } TRACE("type %d ret %p\n", node_type, *ret); return S_OK; }
static HRESULT HTMLDOMTextNode_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode **ret) { HTMLDOMTextNode *This = impl_from_HTMLDOMNode(iface); return HTMLDOMTextNode_Create(This->node.doc, nsnode, ret); }