Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmsxml_private.h
Go to the documentation of this file.
00001 /* 00002 * Common definitions 00003 * 00004 * Copyright 2005 Mike McCormack 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #ifndef __MSXML_PRIVATE__ 00022 #define __MSXML_PRIVATE__ 00023 00024 #include "dispex.h" 00025 00026 #include "wine/unicode.h" 00027 00028 #ifndef __WINE_CONFIG_H 00029 # error You must include config.h to use this header 00030 #endif 00031 00032 /* typelibs */ 00033 typedef enum tid_t { 00034 IXMLDOMAttribute_tid, 00035 IXMLDOMCDATASection_tid, 00036 IXMLDOMComment_tid, 00037 IXMLDOMDocument_tid, 00038 IXMLDOMDocument2_tid, 00039 IXMLDOMDocumentFragment_tid, 00040 IXMLDOMElement_tid, 00041 IXMLDOMEntityReference_tid, 00042 IXMLDOMImplementation_tid, 00043 IXMLDOMNamedNodeMap_tid, 00044 IXMLDOMNode_tid, 00045 IXMLDOMNodeList_tid, 00046 IXMLDOMParseError_tid, 00047 IXMLDOMProcessingInstruction_tid, 00048 IXMLDOMSchemaCollection_tid, 00049 IXMLDOMSelection_tid, 00050 IXMLDOMText_tid, 00051 IXMLElement_tid, 00052 IXMLDocument_tid, 00053 IXMLHTTPRequest_tid, 00054 IVBSAXAttributes_tid, 00055 IVBSAXContentHandler_tid, 00056 IVBSAXDeclHandler_tid, 00057 IVBSAXDTDHandler_tid, 00058 IVBSAXEntityResolver_tid, 00059 IVBSAXErrorHandler_tid, 00060 IVBSAXLexicalHandler_tid, 00061 IVBSAXLocator_tid, 00062 IVBSAXXMLFilter_tid, 00063 IVBSAXXMLReader_tid, 00064 IMXAttributes_tid, 00065 IMXReaderControl_tid, 00066 IMXWriter_tid, 00067 LAST_tid 00068 } tid_t; 00069 00070 extern HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo); 00071 extern void release_typelib(void); 00072 00073 typedef struct dispex_data_t dispex_data_t; 00074 typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; 00075 00076 #define MSXML_DISPID_CUSTOM_MIN 0x60000000 00077 #define MSXML_DISPID_CUSTOM_MAX 0x6fffffff 00078 00079 typedef struct { 00080 HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*); 00081 HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*); 00082 } dispex_static_data_vtbl_t; 00083 00084 typedef struct { 00085 const dispex_static_data_vtbl_t *vtbl; 00086 const tid_t disp_tid; 00087 dispex_data_t *data; 00088 const tid_t* const iface_tids; 00089 } dispex_static_data_t; 00090 00091 typedef struct { 00092 const IDispatchExVtbl *lpIDispatchExVtbl; 00093 00094 IUnknown *outer; 00095 00096 dispex_static_data_t *data; 00097 dispex_dynamic_data_t *dynamic_data; 00098 } DispatchEx; 00099 00100 void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*); 00101 BOOL dispex_query_interface(DispatchEx*,REFIID,void**); 00102 00103 #ifdef HAVE_LIBXML2 00104 00105 #ifdef HAVE_LIBXML_PARSER_H 00106 #include <libxml/parser.h> 00107 #endif 00108 00109 /* constructors */ 00110 extern IUnknown *create_domdoc( xmlNodePtr document ); 00111 extern IUnknown *create_xmldoc( void ); 00112 extern IXMLDOMNode *create_node( xmlNodePtr node ); 00113 extern IUnknown *create_element( xmlNodePtr element ); 00114 extern IUnknown *create_attribute( xmlNodePtr attribute ); 00115 extern IUnknown *create_text( xmlNodePtr text ); 00116 extern IUnknown *create_pi( xmlNodePtr pi ); 00117 extern IUnknown *create_comment( xmlNodePtr comment ); 00118 extern IUnknown *create_cdata( xmlNodePtr text ); 00119 extern IXMLDOMNodeList *create_children_nodelist( xmlNodePtr ); 00120 extern IXMLDOMNamedNodeMap *create_nodemap( IXMLDOMNode *node ); 00121 extern IUnknown *create_doc_Implementation(void); 00122 extern IUnknown *create_doc_fragment( xmlNodePtr fragment ); 00123 extern IUnknown *create_doc_entity_ref( xmlNodePtr entity ); 00124 00125 extern HRESULT queryresult_create( xmlNodePtr, LPWSTR, IXMLDOMNodeList ** ); 00126 00127 /* data accessors */ 00128 xmlNodePtr xmlNodePtr_from_domnode( IXMLDOMNode *iface, xmlElementType type ); 00129 00130 /* helpers */ 00131 extern xmlChar *xmlChar_from_wchar( LPWSTR str ); 00132 00133 extern LONG xmldoc_add_ref( xmlDocPtr doc ); 00134 extern LONG xmldoc_release( xmlDocPtr doc ); 00135 extern HRESULT xmldoc_add_orphan( xmlDocPtr doc, xmlNodePtr node ); 00136 extern HRESULT xmldoc_remove_orphan( xmlDocPtr doc, xmlNodePtr node ); 00137 extern void xmldoc_link_xmldecl(xmlDocPtr doc, xmlNodePtr node); 00138 extern xmlNodePtr xmldoc_unlink_xmldecl(xmlDocPtr doc); 00139 00140 extern HRESULT XMLElement_create( IUnknown *pUnkOuter, xmlNodePtr node, LPVOID *ppObj, BOOL own ); 00141 00142 extern xmlDocPtr parse_xml(char *ptr, int len); 00143 00144 /* IXMLDOMNode Internal Structure */ 00145 typedef struct _xmlnode 00146 { 00147 DispatchEx dispex; 00148 const struct IXMLDOMNodeVtbl *lpVtbl; 00149 IUnknown *pUnkOuter; 00150 LONG ref; 00151 xmlNodePtr node; 00152 } xmlnode; 00153 00154 static inline xmlnode *impl_from_IXMLDOMNode( IXMLDOMNode *iface ) 00155 { 00156 return (xmlnode *)((char*)iface - FIELD_OFFSET(xmlnode, lpVtbl)); 00157 } 00158 00159 static inline IXMLDOMNode *IXMLDOMNode_from_impl(xmlnode *This) 00160 { 00161 return (IXMLDOMNode*)&This->lpVtbl; 00162 } 00163 00164 extern void init_xmlnode(xmlnode*,xmlNodePtr,IUnknown*,dispex_static_data_t*); 00165 extern void destroy_xmlnode(xmlnode*); 00166 00167 extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **document); 00168 00169 static inline BSTR bstr_from_xmlChar(const xmlChar *str) 00170 { 00171 BSTR ret = NULL; 00172 00173 if(str) { 00174 DWORD len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, -1, NULL, 0); 00175 ret = SysAllocStringLen(NULL, len-1); 00176 if(ret) 00177 MultiByteToWideChar( CP_UTF8, 0, (LPCSTR)str, -1, ret, len); 00178 } 00179 else 00180 ret = SysAllocStringLen(NULL, 0); 00181 00182 return ret; 00183 } 00184 00185 #endif 00186 00187 void* libxslt_handle; 00188 #ifdef SONAME_LIBXSLT 00189 # ifdef HAVE_LIBXSLT_PATTERN_H 00190 # include <libxslt/pattern.h> 00191 # endif 00192 # ifdef HAVE_LIBXSLT_TRANSFORM_H 00193 # include <libxslt/transform.h> 00194 # endif 00195 # include <libxslt/xsltutils.h> 00196 # include <libxslt/xsltInternals.h> 00197 00198 # define MAKE_FUNCPTR(f) extern typeof(f) * p##f 00199 MAKE_FUNCPTR(xsltApplyStylesheet); 00200 MAKE_FUNCPTR(xsltCleanupGlobals); 00201 MAKE_FUNCPTR(xsltFreeStylesheet); 00202 MAKE_FUNCPTR(xsltParseStylesheetDoc); 00203 # undef MAKE_FUNCPTR 00204 #endif 00205 00206 extern IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR srcText, 00207 LONG line, LONG linepos, LONG filepos ); 00208 extern HRESULT DOMDocument_create( IUnknown *pUnkOuter, LPVOID *ppObj ); 00209 extern HRESULT SchemaCache_create( IUnknown *pUnkOuter, LPVOID *ppObj ); 00210 extern HRESULT XMLDocument_create( IUnknown *pUnkOuter, LPVOID *ppObj ); 00211 extern HRESULT SAXXMLReader_create(IUnknown *pUnkOuter, LPVOID *ppObj ); 00212 extern HRESULT XMLHTTPRequest_create(IUnknown *pUnkOuter, LPVOID *ppObj); 00213 00214 typedef struct bsc_t bsc_t; 00215 00216 HRESULT bind_url(LPCWSTR, HRESULT (*onDataAvailable)(void*,char*,DWORD), void*, bsc_t**); 00217 void detach_bsc(bsc_t*); 00218 00219 /* memory allocation functions */ 00220 00221 static inline void *heap_alloc(size_t len) 00222 { 00223 return HeapAlloc(GetProcessHeap(), 0, len); 00224 } 00225 00226 static inline void *heap_alloc_zero(size_t len) 00227 { 00228 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); 00229 } 00230 00231 static inline void *heap_realloc(void *mem, size_t len) 00232 { 00233 return HeapReAlloc(GetProcessHeap(), 0, mem, len); 00234 } 00235 00236 static inline BOOL heap_free(void *mem) 00237 { 00238 return HeapFree(GetProcessHeap(), 0, mem); 00239 } 00240 00241 static inline LPWSTR heap_strdupW(LPCWSTR str) 00242 { 00243 LPWSTR ret = NULL; 00244 00245 if(str) { 00246 DWORD size; 00247 00248 size = (strlenW(str)+1)*sizeof(WCHAR); 00249 ret = heap_alloc(size); 00250 memcpy(ret, str, size); 00251 } 00252 00253 return ret; 00254 } 00255 00256 #endif /* __MSXML_PRIVATE__ */ Generated on Sun May 27 2012 04:25:24 for ReactOS by
1.7.6.1
|