ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

docfrag.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.