2 * DOM DTD node implementation
4 * Copyright 2010 Nikolay Sivov
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
27 # include <libxml/parser.h>
28 # include <libxml/xmlerror.h>
38 #include "msxml_private.h"
40 #include "wine/debug.h"
42 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
46 typedef struct _domdoctype
49 IXMLDOMDocumentType IXMLDOMDocumentType_iface;
53 static inline domdoctype *impl_from_IXMLDOMDocumentType( IXMLDOMDocumentType *iface )
55 return CONTAINING_RECORD(iface, domdoctype, IXMLDOMDocumentType_iface);
58 static HRESULT WINAPI domdoctype_QueryInterface(
59 IXMLDOMDocumentType *iface,
63 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
65 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
67 if ( IsEqualGUID( riid, &IID_IXMLDOMDocumentType ) ||
68 IsEqualGUID( riid, &IID_IXMLDOMNode ) ||
69 IsEqualGUID( riid, &IID_IDispatch ) ||
70 IsEqualGUID( riid, &IID_IUnknown ) )
72 *ppvObject = &This->IXMLDOMDocumentType_iface;
74 else if(node_query_interface(&This->node, riid, ppvObject))
76 return *ppvObject ? S_OK : E_NOINTERFACE;
80 FIXME("interface %s not implemented\n", debugstr_guid(riid));
84 IUnknown_AddRef( (IUnknown*)*ppvObject );
88 static ULONG WINAPI domdoctype_AddRef(
89 IXMLDOMDocumentType *iface )
91 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
92 LONG ref = InterlockedIncrement(&This->ref);
94 TRACE("(%p) ref=%d\n", This, ref);
99 static ULONG WINAPI domdoctype_Release(
100 IXMLDOMDocumentType *iface )
102 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
103 ULONG ref = InterlockedDecrement(&This->ref);
105 TRACE("(%p) ref=%d\n", This, ref);
108 destroy_xmlnode(&This->node);
115 static HRESULT WINAPI domdoctype_GetTypeInfoCount(
116 IXMLDOMDocumentType *iface,
119 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
121 TRACE("(%p)->(%p)\n", This, pctinfo);
128 static HRESULT WINAPI domdoctype_GetTypeInfo(
129 IXMLDOMDocumentType *iface,
130 UINT iTInfo, LCID lcid,
131 ITypeInfo** ppTInfo )
133 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
136 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
138 hr = get_typeinfo(IXMLDOMDocumentType_tid, ppTInfo);
143 static HRESULT WINAPI domdoctype_GetIDsOfNames(
144 IXMLDOMDocumentType *iface,
145 REFIID riid, LPOLESTR* rgszNames,
146 UINT cNames, LCID lcid, DISPID* rgDispId )
148 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
152 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
155 if(!rgszNames || cNames == 0 || !rgDispId)
158 hr = get_typeinfo(IXMLDOMDocumentType_tid, &typeinfo);
161 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
162 ITypeInfo_Release(typeinfo);
168 static HRESULT WINAPI domdoctype_Invoke(
169 IXMLDOMDocumentType *iface,
170 DISPID dispIdMember, REFIID riid, LCID lcid,
171 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
172 EXCEPINFO* pExcepInfo, UINT* puArgErr )
174 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
178 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
179 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
181 hr = get_typeinfo(IXMLDOMDocumentType_tid, &typeinfo);
184 hr = ITypeInfo_Invoke(typeinfo, &This->IXMLDOMDocumentType_iface, dispIdMember, wFlags,
185 pDispParams, pVarResult, pExcepInfo, puArgErr);
186 ITypeInfo_Release(typeinfo);
192 static HRESULT WINAPI domdoctype_get_nodeName(
193 IXMLDOMDocumentType *iface,
196 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
197 FIXME("(%p)->(%p): stub\n", This, p);
201 static HRESULT WINAPI domdoctype_get_nodeValue(
202 IXMLDOMDocumentType *iface,
205 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
206 FIXME("(%p)->(%p): stub\n", This, value);
210 static HRESULT WINAPI domdoctype_put_nodeValue(
211 IXMLDOMDocumentType *iface,
214 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
215 FIXME("(%p)->(%s): stub\n", This, debugstr_variant(&value));
219 static HRESULT WINAPI domdoctype_get_nodeType(
220 IXMLDOMDocumentType *iface,
221 DOMNodeType* domNodeType )
223 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
225 TRACE("(%p)->(%p)\n", This, domNodeType);
227 *domNodeType = NODE_DOCUMENT_TYPE;
231 static HRESULT WINAPI domdoctype_get_parentNode(
232 IXMLDOMDocumentType *iface,
233 IXMLDOMNode** parent )
235 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
236 FIXME("(%p)->(%p): stub\n", This, parent);
240 static HRESULT WINAPI domdoctype_get_childNodes(
241 IXMLDOMDocumentType *iface,
242 IXMLDOMNodeList** outList)
244 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
245 FIXME("(%p)->(%p): stub\n", This, outList);
249 static HRESULT WINAPI domdoctype_get_firstChild(
250 IXMLDOMDocumentType *iface,
251 IXMLDOMNode** domNode)
253 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
254 FIXME("(%p)->(%p): stub\n", This, domNode);
258 static HRESULT WINAPI domdoctype_get_lastChild(
259 IXMLDOMDocumentType *iface,
260 IXMLDOMNode** domNode)
262 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
263 FIXME("(%p)->(%p): stub\n", This, domNode);
267 static HRESULT WINAPI domdoctype_get_previousSibling(
268 IXMLDOMDocumentType *iface,
269 IXMLDOMNode** domNode)
271 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
272 FIXME("(%p)->(%p): stub\n", This, domNode);
276 static HRESULT WINAPI domdoctype_get_nextSibling(
277 IXMLDOMDocumentType *iface,
278 IXMLDOMNode** domNode)
280 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
281 FIXME("(%p)->(%p): stub\n", This, domNode);
285 static HRESULT WINAPI domdoctype_get_attributes(
286 IXMLDOMDocumentType *iface,
287 IXMLDOMNamedNodeMap** attributeMap)
289 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
290 FIXME("(%p)->(%p): stub\n", This, attributeMap);
294 static HRESULT WINAPI domdoctype_insertBefore(
295 IXMLDOMDocumentType *iface,
296 IXMLDOMNode* newNode, VARIANT refChild,
297 IXMLDOMNode** outOldNode)
299 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
301 FIXME("(%p)->(%p %s %p): stub\n", This, newNode, debugstr_variant(&refChild), outOldNode);
306 static HRESULT WINAPI domdoctype_replaceChild(
307 IXMLDOMDocumentType *iface,
308 IXMLDOMNode* newNode,
309 IXMLDOMNode* oldNode,
310 IXMLDOMNode** outOldNode)
312 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
314 FIXME("(%p)->(%p %p %p): stub\n", This, newNode, oldNode, outOldNode);
319 static HRESULT WINAPI domdoctype_removeChild(
320 IXMLDOMDocumentType *iface,
321 IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
323 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
324 FIXME("(%p)->(%p %p): stub\n", This, domNode, oldNode);
328 static HRESULT WINAPI domdoctype_appendChild(
329 IXMLDOMDocumentType *iface,
330 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
332 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
333 FIXME("(%p)->(%p %p): stub\n", This, newNode, outNewNode);
337 static HRESULT WINAPI domdoctype_hasChildNodes(
338 IXMLDOMDocumentType *iface,
341 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
342 FIXME("(%p)->(%p): stub\n", This, pbool);
346 static HRESULT WINAPI domdoctype_get_ownerDocument(
347 IXMLDOMDocumentType *iface,
348 IXMLDOMDocument** domDocument)
350 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
351 FIXME("(%p)->(%p): stub\n", This, domDocument);
355 static HRESULT WINAPI domdoctype_cloneNode(
356 IXMLDOMDocumentType *iface,
357 VARIANT_BOOL deep, IXMLDOMNode** outNode)
359 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
360 FIXME("(%p)->(%d %p): stub\n", This, deep, outNode);
364 static HRESULT WINAPI domdoctype_get_nodeTypeString(
365 IXMLDOMDocumentType *iface,
368 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
369 FIXME("(%p)->(%p): stub\n", This, p);
373 static HRESULT WINAPI domdoctype_get_text(
374 IXMLDOMDocumentType *iface,
377 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
378 FIXME("(%p)->(%p): stub\n", This, p);
382 static HRESULT WINAPI domdoctype_put_text(
383 IXMLDOMDocumentType *iface,
386 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
387 FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
391 static HRESULT WINAPI domdoctype_get_specified(
392 IXMLDOMDocumentType *iface,
393 VARIANT_BOOL* isSpecified)
395 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
396 FIXME("(%p)->(%p): stub\n", This, isSpecified);
400 static HRESULT WINAPI domdoctype_get_definition(
401 IXMLDOMDocumentType *iface,
402 IXMLDOMNode** definitionNode)
404 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
405 FIXME("(%p)->(%p)\n", This, definitionNode);
409 static HRESULT WINAPI domdoctype_get_nodeTypedValue(
410 IXMLDOMDocumentType *iface,
413 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
414 FIXME("(%p)->(%p): stub\n", This, var1);
418 static HRESULT WINAPI domdoctype_put_nodeTypedValue(
419 IXMLDOMDocumentType *iface,
422 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
423 FIXME("(%p)->(%s): stub\n", This, debugstr_variant(&value));
427 static HRESULT WINAPI domdoctype_get_dataType(
428 IXMLDOMDocumentType *iface,
431 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
432 FIXME("(%p)->(%p): stub\n", This, typename);
436 static HRESULT WINAPI domdoctype_put_dataType(
437 IXMLDOMDocumentType *iface,
440 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
441 FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
445 static HRESULT WINAPI domdoctype_get_xml(
446 IXMLDOMDocumentType *iface,
449 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
450 FIXME("(%p)->(%p): stub\n", This, p);
454 static HRESULT WINAPI domdoctype_transformNode(
455 IXMLDOMDocumentType *iface,
456 IXMLDOMNode* domNode, BSTR* p)
458 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
459 FIXME("(%p)->(%p %p): stub\n", This, domNode, p);
463 static HRESULT WINAPI domdoctype_selectNodes(
464 IXMLDOMDocumentType *iface,
465 BSTR p, IXMLDOMNodeList** outList)
467 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
468 FIXME("(%p)->(%s %p): stub\n", This, debugstr_w(p), outList);
472 static HRESULT WINAPI domdoctype_selectSingleNode(
473 IXMLDOMDocumentType *iface,
474 BSTR p, IXMLDOMNode** outNode)
476 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
477 FIXME("(%p)->(%s %p): stub\n", This, debugstr_w(p), outNode);
481 static HRESULT WINAPI domdoctype_get_parsed(
482 IXMLDOMDocumentType *iface,
483 VARIANT_BOOL* isParsed)
485 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
486 FIXME("(%p)->(%p): stub\n", This, isParsed);
490 static HRESULT WINAPI domdoctype_get_namespaceURI(
491 IXMLDOMDocumentType *iface,
494 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
495 FIXME("(%p)->(%p): stub\n", This, p);
499 static HRESULT WINAPI domdoctype_get_prefix(
500 IXMLDOMDocumentType *iface,
503 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
504 FIXME("(%p)->(%p): stub\n", This, prefix);
508 static HRESULT WINAPI domdoctype_get_baseName(
509 IXMLDOMDocumentType *iface,
512 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
513 FIXME("(%p)->(%p): stub\n", This, name);
517 static HRESULT WINAPI domdoctype_transformNodeToObject(
518 IXMLDOMDocumentType *iface,
519 IXMLDOMNode* domNode, VARIANT var1)
521 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
522 FIXME("(%p)->(%p %s): stub\n", This, domNode, debugstr_variant(&var1));
526 static HRESULT WINAPI domdoctype_get_name(
527 IXMLDOMDocumentType *iface,
530 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
531 FIXME("(%p)->(%p): stub\n", This, p);
535 static HRESULT WINAPI domdoctype_get_entities(
536 IXMLDOMDocumentType *iface,
537 IXMLDOMNamedNodeMap **entityMap)
539 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
540 FIXME("(%p)->(%p): stub\n", This, entityMap);
544 static HRESULT WINAPI domdoctype_get_notations(
545 IXMLDOMDocumentType *iface,
546 IXMLDOMNamedNodeMap **notationMap)
548 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
549 FIXME("(%p)->(%p): stub\n", This, notationMap);
553 static const struct IXMLDOMDocumentTypeVtbl domdoctype_vtbl =
555 domdoctype_QueryInterface,
558 domdoctype_GetTypeInfoCount,
559 domdoctype_GetTypeInfo,
560 domdoctype_GetIDsOfNames,
562 domdoctype_get_nodeName,
563 domdoctype_get_nodeValue,
564 domdoctype_put_nodeValue,
565 domdoctype_get_nodeType,
566 domdoctype_get_parentNode,
567 domdoctype_get_childNodes,
568 domdoctype_get_firstChild,
569 domdoctype_get_lastChild,
570 domdoctype_get_previousSibling,
571 domdoctype_get_nextSibling,
572 domdoctype_get_attributes,
573 domdoctype_insertBefore,
574 domdoctype_replaceChild,
575 domdoctype_removeChild,
576 domdoctype_appendChild,
577 domdoctype_hasChildNodes,
578 domdoctype_get_ownerDocument,
579 domdoctype_cloneNode,
580 domdoctype_get_nodeTypeString,
583 domdoctype_get_specified,
584 domdoctype_get_definition,
585 domdoctype_get_nodeTypedValue,
586 domdoctype_put_nodeTypedValue,
587 domdoctype_get_dataType,
588 domdoctype_put_dataType,
590 domdoctype_transformNode,
591 domdoctype_selectNodes,
592 domdoctype_selectSingleNode,
593 domdoctype_get_parsed,
594 domdoctype_get_namespaceURI,
595 domdoctype_get_prefix,
596 domdoctype_get_baseName,
597 domdoctype_transformNodeToObject,
599 domdoctype_get_entities,
600 domdoctype_get_notations
603 static const tid_t domdoctype_iface_tids[] = {
604 IXMLDOMDocumentType_tid,
608 static dispex_static_data_t domdoctype_dispex = {
610 IXMLDOMDocumentType_tid,
612 domdoctype_iface_tids
615 IUnknown* create_doc_type( xmlNodePtr doctype )
619 This = heap_alloc( sizeof *This );
623 This->IXMLDOMDocumentType_iface.lpVtbl = &domdoctype_vtbl;
626 init_xmlnode(&This->node, doctype, (IXMLDOMNode*)&This->IXMLDOMDocumentType_iface,
629 return (IUnknown*)&This->IXMLDOMDocumentType_iface;