ReactOS 0.4.16-dev-2207-geb15453
doctype.c
Go to the documentation of this file.
1/*
2 * DOM DTD node implementation
3 *
4 * Copyright 2010 Nikolay Sivov
5 *
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.
10 *
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.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#define COBJMACROS
22
23#include <stdarg.h>
24#include <libxml/parser.h>
25#include <libxml/xmlerror.h>
26
27#include "windef.h"
28#include "winbase.h"
29#include "winuser.h"
30#include "winnls.h"
31#include "ole2.h"
32#include "msxml6.h"
33
34#include "msxml_private.h"
35
36#include "wine/debug.h"
37
39
40typedef struct _domdoctype
41{
46
48{
49 return CONTAINING_RECORD(iface, domdoctype, IXMLDOMDocumentType_iface);
50}
51
55 void** ppvObject )
56{
58
59 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
60
61 if ( IsEqualGUID( riid, &IID_IXMLDOMDocumentType ) ||
62 IsEqualGUID( riid, &IID_IXMLDOMNode ) ||
65 {
66 *ppvObject = &This->IXMLDOMDocumentType_iface;
67 }
68 else if(node_query_interface(&This->node, riid, ppvObject))
69 {
70 return *ppvObject ? S_OK : E_NOINTERFACE;
71 }
72 else
73 {
74 TRACE("interface %s not implemented\n", debugstr_guid(riid));
75 *ppvObject = NULL;
76 return E_NOINTERFACE;
77 }
78
79 IUnknown_AddRef( (IUnknown*)*ppvObject );
80 return S_OK;
81}
82
84{
86 LONG ref = InterlockedIncrement(&doctype->ref);
87 TRACE("%p, refcount %ld.\n", iface, ref);
88 return ref;
89}
90
92{
94 ULONG ref = InterlockedDecrement(&doctype->ref);
95
96 TRACE("%p, refcount %ld.\n", iface, ref);
97
98 if (!ref)
99 {
100 destroy_xmlnode(&doctype->node);
101 free(doctype);
102 }
103
104 return ref;
105}
106
108 IXMLDOMDocumentType *iface,
109 UINT* pctinfo )
110{
112 return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
113}
114
116 IXMLDOMDocumentType *iface,
117 UINT iTInfo, LCID lcid,
118 ITypeInfo** ppTInfo )
119{
121 return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface,
122 iTInfo, lcid, ppTInfo);
123}
124
126 IXMLDOMDocumentType *iface,
127 REFIID riid, LPOLESTR* rgszNames,
128 UINT cNames, LCID lcid, DISPID* rgDispId )
129{
131 return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface,
132 riid, rgszNames, cNames, lcid, rgDispId);
133}
134
136 IXMLDOMDocumentType *iface,
137 DISPID dispIdMember, REFIID riid, LCID lcid,
138 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
139 EXCEPINFO* pExcepInfo, UINT* puArgErr )
140{
142 return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface,
143 dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
144}
145
147 IXMLDOMDocumentType *iface,
148 BSTR* p )
149{
151 TRACE("(%p)->(%p)\n", This, p);
152 return node_get_nodeName(&This->node, p);
153}
154
156 IXMLDOMDocumentType *iface,
157 VARIANT* value)
158{
160 FIXME("(%p)->(%p): stub\n", This, value);
161 return E_NOTIMPL;
162}
163
165 IXMLDOMDocumentType *iface,
167{
169 FIXME("(%p)->(%s): stub\n", This, debugstr_variant(&value));
170 return E_NOTIMPL;
171}
172
174 IXMLDOMDocumentType *iface,
175 DOMNodeType* domNodeType )
176{
178
179 TRACE("(%p)->(%p)\n", This, domNodeType);
180
181 *domNodeType = NODE_DOCUMENT_TYPE;
182 return S_OK;
183}
184
186 IXMLDOMDocumentType *iface,
188{
190 FIXME("(%p)->(%p): stub\n", This, parent);
191 return E_NOTIMPL;
192}
193
195 IXMLDOMDocumentType *iface,
196 IXMLDOMNodeList** outList)
197{
199 FIXME("(%p)->(%p): stub\n", This, outList);
200 return E_NOTIMPL;
201}
202
204 IXMLDOMDocumentType *iface,
205 IXMLDOMNode** domNode)
206{
208 FIXME("(%p)->(%p): stub\n", This, domNode);
209 return E_NOTIMPL;
210}
211
213 IXMLDOMDocumentType *iface,
214 IXMLDOMNode** domNode)
215{
217 FIXME("(%p)->(%p): stub\n", This, domNode);
218 return E_NOTIMPL;
219}
220
222 IXMLDOMDocumentType *iface,
223 IXMLDOMNode** domNode)
224{
226 FIXME("(%p)->(%p): stub\n", This, domNode);
227 return E_NOTIMPL;
228}
229
231 IXMLDOMDocumentType *iface,
232 IXMLDOMNode** domNode)
233{
235 FIXME("(%p)->(%p): stub\n", This, domNode);
236 return E_NOTIMPL;
237}
238
240 IXMLDOMDocumentType *iface,
241 IXMLDOMNamedNodeMap** attributeMap)
242{
244 FIXME("(%p)->(%p): stub\n", This, attributeMap);
245 return E_NOTIMPL;
246}
247
249 IXMLDOMDocumentType *iface,
250 IXMLDOMNode* newNode, VARIANT refChild,
251 IXMLDOMNode** outOldNode)
252{
254
255 FIXME("(%p)->(%p %s %p): stub\n", This, newNode, debugstr_variant(&refChild), outOldNode);
256
257 return E_NOTIMPL;
258}
259
261 IXMLDOMDocumentType *iface,
262 IXMLDOMNode* newNode,
263 IXMLDOMNode* oldNode,
264 IXMLDOMNode** outOldNode)
265{
267
268 FIXME("(%p)->(%p %p %p): stub\n", This, newNode, oldNode, outOldNode);
269
270 return E_NOTIMPL;
271}
272
274 IXMLDOMDocumentType *iface,
275 IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
276{
278 FIXME("(%p)->(%p %p): stub\n", This, domNode, oldNode);
279 return E_NOTIMPL;
280}
281
283 IXMLDOMDocumentType *iface,
284 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
285{
287 FIXME("(%p)->(%p %p): stub\n", This, newNode, outNewNode);
288 return E_NOTIMPL;
289}
290
292 IXMLDOMDocumentType *iface,
293 VARIANT_BOOL* pbool)
294{
296 FIXME("(%p)->(%p): stub\n", This, pbool);
297 return E_NOTIMPL;
298}
299
301 IXMLDOMDocumentType *iface,
302 IXMLDOMDocument** domDocument)
303{
305 FIXME("(%p)->(%p): stub\n", This, domDocument);
306 return E_NOTIMPL;
307}
308
310 IXMLDOMDocumentType *iface,
311 VARIANT_BOOL deep, IXMLDOMNode** outNode)
312{
314 FIXME("(%p)->(%d %p): stub\n", This, deep, outNode);
315 return E_NOTIMPL;
316}
317
319 IXMLDOMDocumentType *iface,
320 BSTR* p)
321{
323 FIXME("(%p)->(%p): stub\n", This, p);
324 return E_NOTIMPL;
325}
326
328 IXMLDOMDocumentType *iface,
329 BSTR* p)
330{
332 FIXME("(%p)->(%p): stub\n", This, p);
333 return E_NOTIMPL;
334}
335
337 IXMLDOMDocumentType *iface,
338 BSTR p)
339{
341 FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
342 return E_NOTIMPL;
343}
344
346 IXMLDOMDocumentType *iface,
347 VARIANT_BOOL* isSpecified)
348{
350 FIXME("(%p)->(%p): stub\n", This, isSpecified);
351 return E_NOTIMPL;
352}
353
355 IXMLDOMDocumentType *iface,
356 IXMLDOMNode** definitionNode)
357{
359 FIXME("(%p)->(%p)\n", This, definitionNode);
360 return E_NOTIMPL;
361}
362
364 IXMLDOMDocumentType *iface,
365 VARIANT* v)
366{
368 TRACE("(%p)->(%p)\n", This, v);
369 return return_null_var(v);
370}
371
373 IXMLDOMDocumentType *iface,
375{
377 FIXME("(%p)->(%s): stub\n", This, debugstr_variant(&value));
378 return E_NOTIMPL;
379}
380
382 IXMLDOMDocumentType *iface,
383 VARIANT* typename)
384{
386 FIXME("(%p)->(%p): stub\n", This, typename);
387 return E_NOTIMPL;
388}
389
391 IXMLDOMDocumentType *iface,
392 BSTR p)
393{
395 FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
396 return E_NOTIMPL;
397}
398
400 IXMLDOMDocumentType *iface,
401 BSTR* p)
402{
404 FIXME("(%p)->(%p): stub\n", This, p);
405 return E_NOTIMPL;
406}
407
409 IXMLDOMDocumentType *iface,
410 IXMLDOMNode* domNode, BSTR* p)
411{
413 FIXME("(%p)->(%p %p): stub\n", This, domNode, p);
414 return E_NOTIMPL;
415}
416
418 IXMLDOMDocumentType *iface,
419 BSTR p, IXMLDOMNodeList** outList)
420{
422 FIXME("(%p)->(%s %p): stub\n", This, debugstr_w(p), outList);
423 return E_NOTIMPL;
424}
425
427 IXMLDOMDocumentType *iface,
428 BSTR p, IXMLDOMNode** outNode)
429{
431 FIXME("(%p)->(%s %p): stub\n", This, debugstr_w(p), outNode);
432 return E_NOTIMPL;
433}
434
436 IXMLDOMDocumentType *iface,
437 VARIANT_BOOL* isParsed)
438{
440 FIXME("(%p)->(%p): stub\n", This, isParsed);
441 return E_NOTIMPL;
442}
443
445 IXMLDOMDocumentType *iface,
446 BSTR* p)
447{
449 FIXME("(%p)->(%p): stub\n", This, p);
450 return E_NOTIMPL;
451}
452
454 IXMLDOMDocumentType *iface,
455 BSTR* prefix)
456{
458 FIXME("(%p)->(%p): stub\n", This, prefix);
459 return E_NOTIMPL;
460}
461
463 IXMLDOMDocumentType *iface,
464 BSTR* name)
465{
467 FIXME("(%p)->(%p): stub\n", This, name);
468 return E_NOTIMPL;
469}
470
472 IXMLDOMDocumentType *iface,
473 IXMLDOMNode* domNode, VARIANT var1)
474{
476 FIXME("(%p)->(%p %s): stub\n", This, domNode, debugstr_variant(&var1));
477 return E_NOTIMPL;
478}
479
481 IXMLDOMDocumentType *iface,
482 BSTR *p)
483{
485 TRACE("(%p)->(%p)\n", This, p);
486 return node_get_nodeName(&This->node, p);
487}
488
490 IXMLDOMDocumentType *iface,
491 IXMLDOMNamedNodeMap **entityMap)
492{
494 FIXME("(%p)->(%p): stub\n", This, entityMap);
495 return E_NOTIMPL;
496}
497
499 IXMLDOMDocumentType *iface,
500 IXMLDOMNamedNodeMap **notationMap)
501{
503 FIXME("(%p)->(%p): stub\n", This, notationMap);
504 return E_NOTIMPL;
505}
506
507static const struct IXMLDOMDocumentTypeVtbl domdoctype_vtbl =
508{
555};
556
557static const tid_t domdoctype_iface_tids[] = {
559 0
560};
561
563 NULL,
565 NULL,
567};
568
569IUnknown* create_doc_type( xmlNodePtr doctype )
570{
572
573 This = malloc(sizeof(*This));
574 if ( !This )
575 return NULL;
576
577 This->IXMLDOMDocumentType_iface.lpVtbl = &domdoctype_vtbl;
578 This->ref = 1;
579
580 init_xmlnode(&This->node, doctype, (IXMLDOMNode*)&This->IXMLDOMDocumentType_iface,
582
583 return (IUnknown*)&This->IXMLDOMDocumentType_iface;
584}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
const GUID IID_IUnknown
#define E_NOTIMPL
Definition: ddrawi.h:99
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
OLECHAR * BSTR
Definition: compat.h:2293
short VARIANT_BOOL
Definition: compat.h:2290
LCID lcid
Definition: locale.c:5656
static domdoctype * impl_from_IXMLDOMDocumentType(IXMLDOMDocumentType *iface)
Definition: doctype.c:47
static HRESULT WINAPI domdoctype_get_namespaceURI(IXMLDOMDocumentType *iface, BSTR *p)
Definition: doctype.c:444
static HRESULT WINAPI domdoctype_get_nodeName(IXMLDOMDocumentType *iface, BSTR *p)
Definition: doctype.c:146
static HRESULT WINAPI domdoctype_get_nodeType(IXMLDOMDocumentType *iface, DOMNodeType *domNodeType)
Definition: doctype.c:173
static HRESULT WINAPI domdoctype_get_nodeValue(IXMLDOMDocumentType *iface, VARIANT *value)
Definition: doctype.c:155
static HRESULT WINAPI domdoctype_put_text(IXMLDOMDocumentType *iface, BSTR p)
Definition: doctype.c:336
static HRESULT WINAPI domdoctype_GetIDsOfNames(IXMLDOMDocumentType *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: doctype.c:125
static HRESULT WINAPI domdoctype_put_nodeValue(IXMLDOMDocumentType *iface, VARIANT value)
Definition: doctype.c:164
static HRESULT WINAPI domdoctype_get_definition(IXMLDOMDocumentType *iface, IXMLDOMNode **definitionNode)
Definition: doctype.c:354
static HRESULT WINAPI domdoctype_get_lastChild(IXMLDOMDocumentType *iface, IXMLDOMNode **domNode)
Definition: doctype.c:212
static HRESULT WINAPI domdoctype_hasChildNodes(IXMLDOMDocumentType *iface, VARIANT_BOOL *pbool)
Definition: doctype.c:291
static HRESULT WINAPI domdoctype_get_nextSibling(IXMLDOMDocumentType *iface, IXMLDOMNode **domNode)
Definition: doctype.c:230
static HRESULT WINAPI domdoctype_GetTypeInfoCount(IXMLDOMDocumentType *iface, UINT *pctinfo)
Definition: doctype.c:107
static ULONG WINAPI domdoctype_Release(IXMLDOMDocumentType *iface)
Definition: doctype.c:91
static HRESULT WINAPI domdoctype_appendChild(IXMLDOMDocumentType *iface, IXMLDOMNode *newNode, IXMLDOMNode **outNewNode)
Definition: doctype.c:282
static HRESULT WINAPI domdoctype_put_dataType(IXMLDOMDocumentType *iface, BSTR p)
Definition: doctype.c:390
static HRESULT WINAPI domdoctype_insertBefore(IXMLDOMDocumentType *iface, IXMLDOMNode *newNode, VARIANT refChild, IXMLDOMNode **outOldNode)
Definition: doctype.c:248
static HRESULT WINAPI domdoctype_get_ownerDocument(IXMLDOMDocumentType *iface, IXMLDOMDocument **domDocument)
Definition: doctype.c:300
static HRESULT WINAPI domdoctype_transformNodeToObject(IXMLDOMDocumentType *iface, IXMLDOMNode *domNode, VARIANT var1)
Definition: doctype.c:471
static HRESULT WINAPI domdoctype_get_entities(IXMLDOMDocumentType *iface, IXMLDOMNamedNodeMap **entityMap)
Definition: doctype.c:489
static HRESULT WINAPI domdoctype_get_nodeTypedValue(IXMLDOMDocumentType *iface, VARIANT *v)
Definition: doctype.c:363
static HRESULT WINAPI domdoctype_cloneNode(IXMLDOMDocumentType *iface, VARIANT_BOOL deep, IXMLDOMNode **outNode)
Definition: doctype.c:309
struct _domdoctype domdoctype
static HRESULT WINAPI domdoctype_get_firstChild(IXMLDOMDocumentType *iface, IXMLDOMNode **domNode)
Definition: doctype.c:203
static HRESULT WINAPI domdoctype_QueryInterface(IXMLDOMDocumentType *iface, REFIID riid, void **ppvObject)
Definition: doctype.c:52
static HRESULT WINAPI domdoctype_get_baseName(IXMLDOMDocumentType *iface, BSTR *name)
Definition: doctype.c:462
static HRESULT WINAPI domdoctype_selectNodes(IXMLDOMDocumentType *iface, BSTR p, IXMLDOMNodeList **outList)
Definition: doctype.c:417
static HRESULT WINAPI domdoctype_get_name(IXMLDOMDocumentType *iface, BSTR *p)
Definition: doctype.c:480
static const struct IXMLDOMDocumentTypeVtbl domdoctype_vtbl
Definition: doctype.c:507
static HRESULT WINAPI domdoctype_get_prefix(IXMLDOMDocumentType *iface, BSTR *prefix)
Definition: doctype.c:453
static HRESULT WINAPI domdoctype_get_specified(IXMLDOMDocumentType *iface, VARIANT_BOOL *isSpecified)
Definition: doctype.c:345
static HRESULT WINAPI domdoctype_replaceChild(IXMLDOMDocumentType *iface, IXMLDOMNode *newNode, IXMLDOMNode *oldNode, IXMLDOMNode **outOldNode)
Definition: doctype.c:260
static ULONG WINAPI domdoctype_AddRef(IXMLDOMDocumentType *iface)
Definition: doctype.c:83
static HRESULT WINAPI domdoctype_get_xml(IXMLDOMDocumentType *iface, BSTR *p)
Definition: doctype.c:399
static HRESULT WINAPI domdoctype_get_nodeTypeString(IXMLDOMDocumentType *iface, BSTR *p)
Definition: doctype.c:318
static HRESULT WINAPI domdoctype_removeChild(IXMLDOMDocumentType *iface, IXMLDOMNode *domNode, IXMLDOMNode **oldNode)
Definition: doctype.c:273
static HRESULT WINAPI domdoctype_get_parsed(IXMLDOMDocumentType *iface, VARIANT_BOOL *isParsed)
Definition: doctype.c:435
static HRESULT WINAPI domdoctype_get_dataType(IXMLDOMDocumentType *iface, VARIANT *typename)
Definition: doctype.c:381
static HRESULT WINAPI domdoctype_get_text(IXMLDOMDocumentType *iface, BSTR *p)
Definition: doctype.c:327
static HRESULT WINAPI domdoctype_get_parentNode(IXMLDOMDocumentType *iface, IXMLDOMNode **parent)
Definition: doctype.c:185
static dispex_static_data_t domdoctype_dispex
Definition: doctype.c:562
static HRESULT WINAPI domdoctype_get_attributes(IXMLDOMDocumentType *iface, IXMLDOMNamedNodeMap **attributeMap)
Definition: doctype.c:239
static HRESULT WINAPI domdoctype_put_nodeTypedValue(IXMLDOMDocumentType *iface, VARIANT value)
Definition: doctype.c:372
IUnknown * create_doc_type(xmlNodePtr doctype)
Definition: doctype.c:569
static const tid_t domdoctype_iface_tids[]
Definition: doctype.c:557
static HRESULT WINAPI domdoctype_get_notations(IXMLDOMDocumentType *iface, IXMLDOMNamedNodeMap **notationMap)
Definition: doctype.c:498
static HRESULT WINAPI domdoctype_get_previousSibling(IXMLDOMDocumentType *iface, IXMLDOMNode **domNode)
Definition: doctype.c:221
static HRESULT WINAPI domdoctype_get_childNodes(IXMLDOMDocumentType *iface, IXMLDOMNodeList **outList)
Definition: doctype.c:194
static HRESULT WINAPI domdoctype_selectSingleNode(IXMLDOMDocumentType *iface, BSTR p, IXMLDOMNode **outNode)
Definition: doctype.c:426
static HRESULT WINAPI domdoctype_GetTypeInfo(IXMLDOMDocumentType *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: doctype.c:115
static HRESULT WINAPI domdoctype_transformNode(IXMLDOMDocumentType *iface, IXMLDOMNode *domNode, BSTR *p)
Definition: doctype.c:408
static HRESULT WINAPI domdoctype_Invoke(IXMLDOMDocumentType *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: doctype.c:135
r parent
Definition: btrfs.c:3010
unsigned short WORD
Definition: ntddk_ex.h:93
const GLdouble * v
Definition: gl.h:2040
GLfloat GLfloat p
Definition: glext.h:8902
tid_t
Definition: ieframe.h:311
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:49
enum tagDOMNodeType DOMNodeType
@ NODE_DOCUMENT_TYPE
Definition: msxml6.idl:122
@ IXMLDOMDocumentType_tid
Definition: msxml_dispex.h:46
static HRESULT return_null_var(VARIANT *p)
void destroy_xmlnode(xmlnode *)
Definition: node.c:1638
HRESULT node_get_nodeName(xmlnode *, BSTR *)
Definition: node.c:178
void init_xmlnode(xmlnode *, xmlNodePtr, IXMLDOMNode *, dispex_static_data_t *)
Definition: node.c:1647
BOOL node_query_interface(xmlnode *, REFIID, void **)
Definition: node.c:66
unsigned int UINT
Definition: ndis.h:50
const GUID IID_IDispatch
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
DWORD LCID
Definition: nls.h:13
#define TRACE(s)
Definition: solgame.cpp:4
xmlnode node
Definition: doctype.c:42
IXMLDOMDocumentType IXMLDOMDocumentType_iface
Definition: doctype.c:43
LONG ref
Definition: doctype.c:44
Definition: name.c:39
Definition: send.c:48
Character const *const prefix
Definition: tempnam.cpp:195
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:96
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479