msxml3: Added stub implementation of ISAXLocator.
[wine/gsoc_dplay.git] / dlls / msxml3 / saxreader.c
blobcda75b6c6e9bd0261c5db76396310960eb45dd3a
1 /*
2 * SAX Reader implementation
4 * Copyright 2008 Alistair Leslie-Hughes
5 * Copyright 2008 Piotr Caban
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #define COBJMACROS
23 #include "config.h"
25 #include <stdarg.h>
26 #include <assert.h>
27 #include "windef.h"
28 #include "winbase.h"
29 #include "winuser.h"
30 #include "winnls.h"
31 #include "ole2.h"
32 #include "msxml2.h"
33 #include "wininet.h"
34 #include "urlmon.h"
35 #include "winreg.h"
36 #include "shlwapi.h"
38 #include "wine/debug.h"
40 #include "msxml_private.h"
42 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
44 #ifdef HAVE_LIBXML2
46 #include <libxml/SAX2.h>
48 typedef struct _saxreader
50 const struct IVBSAXXMLReaderVtbl *lpVtbl;
51 const struct ISAXXMLReaderVtbl *lpSAXXMLReaderVtbl;
52 LONG ref;
53 struct ISAXContentHandler *contentHandler;
54 struct ISAXErrorHandler *errorHandler;
55 xmlSAXHandler sax;
56 } saxreader;
58 typedef struct _saxlocator
60 const struct ISAXLocatorVtbl *lpSAXLocatorVtbl;
61 LONG ref;
62 saxreader *saxreader;
63 } saxlocator;
65 static inline saxreader *impl_from_IVBSAXXMLReader( IVBSAXXMLReader *iface )
67 return (saxreader *)((char*)iface - FIELD_OFFSET(saxreader, lpVtbl));
70 static inline saxreader *impl_from_ISAXXMLReader( ISAXXMLReader *iface )
72 return (saxreader *)((char*)iface - FIELD_OFFSET(saxreader, lpSAXXMLReaderVtbl));
75 static inline saxlocator *impl_from_ISAXLocator( ISAXLocator *iface )
77 return (saxlocator *)((char*)iface - FIELD_OFFSET(saxlocator, lpSAXLocatorVtbl));
80 /*** ISAXLocator interface ***/
81 /*** IUnknown methods ***/
82 static HRESULT WINAPI isaxlocator_QueryInterface(ISAXLocator* iface, REFIID riid, void **ppvObject)
84 saxlocator *This = impl_from_ISAXLocator( iface );
86 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
88 *ppvObject = NULL;
90 if ( IsEqualGUID( riid, &IID_IUnknown ) ||
91 IsEqualGUID( riid, &IID_ISAXLocator ))
93 *ppvObject = iface;
95 else
97 FIXME("interface %s not implemented\n", debugstr_guid(riid));
98 return E_NOINTERFACE;
101 ISAXLocator_AddRef( iface );
103 return S_OK;
106 static ULONG WINAPI isaxlocator_AddRef(ISAXLocator* iface)
108 saxlocator *This = impl_from_ISAXLocator( iface );
109 TRACE("%p\n", This );
110 return InterlockedIncrement( &This->ref );
113 static ULONG WINAPI isaxlocator_Release(
114 ISAXLocator* iface)
116 saxlocator *This = impl_from_ISAXLocator( iface );
117 LONG ref;
119 TRACE("%p\n", This );
121 ref = InterlockedDecrement( &This->ref );
122 if ( ref == 0 )
124 ISAXXMLReader_Release((ISAXXMLReader*)&This->saxreader->lpSAXXMLReaderVtbl);
125 HeapFree( GetProcessHeap(), 0, This );
128 return ref;
131 /*** ISAXLocator methods ***/
132 static HRESULT WINAPI isaxlocator_getColumnNumber(
133 ISAXLocator* iface,
134 int *pnColumn)
136 saxlocator *This = impl_from_ISAXLocator( iface );
138 FIXME("(%p)->(%p) stub\n", This, pnColumn);
139 return E_NOTIMPL;
142 static HRESULT WINAPI isaxlocator_getLineNumber(
143 ISAXLocator* iface,
144 int *pnLine)
146 saxlocator *This = impl_from_ISAXLocator( iface );
148 FIXME("(%p)->(%p) stub\n", This, pnLine);
149 return E_NOTIMPL;
152 static HRESULT WINAPI isaxlocator_getPublicId(
153 ISAXLocator* iface,
154 const WCHAR ** ppwchPublicId)
156 saxlocator *This = impl_from_ISAXLocator( iface );
158 FIXME("(%p)->(%p) stub\n", This, ppwchPublicId);
159 return E_NOTIMPL;
162 static HRESULT WINAPI isaxlocator_getSystemId(
163 ISAXLocator* iface,
164 const WCHAR ** ppwchSystemId)
166 saxlocator *This = impl_from_ISAXLocator( iface );
168 FIXME("(%p)->(%p) stub\n", This, ppwchSystemId);
169 return E_NOTIMPL;
172 static const struct ISAXLocatorVtbl isaxlocator_vtbl =
174 isaxlocator_QueryInterface,
175 isaxlocator_AddRef,
176 isaxlocator_Release,
177 isaxlocator_getColumnNumber,
178 isaxlocator_getLineNumber,
179 isaxlocator_getPublicId,
180 isaxlocator_getSystemId
183 static HRESULT SAXLocator_create(saxreader *reader, saxlocator **ppsaxlocator)
185 saxlocator *locator;
187 locator = HeapAlloc( GetProcessHeap(), 0, sizeof (*locator) );
188 if( !locator )
189 return E_OUTOFMEMORY;
191 locator->lpSAXLocatorVtbl = &isaxlocator_vtbl;
192 locator->ref = 1;
194 locator->saxreader = reader;
195 ISAXXMLReader_AddRef((ISAXXMLReader*)&reader->lpSAXXMLReaderVtbl);
197 *ppsaxlocator = locator;
199 TRACE("returning %p\n", *ppsaxlocator);
201 return S_OK;
204 /*** IVBSAXXMLReader interface ***/
205 /*** IUnknown methods ***/
206 static HRESULT WINAPI saxxmlreader_QueryInterface(IVBSAXXMLReader* iface, REFIID riid, void **ppvObject)
208 saxreader *This = impl_from_IVBSAXXMLReader( iface );
210 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
212 *ppvObject = NULL;
214 if ( IsEqualGUID( riid, &IID_IUnknown ) ||
215 IsEqualGUID( riid, &IID_IDispatch ) ||
216 IsEqualGUID( riid, &IID_IVBSAXXMLReader ))
218 *ppvObject = iface;
220 else if( IsEqualGUID( riid, &IID_ISAXXMLReader ))
222 *ppvObject = (ISAXXMLReader*)&This->lpSAXXMLReaderVtbl;
224 else
226 FIXME("interface %s not implemented\n", debugstr_guid(riid));
227 return E_NOINTERFACE;
230 IVBSAXXMLReader_AddRef( iface );
232 return S_OK;
235 static ULONG WINAPI saxxmlreader_AddRef(IVBSAXXMLReader* iface)
237 saxreader *This = impl_from_IVBSAXXMLReader( iface );
238 TRACE("%p\n", This );
239 return InterlockedIncrement( &This->ref );
242 static ULONG WINAPI saxxmlreader_Release(
243 IVBSAXXMLReader* iface)
245 saxreader *This = impl_from_IVBSAXXMLReader( iface );
246 LONG ref;
248 TRACE("%p\n", This );
250 ref = InterlockedDecrement( &This->ref );
251 if ( ref == 0 )
253 if(This->contentHandler)
254 ISAXContentHandler_Release(This->contentHandler);
256 if(This->errorHandler)
257 ISAXErrorHandler_Release(This->errorHandler);
259 HeapFree( GetProcessHeap(), 0, This );
262 return ref;
264 /*** IDispatch ***/
265 static HRESULT WINAPI saxxmlreader_GetTypeInfoCount( IVBSAXXMLReader *iface, UINT* pctinfo )
267 saxreader *This = impl_from_IVBSAXXMLReader( iface );
269 TRACE("(%p)->(%p)\n", This, pctinfo);
271 *pctinfo = 1;
273 return S_OK;
276 static HRESULT WINAPI saxxmlreader_GetTypeInfo(
277 IVBSAXXMLReader *iface,
278 UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo )
280 saxreader *This = impl_from_IVBSAXXMLReader( iface );
281 HRESULT hr;
283 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
285 hr = get_typeinfo(IVBSAXXMLReader_tid, ppTInfo);
287 return hr;
290 static HRESULT WINAPI saxxmlreader_GetIDsOfNames(
291 IVBSAXXMLReader *iface,
292 REFIID riid,
293 LPOLESTR* rgszNames,
294 UINT cNames,
295 LCID lcid,
296 DISPID* rgDispId)
298 saxreader *This = impl_from_IVBSAXXMLReader( iface );
299 ITypeInfo *typeinfo;
300 HRESULT hr;
302 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
303 lcid, rgDispId);
305 if(!rgszNames || cNames == 0 || !rgDispId)
306 return E_INVALIDARG;
308 hr = get_typeinfo(IVBSAXXMLReader_tid, &typeinfo);
309 if(SUCCEEDED(hr))
311 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
312 ITypeInfo_Release(typeinfo);
315 return hr;
318 static HRESULT WINAPI saxxmlreader_Invoke(
319 IVBSAXXMLReader *iface,
320 DISPID dispIdMember,
321 REFIID riid,
322 LCID lcid,
323 WORD wFlags,
324 DISPPARAMS* pDispParams,
325 VARIANT* pVarResult,
326 EXCEPINFO* pExcepInfo,
327 UINT* puArgErr)
329 saxreader *This = impl_from_IVBSAXXMLReader( iface );
330 ITypeInfo *typeinfo;
331 HRESULT hr;
333 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
334 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
336 hr = get_typeinfo(IVBSAXXMLReader_tid, &typeinfo);
337 if(SUCCEEDED(hr))
339 hr = ITypeInfo_Invoke(typeinfo, &(This->lpVtbl), dispIdMember, wFlags, pDispParams,
340 pVarResult, pExcepInfo, puArgErr);
341 ITypeInfo_Release(typeinfo);
344 return hr;
347 /*** IVBSAXXMLReader methods ***/
348 static HRESULT WINAPI saxxmlreader_getFeature(
349 IVBSAXXMLReader* iface,
350 const WCHAR *pFeature,
351 VARIANT_BOOL *pValue)
353 saxreader *This = impl_from_IVBSAXXMLReader( iface );
355 FIXME("(%p)->(%s %p) stub\n", This, debugstr_w(pFeature), pValue);
356 return E_NOTIMPL;
359 static HRESULT WINAPI saxxmlreader_putFeature(
360 IVBSAXXMLReader* iface,
361 const WCHAR *pFeature,
362 VARIANT_BOOL vfValue)
364 saxreader *This = impl_from_IVBSAXXMLReader( iface );
366 FIXME("(%p)->(%s %x) stub\n", This, debugstr_w(pFeature), vfValue);
367 return E_NOTIMPL;
370 static HRESULT WINAPI saxxmlreader_getProperty(
371 IVBSAXXMLReader* iface,
372 const WCHAR *pProp,
373 VARIANT *pValue)
375 saxreader *This = impl_from_IVBSAXXMLReader( iface );
377 FIXME("(%p)->(%s %p) stub\n", This, debugstr_w(pProp), pValue);
378 return E_NOTIMPL;
381 static HRESULT WINAPI saxxmlreader_putProperty(
382 IVBSAXXMLReader* iface,
383 const WCHAR *pProp,
384 VARIANT value)
386 saxreader *This = impl_from_IVBSAXXMLReader( iface );
388 FIXME("(%p)->(%s) stub\n", This, debugstr_w(pProp));
389 return E_NOTIMPL;
392 static HRESULT WINAPI saxxmlreader_getEntityResolver(
393 IVBSAXXMLReader* iface,
394 IVBSAXEntityResolver **pEntityResolver)
396 saxreader *This = impl_from_IVBSAXXMLReader( iface );
398 FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
399 return E_NOTIMPL;
402 static HRESULT WINAPI saxxmlreader_putEntityResolver(
403 IVBSAXXMLReader* iface,
404 IVBSAXEntityResolver *pEntityResolver)
406 saxreader *This = impl_from_IVBSAXXMLReader( iface );
408 FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
409 return E_NOTIMPL;
412 static HRESULT WINAPI saxxmlreader_getContentHandler(
413 IVBSAXXMLReader* iface,
414 IVBSAXContentHandler **ppContentHandler)
416 saxreader *This = impl_from_IVBSAXXMLReader( iface );
418 FIXME("(%p)->(%p) stub\n", This, ppContentHandler);
419 return E_NOTIMPL;
422 static HRESULT WINAPI saxxmlreader_putContentHandler(
423 IVBSAXXMLReader* iface,
424 IVBSAXContentHandler *contentHandler)
426 saxreader *This = impl_from_IVBSAXXMLReader( iface );
428 FIXME("(%p)->(%p) stub\n", This, contentHandler);
429 return E_NOTIMPL;
432 static HRESULT WINAPI saxxmlreader_getDTDHandler(
433 IVBSAXXMLReader* iface,
434 IVBSAXDTDHandler **pDTDHandler)
436 saxreader *This = impl_from_IVBSAXXMLReader( iface );
438 FIXME("(%p)->(%p) stub\n", This, pDTDHandler);
439 return E_NOTIMPL;
442 static HRESULT WINAPI saxxmlreader_putDTDHandler(
443 IVBSAXXMLReader* iface,
444 IVBSAXDTDHandler *pDTDHandler)
446 saxreader *This = impl_from_IVBSAXXMLReader( iface );
448 FIXME("(%p)->(%p) stub\n", This, pDTDHandler);
449 return E_NOTIMPL;
452 static HRESULT WINAPI saxxmlreader_getErrorHandler(
453 IVBSAXXMLReader* iface,
454 IVBSAXErrorHandler **pErrorHandler)
456 saxreader *This = impl_from_IVBSAXXMLReader( iface );
458 FIXME("(%p)->(%p) stub\n", This, pErrorHandler);
459 return E_NOTIMPL;
462 static HRESULT WINAPI saxxmlreader_putErrorHandler(
463 IVBSAXXMLReader* iface,
464 IVBSAXErrorHandler *errorHandler)
466 saxreader *This = impl_from_IVBSAXXMLReader( iface );
468 FIXME("(%p)->(%p) stub\n", This, errorHandler);
469 return E_NOTIMPL;
472 static HRESULT WINAPI saxxmlreader_getBaseURL(
473 IVBSAXXMLReader* iface,
474 const WCHAR **pBaseUrl)
476 saxreader *This = impl_from_IVBSAXXMLReader( iface );
478 FIXME("(%p)->(%p) stub\n", This, pBaseUrl);
479 return E_NOTIMPL;
482 static HRESULT WINAPI saxxmlreader_putBaseURL(
483 IVBSAXXMLReader* iface,
484 const WCHAR *pBaseUrl)
486 saxreader *This = impl_from_IVBSAXXMLReader( iface );
488 FIXME("(%p)->(%s) stub\n", This, debugstr_w(pBaseUrl));
489 return E_NOTIMPL;
492 static HRESULT WINAPI saxxmlreader_getSecureBaseURL(
493 IVBSAXXMLReader* iface,
494 const WCHAR **pSecureBaseUrl)
496 saxreader *This = impl_from_IVBSAXXMLReader( iface );
498 FIXME("(%p)->(%p) stub\n", This, pSecureBaseUrl);
499 return E_NOTIMPL;
503 static HRESULT WINAPI saxxmlreader_putSecureBaseURL(
504 IVBSAXXMLReader* iface,
505 const WCHAR *secureBaseUrl)
507 saxreader *This = impl_from_IVBSAXXMLReader( iface );
509 FIXME("(%p)->(%s) stub\n", This, debugstr_w(secureBaseUrl));
510 return E_NOTIMPL;
513 static HRESULT WINAPI saxxmlreader_parse(
514 IVBSAXXMLReader* iface,
515 VARIANT varInput)
517 saxreader *This = impl_from_IVBSAXXMLReader( iface );
519 FIXME("(%p) stub\n", This);
520 return E_NOTIMPL;
523 static HRESULT WINAPI saxxmlreader_parseURL(
524 IVBSAXXMLReader* iface,
525 const WCHAR *url)
527 saxreader *This = impl_from_IVBSAXXMLReader( iface );
529 FIXME("(%p)->(%s) stub\n", This, debugstr_w(url));
530 return E_NOTIMPL;
533 static const struct IVBSAXXMLReaderVtbl saxreader_vtbl =
535 saxxmlreader_QueryInterface,
536 saxxmlreader_AddRef,
537 saxxmlreader_Release,
538 saxxmlreader_GetTypeInfoCount,
539 saxxmlreader_GetTypeInfo,
540 saxxmlreader_GetIDsOfNames,
541 saxxmlreader_Invoke,
542 saxxmlreader_getFeature,
543 saxxmlreader_putFeature,
544 saxxmlreader_getProperty,
545 saxxmlreader_putProperty,
546 saxxmlreader_getEntityResolver,
547 saxxmlreader_putEntityResolver,
548 saxxmlreader_getContentHandler,
549 saxxmlreader_putContentHandler,
550 saxxmlreader_getDTDHandler,
551 saxxmlreader_putDTDHandler,
552 saxxmlreader_getErrorHandler,
553 saxxmlreader_putErrorHandler,
554 saxxmlreader_getBaseURL,
555 saxxmlreader_putBaseURL,
556 saxxmlreader_getSecureBaseURL,
557 saxxmlreader_putSecureBaseURL,
558 saxxmlreader_parse,
559 saxxmlreader_parseURL
562 /*** ISAXXMLReader interface ***/
563 /*** IUnknown methods ***/
564 static HRESULT WINAPI isaxxmlreader_QueryInterface(ISAXXMLReader* iface, REFIID riid, void **ppvObject)
566 saxreader *This = impl_from_ISAXXMLReader( iface );
567 return saxxmlreader_QueryInterface((IVBSAXXMLReader*)&This->lpVtbl, riid, ppvObject);
570 static ULONG WINAPI isaxxmlreader_AddRef(ISAXXMLReader* iface)
572 saxreader *This = impl_from_ISAXXMLReader( iface );
573 return saxxmlreader_AddRef((IVBSAXXMLReader*)&This->lpVtbl);
576 static ULONG WINAPI isaxxmlreader_Release(ISAXXMLReader* iface)
578 saxreader *This = impl_from_ISAXXMLReader( iface );
579 return saxxmlreader_Release((IVBSAXXMLReader*)&This->lpVtbl);
582 /*** ISAXXMLReader methods ***/
583 static HRESULT WINAPI isaxxmlreader_getFeature(
584 ISAXXMLReader* iface,
585 const WCHAR *pFeature,
586 VARIANT_BOOL *pValue)
588 saxreader *This = impl_from_ISAXXMLReader( iface );
590 FIXME("(%p)->(%s %p) stub\n", This, debugstr_w(pFeature), pValue);
591 return E_NOTIMPL;
594 static HRESULT WINAPI isaxxmlreader_putFeature(
595 ISAXXMLReader* iface,
596 const WCHAR *pFeature,
597 VARIANT_BOOL vfValue)
599 saxreader *This = impl_from_ISAXXMLReader( iface );
601 FIXME("(%p)->(%s %x) stub\n", This, debugstr_w(pFeature), vfValue);
602 return E_NOTIMPL;
605 static HRESULT WINAPI isaxxmlreader_getProperty(
606 ISAXXMLReader* iface,
607 const WCHAR *pProp,
608 VARIANT *pValue)
610 saxreader *This = impl_from_ISAXXMLReader( iface );
612 FIXME("(%p)->(%s %p) stub\n", This, debugstr_w(pProp), pValue);
613 return E_NOTIMPL;
616 static HRESULT WINAPI isaxxmlreader_putProperty(
617 ISAXXMLReader* iface,
618 const WCHAR *pProp,
619 VARIANT value)
621 saxreader *This = impl_from_ISAXXMLReader( iface );
623 FIXME("(%p)->(%s) stub\n", This, debugstr_w(pProp));
624 return E_NOTIMPL;
627 static HRESULT WINAPI isaxxmlreader_getEntityResolver(
628 ISAXXMLReader* iface,
629 ISAXEntityResolver **ppEntityResolver)
631 saxreader *This = impl_from_ISAXXMLReader( iface );
633 FIXME("(%p)->(%p) stub\n", This, ppEntityResolver);
634 return E_NOTIMPL;
637 static HRESULT WINAPI isaxxmlreader_putEntityResolver(
638 ISAXXMLReader* iface,
639 ISAXEntityResolver *pEntityResolver)
641 saxreader *This = impl_from_ISAXXMLReader( iface );
643 FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
644 return E_NOTIMPL;
647 static HRESULT WINAPI isaxxmlreader_getContentHandler(
648 ISAXXMLReader* iface,
649 ISAXContentHandler **pContentHandler)
651 saxreader *This = impl_from_ISAXXMLReader( iface );
653 TRACE("(%p)->(%p)\n", This, pContentHandler);
654 if(pContentHandler == NULL)
655 return E_POINTER;
656 if(This->contentHandler)
657 ISAXContentHandler_AddRef(This->contentHandler);
658 *pContentHandler = This->contentHandler;
660 return S_OK;
663 static HRESULT WINAPI isaxxmlreader_putContentHandler(
664 ISAXXMLReader* iface,
665 ISAXContentHandler *contentHandler)
667 saxreader *This = impl_from_ISAXXMLReader( iface );
669 TRACE("(%p)->(%p)\n", This, contentHandler);
670 if(contentHandler)
671 ISAXContentHandler_AddRef(contentHandler);
672 if(This->contentHandler)
673 ISAXContentHandler_Release(This->contentHandler);
674 This->contentHandler = contentHandler;
676 return S_OK;
679 static HRESULT WINAPI isaxxmlreader_getDTDHandler(
680 ISAXXMLReader* iface,
681 ISAXDTDHandler **pDTDHandler)
683 saxreader *This = impl_from_ISAXXMLReader( iface );
685 FIXME("(%p)->(%p) stub\n", This, pDTDHandler);
686 return E_NOTIMPL;
689 static HRESULT WINAPI isaxxmlreader_putDTDHandler(
690 ISAXXMLReader* iface,
691 ISAXDTDHandler *pDTDHandler)
693 saxreader *This = impl_from_ISAXXMLReader( iface );
695 FIXME("(%p)->(%p) stub\n", This, pDTDHandler);
696 return E_NOTIMPL;
699 static HRESULT WINAPI isaxxmlreader_getErrorHandler(
700 ISAXXMLReader* iface,
701 ISAXErrorHandler **pErrorHandler)
703 saxreader *This = impl_from_ISAXXMLReader( iface );
705 TRACE("(%p)->(%p)\n", This, pErrorHandler);
706 if(pErrorHandler == NULL)
707 return E_POINTER;
708 if(This->errorHandler)
709 ISAXErrorHandler_AddRef(This->errorHandler);
710 *pErrorHandler = This->errorHandler;
712 return S_OK;
715 static HRESULT WINAPI isaxxmlreader_putErrorHandler(
716 ISAXXMLReader* iface,
717 ISAXErrorHandler *errorHandler)
719 saxreader *This = impl_from_ISAXXMLReader( iface );
721 TRACE("(%p)->(%p)\n", This, errorHandler);
722 if(errorHandler)
723 ISAXErrorHandler_AddRef(errorHandler);
724 if(This->errorHandler)
725 ISAXErrorHandler_Release(This->errorHandler);
726 This->errorHandler = errorHandler;
728 return S_OK;
731 static HRESULT WINAPI isaxxmlreader_getBaseURL(
732 ISAXXMLReader* iface,
733 const WCHAR **pBaseUrl)
735 saxreader *This = impl_from_ISAXXMLReader( iface );
737 FIXME("(%p)->(%p) stub\n", This, pBaseUrl);
738 return E_NOTIMPL;
741 static HRESULT WINAPI isaxxmlreader_putBaseURL(
742 ISAXXMLReader* iface,
743 const WCHAR *pBaseUrl)
745 saxreader *This = impl_from_ISAXXMLReader( iface );
747 FIXME("(%p)->(%s) stub\n", This, debugstr_w(pBaseUrl));
748 return E_NOTIMPL;
751 static HRESULT WINAPI isaxxmlreader_getSecureBaseURL(
752 ISAXXMLReader* iface,
753 const WCHAR **pSecureBaseUrl)
755 saxreader *This = impl_from_ISAXXMLReader( iface );
757 FIXME("(%p)->(%p) stub\n", This, pSecureBaseUrl);
758 return E_NOTIMPL;
761 static HRESULT WINAPI isaxxmlreader_putSecureBaseURL(
762 ISAXXMLReader* iface,
763 const WCHAR *secureBaseUrl)
765 saxreader *This = impl_from_ISAXXMLReader( iface );
767 FIXME("(%p)->(%s) stub\n", This, debugstr_w(secureBaseUrl));
768 return E_NOTIMPL;
771 static HRESULT WINAPI isaxxmlreader_parse(
772 ISAXXMLReader* iface,
773 VARIANT varInput)
775 saxreader *This = impl_from_ISAXXMLReader( iface );
777 FIXME("(%p) stub\n", This);
778 return E_NOTIMPL;
781 static HRESULT WINAPI isaxxmlreader_parseURL(
782 ISAXXMLReader* iface,
783 const WCHAR *url)
785 saxreader *This = impl_from_ISAXXMLReader( iface );
787 FIXME("(%p)->(%s) stub\n", This, debugstr_w(url));
788 return E_NOTIMPL;
791 static const struct ISAXXMLReaderVtbl isaxreader_vtbl =
793 isaxxmlreader_QueryInterface,
794 isaxxmlreader_AddRef,
795 isaxxmlreader_Release,
796 isaxxmlreader_getFeature,
797 isaxxmlreader_putFeature,
798 isaxxmlreader_getProperty,
799 isaxxmlreader_putProperty,
800 isaxxmlreader_getEntityResolver,
801 isaxxmlreader_putEntityResolver,
802 isaxxmlreader_getContentHandler,
803 isaxxmlreader_putContentHandler,
804 isaxxmlreader_getDTDHandler,
805 isaxxmlreader_putDTDHandler,
806 isaxxmlreader_getErrorHandler,
807 isaxxmlreader_putErrorHandler,
808 isaxxmlreader_getBaseURL,
809 isaxxmlreader_putBaseURL,
810 isaxxmlreader_getSecureBaseURL,
811 isaxxmlreader_putSecureBaseURL,
812 isaxxmlreader_parse,
813 isaxxmlreader_parseURL
816 HRESULT SAXXMLReader_create(IUnknown *pUnkOuter, LPVOID *ppObj)
818 saxreader *reader;
820 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
822 reader = HeapAlloc( GetProcessHeap(), 0, sizeof (*reader) );
823 if( !reader )
824 return E_OUTOFMEMORY;
826 reader->lpVtbl = &saxreader_vtbl;
827 reader->lpSAXXMLReaderVtbl = &isaxreader_vtbl;
828 reader->ref = 1;
829 reader->contentHandler = NULL;
830 reader->errorHandler = NULL;
832 *ppObj = &reader->lpVtbl;
834 TRACE("returning iface %p\n", *ppObj);
836 return S_OK;
839 #else
841 HRESULT SAXXMLReader_create(IUnknown *pUnkOuter, LPVOID *ppObj)
843 MESSAGE("This program tried to use a SAX XML Reader object, but\n"
844 "libxml2 support was not present at compile time.\n");
845 return E_NOTIMPL;
848 #endif