msxml3: Added stub support for ISAXDTDHandler/IVBSAXDTDHandler for MXWriter.
This commit is contained in:
parent
2e384c4f95
commit
71ecd3b422
|
@ -140,9 +140,11 @@ typedef struct
|
|||
ISAXContentHandler ISAXContentHandler_iface;
|
||||
ISAXLexicalHandler ISAXLexicalHandler_iface;
|
||||
ISAXDeclHandler ISAXDeclHandler_iface;
|
||||
ISAXDTDHandler ISAXDTDHandler_iface;
|
||||
IVBSAXDeclHandler IVBSAXDeclHandler_iface;
|
||||
IVBSAXLexicalHandler IVBSAXLexicalHandler_iface;
|
||||
IVBSAXContentHandler IVBSAXContentHandler_iface;
|
||||
IVBSAXDTDHandler IVBSAXDTDHandler_iface;
|
||||
|
||||
LONG ref;
|
||||
MSXML_VERSION class_version;
|
||||
|
@ -655,6 +657,16 @@ static inline mxwriter *impl_from_IVBSAXDeclHandler(IVBSAXDeclHandler *iface)
|
|||
return CONTAINING_RECORD(iface, mxwriter, IVBSAXDeclHandler_iface);
|
||||
}
|
||||
|
||||
static inline mxwriter *impl_from_ISAXDTDHandler(ISAXDTDHandler *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, mxwriter, ISAXDTDHandler_iface);
|
||||
}
|
||||
|
||||
static inline mxwriter *impl_from_IVBSAXDTDHandler(IVBSAXDTDHandler *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, mxwriter, IVBSAXDTDHandler_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI mxwriter_QueryInterface(IMXWriter *iface, REFIID riid, void **obj)
|
||||
{
|
||||
mxwriter *This = impl_from_IMXWriter( iface );
|
||||
|
@ -681,6 +693,10 @@ static HRESULT WINAPI mxwriter_QueryInterface(IMXWriter *iface, REFIID riid, voi
|
|||
{
|
||||
*obj = &This->ISAXDeclHandler_iface;
|
||||
}
|
||||
else if ( IsEqualGUID( riid, &IID_ISAXDTDHandler ) )
|
||||
{
|
||||
*obj = &This->ISAXDTDHandler_iface;
|
||||
}
|
||||
else if ( IsEqualGUID( riid, &IID_IVBSAXDeclHandler ) )
|
||||
{
|
||||
*obj = &This->IVBSAXDeclHandler_iface;
|
||||
|
@ -693,6 +709,10 @@ static HRESULT WINAPI mxwriter_QueryInterface(IMXWriter *iface, REFIID riid, voi
|
|||
{
|
||||
*obj = &This->IVBSAXContentHandler_iface;
|
||||
}
|
||||
else if ( IsEqualGUID( riid, &IID_IVBSAXDTDHandler ) )
|
||||
{
|
||||
*obj = &This->IVBSAXDTDHandler_iface;
|
||||
}
|
||||
else if (dispex_query_interface(&This->dispex, riid, obj))
|
||||
{
|
||||
return *obj ? S_OK : E_NOINTERFACE;
|
||||
|
@ -2093,6 +2113,140 @@ static const IVBSAXContentHandlerVtbl VBSAXContentHandlerVtbl = {
|
|||
VBSAXContentHandler_skippedEntity
|
||||
};
|
||||
|
||||
static HRESULT WINAPI SAXDTDHandler_QueryInterface(ISAXDTDHandler *iface, REFIID riid, void **obj)
|
||||
{
|
||||
mxwriter *This = impl_from_ISAXDTDHandler( iface );
|
||||
return IMXWriter_QueryInterface(&This->IMXWriter_iface, riid, obj);
|
||||
}
|
||||
|
||||
static ULONG WINAPI SAXDTDHandler_AddRef(ISAXDTDHandler *iface)
|
||||
{
|
||||
mxwriter *This = impl_from_ISAXDTDHandler( iface );
|
||||
return IMXWriter_AddRef(&This->IMXWriter_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI SAXDTDHandler_Release(ISAXDTDHandler *iface)
|
||||
{
|
||||
mxwriter *This = impl_from_ISAXDTDHandler( iface );
|
||||
return IMXWriter_Release(&This->IMXWriter_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI SAXDTDHandler_notationDecl(ISAXDTDHandler *iface,
|
||||
const WCHAR *name, INT nname,
|
||||
const WCHAR *publicid, INT npublicid,
|
||||
const WCHAR *systemid, INT nsystemid)
|
||||
{
|
||||
mxwriter *This = impl_from_ISAXDTDHandler( iface );
|
||||
FIXME("(%p)->(%s:%d, %s:%d, %s:%d): stub\n", This, debugstr_wn(name, nname), nname,
|
||||
debugstr_wn(publicid, npublicid), npublicid, debugstr_wn(systemid, nsystemid), nsystemid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI SAXDTDHandler_unparsedEntityDecl(ISAXDTDHandler *iface,
|
||||
const WCHAR *name, INT nname,
|
||||
const WCHAR *publicid, INT npublicid,
|
||||
const WCHAR *systemid, INT nsystemid,
|
||||
const WCHAR *notation, INT nnotation)
|
||||
{
|
||||
mxwriter *This = impl_from_ISAXDTDHandler( iface );
|
||||
FIXME("(%p)->(%s:%d, %s:%d, %s:%d, %s:%d): stub\n", This, debugstr_wn(name, nname), nname,
|
||||
debugstr_wn(publicid, npublicid), npublicid, debugstr_wn(systemid, nsystemid), nsystemid,
|
||||
debugstr_wn(notation, nnotation), nnotation);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const ISAXDTDHandlerVtbl SAXDTDHandlerVtbl = {
|
||||
SAXDTDHandler_QueryInterface,
|
||||
SAXDTDHandler_AddRef,
|
||||
SAXDTDHandler_Release,
|
||||
SAXDTDHandler_notationDecl,
|
||||
SAXDTDHandler_unparsedEntityDecl
|
||||
};
|
||||
|
||||
/*** IVBSAXDTDHandler ***/
|
||||
static HRESULT WINAPI VBSAXDTDHandler_QueryInterface(IVBSAXDTDHandler *iface, REFIID riid, void **obj)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_QueryInterface(&This->IMXWriter_iface, riid, obj);
|
||||
}
|
||||
|
||||
static ULONG WINAPI VBSAXDTDHandler_AddRef(IVBSAXDTDHandler *iface)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_AddRef(&This->IMXWriter_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI VBSAXDTDHandler_Release(IVBSAXDTDHandler *iface)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_Release(&This->IMXWriter_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI VBSAXDTDHandler_GetTypeInfoCount(IVBSAXDTDHandler *iface, UINT* pctinfo)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_GetTypeInfoCount(&This->IMXWriter_iface, pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI VBSAXDTDHandler_GetTypeInfo(IVBSAXDTDHandler *iface, UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_GetTypeInfo(&This->IMXWriter_iface, iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI VBSAXDTDHandler_GetIDsOfNames(IVBSAXDTDHandler *iface, REFIID riid, LPOLESTR* rgszNames,
|
||||
UINT cNames, LCID lcid, DISPID* rgDispId )
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_GetIDsOfNames(&This->IMXWriter_iface, riid, rgszNames, cNames, lcid, rgDispId);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI VBSAXDTDHandler_Invoke(IVBSAXDTDHandler *iface, DISPID dispIdMember, REFIID riid, LCID lcid,
|
||||
WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr )
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
return IMXWriter_Invoke(&This->IMXWriter_iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult,
|
||||
pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI VBSAXDTDHandler_notationDecl(IVBSAXDTDHandler *iface, BSTR *name, BSTR *publicId, BSTR *systemId)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
|
||||
TRACE("(%p)->(%p %p %p)\n", This, name, publicId, systemId);
|
||||
|
||||
if (!name || !publicId || !systemId)
|
||||
return E_POINTER;
|
||||
|
||||
return ISAXDTDHandler_notationDecl(&This->ISAXDTDHandler_iface, *name, -1, *publicId, -1, *systemId, -1);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI VBSAXDTDHandler_unparsedEntityDecl(IVBSAXDTDHandler *iface, BSTR *name, BSTR *publicId,
|
||||
BSTR *systemId, BSTR *notation)
|
||||
{
|
||||
mxwriter *This = impl_from_IVBSAXDTDHandler( iface );
|
||||
|
||||
TRACE("(%p)->(%p %p %p %p)\n", This, name, publicId, systemId, notation);
|
||||
|
||||
if (!name || !publicId || !systemId || !notation)
|
||||
return E_POINTER;
|
||||
|
||||
return ISAXDTDHandler_unparsedEntityDecl(&This->ISAXDTDHandler_iface, *name, -1, *publicId, -1,
|
||||
*systemId, -1, *notation, -1);
|
||||
}
|
||||
|
||||
static const IVBSAXDTDHandlerVtbl VBSAXDTDHandlerVtbl = {
|
||||
VBSAXDTDHandler_QueryInterface,
|
||||
VBSAXDTDHandler_AddRef,
|
||||
VBSAXDTDHandler_Release,
|
||||
VBSAXDTDHandler_GetTypeInfoCount,
|
||||
VBSAXDTDHandler_GetTypeInfo,
|
||||
VBSAXDTDHandler_GetIDsOfNames,
|
||||
VBSAXDTDHandler_Invoke,
|
||||
VBSAXDTDHandler_notationDecl,
|
||||
VBSAXDTDHandler_unparsedEntityDecl
|
||||
};
|
||||
|
||||
static const tid_t mxwriter_iface_tids[] = {
|
||||
IMXWriter_tid,
|
||||
0
|
||||
|
@ -2121,9 +2275,11 @@ HRESULT MXWriter_create(MSXML_VERSION version, void **ppObj)
|
|||
This->ISAXContentHandler_iface.lpVtbl = &SAXContentHandlerVtbl;
|
||||
This->ISAXLexicalHandler_iface.lpVtbl = &SAXLexicalHandlerVtbl;
|
||||
This->ISAXDeclHandler_iface.lpVtbl = &SAXDeclHandlerVtbl;
|
||||
This->ISAXDTDHandler_iface.lpVtbl = &SAXDTDHandlerVtbl;
|
||||
This->IVBSAXDeclHandler_iface.lpVtbl = &VBSAXDeclHandlerVtbl;
|
||||
This->IVBSAXLexicalHandler_iface.lpVtbl = &VBSAXLexicalHandlerVtbl;
|
||||
This->IVBSAXContentHandler_iface.lpVtbl = &VBSAXContentHandlerVtbl;
|
||||
This->IVBSAXDTDHandler_iface.lpVtbl = &VBSAXDTDHandlerVtbl;
|
||||
This->ref = 1;
|
||||
This->class_version = version;
|
||||
|
||||
|
|
|
@ -2862,14 +2862,21 @@ static void test_saxreader_encoding(void)
|
|||
|
||||
static void test_mxwriter_handlers(void)
|
||||
{
|
||||
IVBSAXContentHandler *vbhandler;
|
||||
IVBSAXLexicalHandler *vblexical;
|
||||
ISAXContentHandler *handler;
|
||||
IMXWriter *writer, *writer2;
|
||||
IVBSAXDeclHandler *vbdecl;
|
||||
ISAXDeclHandler *decl;
|
||||
ISAXLexicalHandler *lh;
|
||||
IMXWriter *writer;
|
||||
HRESULT hr;
|
||||
int i;
|
||||
|
||||
static const REFIID riids[] =
|
||||
{
|
||||
&IID_ISAXContentHandler,
|
||||
&IID_ISAXLexicalHandler,
|
||||
&IID_ISAXDeclHandler,
|
||||
&IID_ISAXDTDHandler,
|
||||
&IID_IVBSAXDeclHandler,
|
||||
&IID_IVBSAXLexicalHandler,
|
||||
&IID_IVBSAXContentHandler,
|
||||
&IID_IVBSAXDTDHandler
|
||||
};
|
||||
|
||||
hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER,
|
||||
&IID_IMXWriter, (void**)&writer);
|
||||
|
@ -2877,86 +2884,26 @@ static void test_mxwriter_handlers(void)
|
|||
|
||||
EXPECT_REF(writer, 1);
|
||||
|
||||
/* ISAXContentHandler/IVBSAXContentHandler */
|
||||
hr = IMXWriter_QueryInterface(writer, &IID_ISAXContentHandler, (void**)&handler);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(handler, 2);
|
||||
for (i = 0; i < sizeof(riids)/sizeof(REFIID); i++)
|
||||
{
|
||||
IUnknown *handler;
|
||||
IMXWriter *writer2;
|
||||
|
||||
hr = ISAXContentHandler_QueryInterface(handler, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
ISAXContentHandler_Release(handler);
|
||||
/* handler from IMXWriter */
|
||||
hr = IMXWriter_QueryInterface(writer, riids[i], (void**)&handler);
|
||||
ok(hr == S_OK, "%s, expected S_OK, got %08x\n", wine_dbgstr_guid(riids[i]), hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(handler, 2);
|
||||
|
||||
hr = IMXWriter_QueryInterface(writer, &IID_IVBSAXContentHandler, (void**)&vbhandler);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(handler, 2);
|
||||
|
||||
hr = IVBSAXContentHandler_QueryInterface(vbhandler, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
IVBSAXContentHandler_Release(vbhandler);
|
||||
|
||||
/* ISAXLexicalHandler/IVBSAXLexicalHandler */
|
||||
hr = IMXWriter_QueryInterface(writer, &IID_ISAXLexicalHandler, (void**)&lh);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(lh, 2);
|
||||
|
||||
hr = ISAXLexicalHandler_QueryInterface(lh, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
ISAXLexicalHandler_Release(lh);
|
||||
|
||||
hr = IMXWriter_QueryInterface(writer, &IID_IVBSAXLexicalHandler, (void**)&vblexical);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(vblexical, 2);
|
||||
|
||||
hr = IVBSAXLexicalHandler_QueryInterface(vblexical, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
IVBSAXLexicalHandler_Release(vblexical);
|
||||
|
||||
/* ISAXDeclHandler/IVBSAXDeclHandler */
|
||||
hr = IMXWriter_QueryInterface(writer, &IID_ISAXDeclHandler, (void**)&decl);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(lh, 2);
|
||||
|
||||
hr = ISAXDeclHandler_QueryInterface(decl, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
ISAXDeclHandler_Release(decl);
|
||||
|
||||
hr = IMXWriter_QueryInterface(writer, &IID_IVBSAXDeclHandler, (void**)&vbdecl);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
EXPECT_REF(writer, 2);
|
||||
EXPECT_REF(vbdecl, 2);
|
||||
|
||||
hr = IVBSAXDeclHandler_QueryInterface(vbdecl, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
IVBSAXDeclHandler_Release(vbdecl);
|
||||
/* IMXWriter from a handler */
|
||||
hr = IUnknown_QueryInterface(handler, &IID_IMXWriter, (void**)&writer2);
|
||||
ok(hr == S_OK, "%s, expected S_OK, got %08x\n", wine_dbgstr_guid(riids[i]), hr);
|
||||
ok(writer2 == writer, "got %p, expected %p\n", writer2, writer);
|
||||
EXPECT_REF(writer, 3);
|
||||
EXPECT_REF(writer2, 3);
|
||||
IMXWriter_Release(writer2);
|
||||
IUnknown_Release(handler);
|
||||
}
|
||||
|
||||
IMXWriter_Release(writer);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue