Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenattribute.c
Go to the documentation of this file.
00001 /* 00002 * DOM Attribute implementation 00003 * 00004 * Copyright 2006 Huw Davies 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 _domattr 00041 { 00042 xmlnode node; 00043 const struct IXMLDOMAttributeVtbl *lpVtbl; 00044 LONG ref; 00045 } domattr; 00046 00047 static inline domattr *impl_from_IXMLDOMAttribute( IXMLDOMAttribute *iface ) 00048 { 00049 return (domattr *)((char*)iface - FIELD_OFFSET(domattr, lpVtbl)); 00050 } 00051 00052 static HRESULT WINAPI domattr_QueryInterface( 00053 IXMLDOMAttribute *iface, 00054 REFIID riid, 00055 void** ppvObject ) 00056 { 00057 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00058 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); 00059 00060 if ( IsEqualGUID( riid, &IID_IXMLDOMAttribute ) || 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 domattr_AddRef( 00081 IXMLDOMAttribute *iface ) 00082 { 00083 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00084 return InterlockedIncrement( &This->ref ); 00085 } 00086 00087 static ULONG WINAPI domattr_Release( 00088 IXMLDOMAttribute *iface ) 00089 { 00090 domattr *This = impl_from_IXMLDOMAttribute( 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 domattr_GetTypeInfoCount( 00104 IXMLDOMAttribute *iface, 00105 UINT* pctinfo ) 00106 { 00107 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00108 00109 TRACE("(%p)->(%p)\n", This, pctinfo); 00110 00111 *pctinfo = 1; 00112 00113 return S_OK; 00114 } 00115 00116 static HRESULT WINAPI domattr_GetTypeInfo( 00117 IXMLDOMAttribute *iface, 00118 UINT iTInfo, LCID lcid, 00119 ITypeInfo** ppTInfo ) 00120 { 00121 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00122 HRESULT hr; 00123 00124 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); 00125 00126 hr = get_typeinfo(IXMLDOMAttribute_tid, ppTInfo); 00127 00128 return hr; 00129 } 00130 00131 static HRESULT WINAPI domattr_GetIDsOfNames( 00132 IXMLDOMAttribute *iface, 00133 REFIID riid, LPOLESTR* rgszNames, 00134 UINT cNames, LCID lcid, DISPID* rgDispId ) 00135 { 00136 domattr *This = impl_from_IXMLDOMAttribute( 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(IXMLDOMAttribute_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 domattr_Invoke( 00157 IXMLDOMAttribute *iface, 00158 DISPID dispIdMember, REFIID riid, LCID lcid, 00159 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, 00160 EXCEPINFO* pExcepInfo, UINT* puArgErr ) 00161 { 00162 domattr *This = impl_from_IXMLDOMAttribute( 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(IXMLDOMAttribute_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 return hr; 00177 } 00178 00179 static HRESULT WINAPI domattr_get_nodeName( 00180 IXMLDOMAttribute *iface, 00181 BSTR* p ) 00182 { 00183 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00184 return IXMLDOMNode_get_nodeName( IXMLDOMNode_from_impl(&This->node), p ); 00185 } 00186 00187 static HRESULT WINAPI domattr_get_nodeValue( 00188 IXMLDOMAttribute *iface, 00189 VARIANT* var1 ) 00190 { 00191 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00192 return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00193 } 00194 00195 static HRESULT WINAPI domattr_put_nodeValue( 00196 IXMLDOMAttribute *iface, 00197 VARIANT var1 ) 00198 { 00199 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00200 return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00201 } 00202 00203 static HRESULT WINAPI domattr_get_nodeType( 00204 IXMLDOMAttribute *iface, 00205 DOMNodeType* domNodeType ) 00206 { 00207 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00208 return IXMLDOMNode_get_nodeType( IXMLDOMNode_from_impl(&This->node), domNodeType ); 00209 } 00210 00211 static HRESULT WINAPI domattr_get_parentNode( 00212 IXMLDOMAttribute *iface, 00213 IXMLDOMNode** parent ) 00214 { 00215 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00216 TRACE("(%p)->(%p)\n", This, parent); 00217 if (!parent) return E_INVALIDARG; 00218 *parent = NULL; 00219 return S_FALSE; 00220 } 00221 00222 static HRESULT WINAPI domattr_get_childNodes( 00223 IXMLDOMAttribute *iface, 00224 IXMLDOMNodeList** outList) 00225 { 00226 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00227 return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList ); 00228 } 00229 00230 static HRESULT WINAPI domattr_get_firstChild( 00231 IXMLDOMAttribute *iface, 00232 IXMLDOMNode** domNode) 00233 { 00234 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00235 return IXMLDOMNode_get_firstChild( IXMLDOMNode_from_impl(&This->node), domNode ); 00236 } 00237 00238 static HRESULT WINAPI domattr_get_lastChild( 00239 IXMLDOMAttribute *iface, 00240 IXMLDOMNode** domNode) 00241 { 00242 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00243 return IXMLDOMNode_get_lastChild( IXMLDOMNode_from_impl(&This->node), domNode ); 00244 } 00245 00246 static HRESULT WINAPI domattr_get_previousSibling( 00247 IXMLDOMAttribute *iface, 00248 IXMLDOMNode** domNode) 00249 { 00250 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00251 return IXMLDOMNode_get_previousSibling( IXMLDOMNode_from_impl(&This->node), domNode ); 00252 } 00253 00254 static HRESULT WINAPI domattr_get_nextSibling( 00255 IXMLDOMAttribute *iface, 00256 IXMLDOMNode** domNode) 00257 { 00258 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00259 return IXMLDOMNode_get_nextSibling( IXMLDOMNode_from_impl(&This->node), domNode ); 00260 } 00261 00262 static HRESULT WINAPI domattr_get_attributes( 00263 IXMLDOMAttribute *iface, 00264 IXMLDOMNamedNodeMap** attributeMap) 00265 { 00266 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00267 return IXMLDOMNode_get_attributes( IXMLDOMNode_from_impl(&This->node), attributeMap ); 00268 } 00269 00270 static HRESULT WINAPI domattr_insertBefore( 00271 IXMLDOMAttribute *iface, 00272 IXMLDOMNode* newNode, VARIANT var1, 00273 IXMLDOMNode** outOldNode) 00274 { 00275 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00276 return IXMLDOMNode_insertBefore( IXMLDOMNode_from_impl(&This->node), newNode, var1, outOldNode ); 00277 } 00278 00279 static HRESULT WINAPI domattr_replaceChild( 00280 IXMLDOMAttribute *iface, 00281 IXMLDOMNode* newNode, 00282 IXMLDOMNode* oldNode, 00283 IXMLDOMNode** outOldNode) 00284 { 00285 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00286 return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode ); 00287 } 00288 00289 static HRESULT WINAPI domattr_removeChild( 00290 IXMLDOMAttribute *iface, 00291 IXMLDOMNode* domNode, IXMLDOMNode** oldNode) 00292 { 00293 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00294 return IXMLDOMNode_removeChild( IXMLDOMNode_from_impl(&This->node), domNode, oldNode ); 00295 } 00296 00297 static HRESULT WINAPI domattr_appendChild( 00298 IXMLDOMAttribute *iface, 00299 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode) 00300 { 00301 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00302 return IXMLDOMNode_appendChild( IXMLDOMNode_from_impl(&This->node), newNode, outNewNode ); 00303 } 00304 00305 static HRESULT WINAPI domattr_hasChildNodes( 00306 IXMLDOMAttribute *iface, 00307 VARIANT_BOOL* pbool) 00308 { 00309 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00310 return IXMLDOMNode_hasChildNodes( IXMLDOMNode_from_impl(&This->node), pbool ); 00311 } 00312 00313 static HRESULT WINAPI domattr_get_ownerDocument( 00314 IXMLDOMAttribute *iface, 00315 IXMLDOMDocument** domDocument) 00316 { 00317 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00318 return IXMLDOMNode_get_ownerDocument( IXMLDOMNode_from_impl(&This->node), domDocument ); 00319 } 00320 00321 static HRESULT WINAPI domattr_cloneNode( 00322 IXMLDOMAttribute *iface, 00323 VARIANT_BOOL pbool, IXMLDOMNode** outNode) 00324 { 00325 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00326 return IXMLDOMNode_cloneNode( IXMLDOMNode_from_impl(&This->node), pbool, outNode ); 00327 } 00328 00329 static HRESULT WINAPI domattr_get_nodeTypeString( 00330 IXMLDOMAttribute *iface, 00331 BSTR* p) 00332 { 00333 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00334 return IXMLDOMNode_get_nodeTypeString( IXMLDOMNode_from_impl(&This->node), p ); 00335 } 00336 00337 static HRESULT WINAPI domattr_get_text( 00338 IXMLDOMAttribute *iface, 00339 BSTR* p) 00340 { 00341 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00342 return IXMLDOMNode_get_text( IXMLDOMNode_from_impl(&This->node), p ); 00343 } 00344 00345 static HRESULT WINAPI domattr_put_text( 00346 IXMLDOMAttribute *iface, 00347 BSTR p) 00348 { 00349 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00350 return IXMLDOMNode_put_text( IXMLDOMNode_from_impl(&This->node), p ); 00351 } 00352 00353 static HRESULT WINAPI domattr_get_specified( 00354 IXMLDOMAttribute *iface, 00355 VARIANT_BOOL* pbool) 00356 { 00357 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00358 return IXMLDOMNode_get_specified( IXMLDOMNode_from_impl(&This->node), pbool ); 00359 } 00360 00361 static HRESULT WINAPI domattr_get_definition( 00362 IXMLDOMAttribute *iface, 00363 IXMLDOMNode** domNode) 00364 { 00365 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00366 return IXMLDOMNode_get_definition( IXMLDOMNode_from_impl(&This->node), domNode ); 00367 } 00368 00369 static HRESULT WINAPI domattr_get_nodeTypedValue( 00370 IXMLDOMAttribute *iface, 00371 VARIANT* var1) 00372 { 00373 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00374 return IXMLDOMNode_get_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00375 } 00376 00377 static HRESULT WINAPI domattr_put_nodeTypedValue( 00378 IXMLDOMAttribute *iface, 00379 VARIANT var1) 00380 { 00381 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00382 return IXMLDOMNode_put_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00383 } 00384 00385 static HRESULT WINAPI domattr_get_dataType( 00386 IXMLDOMAttribute *iface, 00387 VARIANT* var1) 00388 { 00389 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00390 return IXMLDOMNode_get_dataType( IXMLDOMNode_from_impl(&This->node), var1 ); 00391 } 00392 00393 static HRESULT WINAPI domattr_put_dataType( 00394 IXMLDOMAttribute *iface, 00395 BSTR p) 00396 { 00397 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00398 return IXMLDOMNode_put_dataType( IXMLDOMNode_from_impl(&This->node), p ); 00399 } 00400 00401 static HRESULT WINAPI domattr_get_xml( 00402 IXMLDOMAttribute *iface, 00403 BSTR* p) 00404 { 00405 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00406 return IXMLDOMNode_get_xml( IXMLDOMNode_from_impl(&This->node), p ); 00407 } 00408 00409 static HRESULT WINAPI domattr_transformNode( 00410 IXMLDOMAttribute *iface, 00411 IXMLDOMNode* domNode, BSTR* p) 00412 { 00413 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00414 return IXMLDOMNode_transformNode( IXMLDOMNode_from_impl(&This->node), domNode, p ); 00415 } 00416 00417 static HRESULT WINAPI domattr_selectNodes( 00418 IXMLDOMAttribute *iface, 00419 BSTR p, IXMLDOMNodeList** outList) 00420 { 00421 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00422 return IXMLDOMNode_selectNodes( IXMLDOMNode_from_impl(&This->node), p, outList ); 00423 } 00424 00425 static HRESULT WINAPI domattr_selectSingleNode( 00426 IXMLDOMAttribute *iface, 00427 BSTR p, IXMLDOMNode** outNode) 00428 { 00429 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00430 return IXMLDOMNode_selectSingleNode( IXMLDOMNode_from_impl(&This->node), p, outNode ); 00431 } 00432 00433 static HRESULT WINAPI domattr_get_parsed( 00434 IXMLDOMAttribute *iface, 00435 VARIANT_BOOL* pbool) 00436 { 00437 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00438 return IXMLDOMNode_get_parsed( IXMLDOMNode_from_impl(&This->node), pbool ); 00439 } 00440 00441 static HRESULT WINAPI domattr_get_namespaceURI( 00442 IXMLDOMAttribute *iface, 00443 BSTR* p) 00444 { 00445 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00446 return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p ); 00447 } 00448 00449 static HRESULT WINAPI domattr_get_prefix( 00450 IXMLDOMAttribute *iface, 00451 BSTR* p) 00452 { 00453 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00454 return IXMLDOMNode_get_prefix( IXMLDOMNode_from_impl(&This->node), p ); 00455 } 00456 00457 static HRESULT WINAPI domattr_get_baseName( 00458 IXMLDOMAttribute *iface, 00459 BSTR* p) 00460 { 00461 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00462 return IXMLDOMNode_get_baseName( IXMLDOMNode_from_impl(&This->node), p ); 00463 } 00464 00465 static HRESULT WINAPI domattr_transformNodeToObject( 00466 IXMLDOMAttribute *iface, 00467 IXMLDOMNode* domNode, VARIANT var1) 00468 { 00469 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00470 return IXMLDOMNode_transformNodeToObject( IXMLDOMNode_from_impl(&This->node), domNode, var1 ); 00471 } 00472 00473 static HRESULT WINAPI domattr_get_name( 00474 IXMLDOMAttribute *iface, 00475 BSTR *p) 00476 { 00477 /* name property returns the same value as nodeName */ 00478 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00479 return IXMLDOMNode_get_nodeName( IXMLDOMNode_from_impl(&This->node), p ); 00480 } 00481 00482 static HRESULT WINAPI domattr_get_value( 00483 IXMLDOMAttribute *iface, 00484 VARIANT *var1) 00485 { 00486 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00487 return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00488 } 00489 00490 static HRESULT WINAPI domattr_put_value( 00491 IXMLDOMAttribute *iface, 00492 VARIANT var1) 00493 { 00494 domattr *This = impl_from_IXMLDOMAttribute( iface ); 00495 return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 ); 00496 } 00497 00498 static const struct IXMLDOMAttributeVtbl domattr_vtbl = 00499 { 00500 domattr_QueryInterface, 00501 domattr_AddRef, 00502 domattr_Release, 00503 domattr_GetTypeInfoCount, 00504 domattr_GetTypeInfo, 00505 domattr_GetIDsOfNames, 00506 domattr_Invoke, 00507 domattr_get_nodeName, 00508 domattr_get_nodeValue, 00509 domattr_put_nodeValue, 00510 domattr_get_nodeType, 00511 domattr_get_parentNode, 00512 domattr_get_childNodes, 00513 domattr_get_firstChild, 00514 domattr_get_lastChild, 00515 domattr_get_previousSibling, 00516 domattr_get_nextSibling, 00517 domattr_get_attributes, 00518 domattr_insertBefore, 00519 domattr_replaceChild, 00520 domattr_removeChild, 00521 domattr_appendChild, 00522 domattr_hasChildNodes, 00523 domattr_get_ownerDocument, 00524 domattr_cloneNode, 00525 domattr_get_nodeTypeString, 00526 domattr_get_text, 00527 domattr_put_text, 00528 domattr_get_specified, 00529 domattr_get_definition, 00530 domattr_get_nodeTypedValue, 00531 domattr_put_nodeTypedValue, 00532 domattr_get_dataType, 00533 domattr_put_dataType, 00534 domattr_get_xml, 00535 domattr_transformNode, 00536 domattr_selectNodes, 00537 domattr_selectSingleNode, 00538 domattr_get_parsed, 00539 domattr_get_namespaceURI, 00540 domattr_get_prefix, 00541 domattr_get_baseName, 00542 domattr_transformNodeToObject, 00543 domattr_get_name, 00544 domattr_get_value, 00545 domattr_put_value 00546 }; 00547 00548 IUnknown* create_attribute( xmlNodePtr attribute ) 00549 { 00550 domattr *This; 00551 00552 This = heap_alloc( sizeof *This ); 00553 if ( !This ) 00554 return NULL; 00555 00556 This->lpVtbl = &domattr_vtbl; 00557 This->ref = 1; 00558 00559 init_xmlnode(&This->node, attribute, (IUnknown*)&This->lpVtbl, NULL); 00560 00561 return (IUnknown*) &This->lpVtbl; 00562 } 00563 00564 #endif Generated on Sat May 26 2012 04:23:54 for ReactOS by
1.7.6.1
|