static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bstrdata, IHTMLDOMNode **ppRetNode) { HTMLDocument *This = impl_from_IHTMLDocument5(iface); nsIDOMComment *nscomment; HTMLElement *elem; nsAString str; nsresult nsres; HRESULT hres; TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrdata), ppRetNode); if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_InitDepend(&str, bstrdata); nsres = nsIDOMHTMLDocument_CreateComment(This->doc_node->nsdoc, &str, &nscomment); nsAString_Finish(&str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); return E_FAIL; } hres = HTMLCommentElement_Create(This->doc_node, (nsIDOMNode*)nscomment, &elem); nsIDOMComment_Release(nscomment); if(FAILED(hres)) return hres; *ppRetNode = &elem->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; }