4 * Copyright 2005 Mike McCormack
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
21 #ifndef __MSXML_PRIVATE__
22 #define __MSXML_PRIVATE__
26 #include "wine/unicode.h"
28 #ifndef __WINE_CONFIG_H
29 # error You must include config.h to use this header
35 IXMLDOMCDATASection_tid
,
39 IXMLDOMDocumentFragment_tid
,
40 IXMLDOMDocumentType_tid
,
42 IXMLDOMEntityReference_tid
,
43 IXMLDOMImplementation_tid
,
44 IXMLDOMNamedNodeMap_tid
,
47 IXMLDOMParseError_tid
,
48 IXMLDOMProcessingInstruction_tid
,
49 IXMLDOMSchemaCollection_tid
,
56 IVBSAXContentHandler_tid
,
57 IVBSAXDeclHandler_tid
,
59 IVBSAXEntityResolver_tid
,
60 IVBSAXErrorHandler_tid
,
61 IVBSAXLexicalHandler_tid
,
71 extern HRESULT
get_typeinfo(tid_t tid
, ITypeInfo
**typeinfo
);
72 extern void release_typelib(void);
74 typedef struct dispex_data_t dispex_data_t
;
75 typedef struct dispex_dynamic_data_t dispex_dynamic_data_t
;
77 #define MSXML_DISPID_CUSTOM_MIN 0x60000000
78 #define MSXML_DISPID_CUSTOM_MAX 0x6fffffff
81 HRESULT (*get_dispid
)(IUnknown
*,BSTR
,DWORD
,DISPID
*);
82 HRESULT (*invoke
)(IUnknown
*,DISPID
,LCID
,WORD
,DISPPARAMS
*,VARIANT
*,EXCEPINFO
*);
83 } dispex_static_data_vtbl_t
;
86 const dispex_static_data_vtbl_t
*vtbl
;
89 const tid_t
* const iface_tids
;
90 } dispex_static_data_t
;
93 const IDispatchExVtbl
*lpIDispatchExVtbl
;
97 dispex_static_data_t
*data
;
98 dispex_dynamic_data_t
*dynamic_data
;
101 extern HINSTANCE MSXML_hInstance
;
103 void init_dispex(DispatchEx
*,IUnknown
*,dispex_static_data_t
*);
104 BOOL
dispex_query_interface(DispatchEx
*,REFIID
,void**);
108 #ifdef HAVE_LIBXML_PARSER_H
109 #include <libxml/parser.h>
114 #include <libxml/xmlerror.h>
116 extern void schemasInit(void);
117 extern void schemasCleanup(void);
119 #ifndef HAVE_XMLFIRSTELEMENTCHILD
120 static inline xmlNodePtr
xmlFirstElementChild(xmlNodePtr parent
)
123 for (child
= parent
->children
; child
!= NULL
; child
= child
->next
)
124 if (child
->type
== XML_ELEMENT_NODE
)
132 extern IUnknown
*create_domdoc( xmlNodePtr document
);
133 extern IUnknown
*create_xmldoc( void );
134 extern IXMLDOMNode
*create_node( xmlNodePtr node
);
135 extern IUnknown
*create_element( xmlNodePtr element
);
136 extern IUnknown
*create_attribute( xmlNodePtr attribute
);
137 extern IUnknown
*create_text( xmlNodePtr text
);
138 extern IUnknown
*create_pi( xmlNodePtr pi
);
139 extern IUnknown
*create_comment( xmlNodePtr comment
);
140 extern IUnknown
*create_cdata( xmlNodePtr text
);
141 extern IXMLDOMNodeList
*create_children_nodelist( xmlNodePtr
);
142 extern IXMLDOMNamedNodeMap
*create_nodemap( IXMLDOMNode
*node
);
143 extern IUnknown
*create_doc_Implementation(void);
144 extern IUnknown
*create_doc_fragment( xmlNodePtr fragment
);
145 extern IUnknown
*create_doc_entity_ref( xmlNodePtr entity
);
146 extern IUnknown
*create_doc_type( xmlNodePtr doctype
);
148 extern HRESULT
queryresult_create( xmlNodePtr
, LPCWSTR
, IXMLDOMNodeList
** );
151 xmlNodePtr
xmlNodePtr_from_domnode( IXMLDOMNode
*iface
, xmlElementType type
);
154 extern xmlChar
*xmlChar_from_wchar( LPCWSTR str
);
156 extern void xmldoc_init( xmlDocPtr doc
, const GUID
*clsid
);
157 extern LONG
xmldoc_add_ref( xmlDocPtr doc
);
158 extern LONG
xmldoc_release( xmlDocPtr doc
);
159 extern HRESULT
xmldoc_add_orphan( xmlDocPtr doc
, xmlNodePtr node
);
160 extern HRESULT
xmldoc_remove_orphan( xmlDocPtr doc
, xmlNodePtr node
);
161 extern void xmldoc_link_xmldecl(xmlDocPtr doc
, xmlNodePtr node
);
162 extern xmlNodePtr
xmldoc_unlink_xmldecl(xmlDocPtr doc
);
164 extern HRESULT
XMLElement_create( IUnknown
*pUnkOuter
, xmlNodePtr node
, LPVOID
*ppObj
, BOOL own
);
166 extern void wineXmlCallbackLog(char const* caller
, xmlErrorLevel lvl
, char const* msg
, va_list ap
);
168 #define LIBXML2_LOG_CALLBACK __WINE_PRINTF_ATTR(2,3)
170 #define LIBXML2_CALLBACK_TRACE(caller, msg, ap) \
171 wineXmlCallbackLog(#caller, XML_ERR_NONE, msg, ap)
173 #define LIBXML2_CALLBACK_WARN(caller, msg, ap) \
174 wineXmlCallbackLog(#caller, XML_ERR_WARNING, msg, ap)
176 #define LIBXML2_CALLBACK_ERR(caller, msg, ap) \
177 wineXmlCallbackLog(#caller, XML_ERR_ERROR, msg, ap)
179 #define LIBXML2_CALLBACK_SERROR(caller, err) \
180 wineXmlCallbackLog(#caller, err->level, err->message, NULL)
182 extern BOOL
is_preserving_whitespace(xmlNodePtr node
);
184 /* IXMLDOMNode Internal Structure */
185 typedef struct _xmlnode
188 const struct IXMLDOMNodeVtbl
*lpVtbl
;
193 static inline IXMLDOMNode
*IXMLDOMNode_from_impl(xmlnode
*This
)
195 return (IXMLDOMNode
*)&This
->lpVtbl
;
198 extern void init_xmlnode(xmlnode
*,xmlNodePtr
,IXMLDOMNode
*,dispex_static_data_t
*);
199 extern void destroy_xmlnode(xmlnode
*);
200 extern BOOL
node_query_interface(xmlnode
*,REFIID
,void**);
201 extern xmlnode
*get_node_obj(IXMLDOMNode
*);
203 extern HRESULT
node_get_nodeName(xmlnode
*,BSTR
*);
204 extern HRESULT
node_get_content(xmlnode
*,VARIANT
*);
205 extern HRESULT
node_set_content(xmlnode
*,LPCWSTR
);
206 extern HRESULT
node_put_value(xmlnode
*,VARIANT
*);
207 extern HRESULT
node_put_value_escaped(xmlnode
*,VARIANT
*);
208 extern HRESULT
node_get_parent(xmlnode
*,IXMLDOMNode
**);
209 extern HRESULT
node_get_child_nodes(xmlnode
*,IXMLDOMNodeList
**);
210 extern HRESULT
node_get_first_child(xmlnode
*,IXMLDOMNode
**);
211 extern HRESULT
node_get_last_child(xmlnode
*,IXMLDOMNode
**);
212 extern HRESULT
node_get_previous_sibling(xmlnode
*,IXMLDOMNode
**);
213 extern HRESULT
node_get_next_sibling(xmlnode
*,IXMLDOMNode
**);
214 extern HRESULT
node_insert_before(xmlnode
*,IXMLDOMNode
*,const VARIANT
*,IXMLDOMNode
**);
215 extern HRESULT
node_replace_child(xmlnode
*,IXMLDOMNode
*,IXMLDOMNode
*,IXMLDOMNode
**);
216 extern HRESULT
node_put_text(xmlnode
*,BSTR
);
217 extern HRESULT
node_get_xml(xmlnode
*,BOOL
,BOOL
,BSTR
*);
218 extern HRESULT
node_clone(xmlnode
*,VARIANT_BOOL
,IXMLDOMNode
**);
219 extern HRESULT
node_get_prefix(xmlnode
*,BSTR
*);
220 extern HRESULT
node_get_base_name(xmlnode
*,BSTR
*);
222 extern HRESULT
DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc
, IXMLDOMDocument3
**document
);
223 extern HRESULT
SchemaCache_validate_tree(IXMLDOMSchemaCollection2
* iface
, xmlNodePtr tree
);
225 extern BSTR
EnsureCorrectEOL(BSTR
);
227 static inline BSTR
bstr_from_xmlChar(const xmlChar
*str
)
232 DWORD len
= MultiByteToWideChar(CP_UTF8
, 0, (LPCSTR
)str
, -1, NULL
, 0);
233 ret
= SysAllocStringLen(NULL
, len
-1);
235 MultiByteToWideChar( CP_UTF8
, 0, (LPCSTR
)str
, -1, ret
, len
);
238 ret
= SysAllocStringLen(NULL
, 0);
243 static inline HRESULT
return_bstr(const WCHAR
*value
, BSTR
*p
)
249 *p
= SysAllocString(value
);
251 return E_OUTOFMEMORY
;
259 static inline HRESULT
return_null_node(IXMLDOMNode
**p
)
267 static inline HRESULT
return_null_ptr(void **p
)
275 static inline HRESULT
return_null_var(VARIANT
*p
)
284 static inline HRESULT
return_null_bstr(BSTR
*p
)
295 extern void* libxslt_handle
;
296 #ifdef SONAME_LIBXSLT
297 # ifdef HAVE_LIBXSLT_PATTERN_H
298 # include <libxslt/pattern.h>
300 # ifdef HAVE_LIBXSLT_TRANSFORM_H
301 # include <libxslt/transform.h>
303 # include <libxslt/xsltutils.h>
304 # include <libxslt/xsltInternals.h>
306 # define MAKE_FUNCPTR(f) extern typeof(f) * p##f
307 MAKE_FUNCPTR(xsltApplyStylesheet
);
308 MAKE_FUNCPTR(xsltCleanupGlobals
);
309 MAKE_FUNCPTR(xsltFreeStylesheet
);
310 MAKE_FUNCPTR(xsltParseStylesheetDoc
);
314 extern IXMLDOMParseError
*create_parseError( LONG code
, BSTR url
, BSTR reason
, BSTR srcText
,
315 LONG line
, LONG linepos
, LONG filepos
);
316 extern HRESULT
DOMDocument_create( const GUID
*clsid
, IUnknown
*pUnkOuter
, void **ppObj
);
317 extern HRESULT
SchemaCache_create( IUnknown
*pUnkOuter
, void **pObj
);
318 extern HRESULT
XMLDocument_create( IUnknown
*pUnkOuter
, void **pObj
);
319 extern HRESULT
SAXXMLReader_create(IUnknown
*pUnkOuter
, void **pObj
);
320 extern HRESULT
XMLHTTPRequest_create(IUnknown
*pUnkOuter
, void **pObj
);
322 typedef struct bsc_t bsc_t
;
324 HRESULT
bind_url(LPCWSTR
, HRESULT (*onDataAvailable
)(void*,char*,DWORD
), void*, bsc_t
**);
325 void detach_bsc(bsc_t
*);
327 /* memory allocation functions */
329 static inline void *heap_alloc(size_t len
)
331 return HeapAlloc(GetProcessHeap(), 0, len
);
334 static inline void *heap_alloc_zero(size_t len
)
336 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
339 static inline void *heap_realloc(void *mem
, size_t len
)
341 return HeapReAlloc(GetProcessHeap(), 0, mem
, len
);
344 static inline BOOL
heap_free(void *mem
)
346 return HeapFree(GetProcessHeap(), 0, mem
);
349 static inline LPWSTR
heap_strdupW(LPCWSTR str
)
356 size
= (strlenW(str
)+1)*sizeof(WCHAR
);
357 ret
= heap_alloc(size
);
358 memcpy(ret
, str
, size
);
364 /* Error Codes - not defined anywhere in the public headers */
365 #define E_XML_ELEMENT_UNDECLARED 0xC00CE00D
366 #define E_XML_ELEMENT_ID_NOT_FOUND 0xC00CE00E
368 #define E_XML_EMPTY_NOT_ALLOWED 0xC00CE011
369 #define E_XML_ELEMENT_NOT_COMPLETE 0xC00CE012
370 #define E_XML_ROOT_NAME_MISMATCH 0xC00CE013
371 #define E_XML_INVALID_CONTENT 0xC00CE014
372 #define E_XML_ATTRIBUTE_NOT_DEFINED 0xC00CE015
373 #define E_XML_ATTRIBUTE_FIXED 0xC00CE016
374 #define E_XML_ATTRIBUTE_VALUE 0xC00CE017
375 #define E_XML_ILLEGAL_TEXT 0xC00CE018
377 #define E_XML_REQUIRED_ATTRIBUTE_MISSING 0xC00CE020
379 #endif /* __MSXML_PRIVATE__ */