IUnknown* create_text( xmlNodePtr text ) { domtext *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->IXMLDOMText_iface.lpVtbl = &domtext_vtbl; This->ref = 1; init_xmlnode(&This->node, text, (IXMLDOMNode*)&This->IXMLDOMText_iface, &domtext_dispex); return (IUnknown*)&This->IXMLDOMText_iface; }
IUnknown* create_text( xmlNodePtr text ) { domtext *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->lpVtbl = &domtext_vtbl; This->ref = 1; init_xmlnode(&This->node, text, (IUnknown*)&This->lpVtbl, NULL); return (IUnknown*) &This->lpVtbl; }
IUnknown* create_doc_entity_ref( xmlNodePtr entity ) { entityref *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->lpVtbl = &entityref_vtbl; This->ref = 1; init_xmlnode(&This->node, entity, (IUnknown*)&This->lpVtbl, NULL); return (IUnknown*) &This->lpVtbl; }
IUnknown* create_pi( xmlNodePtr pi ) { dom_pi *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->lpVtbl = &dom_pi_vtbl; This->ref = 1; init_xmlnode(&This->node, pi, (IXMLDOMNode*)&This->lpVtbl, NULL); return (IUnknown*) &This->lpVtbl; }
IUnknown* create_comment( xmlNodePtr comment ) { domcomment *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->lpVtbl = &domcomment_vtbl; This->ref = 1; init_xmlnode(&This->node, comment, (IXMLDOMNode*)&This->lpVtbl, NULL); return (IUnknown*) &This->lpVtbl; }
IXMLDOMNode *create_node( xmlNodePtr node ) { IUnknown *pUnk; IXMLDOMNode *ret; HRESULT hr; if ( !node ) return NULL; TRACE("type %d\n", node->type); switch(node->type) { case XML_ELEMENT_NODE: pUnk = create_element( node ); break; case XML_ATTRIBUTE_NODE: pUnk = create_attribute( node ); break; case XML_TEXT_NODE: pUnk = create_text( node ); break; case XML_CDATA_SECTION_NODE: pUnk = create_cdata( node ); break; case XML_ENTITY_REF_NODE: pUnk = create_doc_entity_ref( node ); break; case XML_PI_NODE: pUnk = create_pi( node ); break; case XML_COMMENT_NODE: pUnk = create_comment( node ); break; case XML_DOCUMENT_NODE: pUnk = create_domdoc( node ); break; case XML_DOCUMENT_FRAG_NODE: pUnk = create_doc_fragment( node ); break; case XML_DTD_NODE: pUnk = create_doc_type( node ); break; default: { unknode *new_node; FIXME("only creating basic node for type %d\n", node->type); new_node = heap_alloc(sizeof(unknode)); if(!new_node) return NULL; new_node->IXMLDOMNode_iface.lpVtbl = &unknode_vtbl; new_node->ref = 1; init_xmlnode(&new_node->node, node, &new_node->IXMLDOMNode_iface, NULL); pUnk = (IUnknown*)&new_node->IXMLDOMNode_iface; } } hr = IUnknown_QueryInterface(pUnk, &IID_IXMLDOMNode, (LPVOID*)&ret); IUnknown_Release(pUnk); if(FAILED(hr)) return NULL; return ret; }