2 * SAX Reader implementation
4 * Copyright 2008 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
37 #include "wine/debug.h"
39 #include "msxml_private.h"
41 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
45 #include <libxml/SAX2.h>
47 typedef struct _saxreader
49 const struct IVBSAXXMLReaderVtbl
*lpVtbl
;
54 static inline saxreader
*impl_from_IVBSAXXMLReader( IVBSAXXMLReader
*iface
)
56 return (saxreader
*)((char*)iface
- FIELD_OFFSET(saxreader
, lpVtbl
));
59 /*** IUnknown methods ***/
60 static HRESULT WINAPI
saxxmlreader_QueryInterface(IVBSAXXMLReader
* iface
, REFIID riid
, void **ppvObject
)
62 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
64 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
68 if ( IsEqualGUID( riid
, &IID_IUnknown
) ||
69 IsEqualGUID( riid
, &IID_IDispatch
) ||
70 IsEqualGUID( riid
, &IID_IVBSAXXMLReader
))
76 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
80 IVBSAXXMLReader_AddRef( iface
);
85 static ULONG WINAPI
saxxmlreader_AddRef(IVBSAXXMLReader
* iface
)
87 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
89 return InterlockedIncrement( &This
->ref
);
92 static ULONG WINAPI
saxxmlreader_Release(
93 IVBSAXXMLReader
* iface
)
95 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
100 ref
= InterlockedDecrement( &This
->ref
);
103 HeapFree( GetProcessHeap(), 0, This
);
109 static HRESULT WINAPI
saxxmlreader_GetTypeInfoCount( IVBSAXXMLReader
*iface
, UINT
* pctinfo
)
111 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
113 TRACE("(%p)->(%p)\n", This
, pctinfo
);
120 static HRESULT WINAPI
saxxmlreader_GetTypeInfo(
121 IVBSAXXMLReader
*iface
,
122 UINT iTInfo
, LCID lcid
, ITypeInfo
** ppTInfo
)
124 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
127 TRACE("(%p)->(%u %u %p)\n", This
, iTInfo
, lcid
, ppTInfo
);
129 hr
= get_typeinfo(IVBSAXXMLReader_tid
, ppTInfo
);
134 static HRESULT WINAPI
saxxmlreader_GetIDsOfNames(
135 IVBSAXXMLReader
*iface
,
142 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
146 TRACE("(%p)->(%s %p %u %u %p)\n", This
, debugstr_guid(riid
), rgszNames
, cNames
,
149 if(!rgszNames
|| cNames
== 0 || !rgDispId
)
152 hr
= get_typeinfo(IVBSAXXMLReader_tid
, &typeinfo
);
155 hr
= ITypeInfo_GetIDsOfNames(typeinfo
, rgszNames
, cNames
, rgDispId
);
156 ITypeInfo_Release(typeinfo
);
162 static HRESULT WINAPI
saxxmlreader_Invoke(
163 IVBSAXXMLReader
*iface
,
168 DISPPARAMS
* pDispParams
,
170 EXCEPINFO
* pExcepInfo
,
173 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
177 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This
, dispIdMember
, debugstr_guid(riid
),
178 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
180 hr
= get_typeinfo(IVBSAXXMLReader_tid
, &typeinfo
);
183 hr
= ITypeInfo_Invoke(typeinfo
, &(This
->lpVtbl
), dispIdMember
, wFlags
, pDispParams
,
184 pVarResult
, pExcepInfo
, puArgErr
);
185 ITypeInfo_Release(typeinfo
);
191 /*** IVBSAXXMLReader methods ***/
192 static HRESULT WINAPI
saxxmlreader_getFeature(
193 IVBSAXXMLReader
* iface
,
194 const WCHAR
*pFeature
,
195 VARIANT_BOOL
*pValue
)
197 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
199 FIXME("(%p)->(%s %p) stub\n", This
, debugstr_w(pFeature
), pValue
);
203 static HRESULT WINAPI
saxxmlreader_putFeature(
204 IVBSAXXMLReader
* iface
,
205 const WCHAR
*pFeature
,
206 VARIANT_BOOL vfValue
)
208 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
210 FIXME("(%p)->(%s %x) stub\n", This
, debugstr_w(pFeature
), vfValue
);
214 static HRESULT WINAPI
saxxmlreader_getProperty(
215 IVBSAXXMLReader
* iface
,
219 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
221 FIXME("(%p)->(%s %p) stub\n", This
, debugstr_w(pProp
), pValue
);
225 static HRESULT WINAPI
saxxmlreader_putProperty(
226 IVBSAXXMLReader
* iface
,
230 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
232 FIXME("(%p)->(%s) stub\n", This
, debugstr_w(pProp
));
236 static HRESULT WINAPI
saxxmlreader_getEntityResolver(
237 IVBSAXXMLReader
* iface
,
238 IVBSAXEntityResolver
**pEntityResolver
)
240 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
242 FIXME("(%p)->(%p) stub\n", This
, pEntityResolver
);
246 static HRESULT WINAPI
saxxmlreader_putEntityResolver(
247 IVBSAXXMLReader
* iface
,
248 IVBSAXEntityResolver
*pEntityResolver
)
250 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
252 FIXME("(%p)->(%p) stub\n", This
, pEntityResolver
);
256 static HRESULT WINAPI
saxxmlreader_getContentHandler(
257 IVBSAXXMLReader
* iface
,
258 IVBSAXContentHandler
**ppContentHandler
)
260 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
262 FIXME("(%p)->(%p) stub\n", This
, ppContentHandler
);
266 static HRESULT WINAPI
saxxmlreader_putContentHandler(
267 IVBSAXXMLReader
* iface
,
268 IVBSAXContentHandler
*contentHandler
)
270 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
272 FIXME("(%p)->(%p) stub\n", This
, contentHandler
);
276 static HRESULT WINAPI
saxxmlreader_getDTDHandler(
277 IVBSAXXMLReader
* iface
,
278 IVBSAXDTDHandler
**pDTDHandler
)
280 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
282 FIXME("(%p)->(%p) stub\n", This
, pDTDHandler
);
286 static HRESULT WINAPI
saxxmlreader_putDTDHandler(
287 IVBSAXXMLReader
* iface
,
288 IVBSAXDTDHandler
*pDTDHandler
)
290 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
292 FIXME("(%p)->(%p) stub\n", This
, pDTDHandler
);
296 static HRESULT WINAPI
saxxmlreader_getErrorHandler(
297 IVBSAXXMLReader
* iface
,
298 IVBSAXErrorHandler
**pErrorHandler
)
300 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
302 FIXME("(%p)->(%p) stub\n", This
, pErrorHandler
);
306 static HRESULT WINAPI
saxxmlreader_putErrorHandler(
307 IVBSAXXMLReader
* iface
,
308 IVBSAXErrorHandler
*errorHandler
)
310 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
312 FIXME("(%p)->(%p) stub\n", This
, errorHandler
);
316 static HRESULT WINAPI
saxxmlreader_getBaseURL(
317 IVBSAXXMLReader
* iface
,
318 const WCHAR
**pBaseUrl
)
320 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
322 FIXME("(%p)->(%p) stub\n", This
, pBaseUrl
);
326 static HRESULT WINAPI
saxxmlreader_putBaseURL(
327 IVBSAXXMLReader
* iface
,
328 const WCHAR
*pBaseUrl
)
330 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
332 FIXME("(%p)->(%s) stub\n", This
, debugstr_w(pBaseUrl
));
336 static HRESULT WINAPI
saxxmlreader_getSecureBaseURL(
337 IVBSAXXMLReader
* iface
,
338 const WCHAR
**pSecureBaseUrl
)
340 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
342 FIXME("(%p)->(%p) stub\n", This
, pSecureBaseUrl
);
347 static HRESULT WINAPI
saxxmlreader_putSecureBaseURL(
348 IVBSAXXMLReader
* iface
,
349 const WCHAR
*secureBaseUrl
)
351 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
353 FIXME("(%p)->(%s) stub\n", This
, debugstr_w(secureBaseUrl
));
357 static HRESULT WINAPI
saxxmlreader_parse(
358 IVBSAXXMLReader
* iface
,
361 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
363 FIXME("(%p) stub\n", This
);
367 static HRESULT WINAPI
saxxmlreader_parseURL(
368 IVBSAXXMLReader
* iface
,
371 saxreader
*This
= impl_from_IVBSAXXMLReader( iface
);
373 FIXME("(%p)->(%s) stub\n", This
, debugstr_w(url
));
377 static const struct IVBSAXXMLReaderVtbl saxreader_vtbl
=
379 saxxmlreader_QueryInterface
,
381 saxxmlreader_Release
,
382 saxxmlreader_GetTypeInfoCount
,
383 saxxmlreader_GetTypeInfo
,
384 saxxmlreader_GetIDsOfNames
,
386 saxxmlreader_getFeature
,
387 saxxmlreader_putFeature
,
388 saxxmlreader_getProperty
,
389 saxxmlreader_putProperty
,
390 saxxmlreader_getEntityResolver
,
391 saxxmlreader_putEntityResolver
,
392 saxxmlreader_getContentHandler
,
393 saxxmlreader_putContentHandler
,
394 saxxmlreader_getDTDHandler
,
395 saxxmlreader_putDTDHandler
,
396 saxxmlreader_getErrorHandler
,
397 saxxmlreader_putErrorHandler
,
398 saxxmlreader_getBaseURL
,
399 saxxmlreader_putBaseURL
,
400 saxxmlreader_getSecureBaseURL
,
401 saxxmlreader_putSecureBaseURL
,
403 saxxmlreader_parseURL
406 HRESULT
SAXXMLReader_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
410 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
412 reader
= HeapAlloc( GetProcessHeap(), 0, sizeof (*reader
) );
414 return E_OUTOFMEMORY
;
416 reader
->lpVtbl
= &saxreader_vtbl
;
419 *ppObj
= &reader
->lpVtbl
;
421 TRACE("returning iface %p\n", *ppObj
);
428 HRESULT
SAXXMLReader_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
430 MESSAGE("This program tried to use a SAX XML Reader object, but\n"
431 "libxml2 support was not present at compile time.\n");