void** ppvObject )
{
domattr *This = impl_from_IXMLDOMAttribute( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMAttribute ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
IXMLDOMNode** parent )
{
domattr *This = impl_from_IXMLDOMAttribute( iface );
- return IXMLDOMNode_get_parentNode( IXMLDOMNode_from_impl(&This->node), parent );
+ TRACE("(%p)->(%p)\n", This, parent);
+ if (!parent) return E_INVALIDARG;
+ *parent = NULL;
+ return S_FALSE;
}
static HRESULT WINAPI domattr_get_childNodes(
void** ppvObject )
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMCDATASection ) ||
IsEqualGUID( riid, &IID_IXMLDOMCharacterData) ||
BSTR *p)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- HRESULT hr = E_FAIL;
+ HRESULT hr;
VARIANT vRet;
if(!p)
BSTR data)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- HRESULT hr = E_FAIL;
VARIANT val;
- TRACE("%p %s\n", This, debugstr_w(data) );
+ TRACE("(%p)->(%s)\n", This, debugstr_w(data) );
V_VT(&val) = VT_BSTR;
V_BSTR(&val) = data;
- hr = IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), val );
-
- return hr;
+ return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), val );
}
static HRESULT WINAPI domcdata_get_length(
LONG *len)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- xmlChar *pContent;
- LONG nLength = 0;
+ HRESULT hr;
+ BSTR data;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%p)\n", This, len);
if(!len)
return E_INVALIDARG;
- pContent = xmlNodeGetContent(This->node.node);
- if(pContent)
+ hr = IXMLDOMCDATASection_get_data(iface, &data);
+ if(hr == S_OK)
{
- nLength = xmlStrlen(pContent);
- xmlFree(pContent);
+ *len = SysStringLen(data);
+ SysFreeString(data);
}
- *len = nLength;
-
return S_OK;
}
LONG offset, LONG count, BSTR *p)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- xmlChar *pContent;
- LONG nLength = 0;
- HRESULT hr = S_FALSE;
+ HRESULT hr;
+ BSTR data;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%d %d %p)\n", This, offset, count, p);
if(!p)
return E_INVALIDARG;
return E_INVALIDARG;
if(count == 0)
- return hr;
+ return S_FALSE;
- pContent = xmlNodeGetContent(This->node.node);
- if(pContent)
+ hr = IXMLDOMCDATASection_get_data(iface, &data);
+ if(hr == S_OK)
{
- nLength = xmlStrlen(pContent);
+ LONG len = SysStringLen(data);
- if( offset < nLength)
+ if(offset < len)
{
- BSTR sContent = bstr_from_xmlChar(pContent);
- if(offset + count > nLength)
- *p = SysAllocString(&sContent[offset]);
+ if(offset + count > len)
+ *p = SysAllocString(&data[offset]);
else
- *p = SysAllocStringLen(&sContent[offset], count);
-
- SysFreeString(sContent);
- hr = S_OK;
+ *p = SysAllocStringLen(&data[offset], count);
}
+ else
+ hr = S_FALSE;
- xmlFree(pContent);
+ SysFreeString(data);
}
return hr;
BSTR p)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- xmlChar *pContent;
- HRESULT hr = S_FALSE;
+ HRESULT hr;
+ BSTR data;
+ LONG p_len;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(p));
/* Nothing to do if NULL or an Empty string passed in. */
- if(p == NULL || SysStringLen(p) == 0)
- return S_OK;
+ if((p_len = SysStringLen(p)) == 0) return S_OK;
- pContent = xmlChar_from_wchar( p );
- if(pContent)
+ hr = IXMLDOMCDATASection_get_data(iface, &data);
+ if(hr == S_OK)
{
- if(xmlTextConcat(This->node.node, pContent, SysStringLen(p) ) == 0)
- hr = S_OK;
- else
- hr = E_FAIL;
+ LONG len = SysStringLen(data);
+ BSTR str = SysAllocStringLen(NULL, p_len + len);
+
+ memcpy(str, data, len*sizeof(WCHAR));
+ memcpy(&str[len], p, p_len*sizeof(WCHAR));
+ str[len+p_len] = 0;
+
+ hr = IXMLDOMCDATASection_put_data(iface, str);
+
+ SysFreeString(str);
+ SysFreeString(data);
}
- else
- hr = E_FAIL;
- heap_free(pContent);
return hr;
}
LONG offset, BSTR p)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
- xmlChar *pXmlContent;
- BSTR sNewString;
- HRESULT hr = S_FALSE;
- LONG nLength = 0, nLengthP = 0;
- xmlChar *str = NULL;
+ HRESULT hr;
+ BSTR data;
+ LONG p_len;
- TRACE("%p\n", This);
+ TRACE("(%p)->(%d %s)\n", This, offset, debugstr_w(p));
/* If have a NULL or empty string, don't do anything. */
- if(SysStringLen(p) == 0)
+ if((p_len = SysStringLen(p)) == 0)
return S_OK;
if(offset < 0)
return E_INVALIDARG;
}
- pXmlContent = xmlNodeGetContent(This->node.node);
- if(pXmlContent)
+ hr = IXMLDOMCDATASection_get_data(iface, &data);
+ if(hr == S_OK)
{
- BSTR sContent = bstr_from_xmlChar( pXmlContent );
- nLength = SysStringLen(sContent);
- nLengthP = SysStringLen(p);
+ LONG len = SysStringLen(data);
+ BSTR str;
- if(nLength < offset)
+ if(len < offset)
{
- SysFreeString(sContent);
- xmlFree(pXmlContent);
-
+ SysFreeString(data);
return E_INVALIDARG;
}
- sNewString = SysAllocStringLen(NULL, nLength + nLengthP + 1);
- if(sNewString)
- {
- if(offset > 0)
- memcpy(sNewString, sContent, offset * sizeof(WCHAR));
-
- memcpy(&sNewString[offset], p, nLengthP * sizeof(WCHAR));
-
- if(offset+nLengthP < nLength)
- memcpy(&sNewString[offset+nLengthP], &sContent[offset], (nLength-offset) * sizeof(WCHAR));
+ str = SysAllocStringLen(NULL, len + p_len);
+ /* start part, supplied string and end part */
+ memcpy(str, data, offset*sizeof(WCHAR));
+ memcpy(&str[offset], p, p_len*sizeof(WCHAR));
+ memcpy(&str[offset+p_len], &data[offset], (len-offset)*sizeof(WCHAR));
+ str[len+p_len] = 0;
- sNewString[nLengthP + nLength] = 0;
-
- str = xmlChar_from_wchar(sNewString);
- if(str)
- {
- xmlNodeSetContent(This->node.node, str);
- hr = S_OK;
- }
- heap_free(str);
-
- SysFreeString(sNewString);
- }
-
- SysFreeString(sContent);
+ hr = IXMLDOMCDATASection_put_data(iface, str);
- xmlFree(pXmlContent);
+ SysFreeString(str);
+ SysFreeString(data);
}
return hr;
IXMLDOMCDATASection *iface,
LONG offset, LONG count)
{
+ domcdata *This = impl_from_IXMLDOMCDATASection( iface );
HRESULT hr;
LONG len = -1;
BSTR str;
- TRACE("%p %d %d\n", iface, offset, count);
+ TRACE("(%p)->(%d %d)\n", This, offset, count);
hr = IXMLDOMCDATASection_get_length(iface, &len);
if(hr != S_OK) return hr;
IXMLDOMCDATASection *iface,
LONG offset, LONG count, BSTR p)
{
- FIXME("\n");
- return E_NOTIMPL;
+ domcdata *This = impl_from_IXMLDOMCDATASection( iface );
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %d %s)\n", This, offset, count, debugstr_w(p));
+
+ hr = IXMLDOMCDATASection_deleteData(iface, offset, count);
+
+ if (hr == S_OK)
+ hr = IXMLDOMCDATASection_insertData(iface, offset, p);
+
+ return hr;
}
static HRESULT WINAPI domcdata_splitText(
IXMLDOMCDATASection *iface,
LONG offset, IXMLDOMText **txtNode)
{
- FIXME("\n");
+ domcdata *This = impl_from_IXMLDOMCDATASection( iface );
+ FIXME("(%p)->(%d %p)\n", This, offset, txtNode);
return E_NOTIMPL;
}
void** ppvObject )
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMComment ) ||
IsEqualGUID( riid, &IID_IXMLDOMCharacterData) ||
BSTR *p)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- HRESULT hr = E_FAIL;
+ HRESULT hr;
VARIANT vRet;
+ TRACE("(%p)->(%p)\n", This, p);
+
if(!p)
return E_INVALIDARG;
BSTR data)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- HRESULT hr = E_FAIL;
VARIANT val;
- TRACE("%p %s\n", This, debugstr_w(data) );
+ TRACE("(%p)->(%s)\n", This, debugstr_w(data) );
V_VT(&val) = VT_BSTR;
V_BSTR(&val) = data;
- hr = IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), val );
-
- return hr;
+ return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), val );
}
static HRESULT WINAPI domcomment_get_length(
LONG *len)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- xmlChar *pContent;
- LONG nLength = 0;
+ HRESULT hr;
+ BSTR data;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%p)\n", This, len);
if(!len)
return E_INVALIDARG;
- pContent = xmlNodeGetContent(This->node.node);
- if(pContent)
+ hr = IXMLDOMComment_get_data(iface, &data);
+ if(hr == S_OK)
{
- nLength = xmlStrlen(pContent);
- xmlFree(pContent);
+ *len = SysStringLen(data);
+ SysFreeString(data);
}
- *len = nLength;
-
- return S_OK;
+ return hr;
}
static HRESULT WINAPI domcomment_substringData(
LONG offset, LONG count, BSTR *p)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- xmlChar *pContent;
- LONG nLength = 0;
- HRESULT hr = S_FALSE;
+ HRESULT hr;
+ BSTR data;
- TRACE("%p %d %d %p\n", iface, offset, count, p);
+ TRACE("(%p)->(%d %d %p)\n", This, offset, count, p);
if(!p)
return E_INVALIDARG;
if(count == 0)
return S_FALSE;
- pContent = xmlNodeGetContent(This->node.node);
- if(pContent)
+ hr = IXMLDOMComment_get_data(iface, &data);
+ if(hr == S_OK)
{
- nLength = xmlStrlen(pContent);
+ LONG len = SysStringLen(data);
- if( offset < nLength)
+ if(offset < len)
{
- BSTR sContent = bstr_from_xmlChar(pContent);
- if(offset + count > nLength)
- *p = SysAllocString(&sContent[offset]);
+ if(offset + count > len)
+ *p = SysAllocString(&data[offset]);
else
- *p = SysAllocStringLen(&sContent[offset], count);
-
- SysFreeString(sContent);
- hr = S_OK;
+ *p = SysAllocStringLen(&data[offset], count);
}
+ else
+ hr = S_FALSE;
- xmlFree(pContent);
+ SysFreeString(data);
}
return hr;
BSTR p)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- xmlChar *pContent;
- HRESULT hr = S_FALSE;
+ HRESULT hr;
+ BSTR data;
+ LONG p_len;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(p));
/* Nothing to do if NULL or an Empty string passed in. */
- if(p == NULL || SysStringLen(p) == 0)
- return S_OK;
+ if((p_len = SysStringLen(p)) == 0) return S_OK;
- pContent = xmlChar_from_wchar( p );
- if(pContent)
+ hr = IXMLDOMComment_get_data(iface, &data);
+ if(hr == S_OK)
{
- /* Older versions of libxml < 2.6.27 didn't correctly support
- xmlTextConcat on Comment nodes. Fallback to setting the
- contents directly if xmlTextConcat fails.
- */
- if(xmlTextConcat(This->node.node, pContent, SysStringLen(p) ) == 0)
- hr = S_OK;
- else
- {
- xmlChar *pNew;
- pNew = xmlStrcat(xmlNodeGetContent(This->node.node), pContent);
- if(pNew)
- {
- xmlNodeSetContent(This->node.node, pNew);
- hr = S_OK;
- }
- else
- hr = E_FAIL;
- }
- HeapFree( GetProcessHeap(), 0, pContent );
+ LONG len = SysStringLen(data);
+ BSTR str = SysAllocStringLen(NULL, p_len + len);
+
+ memcpy(str, data, len*sizeof(WCHAR));
+ memcpy(&str[len], p, p_len*sizeof(WCHAR));
+ str[len+p_len] = 0;
+
+ hr = IXMLDOMComment_put_data(iface, str);
+
+ SysFreeString(str);
+ SysFreeString(data);
}
- else
- hr = E_FAIL;
return hr;
}
LONG offset, BSTR p)
{
domcomment *This = impl_from_IXMLDOMComment( iface );
- xmlChar *pXmlContent;
- BSTR sNewString;
- HRESULT hr = S_FALSE;
- LONG nLength = 0, nLengthP = 0;
- xmlChar *str = NULL;
+ HRESULT hr;
+ BSTR data;
+ LONG p_len;
- TRACE("%p %d %p\n", iface, offset, p);
+ TRACE("(%p)->(%d %s)\n", This, offset, debugstr_w(p));
/* If have a NULL or empty string, don't do anything. */
- if(SysStringLen(p) == 0)
+ if((p_len = SysStringLen(p)) == 0)
return S_OK;
if(offset < 0)
return E_INVALIDARG;
}
- pXmlContent = xmlNodeGetContent(This->node.node);
- if(pXmlContent)
+ hr = IXMLDOMComment_get_data(iface, &data);
+ if(hr == S_OK)
{
- BSTR sContent = bstr_from_xmlChar( pXmlContent );
- nLength = SysStringLen(sContent);
- nLengthP = SysStringLen(p);
+ LONG len = SysStringLen(data);
+ BSTR str;
- if(nLength < offset)
+ if(len < offset)
{
- SysFreeString(sContent);
- xmlFree(pXmlContent);
-
+ SysFreeString(data);
return E_INVALIDARG;
}
- sNewString = SysAllocStringLen(NULL, nLength + nLengthP + 1);
- if(sNewString)
- {
- if(offset > 0)
- memcpy(sNewString, sContent, offset * sizeof(WCHAR));
-
- memcpy(&sNewString[offset], p, nLengthP * sizeof(WCHAR));
-
- if(offset+nLengthP < nLength)
- memcpy(&sNewString[offset+nLengthP], &sContent[offset], (nLength-offset) * sizeof(WCHAR));
-
- sNewString[nLengthP + nLength] = 0;
-
- str = xmlChar_from_wchar(sNewString);
- if(str)
- {
- xmlNodeSetContent(This->node.node, str);
- hr = S_OK;
- }
- HeapFree( GetProcessHeap(), 0, str );
+ str = SysAllocStringLen(NULL, len + p_len);
+ /* start part, supplied string and end part */
+ memcpy(str, data, offset*sizeof(WCHAR));
+ memcpy(&str[offset], p, p_len*sizeof(WCHAR));
+ memcpy(&str[offset+p_len], &data[offset], (len-offset)*sizeof(WCHAR));
+ str[len+p_len] = 0;
- SysFreeString(sNewString);
- }
-
- SysFreeString(sContent);
+ hr = IXMLDOMComment_put_data(iface, str);
- xmlFree(pXmlContent);
+ SysFreeString(str);
+ SysFreeString(data);
}
return hr;
LONG len = -1;
BSTR str;
- TRACE("%p %d %d\n", iface, offset, count);
+ TRACE("(%p)->(%d %d)\n", iface, offset, count);
hr = IXMLDOMComment_get_length(iface, &len);
if(hr != S_OK) return hr;
IXMLDOMComment *iface,
LONG offset, LONG count, BSTR p)
{
- FIXME("\n");
- return E_NOTIMPL;
+ domcomment *This = impl_from_IXMLDOMComment( iface );
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %d %s)\n", This, offset, count, debugstr_w(p));
+
+ hr = IXMLDOMComment_deleteData(iface, offset, count);
+
+ if (hr == S_OK)
+ hr = IXMLDOMComment_insertData(iface, offset, p);
+
+ return hr;
}
static const struct IXMLDOMCommentVtbl domcomment_vtbl =
void** ppvObject )
{
domfrag *This = impl_from_IXMLDOMDocumentFragment( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMDocumentFragment ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
#ifdef HAVE_LIBXML2
+#include <libxml/xmlsave.h>
+
+/* not defined in older versions */
+#define XML_SAVE_FORMAT 1
+#define XML_SAVE_NO_DECL 2
+#define XML_SAVE_NO_EMPTY 4
+#define XML_SAVE_NO_XHTML 8
+#define XML_SAVE_XHTML 16
+#define XML_SAVE_AS_XML 32
+#define XML_SAVE_AS_HTML 64
+
static const WCHAR SZ_PROPERTY_SELECTION_LANGUAGE[] = {'S','e','l','e','c','t','i','o','n','L','a','n','g','u','a','g','e',0};
static const WCHAR SZ_VALUE_XPATH[] = {'X','P','a','t','h',0};
static const WCHAR SZ_VALUE_XSLPATTERN[] = {'X','S','L','P','a','t','t','e','r','n',0};
{
domdoc *This = impl_from_IPersistStream(iface);
- FIXME("(%p->%p): stub!\n", iface, This);
+ FIXME("(%p): stub!\n", This);
return S_FALSE;
}
char *ptr;
xmlDocPtr xmldoc = NULL;
- TRACE("(%p, %p)\n", iface, pStm);
+ TRACE("(%p)->(%p)\n", This, pStm);
if (!pStm)
return E_INVALIDARG;
HRESULT hr;
BSTR xmlString;
- TRACE("(%p, %p, %d)\n", iface, pStm, fClearDirty);
+ TRACE("(%p)->(%p %d)\n", This, pStm, fClearDirty);
hr = IXMLDOMNode_get_xml( IXMLDOMNode_from_impl(&This->node), &xmlString );
if(hr == S_OK)
static HRESULT WINAPI xmldoc_IPersistStream_GetSizeMax(
IPersistStream *iface, ULARGE_INTEGER *pcbSize)
{
- TRACE("(%p, %p): stub!\n", iface, pcbSize);
+ domdoc *This = impl_from_IPersistStream(iface);
+ TRACE("(%p)->(%p): stub!\n", This, pcbSize);
return E_NOTIMPL;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid( riid ), ppvObject );
*ppvObject = NULL;
{
*ppvObject = &(This->lpvtblIObjectWithSite);
}
+ else if (IsEqualGUID(&IID_IObjectSafety, riid))
+ {
+ *ppvObject = &(This->lpvtblIObjectSafety);
+ }
else if( IsEqualGUID( riid, &IID_ISupportErrorInfo ))
{
*ppvObject = &This->lpvtblISupportErrorInfo;
IXMLDOMDocument2 *iface,
IXMLDOMDocumentType** documentType )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2(iface);
+ FIXME("(%p)\n", This);
return E_NOTIMPL;
}
IXMLDOMDocument2 *iface,
IXMLDOMImplementation** impl )
{
+ domdoc *This = impl_from_IXMLDOMDocument2(iface);
+
+ TRACE("(%p)->(%p)\n", This, impl);
+
if(!impl)
return E_INVALIDARG;
IXMLDOMNode *element_node;
HRESULT hr;
- TRACE("%p\n", This);
+ TRACE("(%p)->(%p)\n", This, DOMElement);
if(!DOMElement)
return E_INVALIDARG;
BSTR tagname,
IXMLDOMElement** element )
{
- xmlNodePtr xmlnode;
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlChar *xml_name;
- IUnknown *elem_unk;
+ IXMLDOMNode *node;
+ VARIANT type;
HRESULT hr;
- TRACE("%p->(%s,%p)\n", iface, debugstr_w(tagname), element);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(tagname), element);
- xml_name = xmlChar_from_wchar(tagname);
- xmlnode = xmlNewDocNode(get_doc(This), NULL, xml_name, NULL);
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
+ if (!element || !tagname) return E_INVALIDARG;
- TRACE("created xmlptr %p\n", xmlnode);
- elem_unk = create_element(xmlnode);
- heap_free(xml_name);
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_ELEMENT;
+
+ hr = IXMLDOMDocument_createNode(iface, type, tagname, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMElement, (void**)element);
+ IXMLDOMNode_Release(node);
+ }
- hr = IUnknown_QueryInterface(elem_unk, &IID_IXMLDOMElement, (void **)element);
- IUnknown_Release(elem_unk);
- TRACE("returning %p\n", *element);
return hr;
}
static HRESULT WINAPI domdoc_createDocumentFragment(
IXMLDOMDocument2 *iface,
- IXMLDOMDocumentFragment** docFrag )
+ IXMLDOMDocumentFragment** frag )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlNodePtr xmlnode;
-
- TRACE("%p\n", iface);
+ IXMLDOMNode *node;
+ VARIANT type;
+ HRESULT hr;
- if(!docFrag)
- return E_INVALIDARG;
+ TRACE("(%p)->(%p)\n", This, frag);
- *docFrag = NULL;
+ if (!frag) return E_INVALIDARG;
- xmlnode = xmlNewDocFragment(get_doc( This ) );
+ *frag = NULL;
- if(!xmlnode)
- return E_FAIL;
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_DOCUMENT_FRAGMENT;
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
- *docFrag = (IXMLDOMDocumentFragment*)create_doc_fragment(xmlnode);
+ hr = IXMLDOMDocument_createNode(iface, type, NULL, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMDocumentFragment, (void**)frag);
+ IXMLDOMNode_Release(node);
+ }
- return S_OK;
+ return hr;
}
IXMLDOMText** text )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlNodePtr xmlnode;
- xmlChar *xml_content;
+ IXMLDOMNode *node;
+ VARIANT type;
+ HRESULT hr;
- TRACE("%p->(%s %p)\n", iface, debugstr_w(data), text);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(data), text);
- if(!text)
- return E_INVALIDARG;
+ if (!text) return E_INVALIDARG;
*text = NULL;
- xml_content = xmlChar_from_wchar(data);
- xmlnode = xmlNewText(xml_content);
- heap_free(xml_content);
-
- if(!xmlnode)
- return E_FAIL;
-
- xmlnode->doc = get_doc( This );
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_TEXT;
- *text = (IXMLDOMText*)create_text(xmlnode);
+ hr = IXMLDOMDocument2_createNode(iface, type, NULL, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMText, (void**)text);
+ IXMLDOMNode_Release(node);
+ hr = IXMLDOMText_put_data(*text, data);
+ }
- return S_OK;
+ return hr;
}
IXMLDOMComment** comment )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlNodePtr xmlnode;
- xmlChar *xml_content;
+ VARIANT type;
+ HRESULT hr;
+ IXMLDOMNode *node;
- TRACE("%p->(%s %p)\n", iface, debugstr_w(data), comment);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(data), comment);
- if(!comment)
- return E_INVALIDARG;
+ if (!comment) return E_INVALIDARG;
*comment = NULL;
- xml_content = xmlChar_from_wchar(data);
- xmlnode = xmlNewComment(xml_content);
- heap_free(xml_content);
-
- if(!xmlnode)
- return E_FAIL;
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_COMMENT;
- xmlnode->doc = get_doc( This );
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
-
- *comment = (IXMLDOMComment*)create_comment(xmlnode);
+ hr = IXMLDOMDocument2_createNode(iface, type, NULL, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMComment, (void**)comment);
+ IXMLDOMNode_Release(node);
+ hr = IXMLDOMComment_put_data(*comment, data);
+ }
- return S_OK;
+ return hr;
}
IXMLDOMCDATASection** cdata )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlNodePtr xmlnode;
- xmlChar *xml_content;
+ IXMLDOMNode *node;
+ VARIANT type;
+ HRESULT hr;
- TRACE("%p->(%s %p)\n", iface, debugstr_w(data), cdata);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(data), cdata);
- if(!cdata)
- return E_INVALIDARG;
+ if (!cdata) return E_INVALIDARG;
*cdata = NULL;
- xml_content = xmlChar_from_wchar(data);
- xmlnode = xmlNewCDataBlock(get_doc( This ), xml_content, strlen( (char*)xml_content) );
- heap_free(xml_content);
-
- if(!xmlnode)
- return E_FAIL;
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_CDATA_SECTION;
- xmlnode->doc = get_doc( This );
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
-
- *cdata = (IXMLDOMCDATASection*)create_cdata(xmlnode);
+ hr = IXMLDOMDocument2_createNode(iface, type, NULL, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMCDATASection, (void**)cdata);
+ IXMLDOMNode_Release(node);
+ hr = IXMLDOMCDATASection_put_data(*cdata, data);
+ }
- return S_OK;
+ return hr;
}
BSTR data,
IXMLDOMProcessingInstruction** pi )
{
-#ifdef HAVE_XMLNEWDOCPI
- xmlNodePtr xmlnode;
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlChar *xml_target, *xml_content;
+ IXMLDOMNode *node;
+ VARIANT type;
+ HRESULT hr;
- TRACE("%p->(%s %s %p)\n", iface, debugstr_w(target), debugstr_w(data), pi);
+ TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(target), debugstr_w(data), pi);
- if(!pi)
- return E_INVALIDARG;
+ if (!pi) return E_INVALIDARG;
- if(!target || lstrlenW(target) == 0)
- return E_FAIL;
+ *pi = NULL;
- xml_target = xmlChar_from_wchar(target);
- xml_content = xmlChar_from_wchar(data);
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_PROCESSING_INSTRUCTION;
- xmlnode = xmlNewDocPI(get_doc(This), xml_target, xml_content);
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
- TRACE("created xmlptr %p\n", xmlnode);
- *pi = (IXMLDOMProcessingInstruction*)create_pi(xmlnode);
+ hr = IXMLDOMDocument2_createNode(iface, type, target, NULL, &node);
+ if (hr == S_OK)
+ {
+ VARIANT v_data;
- heap_free(xml_content);
- heap_free(xml_target);
+ /* this is to bypass check in ::put_data() that blocks "<?xml" PIs */
+ V_VT(&v_data) = VT_BSTR;
+ V_BSTR(&v_data) = data;
- return S_OK;
-#else
- FIXME("Libxml 2.6.15 or greater required.\n");
- return E_NOTIMPL;
-#endif
+ hr = IXMLDOMNode_put_nodeValue( node, v_data );
+
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMProcessingInstruction, (void**)pi);
+ IXMLDOMNode_Release(node);
+ }
+
+ return hr;
}
IXMLDOMAttribute** attribute )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlNodePtr xmlnode;
- xmlChar *xml_name;
+ IXMLDOMNode *node;
+ VARIANT type;
+ HRESULT hr;
- TRACE("%p->(%s %p)\n", iface, debugstr_w(name), attribute);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), attribute);
- if(!attribute)
- return E_INVALIDARG;
+ if (!attribute || !name) return E_INVALIDARG;
- *attribute = NULL;
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_ATTRIBUTE;
- xml_name = xmlChar_from_wchar(name);
- xmlnode = (xmlNode *)xmlNewProp(NULL, xml_name, NULL);
- heap_free(xml_name);
-
- if(!xmlnode)
- return E_FAIL;
-
- xmlnode->doc = get_doc( This );
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
-
- *attribute = (IXMLDOMAttribute*)create_attribute(xmlnode);
+ hr = IXMLDOMDocument_createNode(iface, type, name, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMAttribute, (void**)attribute);
+ IXMLDOMNode_Release(node);
+ }
- return S_OK;
+ return hr;
}
static HRESULT WINAPI domdoc_createEntityReference(
IXMLDOMDocument2 *iface,
BSTR name,
- IXMLDOMEntityReference** entityRef )
+ IXMLDOMEntityReference** entityref )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- xmlNodePtr xmlnode;
- xmlChar *xml_name;
-
- TRACE("%p\n", iface);
-
- if(!entityRef)
- return E_INVALIDARG;
+ IXMLDOMNode *node;
+ VARIANT type;
+ HRESULT hr;
- *entityRef = NULL;
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), entityref);
- xml_name = xmlChar_from_wchar(name);
- xmlnode = xmlNewReference(get_doc( This ), xml_name );
- heap_free(xml_name);
+ if (!entityref) return E_INVALIDARG;
- if(!xmlnode)
- return E_FAIL;
+ *entityref = NULL;
- xmlnode->doc = get_doc( This );
- xmldoc_add_orphan(xmlnode->doc, xmlnode);
+ V_VT(&type) = VT_I1;
+ V_I1(&type) = NODE_ENTITY_REFERENCE;
- *entityRef = (IXMLDOMEntityReference*)create_doc_entity_ref(xmlnode);
+ hr = IXMLDOMDocument2_createNode(iface, type, name, NULL, &node);
+ if (hr == S_OK)
+ {
+ IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMEntityReference, (void**)entityref);
+ IXMLDOMNode_Release(node);
+ }
- return S_OK;
+ return hr;
}
domdoc *This = impl_from_IXMLDOMDocument2( iface );
LPWSTR szPattern;
HRESULT hr;
- TRACE("(%p)->(%s, %p)\n", This, debugstr_w(tagName), resultList);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(tagName), resultList);
if (tagName[0] == '*' && tagName[1] == 0)
{
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
DOMNodeType node_type;
- xmlNodePtr xmlnode = NULL;
+ xmlNodePtr xmlnode;
xmlChar *xml_name;
HRESULT hr;
- TRACE("(%p)->(type,%s,%s,%p)\n", This, debugstr_w(name), debugstr_w(namespaceURI), node);
+ TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(name), debugstr_w(namespaceURI), node);
+
+ if(!node) return E_INVALIDARG;
if(namespaceURI && namespaceURI[0])
FIXME("nodes with namespaces currently not supported.\n");
hr = get_node_type(Type, &node_type);
- if(FAILED(hr))
- return hr;
+ if(FAILED(hr)) return hr;
TRACE("node_type %d\n", node_type);
+ /* exit earlier for types that need name */
+ switch(node_type)
+ {
+ case NODE_ELEMENT:
+ case NODE_ATTRIBUTE:
+ case NODE_ENTITY_REFERENCE:
+ case NODE_PROCESSING_INSTRUCTION:
+ if (!name || SysStringLen(name) == 0) return E_FAIL;
+ default:
+ break;
+ }
+
xml_name = xmlChar_from_wchar(name);
switch(node_type)
{
case NODE_ELEMENT:
xmlnode = xmlNewDocNode(get_doc(This), NULL, xml_name, NULL);
- *node = create_node(xmlnode);
- TRACE("created %p\n", xmlnode);
break;
case NODE_ATTRIBUTE:
- xmlnode = (xmlNode *)xmlNewProp(NULL, xml_name, NULL);
- if(xmlnode)
- {
- xmlnode->doc = get_doc( This );
-
- *node = (IXMLDOMNode*)create_attribute(xmlnode);
- }
-
- TRACE("created %p\n", xmlnode);
+ xmlnode = (xmlNodePtr)xmlNewDocProp(get_doc(This), xml_name, NULL);
break;
-
+ case NODE_TEXT:
+ xmlnode = (xmlNodePtr)xmlNewDocText(get_doc(This), NULL);
+ break;
+ case NODE_CDATA_SECTION:
+ xmlnode = xmlNewCDataBlock(get_doc(This), NULL, 0);
+ break;
+ case NODE_ENTITY_REFERENCE:
+ xmlnode = xmlNewReference(get_doc(This), xml_name);
+ break;
+ case NODE_PROCESSING_INSTRUCTION:
+#ifdef HAVE_XMLNEWDOCPI
+ xmlnode = xmlNewDocPI(get_doc(This), xml_name, NULL);
+#else
+ FIXME("xmlNewDocPI() not supported, use libxml2 2.6.15 or greater\n");
+ xmlnode = NULL;
+#endif
+ break;
+ case NODE_COMMENT:
+ xmlnode = xmlNewDocComment(get_doc(This), NULL);
+ break;
+ case NODE_DOCUMENT_FRAGMENT:
+ xmlnode = xmlNewDocFragment(get_doc(This));
+ break;
+ /* unsupported types */
+ case NODE_DOCUMENT:
+ case NODE_DOCUMENT_TYPE:
+ case NODE_ENTITY:
+ case NODE_NOTATION:
+ heap_free(xml_name);
+ return E_INVALIDARG;
default:
FIXME("unhandled node type %d\n", node_type);
+ xmlnode = NULL;
break;
}
+ *node = create_node(xmlnode);
heap_free(xml_name);
- if(xmlnode && *node)
+ if(*node)
{
+ TRACE("created node (%d, %p, %p)\n", node_type, *node, xmlnode);
xmldoc_add_orphan(xmlnode->doc, xmlnode);
return S_OK;
}
BSTR idString,
IXMLDOMNode** node )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2(iface);
+ FIXME("(%p)->(%s %p)\n", This, debugstr_w(idString), node);
return E_NOTIMPL;
}
IStream *pStream = NULL;
xmlDocPtr xmldoc;
- TRACE("type %d\n", V_VT(&xmlSource) );
+ TRACE("(%p)->type %d\n", This, V_VT(&xmlSource) );
*isSuccessful = VARIANT_FALSE;
IXMLDOMDocument2 *iface,
LONG *value )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2(iface);
+ FIXME("(%p)->(%p)\n", This, value);
return E_NOTIMPL;
}
IXMLDOMDocument2 *iface,
BSTR* urlString )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2(iface);
+ FIXME("(%p)->(%p)\n", This, urlString);
return E_NOTIMPL;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%p <- %d\n", isAsync, This->async);
+ TRACE("(%p)->(%p: %d)\n", This, isAsync, This->async);
*isAsync = This->async;
return S_OK;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%d\n", isAsync);
+ TRACE("(%p)->(%d)\n", This, isAsync);
This->async = isAsync;
return S_OK;
}
static HRESULT WINAPI domdoc_abort(
IXMLDOMDocument2 *iface )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2(iface);
+ FIXME("%p\n", This);
return E_NOTIMPL;
}
int len;
HRESULT hr = S_FALSE, hr2;
- TRACE("%p %s %p\n", This, debugstr_w( bstrXML ), isSuccessful );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w( bstrXML ), isSuccessful );
assert ( &This->node );
return hr;
}
+static int XMLCALL domdoc_save_writecallback(void *ctx, const char *buffer,
+ int len)
+{
+ DWORD written = -1;
+
+ if(!WriteFile(ctx, buffer, len, &written, NULL))
+ {
+ WARN("write error\n");
+ return -1;
+ }
+ else
+ return written;
+}
+
+static int XMLCALL domdoc_save_closecallback(void *ctx)
+{
+ return CloseHandle(ctx) ? 0 : -1;
+}
static HRESULT WINAPI domdoc_save(
IXMLDOMDocument2 *iface,
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
HANDLE handle;
- xmlChar *mem, *p;
- int size;
+ xmlSaveCtxtPtr ctx;
HRESULT ret = S_OK;
- DWORD written;
TRACE("(%p)->(var(vt %d, %s))\n", This, V_VT(&destination),
V_VT(&destination) == VT_BSTR ? debugstr_w(V_BSTR(&destination)) : NULL);
return S_FALSE;
}
- xmlDocDumpMemory(get_doc(This), &mem, &size);
-
- /*
- * libxml2 always adds XML declaration on top of the file and one for each processing instruction node in DOM tree.
- * MSXML adds XML declaration only for processing instruction nodes.
- * We skip the first XML declaration generated by libxml2 to get exactly what we need.
- */
- p = mem;
- if(size > 2 && p[0] == '<' && p[1] == '?') {
- while(p < mem+size && (p[0] != '?' || p[1] != '>'))
- p++;
- p += 2;
- while(p < mem+size && isspace(*p))
- p++;
- size -= p-mem;
- }
-
- if(!WriteFile(handle, p, (DWORD)size, &written, NULL) || written != (DWORD)size)
+ /* disable top XML declaration */
+ ctx = xmlSaveToIO(domdoc_save_writecallback, domdoc_save_closecallback,
+ handle, NULL, XML_SAVE_NO_DECL);
+ if (!ctx)
{
- WARN("write error\n");
- ret = S_FALSE;
+ CloseHandle(handle);
+ return S_FALSE;
}
- xmlFree(mem);
- CloseHandle(handle);
+ if (xmlSaveDoc(ctx, get_doc(This)) == -1) ret = S_FALSE;
+ /* will close file through close callback */
+ xmlSaveClose(ctx);
+
return ret;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%p <- %d\n", isValidating, This->validating);
+ TRACE("(%p)->(%p: %d)\n", This, isValidating, This->validating);
*isValidating = This->validating;
return S_OK;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%d\n", isValidating);
+ TRACE("(%p)->(%d)\n", This, isValidating);
This->validating = isValidating;
return S_OK;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%p <- %d\n", isResolving, This->resolving);
+ TRACE("(%p)->(%p: %d)\n", This, isResolving, This->resolving);
*isResolving = This->resolving;
return S_OK;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%d\n", isResolving);
+ TRACE("(%p)->(%d)\n", This, isResolving);
This->resolving = isResolving;
return S_OK;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%p <- %d\n", isPreserving, This->preserving);
+ TRACE("(%p)->(%p: %d)\n", This, isPreserving, This->preserving);
*isPreserving = This->preserving;
return S_OK;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
- TRACE("%d\n", isPreserving);
+ TRACE("(%p)->(%d)\n", This, isPreserving);
This->preserving = isPreserving;
return S_OK;
}
IXMLDOMDocument2 *iface,
VARIANT readyStateChangeSink )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ FIXME("%p\n", This);
return E_NOTIMPL;
}
IXMLDOMDocument2 *iface,
VARIANT onDataAvailableSink )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ FIXME("%p\n", This);
return E_NOTIMPL;
}
IXMLDOMDocument2 *iface,
VARIANT onTransformNodeSink )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ FIXME("%p\n", This);
return E_NOTIMPL;
}
IXMLDOMDocument2* iface,
IXMLDOMSchemaCollection** schemaCollection )
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ FIXME("(%p)->(%p)\n", This, schemaCollection);
return E_NOTIMPL;
}
IXMLDOMDocument2* iface,
IXMLDOMParseError** err)
{
- FIXME("\n");
+ domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ FIXME("(%p)->(%p)\n", This, err);
return E_NOTIMPL;
}
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ TRACE("(%p)->(%s)\n", This, debugstr_w(p));
+
if (lstrcmpiW(p, SZ_PROPERTY_SELECTION_LANGUAGE) == 0)
{
VARIANT varStr;
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
+ TRACE("(%p)->(%p)\n", This, debugstr_w(p));
+
if (var == NULL)
return E_INVALIDARG;
if (lstrcmpiW(p, SZ_PROPERTY_SELECTION_LANGUAGE) == 0)
{
domdoc *This = impl_from_IObjectWithSite(iface);
- TRACE("%p %s %p\n", This, debugstr_guid( iid ), ppvSite );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid( iid ), ppvSite );
if ( !This->site )
return E_FAIL;
{
domdoc *This = impl_from_IObjectWithSite(iface);
- TRACE("%p %p\n", iface, punk);
+ TRACE("(%p)->(%p)\n", iface, punk);
if(!punk)
{
return IXMLDocument_Release((IXMLDocument *)This);
}
-#define SUPPORTED_OPTIONS (INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_SECURITY_MANAGER)
+#define SAFETY_SUPPORTED_OPTIONS (INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA)
static HRESULT WINAPI xmldoc_Safety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid,
DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
if(!pdwSupportedOptions || !pdwEnabledOptions)
return E_POINTER;
- *pdwSupportedOptions = SUPPORTED_OPTIONS;
+ *pdwSupportedOptions = SAFETY_SUPPORTED_OPTIONS;
*pdwEnabledOptions = This->safeopt;
return S_OK;
DWORD dwOptionSetMask, DWORD dwEnabledOptions)
{
domdoc *This = impl_from_IObjectSafety(iface);
-
TRACE("(%p)->(%s %x %x)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
- if(dwOptionSetMask & ~SUPPORTED_OPTIONS)
- return E_FAIL;
-
- This->safeopt = dwEnabledOptions & dwEnabledOptions;
+ This->safeopt = dwEnabledOptions & dwOptionSetMask & SAFETY_SUPPORTED_OPTIONS;
return S_OK;
}
void** ppvObject )
{
domimpl *This = impl_from_IXMLDOMImplementation( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMImplementation ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
BOOL bValidFeature = FALSE;
BOOL bValidVersion = FALSE;
- TRACE("feature(%s) version (%s)\n", debugstr_w(feature), debugstr_w(version));
+ TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(feature), debugstr_w(version), hasFeature);
if(!feature || !hasFeature)
return E_INVALIDARG;
{
domelem *This = impl_from_IXMLDOMElement( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
DWORD offset = 0;
LPWSTR str;
- TRACE("%p\n", This );
+ TRACE("(%p)->(%p)\n", This, p );
element = get_element( This );
if ( !element )
xmlChar *xml_name, *xml_value = NULL;
HRESULT hr = S_FALSE;
- TRACE("(%p)->(%s,%p)\n", This, debugstr_w(name), value);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), value);
if(!value || !name)
return E_INVALIDARG;
HRESULT hr;
VARIANT var;
- TRACE("(%p)->(%s, var)\n", This, debugstr_w(name));
+ TRACE("(%p)->(%s var)\n", This, debugstr_w(name));
element = get_element( This );
if ( !element )
IXMLDOMAttribute* domAttribute,
IXMLDOMAttribute** attributeNode)
{
- FIXME("\n");
+ domelem *This = impl_from_IXMLDOMElement( iface );
+ FIXME("(%p)->(%p %p)\n", This, domAttribute, attributeNode);
return E_NOTIMPL;
}
IXMLDOMAttribute* domAttribute,
IXMLDOMAttribute** attributeNode)
{
- FIXME("\n");
+ domelem *This = impl_from_IXMLDOMElement( iface );
+ FIXME("(%p)->(%p %p)\n", This, domAttribute, attributeNode);
return E_NOTIMPL;
}
xmlNodePtr element;
HRESULT hr;
- TRACE("(%p)->(%s,%p)\n", This, debugstr_w(bstrName), resultList);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrName), resultList);
if (bstrName[0] == '*' && bstrName[1] == 0)
{
static HRESULT WINAPI domelem_normalize(
IXMLDOMElement *iface )
{
- FIXME("\n");
+ domelem *This = impl_from_IXMLDOMElement( iface );
+ FIXME("%p\n", This);
return E_NOTIMPL;
}
void** ppvObject )
{
entityref *This = impl_from_IXMLDOMEntityReference( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMEntityReference ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
cf = (IClassFactory*) &domdoccf.lpVtbl;
}
else if( IsEqualCLSID( rclsid, &CLSID_SAXXMLReader) ||
- IsEqualCLSID( rclsid, &CLSID_SAXXMLReader30 ))
+ IsEqualCLSID( rclsid, &CLSID_SAXXMLReader30 ) ||
+ IsEqualCLSID( rclsid, &CLSID_SAXXMLReader40 ))
{
cf = (IClassFactory*) &saxreadcf.lpVtbl;
}
static HRESULT WINAPI httprequest_QueryInterface(IXMLHTTPRequest *iface, REFIID riid, void **ppvObject)
{
httprequest *This = impl_from_IXMLHTTPRequest( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLHTTPRequest) ||
IsEqualGUID( riid, &IID_IDispatch) ||
/*
- * MSXML Class Factory
+ * Common definitions
*
* Copyright 2005 Mike McCormack
*
if(ret)
MultiByteToWideChar( CP_UTF8, 0, (LPCSTR)str, -1, ret, len);
}
+ else
+ ret = SysAllocStringLen(NULL, 0);
return ret;
}
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if(This->pUnkOuter)
return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObject);
xmlnode *This = impl_from_IXMLDOMNode( iface );
const xmlChar *str;
- TRACE("%p\n", This );
+ TRACE("(%p)->(%p)\n", This, name );
if (!name)
return E_INVALIDARG;
str = (const xmlChar*) "#document-fragment";
break;
case XML_TEXT_NODE:
- str = (const xmlChar*) "#text";
- break;
+ str = (const xmlChar*) "#text";
+ break;
case XML_DOCUMENT_NODE:
- str = (const xmlChar*) "#document";
- break;
- case XML_ATTRIBUTE_NODE:
- case XML_ELEMENT_NODE:
- case XML_PI_NODE:
+ str = (const xmlChar*) "#document";
+ break;
+ case XML_ATTRIBUTE_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_PI_NODE:
str = This->node->name;
- break;
+ break;
default:
FIXME("nodeName not mapped correctly (%d)\n", This->node->type);
str = This->node->name;
xmlnode *This = impl_from_IXMLDOMNode( iface );
HRESULT r = S_FALSE;
- TRACE("%p %p\n", This, value);
+ TRACE("(%p)->(%p)\n", This, value);
if(!value)
return E_INVALIDARG;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
HRESULT hr;
- xmlChar *str = NULL;
- VARIANT string_value;
TRACE("%p type(%d)\n", This, This->node->type);
- VariantInit(&string_value);
- hr = VariantChangeType(&string_value, &value, 0, VT_BSTR);
- if(FAILED(hr))
- {
- VariantClear(&string_value);
- WARN("Couldn't convert to VT_BSTR\n");
- return hr;
- }
-
- hr = S_FALSE;
/* Document, Document Fragment, Document Type, Element,
- Entity, Entity Reference, Notation aren't supported. */
+ Entity, Entity Reference, Notation aren't supported. */
switch ( This->node->type )
{
case XML_ATTRIBUTE_NODE:
case XML_COMMENT_NODE:
case XML_PI_NODE:
case XML_TEXT_NODE:
- {
+ {
+ VARIANT string_value;
+ xmlChar *str;
+
+ VariantInit(&string_value);
+ hr = VariantChangeType(&string_value, &value, 0, VT_BSTR);
+ if(FAILED(hr))
+ {
+ VariantClear(&string_value);
+ WARN("Couldn't convert to VT_BSTR\n");
+ return hr;
+ }
+
str = xmlChar_from_wchar(V_BSTR(&string_value));
+ VariantClear(&string_value);
+
xmlNodeSetContent(This->node, str);
heap_free(str);
hr = S_OK;
break;
- }
+ }
default:
/* Do nothing for unsupported types. */
+ hr = E_FAIL;
break;
}
- VariantClear(&string_value);
-
return hr;
}
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p %p\n", This, type);
+ TRACE("(%p)->(%p)\n", This, type);
assert( (int)NODE_ELEMENT == (int)XML_ELEMENT_NODE );
assert( (int)NODE_NOTATION == (int)XML_NOTATION_NODE );
xmlNodePtr node,
IXMLDOMNode **out )
{
- TRACE("%p->%s %p\n", This, name, node );
+ TRACE("(%p)->(%s %p %p)\n", This, name, node, out );
if ( !out )
return E_INVALIDARG;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p %p\n", This, childList );
+ TRACE("(%p)->(%p)\n", This, childList );
if ( !childList )
return E_INVALIDARG;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p\n", This );
+ TRACE("(%p)->(%p)\n", This, lastChild );
if (!lastChild)
return E_INVALIDARG;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p\n", This );
+ TRACE("(%p)->(%p)\n", This, previousSibling );
if (!previousSibling)
return E_INVALIDARG;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p\n", This );
+ TRACE("(%p)->(%p)\n", This, nextSibling );
if (!nextSibling)
return E_INVALIDARG;
IXMLDOMNamedNodeMap** attributeMap)
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p\n", This);
+ TRACE("(%p)->(%p)\n", This, attributeMap);
if (!attributeMap)
return E_INVALIDARG;
IXMLDOMNode *before = NULL, *new;
HRESULT hr;
- TRACE("(%p)->(%p,var,%p)\n",This,newChild,outNewChild);
+ TRACE("(%p)->(%p var %p)\n",This,newChild,outNewChild);
if (!newChild)
return E_INVALIDARG;
IXMLDOMNode *realOldChild;
HRESULT hr;
- TRACE("%p->(%p,%p,%p)\n",This,newChild,oldChild,outOldChild);
+ TRACE("(%p)->(%p %p %p)\n", This, newChild, oldChild, outOldChild);
/* Do not believe any documentation telling that newChild == NULL
means removal. It does certainly *not* apply to msxml3! */
HRESULT hr;
IXMLDOMNode *child;
- TRACE("%p->(%p, %p)\n", This, childNode, oldChild);
+ TRACE("(%p)->(%p %p)\n", This, childNode, oldChild);
if(!childNode) return E_INVALIDARG;
VARIANT var;
HRESULT hr;
- TRACE("(%p)->(%p,%p)\n", This, newChild, outNewChild);
+ TRACE("(%p)->(%p %p)\n", This, newChild, outNewChild);
hr = IXMLDOMNode_get_nodeType(newChild, &type);
if(FAILED(hr) || type == NODE_ATTRIBUTE) {
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p\n", This);
+ TRACE("(%p)->(%p)\n", This, hasChild);
if (!hasChild)
return E_INVALIDARG;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p (%p)\n", This, DOMDocument);
+ TRACE("(%p)->(%p)\n", This, DOMDocument);
return DOMDocument_create_from_xmldoc(This->node->doc, (IXMLDOMDocument2**)DOMDocument);
}
xmlNodePtr pClone = NULL;
IXMLDOMNode *pNode = NULL;
- TRACE("%p (%d)\n", This, deep);
+ TRACE("(%p)->(%d %p)\n", This, deep, cloneRoot);
if(!cloneRoot)
return E_INVALIDARG;
xmlnode *This = impl_from_IXMLDOMNode( iface );
const xmlChar *str;
- TRACE("%p\n", This );
+ TRACE("(%p)->(%p)\n", This, xmlnodeType );
if (!xmlnodeType)
return E_INVALIDARG;
BSTR str = NULL;
xmlChar *pContent;
- TRACE("%p type %d\n", This, This->node->type);
+ TRACE("(%p, type %d)->(%p)\n", This, This->node->type, text);
if ( !text )
return E_INVALIDARG;
xmlnode *This = impl_from_IXMLDOMNode( iface );
xmlChar *str, *str2;
- TRACE("%p\n", This);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(text));
switch(This->node->type)
{
IXMLDOMNode *iface,
VARIANT_BOOL* isSpecified)
{
- FIXME("\n");
+ xmlnode *This = impl_from_IXMLDOMNode( iface );
+ FIXME("(%p)->(%p)\n", This, isSpecified);
return E_NOTIMPL;
}
IXMLDOMNode *iface,
IXMLDOMNode** definitionNode)
{
- FIXME("\n");
+ xmlnode *This = impl_from_IXMLDOMNode( iface );
+ FIXME("(%p)->(%p)\n", This, definitionNode);
return E_NOTIMPL;
}
-static HRESULT WINAPI xmlnode_get_dataType(IXMLDOMNode*, VARIANT*);
-
static inline BYTE hex_to_byte(xmlChar c)
{
if(c <= '9') return c-'0';
xmlChar *content;
HRESULT hres = S_FALSE;
- TRACE("iface %p\n", iface);
+ TRACE("(%p)->(%p)\n", This, typedValue);
if(!typedValue)
return E_INVALIDARG;
if(This->node->type == XML_ELEMENT_NODE ||
This->node->type == XML_TEXT_NODE ||
This->node->type == XML_ENTITY_REF_NODE)
- hres = xmlnode_get_dataType(iface, &type);
+ hres = IXMLDOMNode_get_dataType(iface, &type);
if(hres != S_OK && This->node->type != XML_ELEMENT_NODE)
- return xmlnode_get_nodeValue(iface, typedValue);
+ return IXMLDOMNode_get_nodeValue(iface, typedValue);
content = xmlNodeGetContent(This->node);
hres = VARIANT_from_xmlChar(content, typedValue,
IXMLDOMNode *iface,
VARIANT typedValue)
{
- FIXME("\n");
+ xmlnode *This = impl_from_IXMLDOMNode( iface );
+ FIXME("%p\n", This);
return E_NOTIMPL;
}
xmlnode *This = impl_from_IXMLDOMNode( iface );
xmlChar *pVal;
- TRACE("iface %p\n", iface);
+ TRACE("(%p)->(%p)\n", This, dataTypeName);
if(!dataTypeName)
return E_INVALIDARG;
xmlnode *This = impl_from_IXMLDOMNode( iface );
HRESULT hr = E_FAIL;
- TRACE("iface %p\n", iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(dataTypeName));
if(dataTypeName == NULL)
return E_INVALIDARG;
xmlBufferPtr pXmlBuf;
int nSize;
- TRACE("iface %p %d\n", iface, This->node->type);
+ TRACE("(%p %d)->(%p)\n", This, This->node->type, xmlString);
if(!xmlString)
return E_INVALIDARG;
xmlDocPtr result = NULL;
IXMLDOMNode *ssNew;
- TRACE("%p %p %p\n", This, styleSheet, xmlString);
+ TRACE("(%p)->(%p %p)\n", This, styleSheet, xmlString);
if (!libxslt_handle)
return E_NOTIMPL;
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- TRACE("%p %s %p\n", This, debugstr_w(queryString), resultList );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(queryString), resultList );
return queryresult_create( This->node, queryString, resultList );
}
IXMLDOMNodeList *list;
HRESULT r;
- TRACE("%p %s %p\n", This, debugstr_w(queryString), resultNode );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(queryString), resultNode );
*resultNode = NULL;
r = IXMLDOMNode_selectNodes(iface, queryString, &list);
IXMLDOMNode *iface,
VARIANT_BOOL* isParsed)
{
- FIXME("\n");
+ xmlnode *This = impl_from_IXMLDOMNode( iface );
+ FIXME("(%p)->(%p)\n", This, isParsed);
return E_NOTIMPL;
}
HRESULT hr = S_FALSE;
xmlNsPtr *pNSList;
- TRACE("%p %p\n", This, namespaceURI );
+ TRACE("(%p)->(%p)\n", This, namespaceURI );
if(!namespaceURI)
return E_INVALIDARG;
HRESULT hr = S_FALSE;
xmlNsPtr *pNSList;
- TRACE("%p %p\n", This, prefixString );
+ TRACE("(%p)->(%p)\n", This, prefixString );
if(!prefixString)
return E_INVALIDARG;
BSTR str = NULL;
HRESULT r = S_FALSE;
- TRACE("%p %p\n", This, nameString );
+ TRACE("(%p)->(%p)\n", This, nameString );
if ( !nameString )
return E_INVALIDARG;
{
case XML_ELEMENT_NODE:
case XML_ATTRIBUTE_NODE:
+ case XML_PI_NODE:
str = bstr_from_xmlChar( This->node->name );
r = S_OK;
break;
case XML_TEXT_NODE:
+ case XML_COMMENT_NODE:
break;
default:
ERR("Unhandled type %d\n", This->node->type );
IXMLDOMNode* stylesheet,
VARIANT outputObject)
{
- FIXME("\n");
+ xmlnode *This = impl_from_IXMLDOMNode( iface );
+ FIXME("(%p)->(%p)\n", This, stylesheet);
return E_NOTIMPL;
}
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;
default: {
xmlnode *new_node;
REFIID riid,
void** ppvObject )
{
- TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject);
if(!ppvObject)
return E_INVALIDARG;
xmlNodePtr curr;
LONG nodeIndex = 0;
- TRACE("%p %d\n", This, index);
+ TRACE("(%p)->(%d %p)\n", This, index, listItem);
if(!listItem)
return E_INVALIDARG;
xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
- TRACE("%p\n", This);
+ TRACE("(%p)->(%p)\n", This, listLength);
if(!listLength)
return E_INVALIDARG;
{
xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
- TRACE("%p %p\n", This, nextItem );
+ TRACE("(%p)->(%p)\n", This, nextItem );
if(!nextItem)
return E_INVALIDARG;
IXMLDOMNodeList* iface,
IUnknown** ppUnk)
{
- FIXME("\n");
+ xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
+ FIXME("(%p)->(%p)\n", This, ppUnk);
return E_NOTIMPL;
}
REFIID riid, void** ppvObject )
{
xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
- TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject);
if( IsEqualGUID( riid, &IID_IUnknown ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
xmlAttrPtr attr;
xmlNodePtr node;
- TRACE("%p %s %p\n", This, debugstr_w(name), namedItem );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), namedItem );
if ( !namedItem )
return E_INVALIDARG;
IXMLDOMNode *pAttr = NULL;
xmlNodePtr node;
- TRACE("%p %p %p\n", This, newItem, namedItem );
+ TRACE("(%p)->(%p %p)\n", This, newItem, namedItem );
if(!newItem)
return E_INVALIDARG;
xmlAttrPtr attr;
xmlNodePtr node;
- TRACE("%p %s %p\n", This, debugstr_w(name), namedItem );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), namedItem );
if ( !name)
return E_INVALIDARG;
xmlAttrPtr curr;
LONG attrIndex;
- TRACE("%p %d\n", This, index);
+ TRACE("(%p)->(%d %p)\n", This, index, listItem);
*listItem = NULL;
xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
- TRACE("%p\n", This);
+ TRACE("(%p)->(%p)\n", This, listLength);
if( !listLength )
return E_INVALIDARG;
BSTR namespaceURI,
IXMLDOMNode** qualifiedItem)
{
- FIXME("\n");
+ xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
+ FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(baseName), debugstr_w(namespaceURI), qualifiedItem);
return E_NOTIMPL;
}
BSTR namespaceURI,
IXMLDOMNode** qualifiedItem)
{
- FIXME("\n");
+ xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
+ FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(baseName), debugstr_w(namespaceURI), qualifiedItem);
return E_NOTIMPL;
}
xmlAttrPtr curr;
LONG attrIndex;
- TRACE("%p %d\n", This, This->iterator);
+ TRACE("(%p)->(%p: %d)\n", This, nextItem, This->iterator);
*nextItem = NULL;
{
xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
- TRACE("%p %d\n", This, This->iterator);
+ TRACE("(%p: %d)\n", This, This->iterator);
This->iterator = 0;
IXMLDOMNamedNodeMap *iface,
IUnknown** ppUnk)
{
- FIXME("\n");
+ xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
+ FIXME("(%p)->(%p)\n", This, ppUnk);
return E_NOTIMPL;
}
REFIID riid,
void** ppvObject )
{
- TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IUnknown ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
IXMLDOMParseError *iface,
BSTR *url )
{
- FIXME("\n");
+ parse_error_t *This = impl_from_IXMLDOMParseError( iface );
+ FIXME("(%p)->(%p)\n", This, url);
return E_NOTIMPL;
}
IXMLDOMParseError *iface,
BSTR *srcText )
{
- FIXME("\n");
+ parse_error_t *This = impl_from_IXMLDOMParseError( iface );
+ FIXME("(%p)->(%p)\n", This, srcText);
return E_NOTIMPL;
}
IXMLDOMParseError *iface,
LONG *line )
{
- FIXME("\n");
+ parse_error_t *This = impl_from_IXMLDOMParseError( iface );
+ FIXME("(%p)->(%p)\n", This, line);
return E_NOTIMPL;
}
IXMLDOMParseError *iface,
LONG *linepos )
{
- FIXME("\n");
+ parse_error_t *This = impl_from_IXMLDOMParseError( iface );
+ FIXME("(%p)->(%p)\n", This, linepos);
return E_NOTIMPL;
}
IXMLDOMParseError *iface,
LONG *filepos )
{
- FIXME("\n");
+ parse_error_t *This = impl_from_IXMLDOMParseError( iface );
+ FIXME("(%p)->(%p)\n", This, filepos);
return E_NOTIMPL;
}
void** ppvObject )
{
dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMProcessingInstruction ) ||
IsEqualGUID( riid, &IID_IDispatch ) ||
BSTR sTarget;
static const WCHAR szXML[] = {'x','m','l',0};
- TRACE("%p %s\n", This, debugstr_w(data) );
+ TRACE("(%p)->(%s)\n", This, debugstr_w(data) );
/* Cannot set data to a PI node whose target is 'xml' */
hr = dom_pi_get_nodeName(iface, &sTarget);
{
queryresult *This = impl_from_IXMLDOMNodeList( iface );
- TRACE("%p %s %p\n", iface, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject);
if(!ppvObject)
return E_INVALIDARG;
{
queryresult *This = impl_from_IXMLDOMNodeList( iface );
- TRACE("%p %d\n", This, index);
+ TRACE("(%p)->(%d %p)\n", This, index, listItem);
if(!listItem)
return E_INVALIDARG;
{
queryresult *This = impl_from_IXMLDOMNodeList( iface );
- TRACE("%p\n", This);
+ TRACE("(%p)->(%p)\n", This, listLength);
if(!listLength)
return E_INVALIDARG;
{
queryresult *This = impl_from_IXMLDOMNodeList( iface );
- TRACE("%p %p\n", This, nextItem );
+ TRACE("(%p)->(%p)\n", This, nextItem );
if(!nextItem)
return E_INVALIDARG;
IXMLDOMNodeList* iface,
IUnknown** ppUnk)
{
- FIXME("\n");
+ queryresult *This = impl_from_IXMLDOMNodeList( iface );
+ FIXME("(%p)->(%p)\n", This, ppUnk);
return E_NOTIMPL;
}
{
schema_t *This = impl_from_IXMLDOMSchemaCollection( iface );
- TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid( riid ), ppvObject );
if ( IsEqualIID( riid, &IID_IUnknown ) ||
IsEqualIID( riid, &IID_IDispatch ) ||
void** ppvObject )
{
domtext *This = impl_from_IXMLDOMText( iface );
- TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if ( IsEqualGUID( riid, &IID_IXMLDOMText ) ||
IsEqualGUID( riid, &IID_IXMLDOMCharacterData) ||
BSTR *p)
{
domtext *This = impl_from_IXMLDOMText( iface );
- HRESULT hr = E_FAIL;
+ HRESULT hr;
VARIANT vRet;
if(!p)
BSTR data)
{
domtext *This = impl_from_IXMLDOMText( iface );
- HRESULT hr = E_FAIL;
VARIANT val;
- TRACE("%p %s\n", This, debugstr_w(data) );
+ TRACE("(%p)->(%s)\n", This, debugstr_w(data) );
V_VT(&val) = VT_BSTR;
V_BSTR(&val) = data;
- hr = IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), val );
-
- return hr;
+ return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), val );
}
static HRESULT WINAPI domtext_get_length(
LONG *len)
{
domtext *This = impl_from_IXMLDOMText( iface );
- xmlChar *pContent;
- LONG nLength = 0;
+ HRESULT hr;
+ BSTR data;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%p)\n", This, len);
if(!len)
return E_INVALIDARG;
- pContent = xmlNodeGetContent(This->node.node);
- if(pContent)
+ hr = IXMLDOMText_get_data(iface, &data);
+ if(hr == S_OK)
{
- nLength = xmlStrlen(pContent);
- xmlFree(pContent);
+ *len = SysStringLen(data);
+ SysFreeString(data);
}
- *len = nLength;
-
- return S_OK;
+ return hr;
}
static HRESULT WINAPI domtext_substringData(
LONG offset, LONG count, BSTR *p)
{
domtext *This = impl_from_IXMLDOMText( iface );
- xmlChar *pContent;
- LONG nLength = 0;
- HRESULT hr = S_FALSE;
+ HRESULT hr;
+ BSTR data;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%d %d %p)\n", This, offset, count, p);
if(!p)
return E_INVALIDARG;
return E_INVALIDARG;
if(count == 0)
- return hr;
+ return S_FALSE;
- pContent = xmlNodeGetContent(This->node.node);
- if(pContent)
+ hr = IXMLDOMText_get_data(iface, &data);
+ if(hr == S_OK)
{
- nLength = xmlStrlen(pContent);
+ LONG len = SysStringLen(data);
- if( offset < nLength)
+ if(offset < len)
{
- BSTR sContent = bstr_from_xmlChar(pContent);
- if(offset + count > nLength)
- *p = SysAllocString(&sContent[offset]);
+ if(offset + count > len)
+ *p = SysAllocString(&data[offset]);
else
- *p = SysAllocStringLen(&sContent[offset], count);
-
- SysFreeString(sContent);
- hr = S_OK;
+ *p = SysAllocStringLen(&data[offset], count);
}
+ else
+ hr = S_FALSE;
- xmlFree(pContent);
+ SysFreeString(data);
}
return hr;
BSTR p)
{
domtext *This = impl_from_IXMLDOMText( iface );
- xmlChar *pContent;
- HRESULT hr = S_FALSE;
+ HRESULT hr;
+ BSTR data;
+ LONG p_len;
- TRACE("%p\n", iface);
+ TRACE("(%p)->(%s)\n", This, debugstr_w(p));
/* Nothing to do if NULL or an Empty string passed in. */
- if(p == NULL || SysStringLen(p) == 0)
- return S_OK;
+ if((p_len = SysStringLen(p)) == 0) return S_OK;
- pContent = xmlChar_from_wchar( p );
- if(pContent)
+ hr = IXMLDOMText_get_data(iface, &data);
+ if(hr == S_OK)
{
- if(xmlTextConcat(This->node.node, pContent, SysStringLen(p)) == 0)
- hr = S_OK;
- else
- hr = E_FAIL;
- heap_free( pContent );
+ LONG len = SysStringLen(data);
+ BSTR str = SysAllocStringLen(NULL, p_len + len);
+
+ memcpy(str, data, len*sizeof(WCHAR));
+ memcpy(&str[len], p, p_len*sizeof(WCHAR));
+ str[len+p_len] = 0;
+
+ hr = IXMLDOMText_put_data(iface, str);
+
+ SysFreeString(str);
+ SysFreeString(data);
}
- else
- hr = E_FAIL;
return hr;
}
LONG offset, BSTR p)
{
domtext *This = impl_from_IXMLDOMText( iface );
- xmlChar *pXmlContent;
- BSTR sNewString;
- HRESULT hr = S_FALSE;
- LONG nLength = 0, nLengthP = 0;
- xmlChar *str = NULL;
+ HRESULT hr;
+ BSTR data;
+ LONG p_len;
- TRACE("%p\n", This);
+ TRACE("(%p)->(%d %s)\n", This, offset, debugstr_w(p));
/* If have a NULL or empty string, don't do anything. */
- if(SysStringLen(p) == 0)
+ if((p_len = SysStringLen(p)) == 0)
return S_OK;
if(offset < 0)
return E_INVALIDARG;
}
- pXmlContent = xmlNodeGetContent(This->node.node);
- if(pXmlContent)
+ hr = IXMLDOMText_get_data(iface, &data);
+ if(hr == S_OK)
{
- BSTR sContent = bstr_from_xmlChar( pXmlContent );
- nLength = SysStringLen(sContent);
- nLengthP = SysStringLen(p);
+ LONG len = SysStringLen(data);
+ BSTR str;
- if(nLength < offset)
+ if(len < offset)
{
- SysFreeString(sContent);
- xmlFree(pXmlContent);
-
+ SysFreeString(data);
return E_INVALIDARG;
}
- sNewString = SysAllocStringLen(NULL, nLength + nLengthP + 1);
- if(sNewString)
- {
- if(offset > 0)
- memcpy(sNewString, sContent, offset * sizeof(WCHAR));
-
- memcpy(&sNewString[offset], p, nLengthP * sizeof(WCHAR));
-
- if(offset+nLengthP < nLength)
- memcpy(&sNewString[offset+nLengthP], &sContent[offset], (nLength-offset) * sizeof(WCHAR));
-
- sNewString[nLengthP + nLength] = 0;
-
- str = xmlChar_from_wchar(sNewString);
- if(str)
- {
- xmlNodeSetContent(This->node.node, str);
- hr = S_OK;
- }
- heap_free(str);
-
- SysFreeString(sNewString);
- }
+ str = SysAllocStringLen(NULL, len + p_len);
+ /* start part, supplied string and end part */
+ memcpy(str, data, offset*sizeof(WCHAR));
+ memcpy(&str[offset], p, p_len*sizeof(WCHAR));
+ memcpy(&str[offset+p_len], &data[offset], (len-offset)*sizeof(WCHAR));
+ str[len+p_len] = 0;
- SysFreeString(sContent);
+ hr = IXMLDOMText_put_data(iface, str);
- xmlFree(pXmlContent);
+ SysFreeString(str);
+ SysFreeString(data);
}
return hr;
LONG len = -1;
BSTR str;
- TRACE("%p %d %d\n", iface, offset, count);
+ TRACE("(%p)->(%d %d)\n", iface, offset, count);
hr = IXMLDOMText_get_length(iface, &len);
if(hr != S_OK) return hr;
IXMLDOMText *iface,
LONG offset, LONG count, BSTR p)
{
- FIXME("\n");
- return E_NOTIMPL;
+ domtext *This = impl_from_IXMLDOMText( iface );
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %d %s)\n", This, offset, count, debugstr_w(p));
+
+ hr = IXMLDOMText_deleteData(iface, offset, count);
+
+ if (hr == S_OK)
+ hr = IXMLDOMText_insertData(iface, offset, p);
+
+ return hr;
}
static HRESULT WINAPI domtext_splitText(
IXMLDOMText *iface,
LONG offset, IXMLDOMText **txtNode)
{
- FIXME("\n");
+ domtext *This = impl_from_IXMLDOMText( iface );
+ FIXME("(%p)->(%d %p)\n", This, offset, txtNode);
return E_NOTIMPL;
}
interface IMXReaderControl;
};
+[
+ uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)
+]
+coclass SAXXMLReader40
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+};
+
[
uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)
]