mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:03:00 +00:00
[MSXML3] Sync with Wine Staging 4.0. CORE-15682
This commit is contained in:
parent
9ab78df104
commit
9f0f6adfb0
6 changed files with 89 additions and 27 deletions
|
@ -50,6 +50,7 @@ typedef struct _domattr
|
||||||
xmlnode node;
|
xmlnode node;
|
||||||
IXMLDOMAttribute IXMLDOMAttribute_iface;
|
IXMLDOMAttribute IXMLDOMAttribute_iface;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
BOOL floating;
|
||||||
} domattr;
|
} domattr;
|
||||||
|
|
||||||
static const tid_t domattr_se_tids[] = {
|
static const tid_t domattr_se_tids[] = {
|
||||||
|
@ -116,6 +117,11 @@ static ULONG WINAPI domattr_Release(
|
||||||
if ( ref == 0 )
|
if ( ref == 0 )
|
||||||
{
|
{
|
||||||
destroy_xmlnode(&This->node);
|
destroy_xmlnode(&This->node);
|
||||||
|
if ( This->floating )
|
||||||
|
{
|
||||||
|
xmlFreeNs( This->node.node->ns );
|
||||||
|
xmlFreeNode( This->node.node );
|
||||||
|
}
|
||||||
heap_free( This );
|
heap_free( This );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,6 +549,8 @@ static HRESULT WINAPI domattr_get_namespaceURI(
|
||||||
IXMLDOMAttribute *iface,
|
IXMLDOMAttribute *iface,
|
||||||
BSTR* p)
|
BSTR* p)
|
||||||
{
|
{
|
||||||
|
static const WCHAR w3xmlns[] = { 'h','t','t','p',':','/','/', 'w','w','w','.','w','3','.',
|
||||||
|
'o','r','g','/','2','0','0','0','/','x','m','l','n','s','/',0 };
|
||||||
domattr *This = impl_from_IXMLDOMAttribute( iface );
|
domattr *This = impl_from_IXMLDOMAttribute( iface );
|
||||||
xmlNsPtr ns = This->node.node->ns;
|
xmlNsPtr ns = This->node.node->ns;
|
||||||
|
|
||||||
|
@ -559,7 +567,12 @@ static HRESULT WINAPI domattr_get_namespaceURI(
|
||||||
if (xmlStrEqual(This->node.node->name, xmlns))
|
if (xmlStrEqual(This->node.node->name, xmlns))
|
||||||
*p = bstr_from_xmlChar(xmlns);
|
*p = bstr_from_xmlChar(xmlns);
|
||||||
else if (xmlStrEqual(ns->prefix, xmlns))
|
else if (xmlStrEqual(ns->prefix, xmlns))
|
||||||
|
{
|
||||||
|
if (xmldoc_version(This->node.node->doc) == MSXML6)
|
||||||
|
*p = SysAllocString(w3xmlns);
|
||||||
|
else
|
||||||
*p = SysAllocStringLen(NULL, 0);
|
*p = SysAllocStringLen(NULL, 0);
|
||||||
|
}
|
||||||
else if (ns->href)
|
else if (ns->href)
|
||||||
*p = bstr_from_xmlChar(ns->href);
|
*p = bstr_from_xmlChar(ns->href);
|
||||||
}
|
}
|
||||||
|
@ -709,7 +722,7 @@ static dispex_static_data_t domattr_dispex = {
|
||||||
domattr_iface_tids
|
domattr_iface_tids
|
||||||
};
|
};
|
||||||
|
|
||||||
IUnknown* create_attribute( xmlNodePtr attribute )
|
IUnknown* create_attribute( xmlNodePtr attribute, BOOL floating )
|
||||||
{
|
{
|
||||||
domattr *This;
|
domattr *This;
|
||||||
|
|
||||||
|
@ -719,6 +732,7 @@ IUnknown* create_attribute( xmlNodePtr attribute )
|
||||||
|
|
||||||
This->IXMLDOMAttribute_iface.lpVtbl = &domattr_vtbl;
|
This->IXMLDOMAttribute_iface.lpVtbl = &domattr_vtbl;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
|
This->floating = floating;
|
||||||
|
|
||||||
init_xmlnode(&This->node, attribute, (IXMLDOMNode*)&This->IXMLDOMAttribute_iface, &domattr_dispex);
|
init_xmlnode(&This->node, attribute, (IXMLDOMNode*)&This->IXMLDOMAttribute_iface, &domattr_dispex);
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,7 @@ static const WCHAR PropValueXSLPatternW[] = {'X','S','L','P','a','t','t','e','r'
|
||||||
static const WCHAR PropertyResolveExternalsW[] = {'R','e','s','o','l','v','e','E','x','t','e','r','n','a','l','s',0};
|
static const WCHAR PropertyResolveExternalsW[] = {'R','e','s','o','l','v','e','E','x','t','e','r','n','a','l','s',0};
|
||||||
static const WCHAR PropertyAllowXsltScriptW[] = {'A','l','l','o','w','X','s','l','t','S','c','r','i','p','t',0};
|
static const WCHAR PropertyAllowXsltScriptW[] = {'A','l','l','o','w','X','s','l','t','S','c','r','i','p','t',0};
|
||||||
static const WCHAR PropertyAllowDocumentFunctionW[] = {'A','l','l','o','w','D','o','c','u','m','e','n','t','F','u','n','c','t','i','o','n',0};
|
static const WCHAR PropertyAllowDocumentFunctionW[] = {'A','l','l','o','w','D','o','c','u','m','e','n','t','F','u','n','c','t','i','o','n',0};
|
||||||
|
static const WCHAR PropertyNormalizeAttributeValuesW[] = {'N','o','r','m','a','l','i','z','e','A','t','t','r','i','b','u','t','e','V','a','l','u','e','s',0};
|
||||||
|
|
||||||
/* Anything that passes the test_get_ownerDocument()
|
/* Anything that passes the test_get_ownerDocument()
|
||||||
* tests can go here (data shared between all instances).
|
* tests can go here (data shared between all instances).
|
||||||
|
@ -395,6 +396,11 @@ xmlNodePtr xmldoc_unlink_xmldecl(xmlDocPtr doc)
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MSXML_VERSION xmldoc_version(xmlDocPtr doc)
|
||||||
|
{
|
||||||
|
return properties_from_xmlDocPtr(doc)->version;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL is_preserving_whitespace(xmlNodePtr node)
|
BOOL is_preserving_whitespace(xmlNodePtr node)
|
||||||
{
|
{
|
||||||
domdoc_properties* properties = NULL;
|
domdoc_properties* properties = NULL;
|
||||||
|
@ -2286,8 +2292,8 @@ static HRESULT WINAPI domdoc_load(
|
||||||
|
|
||||||
if ( filename )
|
if ( filename )
|
||||||
{
|
{
|
||||||
|
IUri *uri = NULL;
|
||||||
IMoniker *mon;
|
IMoniker *mon;
|
||||||
IUri *uri;
|
|
||||||
|
|
||||||
if (This->properties->uri)
|
if (This->properties->uri)
|
||||||
{
|
{
|
||||||
|
@ -2304,15 +2310,19 @@ static HRESULT WINAPI domdoc_load(
|
||||||
IMoniker_Release(mon);
|
IMoniker_Release(mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( FAILED(hr) )
|
if (SUCCEEDED(hr))
|
||||||
This->error = E_FAIL;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
get_doc(This)->name = (char *)xmlchar_from_wcharn(filename, -1, TRUE);
|
get_doc(This)->name = (char *)xmlchar_from_wcharn(filename, -1, TRUE);
|
||||||
This->properties->uri = uri;
|
This->properties->uri = uri;
|
||||||
hr = This->error = S_OK;
|
hr = This->error = S_OK;
|
||||||
*isSuccessful = VARIANT_TRUE;
|
*isSuccessful = VARIANT_TRUE;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (uri)
|
||||||
|
IUri_Release(uri);
|
||||||
|
This->error = E_FAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!filename || FAILED(hr)) {
|
if(!filename || FAILED(hr)) {
|
||||||
|
@ -3108,6 +3118,7 @@ static HRESULT WINAPI domdoc_setProperty(
|
||||||
lstrcmpiW(p, PropertyNewParserW) == 0 ||
|
lstrcmpiW(p, PropertyNewParserW) == 0 ||
|
||||||
lstrcmpiW(p, PropertyResolveExternalsW) == 0 ||
|
lstrcmpiW(p, PropertyResolveExternalsW) == 0 ||
|
||||||
lstrcmpiW(p, PropertyAllowXsltScriptW) == 0 ||
|
lstrcmpiW(p, PropertyAllowXsltScriptW) == 0 ||
|
||||||
|
lstrcmpiW(p, PropertyNormalizeAttributeValuesW) == 0 ||
|
||||||
lstrcmpiW(p, PropertyAllowDocumentFunctionW) == 0)
|
lstrcmpiW(p, PropertyAllowDocumentFunctionW) == 0)
|
||||||
{
|
{
|
||||||
/* Ignore */
|
/* Ignore */
|
||||||
|
|
|
@ -1398,7 +1398,7 @@ static HRESULT WINAPI domelem_getAttributeNode(
|
||||||
|
|
||||||
if (attr)
|
if (attr)
|
||||||
{
|
{
|
||||||
IUnknown *unk = create_attribute((xmlNodePtr)attr);
|
IUnknown *unk = create_attribute((xmlNodePtr)attr, FALSE);
|
||||||
hr = IUnknown_QueryInterface(unk, &IID_IXMLDOMAttribute, (void**)attributeNode);
|
hr = IUnknown_QueryInterface(unk, &IID_IXMLDOMAttribute, (void**)attributeNode);
|
||||||
IUnknown_Release(unk);
|
IUnknown_Release(unk);
|
||||||
}
|
}
|
||||||
|
@ -1754,8 +1754,11 @@ static HRESULT domelem_remove_named_item(xmlNodePtr node, BSTR name, IXMLDOMNode
|
||||||
|
|
||||||
static HRESULT domelem_get_item(const xmlNodePtr node, LONG index, IXMLDOMNode **item)
|
static HRESULT domelem_get_item(const xmlNodePtr node, LONG index, IXMLDOMNode **item)
|
||||||
{
|
{
|
||||||
|
xmlNsPtr ns, xmlns;
|
||||||
xmlAttrPtr curr;
|
xmlAttrPtr curr;
|
||||||
LONG attrIndex;
|
LONG attrIndex;
|
||||||
|
IUnknown *unk;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p)->(%d %p)\n", node, index, item);
|
TRACE("(%p)->(%d %p)\n", node, index, item);
|
||||||
|
|
||||||
|
@ -1764,43 +1767,76 @@ static HRESULT domelem_get_item(const xmlNodePtr node, LONG index, IXMLDOMNode *
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
|
|
||||||
|
attrIndex = 0;
|
||||||
curr = node->properties;
|
curr = node->properties;
|
||||||
|
if (curr) {
|
||||||
for (attrIndex = 0; attrIndex < index; attrIndex++) {
|
for (; attrIndex < index && curr->next != NULL; attrIndex++)
|
||||||
if (curr->next == NULL)
|
|
||||||
return S_FALSE;
|
|
||||||
else
|
|
||||||
curr = curr->next;
|
curr = curr->next;
|
||||||
|
|
||||||
|
if (attrIndex == index) {
|
||||||
|
*item = create_node( (xmlNodePtr) curr );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*item = create_node( (xmlNodePtr) curr );
|
if (!node->nsDef)
|
||||||
|
return S_FALSE;
|
||||||
|
|
||||||
return S_OK;
|
attrIndex++;
|
||||||
|
ns = node->nsDef;
|
||||||
|
for (; attrIndex < index && ns->next != NULL; attrIndex++)
|
||||||
|
ns = ns->next;
|
||||||
|
|
||||||
|
if (attrIndex < index)
|
||||||
|
return S_FALSE;
|
||||||
|
|
||||||
|
xmlns = xmlNewNs(NULL, BAD_CAST "http://www.w3.org/2000/xmlns/", BAD_CAST "xmlns");
|
||||||
|
if (!xmlns)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
curr = xmlNewNsProp(NULL, xmlns, ns->prefix, ns->href);
|
||||||
|
if (!curr) {
|
||||||
|
xmlFreeNs(xmlns);
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
curr->doc = node->doc;
|
||||||
|
|
||||||
|
unk = create_attribute((xmlNodePtr)curr, TRUE);
|
||||||
|
if (!unk) {
|
||||||
|
xmlFreeNs(xmlns);
|
||||||
|
xmlFreeProp(curr);
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = IUnknown_QueryInterface(unk, &IID_IXMLDOMNode, (void**)item);
|
||||||
|
IUnknown_Release(unk);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT domelem_get_length(const xmlNodePtr node, LONG *length)
|
static HRESULT domelem_get_length(const xmlNodePtr node, LONG *length)
|
||||||
{
|
{
|
||||||
xmlAttrPtr first;
|
|
||||||
xmlAttrPtr curr;
|
xmlAttrPtr curr;
|
||||||
LONG attrCount;
|
LONG attrCount;
|
||||||
|
xmlNsPtr ns;
|
||||||
|
|
||||||
TRACE("(%p)->(%p)\n", node, length);
|
TRACE("(%p)->(%p)\n", node, length);
|
||||||
|
|
||||||
if( !length )
|
if( !length )
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
first = node->properties;
|
attrCount = 0;
|
||||||
if (first == NULL) {
|
curr = node->properties;
|
||||||
*length = 0;
|
while (curr) {
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
curr = first;
|
|
||||||
attrCount = 1;
|
|
||||||
while (curr->next) {
|
|
||||||
attrCount++;
|
attrCount++;
|
||||||
curr = curr->next;
|
curr = curr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ns = node->nsDef;
|
||||||
|
while (ns) {
|
||||||
|
attrCount++;
|
||||||
|
ns = ns->next;
|
||||||
|
}
|
||||||
*length = attrCount;
|
*length = attrCount;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -252,7 +252,7 @@ extern IUnknown *create_domdoc( xmlNodePtr ) DECLSPEC_HIDDEN;
|
||||||
extern IUnknown *create_xmldoc( void ) DECLSPEC_HIDDEN;
|
extern IUnknown *create_xmldoc( void ) DECLSPEC_HIDDEN;
|
||||||
extern IXMLDOMNode *create_node( xmlNodePtr ) DECLSPEC_HIDDEN;
|
extern IXMLDOMNode *create_node( xmlNodePtr ) DECLSPEC_HIDDEN;
|
||||||
extern IUnknown *create_element( xmlNodePtr ) DECLSPEC_HIDDEN;
|
extern IUnknown *create_element( xmlNodePtr ) DECLSPEC_HIDDEN;
|
||||||
extern IUnknown *create_attribute( xmlNodePtr ) DECLSPEC_HIDDEN;
|
extern IUnknown *create_attribute( xmlNodePtr, BOOL ) DECLSPEC_HIDDEN;
|
||||||
extern IUnknown *create_text( xmlNodePtr ) DECLSPEC_HIDDEN;
|
extern IUnknown *create_text( xmlNodePtr ) DECLSPEC_HIDDEN;
|
||||||
extern IUnknown *create_pi( xmlNodePtr ) DECLSPEC_HIDDEN;
|
extern IUnknown *create_pi( xmlNodePtr ) DECLSPEC_HIDDEN;
|
||||||
extern IUnknown *create_comment( xmlNodePtr ) DECLSPEC_HIDDEN;
|
extern IUnknown *create_comment( xmlNodePtr ) DECLSPEC_HIDDEN;
|
||||||
|
@ -284,6 +284,7 @@ extern HRESULT xmldoc_add_orphan( xmlDocPtr doc, xmlNodePtr node ) DECLSPEC_HIDD
|
||||||
extern HRESULT xmldoc_remove_orphan( xmlDocPtr doc, xmlNodePtr node ) DECLSPEC_HIDDEN;
|
extern HRESULT xmldoc_remove_orphan( xmlDocPtr doc, xmlNodePtr node ) DECLSPEC_HIDDEN;
|
||||||
extern void xmldoc_link_xmldecl(xmlDocPtr doc, xmlNodePtr node) DECLSPEC_HIDDEN;
|
extern void xmldoc_link_xmldecl(xmlDocPtr doc, xmlNodePtr node) DECLSPEC_HIDDEN;
|
||||||
extern xmlNodePtr xmldoc_unlink_xmldecl(xmlDocPtr doc) DECLSPEC_HIDDEN;
|
extern xmlNodePtr xmldoc_unlink_xmldecl(xmlDocPtr doc) DECLSPEC_HIDDEN;
|
||||||
|
extern MSXML_VERSION xmldoc_version( xmlDocPtr doc ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
extern HRESULT XMLElement_create( xmlNodePtr node, LPVOID *ppObj, BOOL own ) DECLSPEC_HIDDEN;
|
extern HRESULT XMLElement_create( xmlNodePtr node, LPVOID *ppObj, BOOL own ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
|
|
@ -2271,7 +2271,7 @@ IXMLDOMNode *create_node( xmlNodePtr node )
|
||||||
pUnk = create_element( node );
|
pUnk = create_element( node );
|
||||||
break;
|
break;
|
||||||
case XML_ATTRIBUTE_NODE:
|
case XML_ATTRIBUTE_NODE:
|
||||||
pUnk = create_attribute( node );
|
pUnk = create_attribute( node, FALSE );
|
||||||
break;
|
break;
|
||||||
case XML_TEXT_NODE:
|
case XML_TEXT_NODE:
|
||||||
pUnk = create_text( node );
|
pUnk = create_text( node );
|
||||||
|
|
|
@ -129,7 +129,7 @@ reactos/dll/win32/msvfw32 # Synced to WineStaging-4.0
|
||||||
reactos/dll/win32/msvidc32 # Synced to WineStaging-4.0
|
reactos/dll/win32/msvidc32 # Synced to WineStaging-4.0
|
||||||
reactos/dll/win32/msxml # Synced to WineStaging-3.3
|
reactos/dll/win32/msxml # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/msxml2 # Synced to WineStaging-3.3
|
reactos/dll/win32/msxml2 # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/msxml3 # Synced to WineStaging-3.3
|
reactos/dll/win32/msxml3 # Synced to WineStaging-4.0
|
||||||
reactos/dll/win32/msxml4 # Synced to WineStaging-3.3
|
reactos/dll/win32/msxml4 # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/msxml6 # Synced to WineStaging-3.3
|
reactos/dll/win32/msxml6 # Synced to WineStaging-3.3
|
||||||
reactos/dll/win32/nddeapi # Synced to WineStaging-3.3
|
reactos/dll/win32/nddeapi # Synced to WineStaging-3.3
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue