mfplat: Add MFCreateAMMediaTypeFromMFMediaType stub.
[wine.git] / dlls / msxml3 / xmlparser.c
blob59263d043da2d0f28463bc5bda5412f838a7d1ea
1 /*
2 * XML Parser implementation
4 * Copyright 2011 Alistair Leslie-Hughes
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #define COBJMACROS
22 #include <stdarg.h>
24 #include "ole2.h"
26 #include "initguid.h"
27 #include "xmlparser.h"
29 #include "wine/debug.h"
30 #include "wine/heap.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
34 typedef struct _xmlparser
36 IXMLParser IXMLParser_iface;
37 IXMLNodeFactory *nodefactory;
38 IUnknown *input;
39 LONG ref;
41 int flags;
42 XML_PARSER_STATE state;
43 } xmlparser;
45 static inline xmlparser *impl_from_IXMLParser( IXMLParser *iface )
47 return CONTAINING_RECORD(iface, xmlparser, IXMLParser_iface);
50 /*** IUnknown methods ***/
51 static HRESULT WINAPI xmlparser_QueryInterface(IXMLParser* iface, REFIID riid, void **ppvObject)
53 xmlparser *This = impl_from_IXMLParser( iface );
54 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
56 if ( IsEqualGUID( riid, &IID_IXMLParser ) ||
57 IsEqualGUID( riid, &IID_IXMLNodeSource ) ||
58 IsEqualGUID( riid, &IID_IUnknown ) )
60 *ppvObject = iface;
62 else
64 TRACE("Unsupported interface %s\n", debugstr_guid(riid));
65 *ppvObject = NULL;
66 return E_NOINTERFACE;
69 IXMLParser_AddRef(iface);
70 return S_OK;
73 static ULONG WINAPI xmlparser_AddRef(IXMLParser* iface)
75 xmlparser *This = impl_from_IXMLParser( iface );
76 ULONG ref = InterlockedIncrement( &This->ref );
77 TRACE("%p, refcount %lu.\n", iface, ref);
78 return ref;
81 static ULONG WINAPI xmlparser_Release(IXMLParser* iface)
83 xmlparser *This = impl_from_IXMLParser( iface );
84 ULONG ref = InterlockedDecrement( &This->ref );
86 TRACE("%p, refcount %lu.\n", iface, ref);
87 if ( ref == 0 )
89 if(This->input)
90 IUnknown_Release(This->input);
92 if(This->nodefactory)
93 IXMLNodeFactory_Release(This->nodefactory);
95 heap_free( This );
98 return ref;
101 /*** IXMLNodeSource methods ***/
102 static HRESULT WINAPI xmlparser_SetFactory(IXMLParser *iface, IXMLNodeFactory *pNodeFactory)
104 xmlparser *This = impl_from_IXMLParser( iface );
106 TRACE("(%p %p)\n", This, pNodeFactory);
108 if(This->nodefactory)
109 IXMLNodeFactory_Release(This->nodefactory);
111 This->nodefactory = pNodeFactory;
112 if(This->nodefactory)
113 IXMLNodeFactory_AddRef(This->nodefactory);
115 return S_OK;
118 static HRESULT WINAPI xmlparser_GetFactory(IXMLParser *iface, IXMLNodeFactory **ppNodeFactory)
120 xmlparser *This = impl_from_IXMLParser( iface );
122 TRACE("(%p, %p)\n", This, ppNodeFactory);
124 if(!ppNodeFactory)
125 return E_INVALIDARG;
127 *ppNodeFactory = This->nodefactory;
129 if(*ppNodeFactory)
130 IXMLNodeFactory_AddRef(*ppNodeFactory);
132 return S_OK;
135 static HRESULT WINAPI xmlparser_Abort(IXMLParser *iface, BSTR bstrErrorInfo)
137 xmlparser *This = impl_from_IXMLParser( iface );
139 FIXME("(%p, %s)\n", This, debugstr_w(bstrErrorInfo));
141 return E_NOTIMPL;
144 static ULONG WINAPI xmlparser_GetLineNumber(IXMLParser *iface)
146 xmlparser *This = impl_from_IXMLParser( iface );
148 FIXME("(%p)\n", This);
150 return 0;
153 static ULONG WINAPI xmlparser_GetLinePosition(IXMLParser *iface)
155 xmlparser *This = impl_from_IXMLParser( iface );
157 FIXME("(%p)\n", This);
159 return 0;
162 static ULONG WINAPI xmlparser_GetAbsolutePosition(IXMLParser *iface)
164 xmlparser *This = impl_from_IXMLParser( iface );
166 FIXME("(%p)\n", This);
168 return 0;
171 static HRESULT WINAPI xmlparser_GetLineBuffer(IXMLParser *iface, const WCHAR **ppBuf,
172 ULONG *len, ULONG *startPos)
174 xmlparser *This = impl_from_IXMLParser( iface );
176 FIXME("(%p %p %p %p)\n", This, ppBuf, len, startPos);
178 return 0;
181 static HRESULT WINAPI xmlparser_GetLastError(IXMLParser *iface)
183 xmlparser *This = impl_from_IXMLParser( iface );
185 FIXME("(%p)\n", This);
187 return E_NOTIMPL;
190 static HRESULT WINAPI xmlparser_GetErrorInfo(IXMLParser *iface, BSTR *pErrorInfo)
192 xmlparser *This = impl_from_IXMLParser( iface );
194 FIXME("(%p %p)\n", This, pErrorInfo);
196 return E_NOTIMPL;
199 static ULONG WINAPI xmlparser_GetFlags(IXMLParser *iface)
201 xmlparser *This = impl_from_IXMLParser( iface );
203 TRACE("(%p)\n", This);
205 return This->flags;
208 static HRESULT WINAPI xmlparser_GetURL(IXMLParser *iface, const WCHAR **ppBuf)
210 xmlparser *This = impl_from_IXMLParser( iface );
212 FIXME("(%p %p)\n", This, ppBuf);
214 return E_NOTIMPL;
217 /*** IXMLParser methods ***/
218 static HRESULT WINAPI xmlparser_SetURL(IXMLParser *iface,const WCHAR *pszBaseUrl,
219 const WCHAR *relativeUrl, BOOL async)
221 xmlparser *This = impl_from_IXMLParser( iface );
223 FIXME("(%p %s %s %d)\n", This, debugstr_w(pszBaseUrl), debugstr_w(relativeUrl), async);
225 return E_NOTIMPL;
228 static HRESULT WINAPI xmlparser_Load(IXMLParser *iface, BOOL bFullyAvailable,
229 IMoniker *pMon, LPBC pBC, DWORD dwMode)
231 FIXME("%p, %d, %p, %p, %ld.\n", iface, bFullyAvailable, pMon, pBC, dwMode);
233 return E_NOTIMPL;
236 static HRESULT WINAPI xmlparser_SetInput(IXMLParser *iface, IUnknown *pStm)
238 xmlparser *This = impl_from_IXMLParser( iface );
240 TRACE("(%p %p)\n", This, pStm);
242 if(!pStm)
243 return E_INVALIDARG;
245 if(This->input)
246 IUnknown_Release(This->input);
248 This->input = pStm;
249 IUnknown_AddRef(This->input);
251 return S_OK;
254 static HRESULT WINAPI xmlparser_PushData(IXMLParser *iface, const char *pData,
255 ULONG nChars, BOOL fLastBuffer)
257 FIXME("%p, %s, %lu, %d.\n", iface, debugstr_a(pData), nChars, fLastBuffer);
259 return E_NOTIMPL;
262 static HRESULT WINAPI xmlparser_LoadDTD(IXMLParser *iface, const WCHAR *baseUrl,
263 const WCHAR *relativeUrl)
265 xmlparser *This = impl_from_IXMLParser( iface );
267 FIXME("(%p %s %s)\n", This, debugstr_w(baseUrl), debugstr_w(relativeUrl));
269 return E_NOTIMPL;
272 static HRESULT WINAPI xmlparser_LoadEntity(IXMLParser *iface, const WCHAR *baseUrl,
273 const WCHAR *relativeUrl, BOOL fpe)
275 xmlparser *This = impl_from_IXMLParser( iface );
277 FIXME("(%p %s %s %d)\n", This, debugstr_w(baseUrl), debugstr_w(relativeUrl), fpe);
279 return E_NOTIMPL;
282 static HRESULT WINAPI xmlparser_ParseEntity(IXMLParser *iface, const WCHAR *text,
283 ULONG len, BOOL fpe)
285 FIXME("%p, %s, %lu, %d.\n", iface, debugstr_w(text), len, fpe);
287 return E_NOTIMPL;
290 static HRESULT WINAPI xmlparser_ExpandEntity(IXMLParser *iface, const WCHAR *text,
291 ULONG len)
293 FIXME("%p, %s, %ld.\n", iface, debugstr_w(text), len);
295 return E_NOTIMPL;
298 static HRESULT WINAPI xmlparser_SetRoot(IXMLParser *iface, PVOID pRoot)
300 xmlparser *This = impl_from_IXMLParser( iface );
302 FIXME("(%p %p)\n", This, pRoot);
304 return E_NOTIMPL;
307 static HRESULT WINAPI xmlparser_GetRoot( IXMLParser *iface, PVOID *ppRoot)
309 xmlparser *This = impl_from_IXMLParser( iface );
311 FIXME("(%p %p)\n", This, ppRoot);
313 return E_NOTIMPL;
316 static HRESULT WINAPI xmlparser_Run(IXMLParser *iface, LONG chars)
318 FIXME("%p, %ld.\n", iface, chars);
320 return E_NOTIMPL;
323 static HRESULT WINAPI xmlparser_GetParserState(IXMLParser *iface)
325 xmlparser *This = impl_from_IXMLParser( iface );
327 TRACE("(%p)\n", This);
329 return This->state;
332 static HRESULT WINAPI xmlparser_Suspend(IXMLParser *iface)
334 xmlparser *This = impl_from_IXMLParser( iface );
336 FIXME("(%p)\n", This);
338 return E_NOTIMPL;
341 static HRESULT WINAPI xmlparser_Reset(IXMLParser *iface)
343 xmlparser *This = impl_from_IXMLParser( iface );
345 FIXME("(%p)\n", This);
347 return E_NOTIMPL;
350 static HRESULT WINAPI xmlparser_SetFlags(IXMLParser *iface, ULONG flags)
352 xmlparser *This = impl_from_IXMLParser( iface );
354 TRACE("%p, %lx.\n", iface, flags);
356 This->flags = flags;
358 return S_OK;
361 static HRESULT WINAPI xmlparser_SetSecureBaseURL(IXMLParser *iface, const WCHAR *baseUrl)
363 xmlparser *This = impl_from_IXMLParser( iface );
365 FIXME("(%p %s)\n", This, debugstr_w(baseUrl));
367 return E_NOTIMPL;
370 static HRESULT WINAPI xmlparser_GetSecureBaseURL( IXMLParser *iface, const WCHAR **ppBuf)
372 xmlparser *This = impl_from_IXMLParser( iface );
374 FIXME("(%p %p)\n", This, ppBuf);
376 return E_NOTIMPL;
380 static const struct IXMLParserVtbl xmlparser_vtbl =
382 xmlparser_QueryInterface,
383 xmlparser_AddRef,
384 xmlparser_Release,
385 xmlparser_SetFactory,
386 xmlparser_GetFactory,
387 xmlparser_Abort,
388 xmlparser_GetLineNumber,
389 xmlparser_GetLinePosition,
390 xmlparser_GetAbsolutePosition,
391 xmlparser_GetLineBuffer,
392 xmlparser_GetLastError,
393 xmlparser_GetErrorInfo,
394 xmlparser_GetFlags,
395 xmlparser_GetURL,
396 xmlparser_SetURL,
397 xmlparser_Load,
398 xmlparser_SetInput,
399 xmlparser_PushData,
400 xmlparser_LoadDTD,
401 xmlparser_LoadEntity,
402 xmlparser_ParseEntity,
403 xmlparser_ExpandEntity,
404 xmlparser_SetRoot,
405 xmlparser_GetRoot,
406 xmlparser_Run,
407 xmlparser_GetParserState,
408 xmlparser_Suspend,
409 xmlparser_Reset,
410 xmlparser_SetFlags,
411 xmlparser_SetSecureBaseURL,
412 xmlparser_GetSecureBaseURL
415 HRESULT XMLParser_create(void **ppObj)
417 xmlparser *This;
419 TRACE("(%p)\n", ppObj);
421 This = heap_alloc( sizeof(xmlparser) );
422 if(!This)
423 return E_OUTOFMEMORY;
425 This->IXMLParser_iface.lpVtbl = &xmlparser_vtbl;
426 This->nodefactory = NULL;
427 This->input = NULL;
428 This->flags = 0;
429 This->state = XMLPARSER_IDLE;
430 This->ref = 1;
432 *ppObj = &This->IXMLParser_iface;
434 TRACE("returning iface %p\n", *ppObj);
436 return S_OK;