2 * ParseError implementation
4 * Copyright 2005 Huw Davies
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
28 # include <libxml/parser.h>
29 # include <libxml/xmlerror.h>
39 #include "msxml_private.h"
41 #include "wine/debug.h"
43 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
48 IXMLDOMParseError2 IXMLDOMParseError2_iface
;
50 LONG code
, line
, linepos
, filepos
;
51 BSTR url
, reason
, srcText
;
54 static inline parse_error_t
*impl_from_IXMLDOMParseError2( IXMLDOMParseError2
*iface
)
56 return CONTAINING_RECORD(iface
, parse_error_t
, IXMLDOMParseError2_iface
);
59 static HRESULT WINAPI
parseError_QueryInterface(
60 IXMLDOMParseError2
*iface
,
64 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
66 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_IXMLDOMParseError
) ||
71 IsEqualGUID( riid
, &IID_IXMLDOMParseError2
) )
75 else if (dispex_query_interface(&This
->dispex
, riid
, ppvObject
))
77 return *ppvObject
? S_OK
: E_NOINTERFACE
;
81 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
86 IXMLDOMParseError2_AddRef( iface
);
91 static ULONG WINAPI
parseError_AddRef(
92 IXMLDOMParseError2
*iface
)
94 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
95 ULONG ref
= InterlockedIncrement( &This
->ref
);
96 TRACE("(%p)->(%d)\n", This
, ref
);
100 static ULONG WINAPI
parseError_Release(
101 IXMLDOMParseError2
*iface
)
103 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
104 ULONG ref
= InterlockedDecrement( &This
->ref
);
106 TRACE("(%p)->(%d)\n", This
, ref
);
109 SysFreeString(This
->url
);
110 SysFreeString(This
->reason
);
111 SysFreeString(This
->srcText
);
118 static HRESULT WINAPI
parseError_GetTypeInfoCount(
119 IXMLDOMParseError2
*iface
,
122 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
123 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
126 static HRESULT WINAPI
parseError_GetTypeInfo(
127 IXMLDOMParseError2
*iface
,
130 ITypeInfo
** ppTInfo
)
132 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
133 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
,
134 iTInfo
, lcid
, ppTInfo
);
137 static HRESULT WINAPI
parseError_GetIDsOfNames(
138 IXMLDOMParseError2
*iface
,
145 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
146 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
,
147 riid
, rgszNames
, cNames
, lcid
, rgDispId
);
150 static HRESULT WINAPI
parseError_Invoke(
151 IXMLDOMParseError2
*iface
,
156 DISPPARAMS
* pDispParams
,
158 EXCEPINFO
* pExcepInfo
,
161 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
162 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
,
163 dispIdMember
, riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
166 static HRESULT WINAPI
parseError_get_errorCode(
167 IXMLDOMParseError2
*iface
,
170 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
171 TRACE("(%p)->(%p)\n", This
, code
);
181 static HRESULT WINAPI
parseError_get_url(
182 IXMLDOMParseError2
*iface
,
185 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
186 FIXME("(%p)->(%p)\n", This
, url
);
190 static HRESULT WINAPI
parseError_get_reason(
191 IXMLDOMParseError2
*iface
,
194 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
195 TRACE("(%p)->(%p)\n", This
, reason
);
202 *reason
= SysAllocString(This
->reason
);
206 static HRESULT WINAPI
parseError_get_srcText(
207 IXMLDOMParseError2
*iface
,
210 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
212 TRACE("(%p)->(%p)\n", This
, srcText
);
214 if (!srcText
) return E_INVALIDARG
;
216 *srcText
= SysAllocString(This
->srcText
);
221 static HRESULT WINAPI
parseError_get_line(
222 IXMLDOMParseError2
*iface
,
225 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
227 TRACE("%p, %p.\n", This
, line
);
229 if (!line
) return E_INVALIDARG
;
235 static HRESULT WINAPI
parseError_get_linepos(
236 IXMLDOMParseError2
*iface
,
239 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
241 TRACE("(%p)->(%p)\n", This
, linepos
);
243 if (!linepos
) return E_INVALIDARG
;
245 *linepos
= This
->linepos
;
249 static HRESULT WINAPI
parseError_get_filepos(
250 IXMLDOMParseError2
*iface
,
253 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
254 FIXME("(%p)->(%p)\n", This
, filepos
);
258 static HRESULT WINAPI
parseError_get_errorXPath(
259 IXMLDOMParseError2
*iface
,
262 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
263 FIXME("(%p)->(%p)\n", This
, xpathexpr
);
267 static HRESULT WINAPI
parseError_get_AllErrors(
268 IXMLDOMParseError2
*iface
,
269 IXMLDOMParseErrorCollection
**allErrors
)
271 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
272 FIXME("(%p)->(%p)\n", This
, allErrors
);
276 static HRESULT WINAPI
parseError_errorParameters(
277 IXMLDOMParseError2
*iface
,
281 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
282 FIXME("(%p)->(%p)\n", This
, param
);
286 static HRESULT WINAPI
parseError_get_errorParametersCount(
287 IXMLDOMParseError2
*iface
,
290 parse_error_t
*This
= impl_from_IXMLDOMParseError2( iface
);
291 FIXME("(%p)->(%p)\n", This
, count
);
295 static const struct IXMLDOMParseError2Vtbl XMLDOMParseError2Vtbl
=
297 parseError_QueryInterface
,
300 parseError_GetTypeInfoCount
,
301 parseError_GetTypeInfo
,
302 parseError_GetIDsOfNames
,
304 parseError_get_errorCode
,
306 parseError_get_reason
,
307 parseError_get_srcText
,
309 parseError_get_linepos
,
310 parseError_get_filepos
,
311 parseError_get_errorXPath
,
312 parseError_get_AllErrors
,
313 parseError_errorParameters
,
314 parseError_get_errorParametersCount
317 static const tid_t parseError_iface_tids
[] = {
318 IXMLDOMParseError2_tid
,
322 static dispex_static_data_t parseError_dispex
= {
324 IXMLDOMParseError2_tid
,
326 parseError_iface_tids
329 IXMLDOMParseError
*create_parseError( LONG code
, BSTR url
, BSTR reason
, BSTR srcText
,
330 LONG line
, LONG linepos
, LONG filepos
)
334 This
= heap_alloc( sizeof(*This
) );
338 This
->IXMLDOMParseError2_iface
.lpVtbl
= &XMLDOMParseError2Vtbl
;
343 This
->reason
= reason
;
344 This
->srcText
= srcText
;
346 This
->linepos
= linepos
;
347 This
->filepos
= filepos
;
349 init_dispex(&This
->dispex
, (IUnknown
*)&This
->IXMLDOMParseError2_iface
, &parseError_dispex
);
351 return (IXMLDOMParseError
*)&This
->IXMLDOMParseError2_iface
;