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));
85 IUnknown_AddRef( (IUnknown*)*ppvObject );
89 static ULONG WINAPI domdoctype_AddRef(
90 IXMLDOMDocumentType *iface )
92 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
93 LONG ref = InterlockedIncrement(&This->ref);
95 TRACE("(%p) ref=%d\n", This, ref);
100 static ULONG WINAPI domdoctype_Release(
101 IXMLDOMDocumentType *iface )
103 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
104 ULONG ref = InterlockedDecrement(&This->ref);
106 TRACE("(%p) ref=%d\n", This, ref);
109 destroy_xmlnode(&This->node);
116 static HRESULT WINAPI domdoctype_GetTypeInfoCount(
117 IXMLDOMDocumentType *iface,
120 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
122 TRACE("(%p)->(%p)\n", This, pctinfo);
129 static HRESULT WINAPI domdoctype_GetTypeInfo(
130 IXMLDOMDocumentType *iface,
131 UINT iTInfo, LCID lcid,
132 ITypeInfo** ppTInfo )
134 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
137 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
139 hr = get_typeinfo(IXMLDOMDocumentType_tid, ppTInfo);
144 static HRESULT WINAPI domdoctype_GetIDsOfNames(
145 IXMLDOMDocumentType *iface,
146 REFIID riid, LPOLESTR* rgszNames,
147 UINT cNames, LCID lcid, DISPID* rgDispId )
149 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
153 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
156 if(!rgszNames || cNames == 0 || !rgDispId)
159 hr = get_typeinfo(IXMLDOMDocumentType_tid, &typeinfo);
162 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
163 ITypeInfo_Release(typeinfo);
169 static HRESULT WINAPI domdoctype_Invoke(
170 IXMLDOMDocumentType *iface,
171 DISPID dispIdMember, REFIID riid, LCID lcid,
172 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
173 EXCEPINFO* pExcepInfo, UINT* puArgErr )
175 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
179 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
180 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
182 hr = get_typeinfo(IXMLDOMDocumentType_tid, &typeinfo);
185 hr = ITypeInfo_Invoke(typeinfo, &This->IXMLDOMDocumentType_iface, dispIdMember, wFlags,
186 pDispParams, pVarResult, pExcepInfo, puArgErr);
187 ITypeInfo_Release(typeinfo);
193 static HRESULT WINAPI domdoctype_get_nodeName(
194 IXMLDOMDocumentType *iface,
197 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
198 FIXME("(%p)->(%p): stub\n", This, p);
202 static HRESULT WINAPI domdoctype_get_nodeValue(
203 IXMLDOMDocumentType *iface,
206 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
207 FIXME("(%p)->(%p): stub\n", This, value);
211 static HRESULT WINAPI domdoctype_put_nodeValue(
212 IXMLDOMDocumentType *iface,
215 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
216 FIXME("(%p)->(%s): stub\n", This, debugstr_variant(&value));
220 static HRESULT WINAPI domdoctype_get_nodeType(
221 IXMLDOMDocumentType *iface,
222 DOMNodeType* domNodeType )
224 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
226 TRACE("(%p)->(%p)\n", This, domNodeType);
228 *domNodeType = NODE_DOCUMENT_TYPE;
232 static HRESULT WINAPI domdoctype_get_parentNode(
233 IXMLDOMDocumentType *iface,
234 IXMLDOMNode** parent )
236 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
237 FIXME("(%p)->(%p): stub\n", This, parent);
241 static HRESULT WINAPI domdoctype_get_childNodes(
242 IXMLDOMDocumentType *iface,
243 IXMLDOMNodeList** outList)
245 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
246 FIXME("(%p)->(%p): stub\n", This, outList);
250 static HRESULT WINAPI domdoctype_get_firstChild(
251 IXMLDOMDocumentType *iface,
252 IXMLDOMNode** domNode)
254 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
255 FIXME("(%p)->(%p): stub\n", This, domNode);
259 static HRESULT WINAPI domdoctype_get_lastChild(
260 IXMLDOMDocumentType *iface,
261 IXMLDOMNode** domNode)
263 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
264 FIXME("(%p)->(%p): stub\n", This, domNode);
268 static HRESULT WINAPI domdoctype_get_previousSibling(
269 IXMLDOMDocumentType *iface,
270 IXMLDOMNode** domNode)
272 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
273 FIXME("(%p)->(%p): stub\n", This, domNode);
277 static HRESULT WINAPI domdoctype_get_nextSibling(
278 IXMLDOMDocumentType *iface,
279 IXMLDOMNode** domNode)
281 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
282 FIXME("(%p)->(%p): stub\n", This, domNode);
286 static HRESULT WINAPI domdoctype_get_attributes(
287 IXMLDOMDocumentType *iface,
288 IXMLDOMNamedNodeMap** attributeMap)
290 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
291 FIXME("(%p)->(%p): stub\n", This, attributeMap);
295 static HRESULT WINAPI domdoctype_insertBefore(
296 IXMLDOMDocumentType *iface,
297 IXMLDOMNode* newNode, VARIANT refChild,
298 IXMLDOMNode** outOldNode)
300 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
302 FIXME("(%p)->(%p %s %p): stub\n", This, newNode, debugstr_variant(&refChild), outOldNode);
307 static HRESULT WINAPI domdoctype_replaceChild(
308 IXMLDOMDocumentType *iface,
309 IXMLDOMNode* newNode,
310 IXMLDOMNode* oldNode,
311 IXMLDOMNode** outOldNode)
313 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
315 FIXME("(%p)->(%p %p %p): stub\n", This, newNode, oldNode, outOldNode);
320 static HRESULT WINAPI domdoctype_removeChild(
321 IXMLDOMDocumentType *iface,
322 IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
324 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
325 FIXME("(%p)->(%p %p): stub\n", This, domNode, oldNode);
329 static HRESULT WINAPI domdoctype_appendChild(
330 IXMLDOMDocumentType *iface,
331 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
333 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
334 FIXME("(%p)->(%p %p): stub\n", This, newNode, outNewNode);
338 static HRESULT WINAPI domdoctype_hasChildNodes(
339 IXMLDOMDocumentType *iface,
342 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
343 FIXME("(%p)->(%p): stub\n", This, pbool);
347 static HRESULT WINAPI domdoctype_get_ownerDocument(
348 IXMLDOMDocumentType *iface,
349 IXMLDOMDocument** domDocument)
351 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
352 FIXME("(%p)->(%p): stub\n", This, domDocument);
356 static HRESULT WINAPI domdoctype_cloneNode(
357 IXMLDOMDocumentType *iface,
358 VARIANT_BOOL deep, IXMLDOMNode** outNode)
360 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
361 FIXME("(%p)->(%d %p): stub\n", This, deep, outNode);
365 static HRESULT WINAPI domdoctype_get_nodeTypeString(
366 IXMLDOMDocumentType *iface,
369 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
370 FIXME("(%p)->(%p): stub\n", This, p);
374 static HRESULT WINAPI domdoctype_get_text(
375 IXMLDOMDocumentType *iface,
378 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
379 FIXME("(%p)->(%p): stub\n", This, p);
383 static HRESULT WINAPI domdoctype_put_text(
384 IXMLDOMDocumentType *iface,
387 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
388 FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
392 static HRESULT WINAPI domdoctype_get_specified(
393 IXMLDOMDocumentType *iface,
394 VARIANT_BOOL* isSpecified)
396 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
397 FIXME("(%p)->(%p): stub\n", This, isSpecified);
401 static HRESULT WINAPI domdoctype_get_definition(
402 IXMLDOMDocumentType *iface,
403 IXMLDOMNode** definitionNode)
405 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
406 FIXME("(%p)->(%p)\n", This, definitionNode);
410 static HRESULT WINAPI domdoctype_get_nodeTypedValue(
411 IXMLDOMDocumentType *iface,
414 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
415 FIXME("(%p)->(%p): stub\n", This, var1);
419 static HRESULT WINAPI domdoctype_put_nodeTypedValue(
420 IXMLDOMDocumentType *iface,
423 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
424 FIXME("(%p)->(%s): stub\n", This, debugstr_variant(&value));
428 static HRESULT WINAPI domdoctype_get_dataType(
429 IXMLDOMDocumentType *iface,
432 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
433 FIXME("(%p)->(%p): stub\n", This, typename);
437 static HRESULT WINAPI domdoctype_put_dataType(
438 IXMLDOMDocumentType *iface,
441 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
442 FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
446 static HRESULT WINAPI domdoctype_get_xml(
447 IXMLDOMDocumentType *iface,
450 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
451 FIXME("(%p)->(%p): stub\n", This, p);
455 static HRESULT WINAPI domdoctype_transformNode(
456 IXMLDOMDocumentType *iface,
457 IXMLDOMNode* domNode, BSTR* p)
459 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
460 FIXME("(%p)->(%p %p): stub\n", This, domNode, p);
464 static HRESULT WINAPI domdoctype_selectNodes(
465 IXMLDOMDocumentType *iface,
466 BSTR p, IXMLDOMNodeList** outList)
468 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
469 FIXME("(%p)->(%s %p): stub\n", This, debugstr_w(p), outList);
473 static HRESULT WINAPI domdoctype_selectSingleNode(
474 IXMLDOMDocumentType *iface,
475 BSTR p, IXMLDOMNode** outNode)
477 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
478 FIXME("(%p)->(%s %p): stub\n", This, debugstr_w(p), outNode);
482 static HRESULT WINAPI domdoctype_get_parsed(
483 IXMLDOMDocumentType *iface,
484 VARIANT_BOOL* isParsed)
486 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
487 FIXME("(%p)->(%p): stub\n", This, isParsed);
491 static HRESULT WINAPI domdoctype_get_namespaceURI(
492 IXMLDOMDocumentType *iface,
495 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
496 FIXME("(%p)->(%p): stub\n", This, p);
500 static HRESULT WINAPI domdoctype_get_prefix(
501 IXMLDOMDocumentType *iface,
504 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
505 FIXME("(%p)->(%p): stub\n", This, prefix);
509 static HRESULT WINAPI domdoctype_get_baseName(
510 IXMLDOMDocumentType *iface,
513 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
514 FIXME("(%p)->(%p): stub\n", This, name);
518 static HRESULT WINAPI domdoctype_transformNodeToObject(
519 IXMLDOMDocumentType *iface,
520 IXMLDOMNode* domNode, VARIANT var1)
522 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
523 FIXME("(%p)->(%p %s): stub\n", This, domNode, debugstr_variant(&var1));
527 static HRESULT WINAPI domdoctype_get_name(
528 IXMLDOMDocumentType *iface,
531 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
532 FIXME("(%p)->(%p): stub\n", This, p);
536 static HRESULT WINAPI domdoctype_get_entities(
537 IXMLDOMDocumentType *iface,
538 IXMLDOMNamedNodeMap **entityMap)
540 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
541 FIXME("(%p)->(%p): stub\n", This, entityMap);
545 static HRESULT WINAPI domdoctype_get_notations(
546 IXMLDOMDocumentType *iface,
547 IXMLDOMNamedNodeMap **notationMap)
549 domdoctype *This = impl_from_IXMLDOMDocumentType( iface );
550 FIXME("(%p)->(%p): stub\n", This, notationMap);
554 static const struct IXMLDOMDocumentTypeVtbl domdoctype_vtbl =
556 domdoctype_QueryInterface,
559 domdoctype_GetTypeInfoCount,
560 domdoctype_GetTypeInfo,
561 domdoctype_GetIDsOfNames,
563 domdoctype_get_nodeName,
564 domdoctype_get_nodeValue,
565 domdoctype_put_nodeValue,
566 domdoctype_get_nodeType,
567 domdoctype_get_parentNode,
568 domdoctype_get_childNodes,
569 domdoctype_get_firstChild,
570 domdoctype_get_lastChild,
571 domdoctype_get_previousSibling,
572 domdoctype_get_nextSibling,
573 domdoctype_get_attributes,
574 domdoctype_insertBefore,
575 domdoctype_replaceChild,
576 domdoctype_removeChild,
577 domdoctype_appendChild,
578 domdoctype_hasChildNodes,
579 domdoctype_get_ownerDocument,
580 domdoctype_cloneNode,
581 domdoctype_get_nodeTypeString,
584 domdoctype_get_specified,
585 domdoctype_get_definition,
586 domdoctype_get_nodeTypedValue,
587 domdoctype_put_nodeTypedValue,
588 domdoctype_get_dataType,
589 domdoctype_put_dataType,
591 domdoctype_transformNode,
592 domdoctype_selectNodes,
593 domdoctype_selectSingleNode,
594 domdoctype_get_parsed,
595 domdoctype_get_namespaceURI,
596 domdoctype_get_prefix,
597 domdoctype_get_baseName,
598 domdoctype_transformNodeToObject,
600 domdoctype_get_entities,
601 domdoctype_get_notations
604 static const tid_t domdoctype_iface_tids[] = {
605 IXMLDOMDocumentType_tid,
609 static dispex_static_data_t domdoctype_dispex = {
611 IXMLDOMDocumentType_tid,
613 domdoctype_iface_tids
616 IUnknown* create_doc_type( xmlNodePtr doctype )
620 This = heap_alloc( sizeof *This );
624 This->IXMLDOMDocumentType_iface.lpVtbl = &domdoctype_vtbl;
627 init_xmlnode(&This->node, doctype, (IXMLDOMNode*)&This->IXMLDOMDocumentType_iface,
630 return (IUnknown*)&This->IXMLDOMDocumentType_iface;