Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendocfrag.c
Go to the documentation of this file.
00001 /* 00002 * DOM Document Fragment implementation 00003 * 00004 * Copyright 2007 Alistair Leslie-Hughes 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 #define COBJMACROS 00022 00023 #include "config.h" 00024 00025 #include <stdarg.h> 00026 #include "windef.h" 00027 #include "winbase.h" 00028 #include "winuser.h" 00029 #include "ole2.h" 00030 #include "msxml2.h" 00031 00032 #include "msxml_private.h" 00033 00034 #include "wine/debug.h" 00035 00036 WINE_DEFAULT_DEBUG_CHANNEL(msxml); 00037 00038 #ifdef HAVE_LIBXML2 00039 00040 typedef struct _domfrag 00041 { 00042 xmlnode node; 00043 const struct IXMLDOMDocumentFragmentVtbl *lpVtbl; 00044 LONG ref; 00045 } domfrag; 00046 00047 static inline domfrag *impl_from_IXMLDOMDocumentFragment( IXMLDOMDocumentFragment *iface ) 00048 { 00049 return (domfrag *)((char*)iface - FIELD_OFFSET(domfrag, lpVtbl)); 00050 } 00051 00052 static HRESULT WINAPI domfrag_QueryInterface( 00053 IXMLDOMDocumentFragment *iface, 00054 REFIID riid, 00055 void** ppvObject ) 00056 { 00057 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00058 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); 00059 00060 if ( IsEqualGUID( riid, &IID_IXMLDOMDocumentFragment ) || 00061 IsEqualGUID( riid, &IID_IDispatch ) || 00062 IsEqualGUID( riid, &IID_IUnknown ) ) 00063 { 00064 *ppvObject = iface; 00065 } 00066 else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) ) 00067 { 00068 *ppvObject = IXMLDOMNode_from_impl(&This->node); 00069 } 00070 else 00071 { 00072 FIXME("Unsupported interface %s\n", debugstr_guid(riid)); 00073 return E_NOINTERFACE; 00074 } 00075 00076 IXMLDOMText_AddRef((IUnknown*)*ppvObject); 00077 return S_OK; 00078 } 00079 00080 static ULONG WINAPI domfrag_AddRef( 00081 IXMLDOMDocumentFragment *iface ) 00082 { 00083 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00084 return InterlockedIncrement( &This->ref ); 00085 } 00086 00087 static ULONG WINAPI domfrag_Release( 00088 IXMLDOMDocumentFragment *iface ) 00089 { 00090 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00091 ULONG ref; 00092 00093 ref = InterlockedDecrement( &This->ref ); 00094 if ( ref == 0 ) 00095 { 00096 destroy_xmlnode(&This->node); 00097 heap_free( This ); 00098 } 00099 00100 return ref; 00101 } 00102 00103 static HRESULT WINAPI domfrag_GetTypeInfoCount( 00104 IXMLDOMDocumentFragment *iface, 00105 UINT* pctinfo ) 00106 { 00107 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00108 00109 TRACE("(%p)->(%p)\n", This, pctinfo); 00110 00111 *pctinfo = 1; 00112 00113 return S_OK; 00114 } 00115 00116 static HRESULT WINAPI domfrag_GetTypeInfo( 00117 IXMLDOMDocumentFragment *iface, 00118 UINT iTInfo, LCID lcid, 00119 ITypeInfo** ppTInfo ) 00120 { 00121 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00122 HRESULT hr; 00123 00124 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); 00125 00126 hr = get_typeinfo(IXMLDOMDocumentFragment_tid, ppTInfo); 00127 00128 return hr; 00129 } 00130 00131 static HRESULT WINAPI domfrag_GetIDsOfNames( 00132 IXMLDOMDocumentFragment *iface, 00133 REFIID riid, LPOLESTR* rgszNames, 00134 UINT cNames, LCID lcid, DISPID* rgDispId ) 00135 { 00136 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00137 ITypeInfo *typeinfo; 00138 HRESULT hr; 00139 00140 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, 00141 lcid, rgDispId); 00142 00143 if(!rgszNames || cNames == 0 || !rgDispId) 00144 return E_INVALIDARG; 00145 00146 hr = get_typeinfo(IXMLDOMDocumentFragment_tid, &typeinfo); 00147 if(SUCCEEDED(hr)) 00148 { 00149 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId); 00150 ITypeInfo_Release(typeinfo); 00151 } 00152 00153 return hr; 00154 } 00155 00156 static HRESULT WINAPI domfrag_Invoke( 00157 IXMLDOMDocumentFragment *iface, 00158 DISPID dispIdMember, REFIID riid, LCID lcid, 00159 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, 00160 EXCEPINFO* pExcepInfo, UINT* puArgErr ) 00161 { 00162 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00163 ITypeInfo *typeinfo; 00164 HRESULT hr; 00165 00166 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), 00167 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); 00168 00169 hr = get_typeinfo(IXMLDOMDocumentFragment_tid, &typeinfo); 00170 if(SUCCEEDED(hr)) 00171 { 00172 hr = ITypeInfo_Invoke(typeinfo, &(This->lpVtbl), dispIdMember, wFlags, pDispParams, 00173 pVarResult, pExcepInfo, puArgErr); 00174 ITypeInfo_Release(typeinfo); 00175 } 00176 00177 return hr; 00178 } 00179 00180 static HRESULT WINAPI domfrag_get_nodeName( 00181 IXMLDOMDocumentFragment *iface, 00182 BSTR* p ) 00183 { 00184 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00185 return IXMLDOMNode_get_nodeName( IXMLDOMNode_from_impl(&This->node), p ); 00186 } 00187 00188 static HRESULT WINAPI domfrag_get_nodeValue( 00189 IXMLDOMDocumentFragment *iface, 00190 VARIANT* var1 ) 00191 { 00192 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00193 return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00194 } 00195 00196 static HRESULT WINAPI domfrag_put_nodeValue( 00197 IXMLDOMDocumentFragment *iface, 00198 VARIANT var1 ) 00199 { 00200 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00201 return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00202 } 00203 00204 static HRESULT WINAPI domfrag_get_nodeType( 00205 IXMLDOMDocumentFragment *iface, 00206 DOMNodeType* domNodeType ) 00207 { 00208 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00209 return IXMLDOMNode_get_nodeType( IXMLDOMNode_from_impl(&This->node), domNodeType ); 00210 } 00211 00212 static HRESULT WINAPI domfrag_get_parentNode( 00213 IXMLDOMDocumentFragment *iface, 00214 IXMLDOMNode** parent ) 00215 { 00216 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00217 return IXMLDOMNode_get_parentNode( IXMLDOMNode_from_impl(&This->node), parent ); 00218 } 00219 00220 static HRESULT WINAPI domfrag_get_childNodes( 00221 IXMLDOMDocumentFragment *iface, 00222 IXMLDOMNodeList** outList) 00223 { 00224 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00225 return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList ); 00226 } 00227 00228 static HRESULT WINAPI domfrag_get_firstChild( 00229 IXMLDOMDocumentFragment *iface, 00230 IXMLDOMNode** domNode) 00231 { 00232 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00233 return IXMLDOMNode_get_firstChild( IXMLDOMNode_from_impl(&This->node), domNode ); 00234 } 00235 00236 static HRESULT WINAPI domfrag_get_lastChild( 00237 IXMLDOMDocumentFragment *iface, 00238 IXMLDOMNode** domNode) 00239 { 00240 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00241 return IXMLDOMNode_get_lastChild( IXMLDOMNode_from_impl(&This->node), domNode ); 00242 } 00243 00244 static HRESULT WINAPI domfrag_get_previousSibling( 00245 IXMLDOMDocumentFragment *iface, 00246 IXMLDOMNode** domNode) 00247 { 00248 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00249 return IXMLDOMNode_get_previousSibling( IXMLDOMNode_from_impl(&This->node), domNode ); 00250 } 00251 00252 static HRESULT WINAPI domfrag_get_nextSibling( 00253 IXMLDOMDocumentFragment *iface, 00254 IXMLDOMNode** domNode) 00255 { 00256 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00257 return IXMLDOMNode_get_nextSibling( IXMLDOMNode_from_impl(&This->node), domNode ); 00258 } 00259 00260 static HRESULT WINAPI domfrag_get_attributes( 00261 IXMLDOMDocumentFragment *iface, 00262 IXMLDOMNamedNodeMap** attributeMap) 00263 { 00264 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00265 return IXMLDOMNode_get_attributes( IXMLDOMNode_from_impl(&This->node), attributeMap ); 00266 } 00267 00268 static HRESULT WINAPI domfrag_insertBefore( 00269 IXMLDOMDocumentFragment *iface, 00270 IXMLDOMNode* newNode, VARIANT var1, 00271 IXMLDOMNode** outOldNode) 00272 { 00273 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00274 return IXMLDOMNode_insertBefore( IXMLDOMNode_from_impl(&This->node), newNode, var1, outOldNode ); 00275 } 00276 00277 static HRESULT WINAPI domfrag_replaceChild( 00278 IXMLDOMDocumentFragment *iface, 00279 IXMLDOMNode* newNode, 00280 IXMLDOMNode* oldNode, 00281 IXMLDOMNode** outOldNode) 00282 { 00283 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00284 return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); 00285 } 00286 00287 static HRESULT WINAPI domfrag_removeChild( 00288 IXMLDOMDocumentFragment *iface, 00289 IXMLDOMNode* domNode, IXMLDOMNode** oldNode) 00290 { 00291 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00292 return IXMLDOMNode_removeChild( IXMLDOMNode_from_impl(&This->node), domNode, oldNode ); 00293 } 00294 00295 static HRESULT WINAPI domfrag_appendChild( 00296 IXMLDOMDocumentFragment *iface, 00297 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode) 00298 { 00299 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00300 return IXMLDOMNode_appendChild( IXMLDOMNode_from_impl(&This->node), newNode, outNewNode ); 00301 } 00302 00303 static HRESULT WINAPI domfrag_hasChildNodes( 00304 IXMLDOMDocumentFragment *iface, 00305 VARIANT_BOOL* pbool) 00306 { 00307 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00308 return IXMLDOMNode_hasChildNodes( IXMLDOMNode_from_impl(&This->node), pbool ); 00309 } 00310 00311 static HRESULT WINAPI domfrag_get_ownerDocument( 00312 IXMLDOMDocumentFragment *iface, 00313 IXMLDOMDocument** domDocument) 00314 { 00315 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00316 return IXMLDOMNode_get_ownerDocument( IXMLDOMNode_from_impl(&This->node), domDocument ); 00317 } 00318 00319 static HRESULT WINAPI domfrag_cloneNode( 00320 IXMLDOMDocumentFragment *iface, 00321 VARIANT_BOOL pbool, IXMLDOMNode** outNode) 00322 { 00323 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00324 return IXMLDOMNode_cloneNode( IXMLDOMNode_from_impl(&This->node), pbool, outNode ); 00325 } 00326 00327 static HRESULT WINAPI domfrag_get_nodeTypeString( 00328 IXMLDOMDocumentFragment *iface, 00329 BSTR* p) 00330 { 00331 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00332 return IXMLDOMNode_get_nodeTypeString( IXMLDOMNode_from_impl(&This->node), p ); 00333 } 00334 00335 static HRESULT WINAPI domfrag_get_text( 00336 IXMLDOMDocumentFragment *iface, 00337 BSTR* p) 00338 { 00339 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00340 return IXMLDOMNode_get_text( IXMLDOMNode_from_impl(&This->node), p ); 00341 } 00342 00343 static HRESULT WINAPI domfrag_put_text( 00344 IXMLDOMDocumentFragment *iface, 00345 BSTR p) 00346 { 00347 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00348 return IXMLDOMNode_put_text( IXMLDOMNode_from_impl(&This->node), p ); 00349 } 00350 00351 static HRESULT WINAPI domfrag_get_specified( 00352 IXMLDOMDocumentFragment *iface, 00353 VARIANT_BOOL* pbool) 00354 { 00355 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00356 return IXMLDOMNode_get_specified( IXMLDOMNode_from_impl(&This->node), pbool ); 00357 } 00358 00359 static HRESULT WINAPI domfrag_get_definition( 00360 IXMLDOMDocumentFragment *iface, 00361 IXMLDOMNode** domNode) 00362 { 00363 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00364 return IXMLDOMNode_get_definition( IXMLDOMNode_from_impl(&This->node), domNode ); 00365 } 00366 00367 static HRESULT WINAPI domfrag_get_nodeTypedValue( 00368 IXMLDOMDocumentFragment *iface, 00369 VARIANT* var1) 00370 { 00371 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00372 return IXMLDOMNode_get_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00373 } 00374 00375 static HRESULT WINAPI domfrag_put_nodeTypedValue( 00376 IXMLDOMDocumentFragment *iface, 00377 VARIANT var1) 00378 { 00379 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00380 return IXMLDOMNode_put_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00381 } 00382 00383 static HRESULT WINAPI domfrag_get_dataType( 00384 IXMLDOMDocumentFragment *iface, 00385 VARIANT* var1) 00386 { 00387 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00388 return IXMLDOMNode_get_dataType( IXMLDOMNode_from_impl(&This->node), var1 ); 00389 } 00390 00391 static HRESULT WINAPI domfrag_put_dataType( 00392 IXMLDOMDocumentFragment *iface, 00393 BSTR p) 00394 { 00395 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00396 return IXMLDOMNode_put_dataType( IXMLDOMNode_from_impl(&This->node), p ); 00397 } 00398 00399 static HRESULT WINAPI domfrag_get_xml( 00400 IXMLDOMDocumentFragment *iface, 00401 BSTR* p) 00402 { 00403 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00404 return IXMLDOMNode_get_xml( IXMLDOMNode_from_impl(&This->node), p ); 00405 } 00406 00407 static HRESULT WINAPI domfrag_transformNode( 00408 IXMLDOMDocumentFragment *iface, 00409 IXMLDOMNode* domNode, BSTR* p) 00410 { 00411 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00412 return IXMLDOMNode_transformNode( IXMLDOMNode_from_impl(&This->node), domNode, p ); 00413 } 00414 00415 static HRESULT WINAPI domfrag_selectNodes( 00416 IXMLDOMDocumentFragment *iface, 00417 BSTR p, IXMLDOMNodeList** outList) 00418 { 00419 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00420 return IXMLDOMNode_selectNodes( IXMLDOMNode_from_impl(&This->node), p, outList ); 00421 } 00422 00423 static HRESULT WINAPI domfrag_selectSingleNode( 00424 IXMLDOMDocumentFragment *iface, 00425 BSTR p, IXMLDOMNode** outNode) 00426 { 00427 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00428 return IXMLDOMNode_selectSingleNode( IXMLDOMNode_from_impl(&This->node), p, outNode ); 00429 } 00430 00431 static HRESULT WINAPI domfrag_get_parsed( 00432 IXMLDOMDocumentFragment *iface, 00433 VARIANT_BOOL* pbool) 00434 { 00435 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00436 return IXMLDOMNode_get_parsed( IXMLDOMNode_from_impl(&This->node), pbool ); 00437 } 00438 00439 static HRESULT WINAPI domfrag_get_namespaceURI( 00440 IXMLDOMDocumentFragment *iface, 00441 BSTR* p) 00442 { 00443 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00444 return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p ); 00445 } 00446 00447 static HRESULT WINAPI domfrag_get_prefix( 00448 IXMLDOMDocumentFragment *iface, 00449 BSTR* p) 00450 { 00451 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00452 return IXMLDOMNode_get_prefix( IXMLDOMNode_from_impl(&This->node), p ); 00453 } 00454 00455 static HRESULT WINAPI domfrag_get_baseName( 00456 IXMLDOMDocumentFragment *iface, 00457 BSTR* p) 00458 { 00459 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00460 return IXMLDOMNode_get_baseName( IXMLDOMNode_from_impl(&This->node), p ); 00461 } 00462 00463 static HRESULT WINAPI domfrag_transformNodeToObject( 00464 IXMLDOMDocumentFragment *iface, 00465 IXMLDOMNode* domNode, VARIANT var1) 00466 { 00467 domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); 00468 return IXMLDOMNode_transformNodeToObject( IXMLDOMNode_from_impl(&This->node), domNode, var1 ); 00469 } 00470 00471 static const struct IXMLDOMDocumentFragmentVtbl domfrag_vtbl = 00472 { 00473 domfrag_QueryInterface, 00474 domfrag_AddRef, 00475 domfrag_Release, 00476 domfrag_GetTypeInfoCount, 00477 domfrag_GetTypeInfo, 00478 domfrag_GetIDsOfNames, 00479 domfrag_Invoke, 00480 domfrag_get_nodeName, 00481 domfrag_get_nodeValue, 00482 domfrag_put_nodeValue, 00483 domfrag_get_nodeType, 00484 domfrag_get_parentNode, 00485 domfrag_get_childNodes, 00486 domfrag_get_firstChild, 00487 domfrag_get_lastChild, 00488 domfrag_get_previousSibling, 00489 domfrag_get_nextSibling, 00490 domfrag_get_attributes, 00491 domfrag_insertBefore, 00492 domfrag_replaceChild, 00493 domfrag_removeChild, 00494 domfrag_appendChild, 00495 domfrag_hasChildNodes, 00496 domfrag_get_ownerDocument, 00497 domfrag_cloneNode, 00498 domfrag_get_nodeTypeString, 00499 domfrag_get_text, 00500 domfrag_put_text, 00501 domfrag_get_specified, 00502 domfrag_get_definition, 00503 domfrag_get_nodeTypedValue, 00504 domfrag_put_nodeTypedValue, 00505 domfrag_get_dataType, 00506 domfrag_put_dataType, 00507 domfrag_get_xml, 00508 domfrag_transformNode, 00509 domfrag_selectNodes, 00510 domfrag_selectSingleNode, 00511 domfrag_get_parsed, 00512 domfrag_get_namespaceURI, 00513 domfrag_get_prefix, 00514 domfrag_get_baseName, 00515 domfrag_transformNodeToObject 00516 }; 00517 00518 IUnknown* create_doc_fragment( xmlNodePtr fragment ) 00519 { 00520 domfrag *This; 00521 00522 This = heap_alloc( sizeof *This ); 00523 if ( !This ) 00524 return NULL; 00525 00526 This->lpVtbl = &domfrag_vtbl; 00527 This->ref = 1; 00528 00529 init_xmlnode(&This->node, fragment, (IUnknown*)&This->lpVtbl, NULL); 00530 00531 return (IUnknown*) &This->lpVtbl; 00532 } 00533 00534 #endif Generated on Sun May 27 2012 04:25:23 for ReactOS by
1.7.6.1
|