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);
47 IXMLDOMParseError IXMLDOMParseError_iface;
49 LONG code, line, linepos, filepos;
50 BSTR url, reason, srcText;
53 static inline parse_error_t *impl_from_IXMLDOMParseError( IXMLDOMParseError *iface )
55 return CONTAINING_RECORD(iface, parse_error_t, IXMLDOMParseError_iface);
58 static HRESULT WINAPI parseError_QueryInterface(
59 IXMLDOMParseError *iface,
63 TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject);
65 if ( IsEqualGUID( riid, &IID_IUnknown ) ||
66 IsEqualGUID( riid, &IID_IDispatch ) ||
67 IsEqualGUID( riid, &IID_IXMLDOMParseError ) )
73 FIXME("interface %s not implemented\n", debugstr_guid(riid));
77 IXMLDOMParseError_AddRef( iface );
82 static ULONG WINAPI parseError_AddRef(
83 IXMLDOMParseError *iface )
85 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
86 ULONG ref = InterlockedIncrement( &This->ref );
87 TRACE("(%p) ref now %d\n", This, ref);
91 static ULONG WINAPI parseError_Release(
92 IXMLDOMParseError *iface )
94 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
97 ref = InterlockedDecrement( &This->ref );
98 TRACE("(%p) ref now %d\n", This, ref);
101 SysFreeString(This->url);
102 SysFreeString(This->reason);
103 SysFreeString(This->srcText);
110 static HRESULT WINAPI parseError_GetTypeInfoCount(
111 IXMLDOMParseError *iface,
114 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
116 TRACE("(%p)->(%p)\n", This, pctinfo);
123 static HRESULT WINAPI parseError_GetTypeInfo(
124 IXMLDOMParseError *iface,
127 ITypeInfo** ppTInfo )
129 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
132 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
134 hr = get_typeinfo(IXMLDOMParseError_tid, ppTInfo);
139 static HRESULT WINAPI parseError_GetIDsOfNames(
140 IXMLDOMParseError *iface,
147 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
151 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
154 if(!rgszNames || cNames == 0 || !rgDispId)
157 hr = get_typeinfo(IXMLDOMParseError_tid, &typeinfo);
160 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
161 ITypeInfo_Release(typeinfo);
167 static HRESULT WINAPI parseError_Invoke(
168 IXMLDOMParseError *iface,
173 DISPPARAMS* pDispParams,
175 EXCEPINFO* pExcepInfo,
178 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
182 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
183 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
185 hr = get_typeinfo(IXMLDOMParseError_tid, &typeinfo);
188 hr = ITypeInfo_Invoke(typeinfo, &This->IXMLDOMParseError_iface, dispIdMember, wFlags,
189 pDispParams, pVarResult, pExcepInfo, puArgErr);
190 ITypeInfo_Release(typeinfo);
196 static HRESULT WINAPI parseError_get_errorCode(
197 IXMLDOMParseError *iface,
200 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
201 TRACE("(%p)->(%p)\n", This, code);
211 static HRESULT WINAPI parseError_get_url(
212 IXMLDOMParseError *iface,
215 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
216 FIXME("(%p)->(%p)\n", This, url);
220 static HRESULT WINAPI parseError_get_reason(
221 IXMLDOMParseError *iface,
224 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
225 TRACE("(%p)->(%p)\n", This, reason);
232 *reason = SysAllocString(This->reason);
236 static HRESULT WINAPI parseError_get_srcText(
237 IXMLDOMParseError *iface,
240 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
241 FIXME("(%p)->(%p)\n", This, srcText);
245 static HRESULT WINAPI parseError_get_line(
246 IXMLDOMParseError *iface,
249 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
250 FIXME("(%p)->(%p)\n", This, line);
254 static HRESULT WINAPI parseError_get_linepos(
255 IXMLDOMParseError *iface,
258 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
259 FIXME("(%p)->(%p)\n", This, linepos);
263 static HRESULT WINAPI parseError_get_filepos(
264 IXMLDOMParseError *iface,
267 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
268 FIXME("(%p)->(%p)\n", This, filepos);
272 static const struct IXMLDOMParseErrorVtbl parseError_vtbl =
274 parseError_QueryInterface,
277 parseError_GetTypeInfoCount,
278 parseError_GetTypeInfo,
279 parseError_GetIDsOfNames,
281 parseError_get_errorCode,
283 parseError_get_reason,
284 parseError_get_srcText,
286 parseError_get_linepos,
287 parseError_get_filepos
290 IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR srcText,
291 LONG line, LONG linepos, LONG filepos )
295 This = heap_alloc( sizeof(*This) );
299 This->IXMLDOMParseError_iface.lpVtbl = &parseError_vtbl;
304 This->reason = reason;
305 This->srcText = srcText;
307 This->linepos = linepos;
308 This->filepos = filepos;
310 return &This->IXMLDOMParseError_iface;