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 #include <libxml/SAX2.h>
43 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
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
)
200 static HRESULT WINAPI
saxxmlreader_putFeature(
201 IVBSAXXMLReader
* iface
,
202 const WCHAR
*pFeature
,
203 VARIANT_BOOL vfValue
)
208 static HRESULT WINAPI
saxxmlreader_getProperty(
209 IVBSAXXMLReader
* iface
,
216 static HRESULT WINAPI
saxxmlreader_putProperty(
217 IVBSAXXMLReader
* iface
,
224 static HRESULT WINAPI
saxxmlreader_getEntityResolver(
225 IVBSAXXMLReader
* iface
,
226 IVBSAXEntityResolver
**pEntityResolver
)
231 static HRESULT WINAPI
saxxmlreader_putEntityResolver(
232 IVBSAXXMLReader
* iface
,
233 IVBSAXEntityResolver
*pEntityResolver
)
238 static HRESULT WINAPI
saxxmlreader_getContentHandler(
239 IVBSAXXMLReader
* iface
,
240 IVBSAXContentHandler
**ppContentHandler
)
245 static HRESULT WINAPI
saxxmlreader_putContentHandler(
246 IVBSAXXMLReader
* iface
,
247 IVBSAXContentHandler
*contentHandler
)
252 static HRESULT WINAPI
saxxmlreader_getDTDHandler(
253 IVBSAXXMLReader
* iface
,
254 IVBSAXDTDHandler
**pDTDHandler
)
259 static HRESULT WINAPI
saxxmlreader_putDTDHandler(
260 IVBSAXXMLReader
* iface
,
261 IVBSAXDTDHandler
*pDTDHandler
)
266 static HRESULT WINAPI
saxxmlreader_getErrorHandler(
267 IVBSAXXMLReader
* iface
,
268 IVBSAXErrorHandler
**pErrorHandler
)
273 static HRESULT WINAPI
saxxmlreader_putErrorHandler(
274 IVBSAXXMLReader
* iface
,
275 IVBSAXErrorHandler
*errorHandler
)
280 static HRESULT WINAPI
saxxmlreader_getBaseURL(
281 IVBSAXXMLReader
* iface
,
282 const WCHAR
**pBaseUrl
)
287 static HRESULT WINAPI
saxxmlreader_putBaseURL(
288 IVBSAXXMLReader
* iface
,
289 const WCHAR
*pBaseUrl
)
294 static HRESULT WINAPI
saxxmlreader_getSecureBaseURL(
295 IVBSAXXMLReader
* iface
,
296 const WCHAR
**pSecureBaseUrl
)
302 static HRESULT WINAPI
saxxmlreader_putSecureBaseURL(
303 IVBSAXXMLReader
* iface
,
304 const WCHAR
*secureBaseUrl
)
309 static HRESULT WINAPI
saxxmlreader_parse(
310 IVBSAXXMLReader
* iface
,
316 static HRESULT WINAPI
saxxmlreader_parseURL(
317 IVBSAXXMLReader
* iface
,
323 static const struct IVBSAXXMLReaderVtbl saxreader_vtbl
=
325 saxxmlreader_QueryInterface
,
327 saxxmlreader_Release
,
328 saxxmlreader_GetTypeInfoCount
,
329 saxxmlreader_GetTypeInfo
,
330 saxxmlreader_GetIDsOfNames
,
332 saxxmlreader_getFeature
,
333 saxxmlreader_putFeature
,
334 saxxmlreader_getProperty
,
335 saxxmlreader_putProperty
,
336 saxxmlreader_getEntityResolver
,
337 saxxmlreader_putEntityResolver
,
338 saxxmlreader_getContentHandler
,
339 saxxmlreader_putContentHandler
,
340 saxxmlreader_getDTDHandler
,
341 saxxmlreader_putDTDHandler
,
342 saxxmlreader_getErrorHandler
,
343 saxxmlreader_putErrorHandler
,
344 saxxmlreader_getBaseURL
,
345 saxxmlreader_putBaseURL
,
346 saxxmlreader_getSecureBaseURL
,
347 saxxmlreader_putSecureBaseURL
,
349 saxxmlreader_parseURL
352 HRESULT
SAXXMLReader_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
356 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
358 reader
= HeapAlloc( GetProcessHeap(), 0, sizeof (*reader
) );
360 return E_OUTOFMEMORY
;
362 reader
->lpVtbl
= &saxreader_vtbl
;
365 TRACE("returning iface %p\n", *ppObj
);
371 HRESULT
SAXXMLReader_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
373 MESSAGE("This program tried to use a SAX XML Reader object, but\n"
374 "libxml2 support was not present at compile time.\n");