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
24 #include <libxml/parser.h>
25 #include <libxml/xmlerror.h>
34 #include "msxml_private.h"
36 #include "wine/debug.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
40 typedef struct _domdoctype
43 IXMLDOMDocumentType IXMLDOMDocumentType_iface
;
47 static inline domdoctype
*impl_from_IXMLDOMDocumentType( IXMLDOMDocumentType
*iface
)
49 return CONTAINING_RECORD(iface
, domdoctype
, IXMLDOMDocumentType_iface
);
52 static HRESULT WINAPI
domdoctype_QueryInterface(
53 IXMLDOMDocumentType
*iface
,
57 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
59 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
61 if ( IsEqualGUID( riid
, &IID_IXMLDOMDocumentType
) ||
62 IsEqualGUID( riid
, &IID_IXMLDOMNode
) ||
63 IsEqualGUID( riid
, &IID_IDispatch
) ||
64 IsEqualGUID( riid
, &IID_IUnknown
) )
66 *ppvObject
= &This
->IXMLDOMDocumentType_iface
;
68 else if(node_query_interface(&This
->node
, riid
, ppvObject
))
70 return *ppvObject
? S_OK
: E_NOINTERFACE
;
74 TRACE("interface %s not implemented\n", debugstr_guid(riid
));
79 IUnknown_AddRef( (IUnknown
*)*ppvObject
);
83 static ULONG WINAPI
domdoctype_AddRef(IXMLDOMDocumentType
*iface
)
85 domdoctype
*doctype
= impl_from_IXMLDOMDocumentType(iface
);
86 LONG ref
= InterlockedIncrement(&doctype
->ref
);
87 TRACE("%p, refcount %ld.\n", iface
, ref
);
91 static ULONG WINAPI
domdoctype_Release(IXMLDOMDocumentType
*iface
)
93 domdoctype
*doctype
= impl_from_IXMLDOMDocumentType(iface
);
94 ULONG ref
= InterlockedDecrement(&doctype
->ref
);
96 TRACE("%p, refcount %ld.\n", iface
, ref
);
100 destroy_xmlnode(&doctype
->node
);
107 static HRESULT WINAPI
domdoctype_GetTypeInfoCount(
108 IXMLDOMDocumentType
*iface
,
111 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
112 return IDispatchEx_GetTypeInfoCount(&This
->node
.dispex
.IDispatchEx_iface
, pctinfo
);
115 static HRESULT WINAPI
domdoctype_GetTypeInfo(
116 IXMLDOMDocumentType
*iface
,
117 UINT iTInfo
, LCID lcid
,
118 ITypeInfo
** ppTInfo
)
120 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
121 return IDispatchEx_GetTypeInfo(&This
->node
.dispex
.IDispatchEx_iface
,
122 iTInfo
, lcid
, ppTInfo
);
125 static HRESULT WINAPI
domdoctype_GetIDsOfNames(
126 IXMLDOMDocumentType
*iface
,
127 REFIID riid
, LPOLESTR
* rgszNames
,
128 UINT cNames
, LCID lcid
, DISPID
* rgDispId
)
130 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
131 return IDispatchEx_GetIDsOfNames(&This
->node
.dispex
.IDispatchEx_iface
,
132 riid
, rgszNames
, cNames
, lcid
, rgDispId
);
135 static HRESULT WINAPI
domdoctype_Invoke(
136 IXMLDOMDocumentType
*iface
,
137 DISPID dispIdMember
, REFIID riid
, LCID lcid
,
138 WORD wFlags
, DISPPARAMS
* pDispParams
, VARIANT
* pVarResult
,
139 EXCEPINFO
* pExcepInfo
, UINT
* puArgErr
)
141 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
142 return IDispatchEx_Invoke(&This
->node
.dispex
.IDispatchEx_iface
,
143 dispIdMember
, riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
146 static HRESULT WINAPI
domdoctype_get_nodeName(
147 IXMLDOMDocumentType
*iface
,
150 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
151 TRACE("(%p)->(%p)\n", This
, p
);
152 return node_get_nodeName(&This
->node
, p
);
155 static HRESULT WINAPI
domdoctype_get_nodeValue(
156 IXMLDOMDocumentType
*iface
,
159 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
160 FIXME("(%p)->(%p): stub\n", This
, value
);
164 static HRESULT WINAPI
domdoctype_put_nodeValue(
165 IXMLDOMDocumentType
*iface
,
168 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
169 FIXME("(%p)->(%s): stub\n", This
, debugstr_variant(&value
));
173 static HRESULT WINAPI
domdoctype_get_nodeType(
174 IXMLDOMDocumentType
*iface
,
175 DOMNodeType
* domNodeType
)
177 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
179 TRACE("(%p)->(%p)\n", This
, domNodeType
);
181 *domNodeType
= NODE_DOCUMENT_TYPE
;
185 static HRESULT WINAPI
domdoctype_get_parentNode(
186 IXMLDOMDocumentType
*iface
,
187 IXMLDOMNode
** parent
)
189 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
190 FIXME("(%p)->(%p): stub\n", This
, parent
);
194 static HRESULT WINAPI
domdoctype_get_childNodes(
195 IXMLDOMDocumentType
*iface
,
196 IXMLDOMNodeList
** outList
)
198 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
199 FIXME("(%p)->(%p): stub\n", This
, outList
);
203 static HRESULT WINAPI
domdoctype_get_firstChild(
204 IXMLDOMDocumentType
*iface
,
205 IXMLDOMNode
** domNode
)
207 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
208 FIXME("(%p)->(%p): stub\n", This
, domNode
);
212 static HRESULT WINAPI
domdoctype_get_lastChild(
213 IXMLDOMDocumentType
*iface
,
214 IXMLDOMNode
** domNode
)
216 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
217 FIXME("(%p)->(%p): stub\n", This
, domNode
);
221 static HRESULT WINAPI
domdoctype_get_previousSibling(
222 IXMLDOMDocumentType
*iface
,
223 IXMLDOMNode
** domNode
)
225 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
226 FIXME("(%p)->(%p): stub\n", This
, domNode
);
230 static HRESULT WINAPI
domdoctype_get_nextSibling(
231 IXMLDOMDocumentType
*iface
,
232 IXMLDOMNode
** domNode
)
234 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
235 FIXME("(%p)->(%p): stub\n", This
, domNode
);
239 static HRESULT WINAPI
domdoctype_get_attributes(
240 IXMLDOMDocumentType
*iface
,
241 IXMLDOMNamedNodeMap
** attributeMap
)
243 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
244 FIXME("(%p)->(%p): stub\n", This
, attributeMap
);
248 static HRESULT WINAPI
domdoctype_insertBefore(
249 IXMLDOMDocumentType
*iface
,
250 IXMLDOMNode
* newNode
, VARIANT refChild
,
251 IXMLDOMNode
** outOldNode
)
253 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
255 FIXME("(%p)->(%p %s %p): stub\n", This
, newNode
, debugstr_variant(&refChild
), outOldNode
);
260 static HRESULT WINAPI
domdoctype_replaceChild(
261 IXMLDOMDocumentType
*iface
,
262 IXMLDOMNode
* newNode
,
263 IXMLDOMNode
* oldNode
,
264 IXMLDOMNode
** outOldNode
)
266 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
268 FIXME("(%p)->(%p %p %p): stub\n", This
, newNode
, oldNode
, outOldNode
);
273 static HRESULT WINAPI
domdoctype_removeChild(
274 IXMLDOMDocumentType
*iface
,
275 IXMLDOMNode
* domNode
, IXMLDOMNode
** oldNode
)
277 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
278 FIXME("(%p)->(%p %p): stub\n", This
, domNode
, oldNode
);
282 static HRESULT WINAPI
domdoctype_appendChild(
283 IXMLDOMDocumentType
*iface
,
284 IXMLDOMNode
* newNode
, IXMLDOMNode
** outNewNode
)
286 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
287 FIXME("(%p)->(%p %p): stub\n", This
, newNode
, outNewNode
);
291 static HRESULT WINAPI
domdoctype_hasChildNodes(
292 IXMLDOMDocumentType
*iface
,
295 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
296 FIXME("(%p)->(%p): stub\n", This
, pbool
);
300 static HRESULT WINAPI
domdoctype_get_ownerDocument(
301 IXMLDOMDocumentType
*iface
,
302 IXMLDOMDocument
** domDocument
)
304 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
305 FIXME("(%p)->(%p): stub\n", This
, domDocument
);
309 static HRESULT WINAPI
domdoctype_cloneNode(
310 IXMLDOMDocumentType
*iface
,
311 VARIANT_BOOL deep
, IXMLDOMNode
** outNode
)
313 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
314 FIXME("(%p)->(%d %p): stub\n", This
, deep
, outNode
);
318 static HRESULT WINAPI
domdoctype_get_nodeTypeString(
319 IXMLDOMDocumentType
*iface
,
322 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
323 FIXME("(%p)->(%p): stub\n", This
, p
);
327 static HRESULT WINAPI
domdoctype_get_text(
328 IXMLDOMDocumentType
*iface
,
331 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
332 FIXME("(%p)->(%p): stub\n", This
, p
);
336 static HRESULT WINAPI
domdoctype_put_text(
337 IXMLDOMDocumentType
*iface
,
340 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
341 FIXME("(%p)->(%s): stub\n", This
, debugstr_w(p
));
345 static HRESULT WINAPI
domdoctype_get_specified(
346 IXMLDOMDocumentType
*iface
,
347 VARIANT_BOOL
* isSpecified
)
349 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
350 FIXME("(%p)->(%p): stub\n", This
, isSpecified
);
354 static HRESULT WINAPI
domdoctype_get_definition(
355 IXMLDOMDocumentType
*iface
,
356 IXMLDOMNode
** definitionNode
)
358 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
359 FIXME("(%p)->(%p)\n", This
, definitionNode
);
363 static HRESULT WINAPI
domdoctype_get_nodeTypedValue(
364 IXMLDOMDocumentType
*iface
,
367 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
368 TRACE("(%p)->(%p)\n", This
, v
);
369 return return_null_var(v
);
372 static HRESULT WINAPI
domdoctype_put_nodeTypedValue(
373 IXMLDOMDocumentType
*iface
,
376 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
377 FIXME("(%p)->(%s): stub\n", This
, debugstr_variant(&value
));
381 static HRESULT WINAPI
domdoctype_get_dataType(
382 IXMLDOMDocumentType
*iface
,
385 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
386 FIXME("(%p)->(%p): stub\n", This
, typename
);
390 static HRESULT WINAPI
domdoctype_put_dataType(
391 IXMLDOMDocumentType
*iface
,
394 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
395 FIXME("(%p)->(%s): stub\n", This
, debugstr_w(p
));
399 static HRESULT WINAPI
domdoctype_get_xml(
400 IXMLDOMDocumentType
*iface
,
403 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
404 FIXME("(%p)->(%p): stub\n", This
, p
);
408 static HRESULT WINAPI
domdoctype_transformNode(
409 IXMLDOMDocumentType
*iface
,
410 IXMLDOMNode
* domNode
, BSTR
* p
)
412 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
413 FIXME("(%p)->(%p %p): stub\n", This
, domNode
, p
);
417 static HRESULT WINAPI
domdoctype_selectNodes(
418 IXMLDOMDocumentType
*iface
,
419 BSTR p
, IXMLDOMNodeList
** outList
)
421 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
422 FIXME("(%p)->(%s %p): stub\n", This
, debugstr_w(p
), outList
);
426 static HRESULT WINAPI
domdoctype_selectSingleNode(
427 IXMLDOMDocumentType
*iface
,
428 BSTR p
, IXMLDOMNode
** outNode
)
430 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
431 FIXME("(%p)->(%s %p): stub\n", This
, debugstr_w(p
), outNode
);
435 static HRESULT WINAPI
domdoctype_get_parsed(
436 IXMLDOMDocumentType
*iface
,
437 VARIANT_BOOL
* isParsed
)
439 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
440 FIXME("(%p)->(%p): stub\n", This
, isParsed
);
444 static HRESULT WINAPI
domdoctype_get_namespaceURI(
445 IXMLDOMDocumentType
*iface
,
448 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
449 FIXME("(%p)->(%p): stub\n", This
, p
);
453 static HRESULT WINAPI
domdoctype_get_prefix(
454 IXMLDOMDocumentType
*iface
,
457 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
458 FIXME("(%p)->(%p): stub\n", This
, prefix
);
462 static HRESULT WINAPI
domdoctype_get_baseName(
463 IXMLDOMDocumentType
*iface
,
466 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
467 FIXME("(%p)->(%p): stub\n", This
, name
);
471 static HRESULT WINAPI
domdoctype_transformNodeToObject(
472 IXMLDOMDocumentType
*iface
,
473 IXMLDOMNode
* domNode
, VARIANT var1
)
475 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
476 FIXME("(%p)->(%p %s): stub\n", This
, domNode
, debugstr_variant(&var1
));
480 static HRESULT WINAPI
domdoctype_get_name(
481 IXMLDOMDocumentType
*iface
,
484 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
485 TRACE("(%p)->(%p)\n", This
, p
);
486 return node_get_nodeName(&This
->node
, p
);
489 static HRESULT WINAPI
domdoctype_get_entities(
490 IXMLDOMDocumentType
*iface
,
491 IXMLDOMNamedNodeMap
**entityMap
)
493 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
494 FIXME("(%p)->(%p): stub\n", This
, entityMap
);
498 static HRESULT WINAPI
domdoctype_get_notations(
499 IXMLDOMDocumentType
*iface
,
500 IXMLDOMNamedNodeMap
**notationMap
)
502 domdoctype
*This
= impl_from_IXMLDOMDocumentType( iface
);
503 FIXME("(%p)->(%p): stub\n", This
, notationMap
);
507 static const struct IXMLDOMDocumentTypeVtbl domdoctype_vtbl
=
509 domdoctype_QueryInterface
,
512 domdoctype_GetTypeInfoCount
,
513 domdoctype_GetTypeInfo
,
514 domdoctype_GetIDsOfNames
,
516 domdoctype_get_nodeName
,
517 domdoctype_get_nodeValue
,
518 domdoctype_put_nodeValue
,
519 domdoctype_get_nodeType
,
520 domdoctype_get_parentNode
,
521 domdoctype_get_childNodes
,
522 domdoctype_get_firstChild
,
523 domdoctype_get_lastChild
,
524 domdoctype_get_previousSibling
,
525 domdoctype_get_nextSibling
,
526 domdoctype_get_attributes
,
527 domdoctype_insertBefore
,
528 domdoctype_replaceChild
,
529 domdoctype_removeChild
,
530 domdoctype_appendChild
,
531 domdoctype_hasChildNodes
,
532 domdoctype_get_ownerDocument
,
533 domdoctype_cloneNode
,
534 domdoctype_get_nodeTypeString
,
537 domdoctype_get_specified
,
538 domdoctype_get_definition
,
539 domdoctype_get_nodeTypedValue
,
540 domdoctype_put_nodeTypedValue
,
541 domdoctype_get_dataType
,
542 domdoctype_put_dataType
,
544 domdoctype_transformNode
,
545 domdoctype_selectNodes
,
546 domdoctype_selectSingleNode
,
547 domdoctype_get_parsed
,
548 domdoctype_get_namespaceURI
,
549 domdoctype_get_prefix
,
550 domdoctype_get_baseName
,
551 domdoctype_transformNodeToObject
,
553 domdoctype_get_entities
,
554 domdoctype_get_notations
557 static const tid_t domdoctype_iface_tids
[] = {
558 IXMLDOMDocumentType_tid
,
562 static dispex_static_data_t domdoctype_dispex
= {
564 IXMLDOMDocumentType_tid
,
566 domdoctype_iface_tids
569 IUnknown
* create_doc_type( xmlNodePtr doctype
)
573 This
= heap_alloc( sizeof *This
);
577 This
->IXMLDOMDocumentType_iface
.lpVtbl
= &domdoctype_vtbl
;
580 init_xmlnode(&This
->node
, doctype
, (IXMLDOMNode
*)&This
->IXMLDOMDocumentType_iface
,
583 return (IUnknown
*)&This
->IXMLDOMDocumentType_iface
;