Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/mshtml/htmldoc.c | 215 +++++++++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/dom.c | 2 + 3 files changed, 218 insertions(+)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 5b14678a6f..665e7ffdcb 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -4762,6 +4762,218 @@ static const IProvideMultipleClassInfoVtbl ProvideMultipleClassInfoVtbl = { ProvideMultipleClassInfo_GetInfoOfIndex };
+/********************************************************** + * IMarkupServices implementation + */ +static inline HTMLDocument *impl_from_IMarkupServices(IMarkupServices *iface) +{ + return CONTAINING_RECORD(iface, HTMLDocument, IMarkupServices_iface); +} + +static HRESULT WINAPI markupsvcs_QueryInterface(IMarkupServices *iface, REFIID riid, void **ppvObject) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + return htmldoc_query_interface(This, riid, ppvObject); +} + +static ULONG WINAPI markupsvcs_AddRef(IMarkupServices *iface) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + return htmldoc_addref(This); +} + +static ULONG WINAPI markupsvcs_Release(IMarkupServices *iface) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + return htmldoc_release(This); +} + +static HRESULT WINAPI markupsvcs_CreateMarkupPointer(IMarkupServices *iface, IMarkupPointer **ppPointer) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p)\n", This, ppPointer); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_CreateMarkupContainer(IMarkupServices *iface, IMarkupContainer **ppMarkupContainer) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p)\n", This, ppMarkupContainer); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_CreateElement(IMarkupServices *iface, + ELEMENT_TAG_ID tagID, OLECHAR *pchAttributes, IHTMLElement **ppElement) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%d,%s,%p)\n", This, tagID, debugstr_w(pchAttributes), ppElement); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_CloneElement(IMarkupServices *iface, + IHTMLElement *pElemCloneThis, IHTMLElement **ppElementTheClone) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p)\n", This, pElemCloneThis, ppElementTheClone); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_InsertElement(IMarkupServices *iface, + IHTMLElement *pElementInsert, IMarkupPointer *pPointerStart, + IMarkupPointer *pPointerFinish) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p,%p)\n", This, pElementInsert, pPointerStart, pPointerFinish); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_RemoveElement(IMarkupServices *iface, IHTMLElement *pElementRemove) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p)\n", This, pElementRemove); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_Remove(IMarkupServices *iface, + IMarkupPointer *pPointerStart, IMarkupPointer *pPointerFinish) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p)\n", This, pPointerStart, pPointerFinish); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_Copy(IMarkupServices *iface, + IMarkupPointer *pPointerSourceStart, IMarkupPointer *pPointerSourceFinish, + IMarkupPointer *pPointerTarget) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p,%p)\n", This, pPointerSourceStart, pPointerSourceFinish, pPointerTarget); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_Move(IMarkupServices *iface, + IMarkupPointer *pPointerSourceStart, IMarkupPointer *pPointerSourceFinish, + IMarkupPointer *pPointerTarget) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p,%p)\n", This, pPointerSourceStart, pPointerSourceFinish, pPointerTarget); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_InsertText(IMarkupServices *iface, + OLECHAR *pchText, LONG cch, IMarkupPointer *pPointerTarget) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%s,%x,%p)\n", This, debugstr_w(pchText), cch, pPointerTarget); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_ParseString(IMarkupServices *iface, + OLECHAR *pchHTML, DWORD dwFlags, IMarkupContainer **ppContainerResult, + IMarkupPointer *pPointerStart, IMarkupPointer *pPointerFinish) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%s,%x,%p,%p,%p)\n", This, debugstr_w(pchHTML), dwFlags, ppContainerResult, pPointerStart, pPointerFinish); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_ParseGlobal(IMarkupServices *iface, + HGLOBAL hglobalHTML, DWORD dwFlags, IMarkupContainer **ppContainerResult, + IMarkupPointer *pPointerStart, IMarkupPointer *pPointerFinish) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%s,%x,%p,%p,%p)\n", This, debugstr_w(hglobalHTML), dwFlags, ppContainerResult, pPointerStart, pPointerFinish); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_IsScopedElement(IMarkupServices *iface, + IHTMLElement *pElement, BOOL *pfScoped) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p)\n", This, pElement, pfScoped); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_GetElementTagId(IMarkupServices *iface, + IHTMLElement *pElement, ELEMENT_TAG_ID *ptagId) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p)\n", This, pElement, ptagId); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_GetTagIDForName(IMarkupServices *iface, + BSTR bstrName, ELEMENT_TAG_ID *ptagId) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%s,%p)\n", This, debugstr_w(bstrName), ptagId); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_GetNameForTagID(IMarkupServices *iface, + ELEMENT_TAG_ID tagId, BSTR *pbstrName) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%d,%p)\n", This, tagId, pbstrName); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_MovePointersToRange(IMarkupServices *iface, + IHTMLTxtRange *pIRange, IMarkupPointer *pPointerStart, IMarkupPointer *pPointerFinish) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p,%p)\n", This, pIRange, pPointerStart, pPointerFinish); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_MoveRangeToPointers(IMarkupServices *iface, + IMarkupPointer *pPointerStart, IMarkupPointer *pPointerFinish, IHTMLTxtRange *pIRange) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%p,%p,%p)\n", This, pPointerStart, pPointerFinish, pIRange); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_BeginUndoUnit(IMarkupServices *iface, OLECHAR *pchTitle) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(pchTitle)); + return E_NOTIMPL; +} + +static HRESULT WINAPI markupsvcs_EndUndoUnit(IMarkupServices *iface) +{ + HTMLDocument *This = impl_from_IMarkupServices(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static const IMarkupServicesVtbl MarkupServicesVtbl = { + markupsvcs_QueryInterface, + markupsvcs_AddRef, + markupsvcs_Release, + markupsvcs_CreateMarkupPointer, + markupsvcs_CreateMarkupContainer, + markupsvcs_CreateElement, + markupsvcs_CloneElement, + markupsvcs_InsertElement, + markupsvcs_RemoveElement, + markupsvcs_Remove, + markupsvcs_Copy, + markupsvcs_Move, + markupsvcs_InsertText, + markupsvcs_ParseString, + markupsvcs_ParseGlobal, + markupsvcs_IsScopedElement, + markupsvcs_GetElementTagId, + markupsvcs_GetTagIDForName, + markupsvcs_GetNameForTagID, + markupsvcs_MovePointersToRange, + markupsvcs_MoveRangeToPointers, + markupsvcs_BeginUndoUnit, + markupsvcs_EndUndoUnit +}; + static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) { *ppv = NULL; @@ -4840,6 +5052,8 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) *ppv = &This->IProvideMultipleClassInfo_iface; else if(IsEqualGUID(&IID_IProvideMultipleClassInfo, riid)) *ppv = &This->IProvideMultipleClassInfo_iface; + else if(IsEqualGUID(&IID_IMarkupServices, riid)) + *ppv = &This->IMarkupServices_iface; else if(IsEqualGUID(&CLSID_CMarkup, riid)) { FIXME("(%p)->(CLSID_CMarkup %p)\n", This, ppv); *ppv = NULL; @@ -4887,6 +5101,7 @@ static void init_doc(HTMLDocument *doc, IUnknown *outer, IDispatchEx *dispex) doc->IDocumentEvent_iface.lpVtbl = &DocumentEventVtbl; doc->ISupportErrorInfo_iface.lpVtbl = &SupportErrorInfoVtbl; doc->IProvideMultipleClassInfo_iface.lpVtbl = &ProvideMultipleClassInfoVtbl; + doc->IMarkupServices_iface.lpVtbl = &MarkupServicesVtbl;
doc->outer_unk = outer; doc->dispex = dispex; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 5b94d075cb..9ed2e5f4e6 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -623,6 +623,7 @@ struct HTMLDocument { IOleContainer IOleContainer_iface; IObjectSafety IObjectSafety_iface; IProvideMultipleClassInfo IProvideMultipleClassInfo_iface; + IMarkupServices IMarkupServices_iface;
IUnknown *outer_unk; IDispatchEx *dispex; diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index d46c232f9b..d4ef42e94e 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -175,6 +175,7 @@ static const IID * const doc_node_iids[] = { &IID_IDispatchEx, &IID_IConnectionPointContainer, &IID_IInternetHostSecurityManager, + &IID_IMarkupServices, &IID_IOleContainer, &IID_IObjectSafety, &IID_IProvideClassInfo, @@ -191,6 +192,7 @@ static const IID * const doc_obj_iids[] = { &IID_IDispatchEx, &IID_IConnectionPointContainer, &IID_ICustomDoc, + &IID_IMarkupServices, &IID_IOleContainer, &IID_IObjectSafety, &IID_IProvideClassInfo,