|  | /* | 
|  | *    Common definitions | 
|  | * | 
|  | * Copyright 2005 Mike McCormack | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | */ | 
|  |  | 
|  | #ifndef __MSXML_PRIVATE__ | 
|  | #define __MSXML_PRIVATE__ | 
|  |  | 
|  | #include "dispex.h" | 
|  |  | 
|  | #include "wine/unicode.h" | 
|  |  | 
|  | #ifndef __WINE_CONFIG_H | 
|  | # error You must include config.h to use this header | 
|  | #endif | 
|  |  | 
|  | /* typelibs */ | 
|  | typedef enum tid_t { | 
|  | IXMLDOMAttribute_tid, | 
|  | IXMLDOMCDATASection_tid, | 
|  | IXMLDOMComment_tid, | 
|  | IXMLDOMDocument_tid, | 
|  | IXMLDOMDocument2_tid, | 
|  | IXMLDOMDocumentFragment_tid, | 
|  | IXMLDOMElement_tid, | 
|  | IXMLDOMEntityReference_tid, | 
|  | IXMLDOMImplementation_tid, | 
|  | IXMLDOMNamedNodeMap_tid, | 
|  | IXMLDOMNode_tid, | 
|  | IXMLDOMNodeList_tid, | 
|  | IXMLDOMParseError_tid, | 
|  | IXMLDOMProcessingInstruction_tid, | 
|  | IXMLDOMSchemaCollection_tid, | 
|  | IXMLDOMSelection_tid, | 
|  | IXMLDOMText_tid, | 
|  | IXMLElement_tid, | 
|  | IXMLDocument_tid, | 
|  | IXMLHTTPRequest_tid, | 
|  | IVBSAXAttributes_tid, | 
|  | IVBSAXContentHandler_tid, | 
|  | IVBSAXDeclHandler_tid, | 
|  | IVBSAXDTDHandler_tid, | 
|  | IVBSAXEntityResolver_tid, | 
|  | IVBSAXErrorHandler_tid, | 
|  | IVBSAXLexicalHandler_tid, | 
|  | IVBSAXLocator_tid, | 
|  | IVBSAXXMLFilter_tid, | 
|  | IVBSAXXMLReader_tid, | 
|  | IMXAttributes_tid, | 
|  | IMXReaderControl_tid, | 
|  | IMXWriter_tid, | 
|  | LAST_tid | 
|  | } tid_t; | 
|  |  | 
|  | extern HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo); | 
|  | extern void release_typelib(void); | 
|  |  | 
|  | typedef struct dispex_data_t dispex_data_t; | 
|  | typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; | 
|  |  | 
|  | #define MSXML_DISPID_CUSTOM_MIN 0x60000000 | 
|  | #define MSXML_DISPID_CUSTOM_MAX 0x6fffffff | 
|  |  | 
|  | typedef struct { | 
|  | HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*); | 
|  | HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*); | 
|  | } dispex_static_data_vtbl_t; | 
|  |  | 
|  | typedef struct { | 
|  | const dispex_static_data_vtbl_t *vtbl; | 
|  | const tid_t disp_tid; | 
|  | dispex_data_t *data; | 
|  | const tid_t* const iface_tids; | 
|  | } dispex_static_data_t; | 
|  |  | 
|  | typedef struct { | 
|  | const IDispatchExVtbl  *lpIDispatchExVtbl; | 
|  |  | 
|  | IUnknown *outer; | 
|  |  | 
|  | dispex_static_data_t *data; | 
|  | dispex_dynamic_data_t *dynamic_data; | 
|  | } DispatchEx; | 
|  |  | 
|  | void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*); | 
|  | BOOL dispex_query_interface(DispatchEx*,REFIID,void**); | 
|  |  | 
|  | #ifdef HAVE_LIBXML2 | 
|  |  | 
|  | #ifdef HAVE_LIBXML_PARSER_H | 
|  | #include <libxml/parser.h> | 
|  | #endif | 
|  |  | 
|  | /* constructors */ | 
|  | extern IUnknown         *create_domdoc( xmlNodePtr document ); | 
|  | extern IUnknown         *create_xmldoc( void ); | 
|  | extern IXMLDOMNode      *create_node( xmlNodePtr node ); | 
|  | extern IUnknown         *create_element( xmlNodePtr element ); | 
|  | extern IUnknown         *create_attribute( xmlNodePtr attribute ); | 
|  | extern IUnknown         *create_text( xmlNodePtr text ); | 
|  | extern IUnknown         *create_pi( xmlNodePtr pi ); | 
|  | extern IUnknown         *create_comment( xmlNodePtr comment ); | 
|  | extern IUnknown         *create_cdata( xmlNodePtr text ); | 
|  | extern IXMLDOMNodeList  *create_children_nodelist( xmlNodePtr ); | 
|  | extern IXMLDOMNamedNodeMap *create_nodemap( IXMLDOMNode *node ); | 
|  | extern IUnknown         *create_doc_Implementation(void); | 
|  | extern IUnknown         *create_doc_fragment( xmlNodePtr fragment ); | 
|  | extern IUnknown         *create_doc_entity_ref( xmlNodePtr entity ); | 
|  |  | 
|  | extern HRESULT queryresult_create( xmlNodePtr, LPWSTR, IXMLDOMNodeList ** ); | 
|  |  | 
|  | /* data accessors */ | 
|  | xmlNodePtr xmlNodePtr_from_domnode( IXMLDOMNode *iface, xmlElementType type ); | 
|  |  | 
|  | /* helpers */ | 
|  | extern xmlChar *xmlChar_from_wchar( LPWSTR str ); | 
|  |  | 
|  | extern LONG xmldoc_add_ref( xmlDocPtr doc ); | 
|  | extern LONG xmldoc_release( xmlDocPtr doc ); | 
|  | extern HRESULT xmldoc_add_orphan( xmlDocPtr doc, xmlNodePtr node ); | 
|  | extern HRESULT xmldoc_remove_orphan( xmlDocPtr doc, xmlNodePtr node ); | 
|  |  | 
|  | extern HRESULT XMLElement_create( IUnknown *pUnkOuter, xmlNodePtr node, LPVOID *ppObj, BOOL own ); | 
|  |  | 
|  | extern xmlDocPtr parse_xml(char *ptr, int len); | 
|  |  | 
|  | /* IXMLDOMNode Internal Structure */ | 
|  | typedef struct _xmlnode | 
|  | { | 
|  | DispatchEx dispex; | 
|  | const struct IXMLDOMNodeVtbl *lpVtbl; | 
|  | IUnknown *pUnkOuter; | 
|  | LONG ref; | 
|  | xmlNodePtr node; | 
|  | } xmlnode; | 
|  |  | 
|  | static inline xmlnode *impl_from_IXMLDOMNode( IXMLDOMNode *iface ) | 
|  | { | 
|  | return (xmlnode *)((char*)iface - FIELD_OFFSET(xmlnode, lpVtbl)); | 
|  | } | 
|  |  | 
|  | static inline IXMLDOMNode *IXMLDOMNode_from_impl(xmlnode *This) | 
|  | { | 
|  | return (IXMLDOMNode*)&This->lpVtbl; | 
|  | } | 
|  |  | 
|  | extern void init_xmlnode(xmlnode*,xmlNodePtr,IUnknown*,dispex_static_data_t*); | 
|  | extern void destroy_xmlnode(xmlnode*); | 
|  |  | 
|  | extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **document); | 
|  |  | 
|  | static inline BSTR bstr_from_xmlChar(const xmlChar *str) | 
|  | { | 
|  | BSTR ret = NULL; | 
|  |  | 
|  | if(str) { | 
|  | DWORD len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, -1, NULL, 0); | 
|  | ret = SysAllocStringLen(NULL, len-1); | 
|  | if(ret) | 
|  | MultiByteToWideChar( CP_UTF8, 0, (LPCSTR)str, -1, ret, len); | 
|  | } | 
|  | else | 
|  | ret = SysAllocStringLen(NULL, 0); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  |  | 
|  | #endif | 
|  |  | 
|  | void* libxslt_handle; | 
|  | #ifdef SONAME_LIBXSLT | 
|  | # ifdef HAVE_LIBXSLT_PATTERN_H | 
|  | #  include <libxslt/pattern.h> | 
|  | # endif | 
|  | # ifdef HAVE_LIBXSLT_TRANSFORM_H | 
|  | #  include <libxslt/transform.h> | 
|  | # endif | 
|  | # include <libxslt/xsltutils.h> | 
|  | # include <libxslt/xsltInternals.h> | 
|  |  | 
|  | # define MAKE_FUNCPTR(f) extern typeof(f) * p##f | 
|  | MAKE_FUNCPTR(xsltApplyStylesheet); | 
|  | MAKE_FUNCPTR(xsltCleanupGlobals); | 
|  | MAKE_FUNCPTR(xsltFreeStylesheet); | 
|  | MAKE_FUNCPTR(xsltParseStylesheetDoc); | 
|  | # undef MAKE_FUNCPTR | 
|  | #endif | 
|  |  | 
|  | extern IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR srcText, | 
|  | LONG line, LONG linepos, LONG filepos ); | 
|  | extern HRESULT DOMDocument_create( IUnknown *pUnkOuter, LPVOID *ppObj ); | 
|  | extern HRESULT SchemaCache_create( IUnknown *pUnkOuter, LPVOID *ppObj ); | 
|  | extern HRESULT XMLDocument_create( IUnknown *pUnkOuter, LPVOID *ppObj ); | 
|  | extern HRESULT SAXXMLReader_create(IUnknown *pUnkOuter, LPVOID *ppObj ); | 
|  | extern HRESULT XMLHTTPRequest_create(IUnknown *pUnkOuter, LPVOID *ppObj); | 
|  |  | 
|  | typedef struct bsc_t bsc_t; | 
|  |  | 
|  | HRESULT bind_url(LPCWSTR, HRESULT (*onDataAvailable)(void*,char*,DWORD), void*, bsc_t**); | 
|  | void detach_bsc(bsc_t*); | 
|  |  | 
|  | /* memory allocation functions */ | 
|  |  | 
|  | static inline void *heap_alloc(size_t len) | 
|  | { | 
|  | return HeapAlloc(GetProcessHeap(), 0, len); | 
|  | } | 
|  |  | 
|  | static inline void *heap_alloc_zero(size_t len) | 
|  | { | 
|  | return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); | 
|  | } | 
|  |  | 
|  | static inline void *heap_realloc(void *mem, size_t len) | 
|  | { | 
|  | return HeapReAlloc(GetProcessHeap(), 0, mem, len); | 
|  | } | 
|  |  | 
|  | static inline BOOL heap_free(void *mem) | 
|  | { | 
|  | return HeapFree(GetProcessHeap(), 0, mem); | 
|  | } | 
|  |  | 
|  | static inline LPWSTR heap_strdupW(LPCWSTR str) | 
|  | { | 
|  | LPWSTR ret = NULL; | 
|  |  | 
|  | if(str) { | 
|  | DWORD size; | 
|  |  | 
|  | size = (strlenW(str)+1)*sizeof(WCHAR); | 
|  | ret = heap_alloc(size); | 
|  | memcpy(ret, str, size); | 
|  | } | 
|  |  | 
|  | return ret; | 
|  | } | 
|  |  | 
|  | #endif /* __MSXML_PRIVATE__ */ |