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
34 #ifdef HAVE_LIBXML_PARSER_H
35 #include <libxml/parser.h>
39 extern IUnknown
*create_domdoc( xmlNodePtr document
);
40 extern IUnknown
*create_xmldoc( void );
41 extern IXMLDOMNode
*create_node( xmlNodePtr node
);
42 extern IUnknown
*create_element( xmlNodePtr element
, IUnknown
*pUnkOuter
);
43 extern IUnknown
*create_attribute( xmlNodePtr attribute
);
44 extern IUnknown
*create_text( xmlNodePtr text
);
45 extern IUnknown
*create_pi( xmlNodePtr pi
);
46 extern IUnknown
*create_comment( xmlNodePtr comment
);
47 extern IUnknown
*create_cdata( xmlNodePtr text
);
48 extern IXMLDOMNodeList
*create_children_nodelist( xmlNodePtr
);
49 extern IXMLDOMNamedNodeMap
*create_nodemap( IXMLDOMNode
*node
);
50 extern IUnknown
*create_doc_Implementation();
51 extern IUnknown
*create_doc_fragment( xmlNodePtr fragment
);
52 extern IUnknown
*create_doc_entity_ref( xmlNodePtr entity
);
54 extern HRESULT
queryresult_create( xmlNodePtr
, LPWSTR
, IXMLDOMNodeList
** );
57 xmlNodePtr
xmlNodePtr_from_domnode( IXMLDOMNode
*iface
, xmlElementType type
);
60 extern xmlChar
*xmlChar_from_wchar( LPWSTR str
);
62 extern LONG
xmldoc_add_ref( xmlDocPtr doc
);
63 extern LONG
xmldoc_release( xmlDocPtr doc
);
64 extern HRESULT
xmldoc_add_orphan( xmlDocPtr doc
, xmlNodePtr node
);
65 extern HRESULT
xmldoc_remove_orphan( xmlDocPtr doc
, xmlNodePtr node
);
67 extern HRESULT
XMLElement_create( IUnknown
*pUnkOuter
, xmlNodePtr node
, LPVOID
*ppObj
);
69 extern xmlDocPtr
parse_xml(char *ptr
, int len
);
71 /* IXMLDOMNode Internal Structure */
72 typedef struct _xmlnode
74 const struct IXMLDOMNodeVtbl
*lpVtbl
;
75 const struct IUnknownVtbl
*lpInternalUnkVtbl
;
81 static inline xmlnode
*impl_from_IXMLDOMNode( IXMLDOMNode
*iface
)
83 return (xmlnode
*)((char*)iface
- FIELD_OFFSET(xmlnode
, lpVtbl
));
86 static inline IXMLDOMNode
*IXMLDOMNode_from_impl(xmlnode
*This
)
88 return (IXMLDOMNode
*)&This
->lpVtbl
;
91 extern xmlnode
*create_basic_node(xmlNodePtr
,IUnknown
*);
93 extern HRESULT
DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc
, IXMLDOMDocument2
**document
);
95 static inline BSTR
bstr_from_xmlChar(const xmlChar
*str
)
100 DWORD len
= MultiByteToWideChar(CP_UTF8
, 0, (LPCSTR
)str
, -1, NULL
, 0);
101 ret
= SysAllocStringLen(NULL
, len
-1);
103 MultiByteToWideChar( CP_UTF8
, 0, (LPCSTR
)str
, -1, ret
, len
);
111 void* libxslt_handle
;
112 #ifdef SONAME_LIBXSLT
113 # ifdef HAVE_LIBXSLT_PATTERN_H
114 # include <libxslt/pattern.h>
116 # ifdef HAVE_LIBXSLT_TRANSFORM_H
117 # include <libxslt/transform.h>
119 # include <libxslt/xsltutils.h>
120 # include <libxslt/xsltInternals.h>
122 # define MAKE_FUNCPTR(f) extern typeof(f) * p##f
123 MAKE_FUNCPTR(xsltApplyStylesheet
);
124 MAKE_FUNCPTR(xsltCleanupGlobals
);
125 MAKE_FUNCPTR(xsltFreeStylesheet
);
126 MAKE_FUNCPTR(xsltParseStylesheetDoc
);
130 extern IXMLDOMParseError
*create_parseError( LONG code
, BSTR url
, BSTR reason
, BSTR srcText
,
131 LONG line
, LONG linepos
, LONG filepos
);
132 extern HRESULT
DOMDocument_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
);
133 extern HRESULT
SchemaCache_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
);
134 extern HRESULT
XMLDocument_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
);
135 extern HRESULT
SAXXMLReader_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
);
136 extern HRESULT
XMLHTTPRequest_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
);
138 typedef struct bsc_t bsc_t
;
140 HRESULT
bind_url(LPCWSTR
, HRESULT (*onDataAvailable
)(void*,char*,DWORD
), void*, bsc_t
**);
141 void detach_bsc(bsc_t
*);
145 IXMLDOMAttribute_tid
,
146 IXMLDOMCDATASection_tid
,
149 IXMLDOMDocument2_tid
,
150 IXMLDOMDocumentFragment_tid
,
152 IXMLDOMEntityReference_tid
,
153 IXMLDOMImplementation_tid
,
154 IXMLDOMNamedNodeMap_tid
,
157 IXMLDOMParseError_tid
,
158 IXMLDOMProcessingInstruction_tid
,
159 IXMLDOMSchemaCollection_tid
,
164 IVBSAXAttributes_tid
,
165 IVBSAXContentHandler_tid
,
166 IVBSAXDeclHandler_tid
,
167 IVBSAXDTDHandler_tid
,
168 IVBSAXEntityResolver_tid
,
169 IVBSAXErrorHandler_tid
,
170 IVBSAXLexicalHandler_tid
,
175 IMXReaderControl_tid
,
180 extern HRESULT
get_typeinfo(tid_t tid
, ITypeInfo
**typeinfo
);
181 extern void release_typelib(void);
183 typedef struct dispex_data_t dispex_data_t
;
184 typedef struct dispex_dynamic_data_t dispex_dynamic_data_t
;
186 #define MSXML_DISPID_CUSTOM_MIN 0x60000000
187 #define MSXML_DISPID_CUSTOM_MAX 0x6fffffff
190 HRESULT (*get_dispid
)(IUnknown
*,BSTR
,DWORD
,DISPID
*);
191 HRESULT (*invoke
)(IUnknown
*,DISPID
,LCID
,WORD
,DISPPARAMS
*,VARIANT
*,EXCEPINFO
*);
192 } dispex_static_data_vtbl_t
;
195 const dispex_static_data_vtbl_t
*vtbl
;
196 const tid_t disp_tid
;
198 const tid_t
* const iface_tids
;
199 } dispex_static_data_t
;
202 const IDispatchExVtbl
*lpIDispatchExVtbl
;
206 dispex_static_data_t
*data
;
207 dispex_dynamic_data_t
*dynamic_data
;
210 void init_dispex(DispatchEx
*,IUnknown
*,dispex_static_data_t
*);
211 BOOL
dispex_query_interface(DispatchEx
*,REFIID
,void**);
213 /* memory allocation functions */
215 static inline void *heap_alloc(size_t len
)
217 return HeapAlloc(GetProcessHeap(), 0, len
);
220 static inline void *heap_alloc_zero(size_t len
)
222 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
225 static inline void *heap_realloc(void *mem
, size_t len
)
227 return HeapReAlloc(GetProcessHeap(), 0, mem
, len
);
230 static inline BOOL
heap_free(void *mem
)
232 return HeapFree(GetProcessHeap(), 0, mem
);
235 static inline LPWSTR
heap_strdupW(LPCWSTR str
)
242 size
= (strlenW(str
)+1)*sizeof(WCHAR
);
243 ret
= heap_alloc(size
);
244 memcpy(ret
, str
, size
);
250 #endif /* __MSXML_PRIVATE__ */