Unicodify wineesd.
[wine] / dlls / msxml3 / element.c
1 /*
2  *    DOM Document implementation
3  *
4  * Copyright 2005 Mike McCormack
5  *
6  * iface 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.
10  *
11  * iface 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.
15  *
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #define COBJMACROS
22
23 #include "config.h"
24
25 #include <stdarg.h>
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "ole2.h"
30 #include "ocidl.h"
31 #include "msxml.h"
32 #include "xmldom.h"
33 #include "msxml.h"
34
35 #include "msxml_private.h"
36
37 #include "wine/debug.h"
38
39 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
40
41 #ifdef HAVE_LIBXML2
42
43 typedef struct _domelem
44 {
45     const struct IXMLDOMElementVtbl *lpVtbl;
46     LONG ref;
47     IXMLDOMNode *node;
48 } domelem;
49
50 static inline domelem *impl_from_IXMLDOMElement( IXMLDOMElement *iface )
51 {
52     return (domelem *)((char*)iface - FIELD_OFFSET(domelem, lpVtbl));
53 }
54
55 static HRESULT WINAPI domelem_QueryInterface(
56     IXMLDOMElement *iface,
57     REFIID riid,
58     void** ppvObject )
59 {
60     TRACE("%p %p %p\n", iface, debugstr_guid(riid), ppvObject);
61
62     if ( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
63          IsEqualGUID( riid, &IID_IUnknown ) ||
64          IsEqualGUID( riid, &IID_IDispatch ) ||
65          IsEqualGUID( riid, &IID_IXMLDOMNode ) )
66     {
67         *ppvObject = iface;
68     }
69     else
70         return E_NOINTERFACE;
71
72     IXMLDOMElement_AddRef( iface );
73
74     return S_OK;
75 }
76
77 static ULONG WINAPI domelem_AddRef(
78     IXMLDOMElement *iface )
79 {
80     domelem *This = impl_from_IXMLDOMElement( iface );
81     return InterlockedIncrement( &This->ref );
82 }
83
84 static ULONG WINAPI domelem_Release(
85     IXMLDOMElement *iface )
86 {
87     domelem *This = impl_from_IXMLDOMElement( iface );
88     ULONG ref;
89
90     ref = InterlockedDecrement( &This->ref );
91     if ( ref == 0 )
92     {
93         IXMLDOMNode_Release( This->node );
94         HeapFree( GetProcessHeap(), 0, This );
95     }
96
97     return ref;
98 }
99
100 static HRESULT WINAPI domelem_GetTypeInfoCount(
101     IXMLDOMElement *iface,
102     UINT* pctinfo )
103 {
104     FIXME("\n");
105     return E_NOTIMPL;
106 }
107
108 static HRESULT WINAPI domelem_GetTypeInfo(
109     IXMLDOMElement *iface,
110     UINT iTInfo, LCID lcid,
111     ITypeInfo** ppTInfo )
112 {
113     FIXME("\n");
114     return E_NOTIMPL;
115 }
116
117 static HRESULT WINAPI domelem_GetIDsOfNames(
118     IXMLDOMElement *iface,
119     REFIID riid, LPOLESTR* rgszNames,
120     UINT cNames, LCID lcid, DISPID* rgDispId )
121 {
122     FIXME("\n");
123     return E_NOTIMPL;
124 }
125
126 static HRESULT WINAPI domelem_Invoke(
127     IXMLDOMElement *iface,
128     DISPID dispIdMember, REFIID riid, LCID lcid,
129     WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
130     EXCEPINFO* pExcepInfo, UINT* puArgErr )
131 {
132     FIXME("\n");
133     return E_NOTIMPL;
134 }
135
136 static HRESULT WINAPI domelem_get_nodeName(
137     IXMLDOMElement *iface,
138     BSTR* p )
139 {
140     FIXME("\n");
141     return E_NOTIMPL;
142 }
143
144 static HRESULT WINAPI domelem_get_nodeValue(
145     IXMLDOMElement *iface,
146     VARIANT* var1 )
147 {
148     FIXME("\n");
149     return E_NOTIMPL;
150 }
151
152 static HRESULT WINAPI domelem_put_nodeValue(
153     IXMLDOMElement *iface,
154     VARIANT var1 )
155 {
156     FIXME("\n");
157     return E_NOTIMPL;
158 }
159
160 static HRESULT WINAPI domelem_get_nodeType(
161     IXMLDOMElement *iface,
162     DOMNodeType* domNodeType )
163 {
164     FIXME("\n");
165     return E_NOTIMPL;
166 }
167
168 static HRESULT WINAPI domelem_get_parentNode(
169     IXMLDOMElement *iface,
170     IXMLDOMNode** parent )
171 {
172     FIXME("\n");
173     return E_NOTIMPL;
174 }
175
176 static HRESULT WINAPI domelem_get_childNodes(
177     IXMLDOMElement *iface,
178     IXMLDOMNodeList** outList)
179 {
180     FIXME("\n");
181     return E_NOTIMPL;
182 }
183
184 static HRESULT WINAPI domelem_get_firstChild(
185     IXMLDOMElement *iface,
186     IXMLDOMNode** domNode)
187 {
188     FIXME("\n");
189     return E_NOTIMPL;
190 }
191
192 static HRESULT WINAPI domelem_get_lastChild(
193     IXMLDOMElement *iface,
194     IXMLDOMNode** domNode)
195 {
196     FIXME("\n");
197     return E_NOTIMPL;
198 }
199
200 static HRESULT WINAPI domelem_get_previousSibling(
201     IXMLDOMElement *iface,
202     IXMLDOMNode** domNode)
203 {
204     FIXME("\n");
205     return E_NOTIMPL;
206 }
207
208 static HRESULT WINAPI domelem_get_nextSibling(
209     IXMLDOMElement *iface,
210     IXMLDOMNode** domNode)
211 {
212     FIXME("\n");
213     return E_NOTIMPL;
214 }
215
216 static HRESULT WINAPI domelem_get_attributes(
217     IXMLDOMElement *iface,
218     IXMLDOMNamedNodeMap** attributeMap)
219 {
220     FIXME("\n");
221     return E_NOTIMPL;
222 }
223
224 static HRESULT WINAPI domelem_insertBefore(
225     IXMLDOMElement *iface,
226     IXMLDOMNode* newNode, VARIANT var1,
227     IXMLDOMNode** outOldNode)
228 {
229     FIXME("\n");
230     return E_NOTIMPL;
231 }
232
233 static HRESULT WINAPI domelem_replaceChild(
234     IXMLDOMElement *iface,
235     IXMLDOMNode* newNode,
236     IXMLDOMNode* oldNode,
237     IXMLDOMNode** outOldNode)
238 {
239     FIXME("\n");
240     return E_NOTIMPL;
241 }
242
243 static HRESULT WINAPI domelem_removeChild(
244     IXMLDOMElement *iface,
245     IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
246 {
247     FIXME("\n");
248     return E_NOTIMPL;
249 }
250
251 static HRESULT WINAPI domelem_appendChild(
252     IXMLDOMElement *iface,
253     IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
254 {
255     FIXME("\n");
256     return E_NOTIMPL;
257 }
258
259 static HRESULT WINAPI domelem_hasChildNodes(
260     IXMLDOMElement *iface,
261     VARIANT_BOOL* pbool)
262 {
263     FIXME("\n");
264     return E_NOTIMPL;
265 }
266
267 static HRESULT WINAPI domelem_get_ownerDocument(
268     IXMLDOMElement *iface,
269     IXMLDOMDocument** domDocument)
270 {
271     FIXME("\n");
272     return E_NOTIMPL;
273 }
274
275 static HRESULT WINAPI domelem_cloneNode(
276     IXMLDOMElement *iface,
277     VARIANT_BOOL pbool, IXMLDOMNode** outNode)
278 {
279     FIXME("\n");
280     return E_NOTIMPL;
281 }
282
283 static HRESULT WINAPI domelem_get_nodeTypeString(
284     IXMLDOMElement *iface,
285     BSTR* p)
286 {
287     FIXME("\n");
288     return E_NOTIMPL;
289 }
290
291 static HRESULT WINAPI domelem_get_text(
292     IXMLDOMElement *iface,
293     BSTR* p)
294 {
295     FIXME("\n");
296     return E_NOTIMPL;
297 }
298
299 static HRESULT WINAPI domelem_put_text(
300     IXMLDOMElement *iface,
301     BSTR p)
302 {
303     FIXME("\n");
304     return E_NOTIMPL;
305 }
306
307 static HRESULT WINAPI domelem_get_specified(
308     IXMLDOMElement *iface,
309     VARIANT_BOOL* pbool)
310 {
311     FIXME("\n");
312     return E_NOTIMPL;
313 }
314
315 static HRESULT WINAPI domelem_get_definition(
316     IXMLDOMElement *iface,
317     IXMLDOMNode** domNode)
318 {
319     FIXME("\n");
320     return E_NOTIMPL;
321 }
322
323 static HRESULT WINAPI domelem_get_nodeTypedValue(
324     IXMLDOMElement *iface,
325     VARIANT* var1)
326 {
327     FIXME("\n");
328     return E_NOTIMPL;
329 }
330
331 static HRESULT WINAPI domelem_put_nodeTypedValue(
332     IXMLDOMElement *iface,
333     VARIANT var1)
334 {
335     FIXME("\n");
336     return E_NOTIMPL;
337 }
338
339 static HRESULT WINAPI domelem_get_dataType(
340     IXMLDOMElement *iface,
341     VARIANT* var1)
342 {
343     FIXME("\n");
344     return E_NOTIMPL;
345 }
346
347 static HRESULT WINAPI domelem_put_dataType(
348     IXMLDOMElement *iface,
349     BSTR p)
350 {
351     FIXME("\n");
352     return E_NOTIMPL;
353 }
354
355 static HRESULT WINAPI domelem_get_xml(
356     IXMLDOMElement *iface,
357     BSTR* p)
358 {
359     FIXME("\n");
360     return E_NOTIMPL;
361 }
362
363 static HRESULT WINAPI domelem_transformNode(
364     IXMLDOMElement *iface,
365     IXMLDOMNode* domNode, BSTR* p)
366 {
367     FIXME("\n");
368     return E_NOTIMPL;
369 }
370
371 static HRESULT WINAPI domelem_selectNodes(
372     IXMLDOMElement *iface,
373     BSTR p, IXMLDOMNodeList** outList)
374 {
375     FIXME("\n");
376     return E_NOTIMPL;
377 }
378
379 static HRESULT WINAPI domelem_selectSingleNode(
380     IXMLDOMElement *iface,
381     BSTR p, IXMLDOMNode** outNode)
382 {
383     FIXME("\n");
384     return E_NOTIMPL;
385 }
386
387 static HRESULT WINAPI domelem_get_parsed(
388     IXMLDOMElement *iface,
389     VARIANT_BOOL* pbool)
390 {
391     FIXME("\n");
392     return E_NOTIMPL;
393 }
394
395 static HRESULT WINAPI domelem_get_namespaceURI(
396     IXMLDOMElement *iface,
397     BSTR* p)
398 {
399     FIXME("\n");
400     return E_NOTIMPL;
401 }
402
403 static HRESULT WINAPI domelem_get_prefix(
404     IXMLDOMElement *iface,
405     BSTR* p)
406 {
407     FIXME("\n");
408     return E_NOTIMPL;
409 }
410
411 static HRESULT WINAPI domelem_get_baseName(
412     IXMLDOMElement *iface,
413     BSTR* p)
414 {
415     FIXME("\n");
416     return E_NOTIMPL;
417 }
418
419 static HRESULT WINAPI domelem_transformNodeToObject(
420     IXMLDOMElement *iface,
421     IXMLDOMNode* domNode, VARIANT var1)
422 {
423     FIXME("\n");
424     return E_NOTIMPL;
425 }
426
427 static HRESULT WINAPI domelem_get_tagName(
428     IXMLDOMElement *iface,
429     BSTR* p)
430 {
431     FIXME("\n");
432     return E_NOTIMPL;
433 }
434
435 static HRESULT WINAPI domelem_getAttribute(
436     IXMLDOMElement *iface,
437     BSTR p, VARIANT* var)
438 {
439     FIXME("\n");
440     return E_NOTIMPL;
441 }
442
443 static HRESULT WINAPI domelem_setAttribute(
444     IXMLDOMElement *iface,
445     BSTR p, VARIANT var)
446 {
447     FIXME("\n");
448     return E_NOTIMPL;
449 }
450
451 static HRESULT WINAPI domelem_removeAttribute(
452     IXMLDOMElement *iface,
453     BSTR p)
454 {
455     FIXME("\n");
456     return E_NOTIMPL;
457 }
458
459 static HRESULT WINAPI domelem_getAttributeNode(
460     IXMLDOMElement *iface,
461     BSTR p, IXMLDOMAttribute** attributeNode )
462 {
463     FIXME("\n");
464     return E_NOTIMPL;
465 }
466
467 static HRESULT WINAPI domelem_setAttributeNode(
468     IXMLDOMElement *iface,
469     IXMLDOMAttribute* domAttribute,
470     IXMLDOMAttribute** attributeNode)
471 {
472     FIXME("\n");
473     return E_NOTIMPL;
474 }
475
476 static HRESULT WINAPI domelem_removeAttributeNode(
477     IXMLDOMElement *iface,
478     IXMLDOMAttribute* domAttribute,
479     IXMLDOMAttribute** attributeNode)
480 {
481     FIXME("\n");
482     return E_NOTIMPL;
483 }
484
485 static HRESULT WINAPI domelem_getElementsByTagName(
486     IXMLDOMElement *iface,
487     BSTR p, IXMLDOMNodeList** resultList)
488 {
489     FIXME("\n");
490     return E_NOTIMPL;
491 }
492
493 static HRESULT WINAPI domelem_normalize(
494     IXMLDOMElement *iface )
495 {
496     FIXME("\n");
497     return E_NOTIMPL;
498 }
499
500 static const struct IXMLDOMElementVtbl domelem_vtbl =
501 {
502     domelem_QueryInterface,
503     domelem_AddRef,
504     domelem_Release,
505     domelem_GetTypeInfoCount,
506     domelem_GetTypeInfo,
507     domelem_GetIDsOfNames,
508     domelem_Invoke,
509     domelem_get_nodeName,
510     domelem_get_nodeValue,
511     domelem_put_nodeValue,
512     domelem_get_nodeType,
513     domelem_get_parentNode,
514     domelem_get_childNodes,
515     domelem_get_firstChild,
516     domelem_get_lastChild,
517     domelem_get_previousSibling,
518     domelem_get_nextSibling,
519     domelem_get_attributes,
520     domelem_insertBefore,
521     domelem_replaceChild,
522     domelem_removeChild,
523     domelem_appendChild,
524     domelem_hasChildNodes,
525     domelem_get_ownerDocument,
526     domelem_cloneNode,
527     domelem_get_nodeTypeString,
528     domelem_get_text,
529     domelem_put_text,
530     domelem_get_specified,
531     domelem_get_definition,
532     domelem_get_nodeTypedValue,
533     domelem_put_nodeTypedValue,
534     domelem_get_dataType,
535     domelem_put_dataType,
536     domelem_get_xml,
537     domelem_transformNode,
538     domelem_selectNodes,
539     domelem_selectSingleNode,
540     domelem_get_parsed,
541     domelem_get_namespaceURI,
542     domelem_get_prefix,
543     domelem_get_baseName,
544     domelem_transformNodeToObject,
545     domelem_get_tagName,
546     domelem_getAttribute,
547     domelem_setAttribute,
548     domelem_removeAttribute,
549     domelem_getAttributeNode,
550     domelem_setAttributeNode,
551     domelem_removeAttributeNode,
552     domelem_getElementsByTagName,
553     domelem_normalize,
554 };
555
556 IXMLDOMElement* create_element( xmlNodePtr element )
557 {
558     domelem *This;
559
560     This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
561     if ( !This )
562         return NULL;
563
564     This->lpVtbl = &domelem_vtbl;
565     This->node = create_element_node( element );
566     This->ref = 1;
567
568     if ( !This->node )
569     {
570         HeapFree( GetProcessHeap(), 0, This );
571         return NULL;
572     }
573
574     return (IXMLDOMElement*) &This->lpVtbl;
575 }
576
577 #endif