ReactOS 0.4.16-dev-2208-g6350669
node.c File Reference
#include <stdarg.h>
#include <libxml/parser.h>
#include <libxml/parserInternals.h>
#include <libxml/xmlerror.h>
#include <libxml/HTMLtree.h>
#include <libxslt/pattern.h>
#include <libxslt/transform.h>
#include <libxslt/imports.h>
#include <libxslt/variables.h>
#include <libxslt/xsltutils.h>
#include <libxslt/xsltInternals.h>
#include <libxslt/documents.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "ole2.h"
#include "msxml6.h"
#include "msxml_private.h"
#include "wine/debug.h"
Include dependency graph for node.c:

Go to the source code of this file.

Classes

struct  SupportErrorInfo
 
struct  import_buffer
 
struct  unknode
 

Macros

#define COBJMACROS
 
#define XSLT_GET_IMPORT_PTR(res, style, name)
 
#define XSLT_GET_IMPORT_INT(res, style, name)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msxml)
 
xmlNodePtr xmlNodePtr_from_domnode (IXMLDOMNode *iface, xmlElementType type)
 
BOOL node_query_interface (xmlnode *This, REFIID riid, void **ppv)
 
static SupportErrorInfoimpl_from_ISupportErrorInfo (ISupportErrorInfo *iface)
 
static HRESULT WINAPI SupportErrorInfo_QueryInterface (ISupportErrorInfo *iface, REFIID riid, void **obj)
 
static ULONG WINAPI SupportErrorInfo_AddRef (ISupportErrorInfo *iface)
 
static ULONG WINAPI SupportErrorInfo_Release (ISupportErrorInfo *iface)
 
static HRESULT WINAPI SupportErrorInfo_InterfaceSupportsErrorInfo (ISupportErrorInfo *iface, REFIID riid)
 
HRESULT node_create_supporterrorinfo (enum tid_t const *iids, void **obj)
 
xmlnodeget_node_obj (IXMLDOMNode *node)
 
HRESULT node_get_nodeName (xmlnode *This, BSTR *name)
 
HRESULT node_get_content (xmlnode *This, VARIANT *value)
 
HRESULT node_set_content (xmlnode *This, LPCWSTR value)
 
static HRESULT node_set_content_escaped (xmlnode *This, LPCWSTR value)
 
HRESULT node_put_value (xmlnode *This, VARIANT *value)
 
HRESULT node_put_value_escaped (xmlnode *This, VARIANT *value)
 
static HRESULT get_node (xmlnode *This, const char *name, xmlNodePtr node, IXMLDOMNode **out)
 
HRESULT node_get_parent (xmlnode *This, IXMLDOMNode **parent)
 
HRESULT node_get_child_nodes (xmlnode *This, IXMLDOMNodeList **ret)
 
HRESULT node_get_first_child (xmlnode *This, IXMLDOMNode **ret)
 
HRESULT node_get_last_child (xmlnode *This, IXMLDOMNode **ret)
 
HRESULT node_get_previous_sibling (xmlnode *This, IXMLDOMNode **ret)
 
HRESULT node_get_next_sibling (xmlnode *This, IXMLDOMNode **ret)
 
static int node_get_inst_cnt (xmlNodePtr node)
 
int xmlnode_get_inst_cnt (xmlnode *node)
 
void xmlnode_add_ref (xmlNodePtr node)
 
void xmlnode_release (xmlNodePtr node)
 
HRESULT node_insert_before (xmlnode *This, IXMLDOMNode *new_child, const VARIANT *ref_child, IXMLDOMNode **ret)
 
HRESULT node_replace_child (xmlnode *This, IXMLDOMNode *newChild, IXMLDOMNode *oldChild, IXMLDOMNode **ret)
 
HRESULT node_remove_child (xmlnode *This, IXMLDOMNode *child, IXMLDOMNode **oldChild)
 
HRESULT node_append_child (xmlnode *This, IXMLDOMNode *child, IXMLDOMNode **outChild)
 
HRESULT node_has_childnodes (const xmlnode *This, VARIANT_BOOL *ret)
 
HRESULT node_get_owner_doc (const xmlnode *This, IXMLDOMDocument **doc)
 
HRESULT node_clone (xmlnode *This, VARIANT_BOOL deep, IXMLDOMNode **cloneNode)
 
static xmlChardo_get_text (xmlNodePtr node, BOOL trim, DWORD *first, DWORD *last, BOOL *trail_ig_ws)
 
HRESULT node_get_text (const xmlnode *This, BSTR *text)
 
HRESULT node_put_text (xmlnode *This, BSTR text)
 
BSTR EnsureCorrectEOL (BSTR sInput)
 
HRESULT node_get_xml (xmlnode *This, BOOL ensure_eol, BSTR *ret)
 
static void xml_write_quotedstring (xmlOutputBufferPtr buf, const xmlChar *string)
 
static int XMLCALL transform_to_stream_write (void *context, const char *buffer, int len)
 
static void transform_write_text (xmlDocPtr result, xsltStylesheetPtr style, xmlOutputBufferPtr output)
 
static void transform_write_xmldecl (xmlDocPtr result, xsltStylesheetPtr style, BOOL omit_encoding, xmlOutputBufferPtr output)
 
static void htmldtd_dumpcontent (xmlOutputBufferPtr buf, xmlDocPtr doc)
 
static void htmldoc_dumpcontent (xmlOutputBufferPtr buf, xmlDocPtr doc, const char *encoding, int format)
 
static BOOL transform_is_empty_resultdoc (xmlDocPtr result)
 
static BOOL transform_is_valid_method (xsltStylesheetPtr style)
 
static HRESULT node_transform_write (xsltStylesheetPtr style, xmlDocPtr result, BOOL omit_encoding, const char *encoding, xmlOutputBufferPtr output)
 
static HRESULT node_transform_write_to_bstr (xsltStylesheetPtr style, xmlDocPtr result, BSTR *str)
 
static HRESULT node_transform_write_to_stream (xsltStylesheetPtr style, xmlDocPtr result, ISequentialStream *stream)
 
static int XMLCALL import_loader_io_read (void *context, char *out, int len)
 
static int XMLCALL import_loader_io_close (void *context)
 
static HRESULT import_loader_onDataAvailable (void *ctxt, char *ptr, DWORD len)
 
static HRESULT xslt_doc_get_uri (const xmlChar *uri, void *_ctxt, xsltLoadType type, IUri **doc_uri)
 
xmlDocPtr xslt_doc_default_loader (const xmlChar *uri, xmlDictPtr dict, int options, void *_ctxt, xsltLoadType type)
 
HRESULT node_transform_node_params (const xmlnode *This, IXMLDOMNode *stylesheet, BSTR *p, ISequentialStream *stream, const struct xslprocessor_params *params)
 
HRESULT node_transform_node (const xmlnode *node, IXMLDOMNode *stylesheet, BSTR *p)
 
HRESULT node_select_nodes (const xmlnode *This, BSTR query, IXMLDOMNodeList **nodes)
 
HRESULT node_select_singlenode (const xmlnode *This, BSTR query, IXMLDOMNode **node)
 
HRESULT node_get_namespaceURI (xmlnode *This, BSTR *namespaceURI)
 
HRESULT node_get_prefix (xmlnode *This, BSTR *prefix)
 
HRESULT node_get_base_name (xmlnode *This, BSTR *name)
 
void destroy_xmlnode (xmlnode *This)
 
void init_xmlnode (xmlnode *This, xmlNodePtr node, IXMLDOMNode *node_iface, dispex_static_data_t *dispex_data)
 
static unknodeunknode_from_IXMLDOMNode (IXMLDOMNode *iface)
 
static HRESULT WINAPI unknode_QueryInterface (IXMLDOMNode *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI unknode_AddRef (IXMLDOMNode *iface)
 
static ULONG WINAPI unknode_Release (IXMLDOMNode *iface)
 
static HRESULT WINAPI unknode_GetTypeInfoCount (IXMLDOMNode *iface, UINT *pctinfo)
 
static HRESULT WINAPI unknode_GetTypeInfo (IXMLDOMNode *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
 
static HRESULT WINAPI unknode_GetIDsOfNames (IXMLDOMNode *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
 
static HRESULT WINAPI unknode_Invoke (IXMLDOMNode *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 
static HRESULT WINAPI unknode_get_nodeName (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_get_nodeValue (IXMLDOMNode *iface, VARIANT *value)
 
static HRESULT WINAPI unknode_put_nodeValue (IXMLDOMNode *iface, VARIANT value)
 
static HRESULT WINAPI unknode_get_nodeType (IXMLDOMNode *iface, DOMNodeType *domNodeType)
 
static HRESULT WINAPI unknode_get_parentNode (IXMLDOMNode *iface, IXMLDOMNode **parent)
 
static HRESULT WINAPI unknode_get_childNodes (IXMLDOMNode *iface, IXMLDOMNodeList **outList)
 
static HRESULT WINAPI unknode_get_firstChild (IXMLDOMNode *iface, IXMLDOMNode **domNode)
 
static HRESULT WINAPI unknode_get_lastChild (IXMLDOMNode *iface, IXMLDOMNode **domNode)
 
static HRESULT WINAPI unknode_get_previousSibling (IXMLDOMNode *iface, IXMLDOMNode **domNode)
 
static HRESULT WINAPI unknode_get_nextSibling (IXMLDOMNode *iface, IXMLDOMNode **domNode)
 
static HRESULT WINAPI unknode_get_attributes (IXMLDOMNode *iface, IXMLDOMNamedNodeMap **attributeMap)
 
static HRESULT WINAPI unknode_insertBefore (IXMLDOMNode *iface, IXMLDOMNode *newNode, VARIANT refChild, IXMLDOMNode **outOldNode)
 
static HRESULT WINAPI unknode_replaceChild (IXMLDOMNode *iface, IXMLDOMNode *newNode, IXMLDOMNode *oldNode, IXMLDOMNode **outOldNode)
 
static HRESULT WINAPI unknode_removeChild (IXMLDOMNode *iface, IXMLDOMNode *domNode, IXMLDOMNode **oldNode)
 
static HRESULT WINAPI unknode_appendChild (IXMLDOMNode *iface, IXMLDOMNode *newNode, IXMLDOMNode **outNewNode)
 
static HRESULT WINAPI unknode_hasChildNodes (IXMLDOMNode *iface, VARIANT_BOOL *pbool)
 
static HRESULT WINAPI unknode_get_ownerDocument (IXMLDOMNode *iface, IXMLDOMDocument **domDocument)
 
static HRESULT WINAPI unknode_cloneNode (IXMLDOMNode *iface, VARIANT_BOOL pbool, IXMLDOMNode **outNode)
 
static HRESULT WINAPI unknode_get_nodeTypeString (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_get_text (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_put_text (IXMLDOMNode *iface, BSTR p)
 
static HRESULT WINAPI unknode_get_specified (IXMLDOMNode *iface, VARIANT_BOOL *isSpecified)
 
static HRESULT WINAPI unknode_get_definition (IXMLDOMNode *iface, IXMLDOMNode **definitionNode)
 
static HRESULT WINAPI unknode_get_nodeTypedValue (IXMLDOMNode *iface, VARIANT *var1)
 
static HRESULT WINAPI unknode_put_nodeTypedValue (IXMLDOMNode *iface, VARIANT typedValue)
 
static HRESULT WINAPI unknode_get_dataType (IXMLDOMNode *iface, VARIANT *var1)
 
static HRESULT WINAPI unknode_put_dataType (IXMLDOMNode *iface, BSTR p)
 
static HRESULT WINAPI unknode_get_xml (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_transformNode (IXMLDOMNode *iface, IXMLDOMNode *domNode, BSTR *p)
 
static HRESULT WINAPI unknode_selectNodes (IXMLDOMNode *iface, BSTR p, IXMLDOMNodeList **outList)
 
static HRESULT WINAPI unknode_selectSingleNode (IXMLDOMNode *iface, BSTR p, IXMLDOMNode **outNode)
 
static HRESULT WINAPI unknode_get_parsed (IXMLDOMNode *iface, VARIANT_BOOL *isParsed)
 
static HRESULT WINAPI unknode_get_namespaceURI (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_get_prefix (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_get_baseName (IXMLDOMNode *iface, BSTR *p)
 
static HRESULT WINAPI unknode_transformNodeToObject (IXMLDOMNode *iface, IXMLDOMNode *domNode, VARIANT var1)
 
IXMLDOMNodecreate_node (xmlNodePtr node)
 

Variables

static const IID IID_xmlnode = {0x4f2f4ba2,0xb822,0x11df,{0x8b,0x8a,0x68,0x50,0xdf,0xd7,0x20,0x85}}
 
static const struct ISupportErrorInfoVtbl SupportErrorInfoVtbl
 
static const struct IXMLDOMNodeVtbl unknode_vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file node.c.

◆ XSLT_GET_IMPORT_INT

#define XSLT_GET_IMPORT_INT (   res,
  style,
  name 
)
Value:
{ \
res = -1; \
while (st != NULL) { \
if (st->name != -1) { res = st->name; break; } \
st = xsltNextImport(st); \
}}
Arabic default style
Definition: afstyles.h:94
#define NULL
Definition: types.h:112
GLuint res
Definition: glext.h:9613
xsltStylesheetPtr xsltNextImport(xsltStylesheetPtr cur)
Definition: imports.c:297

Definition at line 1079 of file node.c.

◆ XSLT_GET_IMPORT_PTR

#define XSLT_GET_IMPORT_PTR (   res,
  style,
  name 
)
Value:
{ \
res = NULL; \
while (st != NULL) { \
if (st->name != NULL) { res = st->name; break; } \
st = xsltNextImport(st); \
}}

Definition at line 1070 of file node.c.

Function Documentation

◆ create_node()

IXMLDOMNode * create_node ( xmlNodePtr  node)

Definition at line 2225 of file node.c.

2226{
2227 IUnknown *pUnk;
2229 HRESULT hr;
2230
2231 if ( !node )
2232 return NULL;
2233
2234 TRACE("type %d\n", node->type);
2235 switch(node->type)
2236 {
2237 case XML_ELEMENT_NODE:
2239 break;
2240 case XML_ATTRIBUTE_NODE:
2242 break;
2243 case XML_TEXT_NODE:
2244 pUnk = create_text( node );
2245 break;
2246 case XML_CDATA_SECTION_NODE:
2247 pUnk = create_cdata( node );
2248 break;
2249 case XML_ENTITY_REF_NODE:
2251 break;
2252 case XML_PI_NODE:
2253 pUnk = create_pi( node );
2254 break;
2255 case XML_COMMENT_NODE:
2257 break;
2258 case XML_DOCUMENT_NODE:
2259 pUnk = create_domdoc( node );
2260 break;
2261 case XML_DOCUMENT_FRAG_NODE:
2263 break;
2264 case XML_DTD_NODE:
2265 case XML_DOCUMENT_TYPE_NODE:
2267 break;
2268 case XML_ENTITY_NODE:
2269 case XML_NOTATION_NODE: {
2270 unknode *new_node;
2271
2272 FIXME("only creating basic node for type %d\n", node->type);
2273
2274 new_node = malloc(sizeof(unknode));
2275 if(!new_node)
2276 return NULL;
2277
2278 new_node->IXMLDOMNode_iface.lpVtbl = &unknode_vtbl;
2279 new_node->ref = 1;
2280 init_xmlnode(&new_node->node, node, &new_node->IXMLDOMNode_iface, NULL);
2281 pUnk = (IUnknown*)&new_node->IXMLDOMNode_iface;
2282 break;
2283 }
2284 default:
2285 ERR("Called for unsupported node type %d\n", node->type);
2286 return NULL;
2287 }
2288
2289 hr = IUnknown_QueryInterface(pUnk, &IID_IXMLDOMNode, (LPVOID*)&ret);
2290 IUnknown_Release(pUnk);
2291 if(FAILED(hr)) return NULL;
2292 return ret;
2293}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
IUnknown * create_cdata(xmlNodePtr text)
Definition: cdata.c:874
IUnknown * create_comment(xmlNodePtr comment)
Definition: comment.c:825
#define malloc
Definition: debug_ros.c:4
#define FALSE
Definition: types.h:117
IUnknown * create_attribute(xmlNodePtr attribute, BOOL floating)
Definition: attribute.c:730
IUnknown * create_domdoc(xmlNodePtr document)
Definition: domdoc.c:3813
IUnknown * create_doc_fragment(xmlNodePtr fragment)
Definition: docfrag.c:580
IUnknown * create_doc_type(xmlNodePtr doctype)
Definition: doctype.c:569
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
return ret
Definition: mutex.c:146
IUnknown * create_doc_entity_ref(xmlNodePtr entity)
Definition: entityref.c:577
HRESULT create_element(HTMLDocumentNode *doc, const WCHAR *tag, HTMLElement **ret)
Definition: htmlelem.c:275
#define FAILED(hr)
Definition: intsafe.h:51
static HGLOBAL create_text(void)
Definition: clipboard.c:1496
IUnknown * create_pi(xmlNodePtr)
Definition: pi.c:944
void init_xmlnode(xmlnode *This, xmlNodePtr node, IXMLDOMNode *node_iface, dispex_static_data_t *dispex_data)
Definition: node.c:1647
static const struct IXMLDOMNodeVtbl unknode_vtbl
Definition: node.c:2178
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
Definition: node.c:1662
IXMLDOMNode IXMLDOMNode_iface
Definition: node.c:1664
LONG ref
Definition: node.c:1665
xmlnode node
Definition: node.c:1663
Definition: dlist.c:348

Referenced by get_node(), and node_clone().

◆ destroy_xmlnode()

void destroy_xmlnode ( xmlnode This)

Definition at line 1638 of file node.c.

1639{
1640 if(This->node)
1641 {
1642 xmlnode_release(This->node);
1643 xmldoc_release(This->node->doc);
1644 }
1645}
LONG xmldoc_release(xmlDocPtr doc)
Definition: domdoc.c:653
void xmlnode_release(xmlNodePtr node)
Definition: node.c:426

Referenced by dom_pi_Release(), domattr_Release(), domcdata_Release(), domcomment_Release(), domdoc_Release(), domdoctype_Release(), domelem_Release(), domfrag_Release(), domtext_Release(), entityref_Release(), and unknode_Release().

◆ do_get_text()

static xmlChar * do_get_text ( xmlNodePtr  node,
BOOL  trim,
DWORD first,
DWORD last,
BOOL trail_ig_ws 
)
static

Definition at line 712 of file node.c.

713{
714 xmlNodePtr child;
715 xmlChar* str;
716 BOOL preserving = is_preserving_whitespace(node);
717
718 *first = -1;
719 *last = 0;
720
721 if (!node->children)
722 {
723 str = xmlNodeGetContent(node);
724 *trail_ig_ws = *(DWORD*)&node->_private & NODE_PRIV_CHILD_IGNORABLE_WS;
725 }
726 else
727 {
728 BOOL ig_ws = FALSE;
729 xmlChar* tmp;
730 DWORD pos = 0;
731 str = xmlStrdup(BAD_CAST "");
732
733 if (node->type != XML_DOCUMENT_NODE)
734 ig_ws = *(DWORD*)&node->_private & NODE_PRIV_CHILD_IGNORABLE_WS;
735 *trail_ig_ws = FALSE;
736
737 for (child = node->children; child != NULL; child = child->next)
738 {
739 switch (child->type)
740 {
741 case XML_ELEMENT_NODE: {
742 DWORD node_first, node_last;
743
744 tmp = do_get_text(child, FALSE, &node_first, &node_last, trail_ig_ws);
745
746 if (node_first!=-1 && pos+node_first<*first)
747 *first = pos+node_first;
748 if (node_last && pos+node_last>*last)
749 *last = pos+node_last;
750 break;
751 }
752 case XML_TEXT_NODE:
753 tmp = xmlNodeGetContent(child);
754 if (!preserving && tmp[0])
755 {
756 xmlChar *beg;
757
758 for (beg = tmp; *beg; beg++)
759 if (!isspace(*beg)) break;
760
761 if (!*beg)
762 {
763 ig_ws = TRUE;
764 xmlFree(tmp);
765 tmp = NULL;
766 }
767 }
768 break;
769 case XML_CDATA_SECTION_NODE:
770 case XML_ENTITY_REF_NODE:
771 case XML_ENTITY_NODE:
772 tmp = xmlNodeGetContent(child);
773 break;
774 default:
775 tmp = NULL;
776 break;
777 }
778
779 if ((tmp && *tmp) || child->type==XML_CDATA_SECTION_NODE)
780 {
781 if (ig_ws && str[0])
782 {
783 str = xmlStrcat(str, BAD_CAST " ");
784 pos++;
785 }
786 if (tmp && *tmp) str = xmlStrcat(str, tmp);
787 if (child->type==XML_CDATA_SECTION_NODE && pos<*first)
788 *first = pos;
789 if (tmp && *tmp) pos += xmlStrlen(tmp);
790 if (child->type==XML_CDATA_SECTION_NODE && pos>*last)
791 *last = pos;
792 ig_ws = FALSE;
793 }
794 if (tmp) xmlFree(tmp);
795
796 if (!ig_ws)
797 {
798 ig_ws = *(DWORD*)&child->_private & NODE_PRIV_TRAILING_IGNORABLE_WS;
799 }
800 if (!ig_ws)
801 ig_ws = *trail_ig_ws;
802 *trail_ig_ws = FALSE;
803 }
804
805 *trail_ig_ws = ig_ws;
806 }
807
808 switch (node->type)
809 {
810 case XML_ELEMENT_NODE:
811 case XML_TEXT_NODE:
812 case XML_ENTITY_REF_NODE:
813 case XML_ENTITY_NODE:
814 case XML_DOCUMENT_NODE:
815 case XML_DOCUMENT_FRAG_NODE:
816 if (trim && !preserving)
817 {
818 xmlChar* ret;
819 int len;
820
821 if (!str)
822 break;
823
824 for (ret = str; *ret && isspace(*ret) && (*first)--; ret++)
825 if (*last) (*last)--;
826 for (len = xmlStrlen(ret)-1; len >= 0 && len >= *last; len--)
827 if(!isspace(ret[len])) break;
828
829 ret = xmlStrndup(ret, len+1);
830 xmlFree(str);
831 str = ret;
832 break;
833 }
834 break;
835 default:
836 break;
837 }
838
839 return str;
840}
#define isspace(c)
Definition: acclib.h:69
#define TRUE
Definition: types.h:120
BOOL is_preserving_whitespace(xmlNodePtr node)
Definition: domdoc.c:419
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLint * first
Definition: glext.h:5794
GLenum GLsizei len
Definition: glext.h:6722
char * trim(char *str, char **last_chr, BOOL strip_quotes)
Definition: inf.c:258
#define for
Definition: utility.h:88
static UINT UINT last
Definition: font.c:45
static HWND child
Definition: cursoricon.c:298
#define NODE_PRIV_TRAILING_IGNORABLE_WS
#define NODE_PRIV_CHILD_IGNORABLE_WS
static xmlChar * do_get_text(xmlNodePtr node, BOOL trim, DWORD *first, DWORD *last, BOOL *trail_ig_ws)
Definition: node.c:712
const WCHAR * str
xmlFreeFunc xmlFree
Definition: globals.c:184
XMLPUBFUN xmlChar * xmlStrndup(const xmlChar *cur, int len)
Definition: xmlstring.c:45
XMLPUBFUN int xmlStrlen(const xmlChar *str)
Definition: xmlstring.c:428
XMLPUBFUN xmlChar * xmlStrcat(xmlChar *cur, const xmlChar *add)
Definition: xmlstring.c:524
#define BAD_CAST
Definition: xmlstring.h:35
unsigned char xmlChar
Definition: xmlstring.h:28
XMLPUBFUN xmlChar * xmlStrdup(const xmlChar *cur)
Definition: xmlstring.c:69

Referenced by do_get_text(), and node_get_text().

◆ EnsureCorrectEOL()

BSTR EnsureCorrectEOL ( BSTR  sInput)

Definition at line 885 of file node.c.

886{
887 int nNum = 0;
888 BSTR sNew;
889 int nLen;
890 int i;
891
892 nLen = SysStringLen(sInput);
893 /* Count line endings */
894 for(i=0; i < nLen; i++)
895 {
896 if(sInput[i] == '\n')
897 nNum++;
898 }
899
900 TRACE("len=%d, num=%d\n", nLen, nNum);
901
902 /* Add linefeed as needed */
903 if(nNum > 0)
904 {
905 int nPlace = 0;
906 sNew = SysAllocStringLen(NULL, nLen + nNum);
907 for(i=0; i < nLen; i++)
908 {
909 if(sInput[i] == '\n')
910 {
911 sNew[i+nPlace] = '\r';
912 nPlace++;
913 }
914 sNew[i+nPlace] = sInput[i];
915 }
916
917 SysFreeString(sInput);
918 }
919 else
920 {
921 sNew = sInput;
922 }
923
924 TRACE("len %d\n", SysStringLen(sNew));
925
926 return sNew;
927}
OLECHAR * BSTR
Definition: compat.h:2293
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339

Referenced by domdoc_get_xml(), and node_get_xml().

◆ get_node()

static HRESULT get_node ( xmlnode This,
const char name,
xmlNodePtr  node,
IXMLDOMNode **  out 
)
static

Definition at line 327 of file node.c.

332{
333 TRACE("(%p)->(%s %p %p)\n", This, name, node, out );
334
335 if ( !out )
336 return E_INVALIDARG;
337
338 /* if we don't have a doc, use our parent. */
339 if(node && !node->doc && node->parent)
340 node->doc = node->parent->doc;
341
342 *out = create_node( node );
343 if (!*out)
344 return S_FALSE;
345 return S_OK;
346}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define S_OK
Definition: intsafe.h:52
IXMLDOMNode * create_node(xmlNodePtr node)
Definition: node.c:2225
Definition: name.c:39
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define S_FALSE
Definition: winerror.h:3451

Referenced by node_get_first_child(), node_get_last_child(), node_get_next_sibling(), node_get_parent(), and node_get_previous_sibling().

◆ get_node_obj()

xmlnode * get_node_obj ( IXMLDOMNode node)

Definition at line 168 of file node.c.

169{
170 xmlnode *obj = NULL;
172
173 hres = IXMLDOMNode_QueryInterface(node, &IID_xmlnode, (void**)&obj);
174 if (!obj) WARN("node is not our IXMLDOMNode implementation\n");
175 return SUCCEEDED(hres) ? obj : NULL;
176}
#define WARN(fmt,...)
Definition: precomp.h:61
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT hres
Definition: protocol.c:465
static const IID IID_xmlnode
Definition: node.c:50

Referenced by node_insert_before(), node_remove_child(), node_replace_child(), node_transform_node_params(), and xmlNodePtr_from_domnode().

◆ htmldoc_dumpcontent()

static void htmldoc_dumpcontent ( xmlOutputBufferPtr  buf,
xmlDocPtr  doc,
const char encoding,
int  format 
)
static

Definition at line 1150 of file node.c.

1151{
1152 xmlElementType type;
1153
1154 /* force HTML output */
1155 type = doc->type;
1156 doc->type = XML_HTML_DOCUMENT_NODE;
1157 if (doc->intSubset)
1159 if (doc->children) {
1160 xmlNodePtr cur = doc->children;
1161 while (cur) {
1162 htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
1163 cur = cur->next;
1164 }
1165 }
1166 doc->type = type;
1167}
FxCollectionEntry * cur
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static void htmldtd_dumpcontent(xmlOutputBufferPtr buf, xmlDocPtr doc)
Definition: node.c:1125
Definition: format.c:58

Referenced by node_transform_write().

◆ htmldtd_dumpcontent()

static void htmldtd_dumpcontent ( xmlOutputBufferPtr  buf,
xmlDocPtr  doc 
)
static

Definition at line 1125 of file node.c.

1126{
1127 xmlDtdPtr cur = doc->intSubset;
1128
1129 xmlOutputBufferWriteString(buf, "<!DOCTYPE ");
1130 xmlOutputBufferWriteString(buf, (const char *)cur->name);
1131 if (cur->ExternalID)
1132 {
1133 xmlOutputBufferWriteString(buf, " PUBLIC ");
1134 xml_write_quotedstring(buf, cur->ExternalID);
1135 if (cur->SystemID)
1136 {
1137 xmlOutputBufferWriteString(buf, " ");
1138 xml_write_quotedstring(buf, cur->SystemID);
1139 }
1140 }
1141 else if (cur->SystemID)
1142 {
1143 xmlOutputBufferWriteString(buf, " SYSTEM ");
1144 xml_write_quotedstring(buf, cur->SystemID);
1145 }
1146 xmlOutputBufferWriteString(buf, ">\n");
1147}
static void xml_write_quotedstring(xmlOutputBufferPtr buf, const xmlChar *string)
Definition: node.c:976

Referenced by htmldoc_dumpcontent().

◆ impl_from_ISupportErrorInfo()

static SupportErrorInfo * impl_from_ISupportErrorInfo ( ISupportErrorInfo iface)
inlinestatic

Definition at line 85 of file node.c.

86{
87 return CONTAINING_RECORD(iface, SupportErrorInfo, ISupportErrorInfo_iface);
88}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by SupportErrorInfo_AddRef(), SupportErrorInfo_InterfaceSupportsErrorInfo(), SupportErrorInfo_QueryInterface(), and SupportErrorInfo_Release().

◆ import_loader_io_close()

static int XMLCALL import_loader_io_close ( void context)
static

Definition at line 1320 of file node.c.

1321{
1322 struct import_buffer *buffer = (struct import_buffer *)context;
1323
1324 TRACE("%p\n", context);
1325
1326 free(buffer->data);
1327 free(buffer);
1328 return 0;
1329}
#define free
Definition: debug_ros.c:5
GLuint buffer
Definition: glext.h:5915
Definition: http.c:7252

Referenced by import_loader_onDataAvailable().

◆ import_loader_io_read()

static int XMLCALL import_loader_io_read ( void context,
char out,
int  len 
)
static

Definition at line 1302 of file node.c.

1303{
1304 struct import_buffer *buffer = (struct import_buffer *)context;
1305
1306 TRACE("%p, %p, %d\n", context, out, len);
1307
1308 if (buffer->cur == buffer->len)
1309 return 0;
1310
1311 len = min(len, buffer->len - buffer->cur);
1312 memcpy(out, &buffer->data[buffer->cur], len);
1313 buffer->cur += len;
1314
1315 TRACE("read %d\n", len);
1316
1317 return len;
1318}
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define min(a, b)
Definition: monoChain.cc:55

Referenced by import_loader_onDataAvailable().

◆ import_loader_onDataAvailable()

static HRESULT import_loader_onDataAvailable ( void ctxt,
char ptr,
DWORD  len 
)
static

Definition at line 1331 of file node.c.

1332{
1333 xmlParserInputPtr *input = (xmlParserInputPtr *)ctxt;
1334 xmlParserInputBufferPtr inputbuffer;
1335 struct import_buffer *buffer;
1336
1337 buffer = malloc(sizeof(*buffer));
1338
1339 buffer->data = malloc(len);
1340 memcpy(buffer->data, ptr, len);
1341 buffer->cur = 0;
1342 buffer->len = len;
1343
1347 if (!*input)
1348 xmlFreeParserInputBuffer(inputbuffer);
1349
1350 return *input ? S_OK : E_FAIL;
1351}
#define E_FAIL
Definition: ddrawi.h:102
@ XML_CHAR_ENCODING_NONE
Definition: encoding.h:67
GLenum GLenum GLenum input
Definition: glext.h:9031
static PVOID ptr
Definition: dispmode.c:27
static int XMLCALL import_loader_io_read(void *context, char *out, int len)
Definition: node.c:1302
static int XMLCALL import_loader_io_close(void *context)
Definition: node.c:1320
XMLPUBFUN xmlParserInputPtr xmlNewIOInputStream(xmlParserCtxtPtr ctxt, xmlParserInputBufferPtr input, xmlCharEncoding enc)
XMLPUBFUN void xmlFreeParserInputBuffer(xmlParserInputBufferPtr in)
XMLPUBFUN xmlParserInputBufferPtr xmlParserInputBufferCreateIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose, void *ioctx, xmlCharEncoding enc)

Referenced by xslt_doc_default_loader().

◆ init_xmlnode()

void init_xmlnode ( xmlnode This,
xmlNodePtr  node,
IXMLDOMNode node_iface,
dispex_static_data_t dispex_data 
)

Definition at line 1647 of file node.c.

1648{
1649 if(node)
1650 {
1652 xmldoc_add_ref(node->doc);
1653 }
1654
1655 This->node = node;
1656 This->iface = node_iface;
1657 This->parent = NULL;
1658
1659 init_dispex(&This->dispex, (IUnknown*)This->iface, dispex_data);
1660}
LONG xmldoc_add_ref(xmlDocPtr doc)
Definition: domdoc.c:619
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:919
void xmlnode_add_ref(xmlNodePtr node)
Definition: node.c:420

Referenced by create_attribute(), create_cdata(), create_comment(), create_doc_entity_ref(), create_doc_fragment(), create_doc_type(), create_element(), create_node(), create_pi(), create_text(), and get_domdoc_from_xmldoc().

◆ node_append_child()

HRESULT node_append_child ( xmlnode This,
IXMLDOMNode child,
IXMLDOMNode **  outChild 
)

Definition at line 639 of file node.c.

640{
642 VARIANT var;
643 HRESULT hr;
644
645 if (!child)
646 return E_INVALIDARG;
647
648 hr = IXMLDOMNode_get_nodeType(child, &type);
649 if(FAILED(hr) || type == NODE_ATTRIBUTE) {
650 if (outChild) *outChild = NULL;
651 return E_FAIL;
652 }
653
655 return IXMLDOMNode_insertBefore(This->iface, child, var, outChild);
656}
const char * var
Definition: shader.c:5666
enum tagDOMNodeType DOMNodeType
@ NODE_ATTRIBUTE
Definition: msxml6.idl:114
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568

Referenced by dom_pi_appendChild(), domattr_appendChild(), domcomment_appendChild(), domdoc_appendChild(), domelem_appendChild(), domfrag_appendChild(), domtext_appendChild(), entityref_appendChild(), and unknode_appendChild().

◆ node_clone()

HRESULT node_clone ( xmlnode This,
VARIANT_BOOL  deep,
IXMLDOMNode **  cloneNode 
)

Definition at line 679 of file node.c.

680{
682 xmlNodePtr clone;
683
684 if(!cloneNode) return E_INVALIDARG;
685
686 clone = xmlCopyNode(This->node, deep ? 1 : 2);
687 if (clone)
688 {
689 xmlSetTreeDoc(clone, This->node->doc);
690 xmldoc_add_orphan(clone->doc, clone);
691
692 node = create_node(clone);
693 if (!node)
694 {
695 ERR("Copy failed\n");
696 xmldoc_remove_orphan(clone->doc, clone);
697 xmlFreeNode(clone);
698 return E_FAIL;
699 }
700
701 *cloneNode = node;
702 }
703 else
704 {
705 ERR("Copy failed\n");
706 return E_FAIL;
707 }
708
709 return S_OK;
710}
HRESULT xmldoc_remove_orphan(xmlDocPtr doc, xmlNodePtr node)
Definition: domdoc.c:672
HRESULT xmldoc_add_orphan(xmlDocPtr doc, xmlNodePtr node)
Definition: domdoc.c:658

Referenced by dom_pi_cloneNode(), domattr_cloneNode(), domcdata_cloneNode(), domcomment_cloneNode(), domelem_cloneNode(), domfrag_cloneNode(), domtext_cloneNode(), entityref_cloneNode(), test_cloneNode(), test_validate_on_parse_values(), and unknode_cloneNode().

◆ node_create_supporterrorinfo()

HRESULT node_create_supporterrorinfo ( enum tid_t const iids,
void **  obj 
)

Definition at line 152 of file node.c.

153{
155
156 This = malloc(sizeof(*This));
157 if (!This) return E_OUTOFMEMORY;
158
159 This->ISupportErrorInfo_iface.lpVtbl = &SupportErrorInfoVtbl;
160 This->ref = 1;
161 This->iids = iids;
162
163 *obj = &This->ISupportErrorInfo_iface;
164
165 return S_OK;
166}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static const struct ISupportErrorInfoVtbl SupportErrorInfoVtbl
Definition: node.c:145

◆ node_get_base_name()

HRESULT node_get_base_name ( xmlnode This,
BSTR name 
)

Definition at line 1622 of file node.c.

1623{
1624 if (!name) return E_INVALIDARG;
1625
1626 if (xmldoc_version(This->node->doc) != MSXML6 &&
1627 xmlStrEqual(This->node->name, BAD_CAST "xmlns"))
1628 *name = SysAllocString(L"");
1629 else
1630 *name = bstr_from_xmlChar(This->node->name);
1631 if (!*name) return E_OUTOFMEMORY;
1632
1633 TRACE("returning %s\n", debugstr_w(*name));
1634
1635 return S_OK;
1636}
MSXML_VERSION xmldoc_version(xmlDocPtr doc)
Definition: domdoc.c:414
#define L(x)
Definition: resources.c:13
#define debugstr_w
Definition: kernel32.h:32
@ MSXML6
Definition: msxml_dispex.h:33
static BSTR bstr_from_xmlChar(const xmlChar *str)
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
XMLPUBFUN int xmlStrEqual(const xmlChar *str1, const xmlChar *str2)
Definition: xmlstring.c:162

Referenced by dom_pi_get_baseName(), domattr_get_baseName(), domelem_get_baseName(), node_get_nodeName(), and unknode_get_baseName().

◆ node_get_child_nodes()

HRESULT node_get_child_nodes ( xmlnode This,
IXMLDOMNodeList **  ret 
)

◆ node_get_content()

HRESULT node_get_content ( xmlnode This,
VARIANT value 
)

Definition at line 225 of file node.c.

226{
228
229 if(!value)
230 return E_INVALIDARG;
231
232 content = xmlNodeGetContent(This->node);
233 V_VT(value) = VT_BSTR;
236
237 TRACE("%p returned %s\n", This, debugstr_w(V_BSTR(value)));
238 return S_OK;
239}
content
Definition: atl_ax.c:994
@ VT_BSTR
Definition: compat.h:2303
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
Definition: pdh_main.c:96

Referenced by dom_pi_get_nodeTypedValue(), dom_pi_get_nodeValue(), domattr_get_nodeValue(), domattr_get_value(), domcdata_get_nodeTypedValue(), domcdata_get_nodeValue(), domcomment_get_nodeTypedValue(), domcomment_get_nodeValue(), and domtext_get_nodeValue().

◆ node_get_first_child()

HRESULT node_get_first_child ( xmlnode This,
IXMLDOMNode **  ret 
)

Definition at line 365 of file node.c.

366{
367 return get_node(This, "firstChild", This->node->children, ret);
368}
static HRESULT get_node(xmlnode *This, const char *name, xmlNodePtr node, IXMLDOMNode **out)
Definition: node.c:327

Referenced by domattr_get_firstChild(), domdoc_get_firstChild(), domelem_get_firstChild(), domfrag_get_firstChild(), entityref_get_firstChild(), and unknode_get_firstChild().

◆ node_get_inst_cnt()

static int node_get_inst_cnt ( xmlNodePtr  node)
static

Definition at line 385 of file node.c.

386{
387 int ret = *(LONG *)&node->_private & NODE_PRIV_REFCOUNT_MASK;
388 xmlNodePtr child;
389
390 /* add attribute counts */
391 if (node->type == XML_ELEMENT_NODE)
392 {
393 xmlAttrPtr prop = node->properties;
394
395 while (prop)
396 {
397 ret += node_get_inst_cnt((xmlNodePtr)prop);
398 prop = prop->next;
399 }
400 }
401
402 /* add children counts */
403 child = node->children;
404 while (child)
405 {
407 child = child->next;
408 }
409
410 return ret;
411}
if(dx< 0)
Definition: linetemp.h:194
#define NODE_PRIV_REFCOUNT_MASK
static int node_get_inst_cnt(xmlNodePtr node)
Definition: node.c:385
long LONG
Definition: pedump.c:60

Referenced by node_get_inst_cnt(), and xmlnode_get_inst_cnt().

◆ node_get_last_child()

HRESULT node_get_last_child ( xmlnode This,
IXMLDOMNode **  ret 
)

Definition at line 370 of file node.c.

371{
372 return get_node(This, "lastChild", This->node->last, ret);
373}

Referenced by domattr_get_lastChild(), domdoc_get_lastChild(), domelem_get_lastChild(), domfrag_get_lastChild(), entityref_get_lastChild(), and unknode_get_lastChild().

◆ node_get_namespaceURI()

HRESULT node_get_namespaceURI ( xmlnode This,
BSTR namespaceURI 
)

Definition at line 1589 of file node.c.

1590{
1591 xmlNsPtr ns = This->node->ns;
1592
1593 if(!namespaceURI)
1594 return E_INVALIDARG;
1595
1596 *namespaceURI = NULL;
1597
1598 if (ns && ns->href)
1599 *namespaceURI = bstr_from_xmlChar(ns->href);
1600
1601 TRACE("uri: %s\n", debugstr_w(*namespaceURI));
1602
1603 return *namespaceURI ? S_OK : S_FALSE;
1604}
Definition: mxnamespace.c:38

Referenced by dom_pi_get_namespaceURI(), domcdata_get_namespaceURI(), domcomment_get_namespaceURI(), domelem_get_namespaceURI(), domfrag_get_namespaceURI(), domtext_get_namespaceURI(), entityref_get_namespaceURI(), and unknode_get_namespaceURI().

◆ node_get_next_sibling()

HRESULT node_get_next_sibling ( xmlnode This,
IXMLDOMNode **  ret 
)

◆ node_get_nodeName()

HRESULT node_get_nodeName ( xmlnode This,
BSTR name 
)

Definition at line 178 of file node.c.

179{
181 HRESULT hr;
182
183 if (!name)
184 return E_INVALIDARG;
185
187 if (hr != S_OK) return hr;
188
189 if (!base[0] && xmldoc_version(This->node->doc) != MSXML6)
190 {
192 *name = SysAllocString(L"xmlns");
193 return S_OK;
194 }
195
197 if (hr == S_OK)
198 {
199 static const WCHAR colW = ':';
200 WCHAR *ptr;
201
202 /* +1 for ':' */
205 {
208 }
210 {
212 memcpy(ptr++, &colW, sizeof(WCHAR));
214 }
215
218 }
219 else
220 *name = base;
221
222 return S_OK;
223}
HRESULT node_get_base_name(xmlnode *This, BSTR *name)
Definition: node.c:1622
HRESULT node_get_prefix(xmlnode *This, BSTR *prefix)
Definition: node.c:1606
UINT WINAPI SysStringByteLen(BSTR str)
Definition: oleaut.c:215
Character const *const prefix
Definition: tempnam.cpp:195
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by dom_pi_get_attributes(), dom_pi_get_nodeName(), dom_pi_get_target(), dom_pi_put_xml_decl(), domattr_get_name(), domattr_get_nodeName(), domdoctype_get_name(), domdoctype_get_nodeName(), domelem_get_nodeName(), entityref_get_nodeName(), unknode_get_nodeName(), and unknode_get_nodeTypeString().

◆ node_get_owner_doc()

HRESULT node_get_owner_doc ( const xmlnode This,
IXMLDOMDocument **  doc 
)

◆ node_get_parent()

HRESULT node_get_parent ( xmlnode This,
IXMLDOMNode **  parent 
)

◆ node_get_prefix()

HRESULT node_get_prefix ( xmlnode This,
BSTR prefix 
)

Definition at line 1606 of file node.c.

1607{
1608 xmlNsPtr ns = This->node->ns;
1609
1610 if (!prefix) return E_INVALIDARG;
1611
1612 *prefix = NULL;
1613
1614 if (ns && ns->prefix)
1616
1617 TRACE("prefix: %s\n", debugstr_w(*prefix));
1618
1619 return *prefix ? S_OK : S_FALSE;
1620}
BSTR prefix
Definition: mxnamespace.c:39

Referenced by domelem_get_prefix(), node_get_nodeName(), and unknode_get_prefix().

◆ node_get_previous_sibling()

◆ node_get_text()

HRESULT node_get_text ( const xmlnode This,
BSTR text 
)

Definition at line 842 of file node.c.

843{
844 BSTR str = NULL;
847 BOOL tmp;
848
849 if (!text) return E_INVALIDARG;
850
851 content = do_get_text(This->node, TRUE, &first, &last, &tmp);
852 if (content)
853 {
856 }
857
858 /* Always return a string. */
859 if (!str) str = SysAllocStringLen( NULL, 0 );
860
861 TRACE("%p %s\n", This, debugstr_w(str) );
862 *text = str;
863
864 return S_OK;
865}
const WCHAR * text
Definition: package.c:1794

Referenced by dom_pi_get_text(), domattr_get_text(), domcdata_get_text(), domcomment_get_text(), domdoc_get_text(), domelem_get_nodeTypedValue(), domelem_get_text(), domfrag_get_text(), domtext_get_text(), entityref_get_text(), and unknode_get_text().

◆ node_get_xml()

HRESULT node_get_xml ( xmlnode This,
BOOL  ensure_eol,
BSTR ret 
)

Definition at line 936 of file node.c.

937{
938 xmlBufferPtr xml_buf;
939 xmlNodePtr xmldecl;
940 int size;
941
942 if(!ret)
943 return E_INVALIDARG;
944
945 *ret = NULL;
946
947 xml_buf = xmlBufferCreate();
948 if(!xml_buf)
949 return E_OUTOFMEMORY;
950
951 xmldecl = xmldoc_unlink_xmldecl( This->node->doc );
952
953 size = xmlNodeDump(xml_buf, This->node->doc, This->node, 0, 1);
954 if(size > 0) {
955 const xmlChar *buf_content;
957
958 /* Attribute Nodes return a space in front of their name */
959 buf_content = xmlBufferContent(xml_buf);
960
961 content = bstr_from_xmlChar(buf_content + (buf_content[0] == ' ' ? 1 : 0));
962 if(ensure_eol)
964
965 *ret = content;
966 }else {
968 }
969
970 xmlBufferFree(xml_buf);
971 xmldoc_link_xmldecl( This->node->doc, xmldecl );
972 return *ret ? S_OK : E_OUTOFMEMORY;
973}
void xmldoc_link_xmldecl(xmlDocPtr doc, xmlNodePtr node)
Definition: domdoc.c:386
xmlNodePtr xmldoc_unlink_xmldecl(xmlDocPtr doc)
Definition: domdoc.c:393
GLsizeiptr size
Definition: glext.h:5919
BSTR EnsureCorrectEOL(BSTR sInput)
Definition: node.c:885

Referenced by dom_pi_get_xml(), domattr_get_xml(), domcdata_get_xml(), domcomment_get_xml(), domelem_get_xml(), domfrag_get_xml(), domtext_get_xml(), entityref_get_xml(), and unknode_get_xml().

◆ node_has_childnodes()

HRESULT node_has_childnodes ( const xmlnode This,
VARIANT_BOOL ret 
)

Definition at line 658 of file node.c.

659{
660 if (!ret) return E_INVALIDARG;
661
662 if (!This->node->children)
663 {
664 *ret = VARIANT_FALSE;
665 return S_FALSE;
666 }
667
668 *ret = VARIANT_TRUE;
669 return S_OK;
670}

Referenced by dom_pi_hasChildNodes(), domattr_hasChildNodes(), domdoc_hasChildNodes(), domelem_hasChildNodes(), domfrag_hasChildNodes(), entityref_hasChildNodes(), and unknode_hasChildNodes().

◆ node_insert_before()

HRESULT node_insert_before ( xmlnode This,
IXMLDOMNode new_child,
const VARIANT ref_child,
IXMLDOMNode **  ret 
)

Definition at line 432 of file node.c.

434{
436 xmlnode *node_obj;
437 int refcount = 0;
438 xmlDocPtr doc;
439 HRESULT hr;
440
441 if(!new_child)
442 return E_INVALIDARG;
443
444 node_obj = get_node_obj(new_child);
445 if(!node_obj) return E_FAIL;
446
447 switch(V_VT(ref_child))
448 {
449 case VT_EMPTY:
450 case VT_NULL:
451 break;
452
453 case VT_UNKNOWN:
454 case VT_DISPATCH:
455 if (V_UNKNOWN(ref_child))
456 {
457 hr = IUnknown_QueryInterface(V_UNKNOWN(ref_child), &IID_IXMLDOMNode, (void**)&before);
458 if(FAILED(hr)) return hr;
459 }
460 break;
461
462 default:
463 FIXME("refChild var type %x\n", V_VT(ref_child));
464 return E_FAIL;
465 }
466
467 TRACE("new child %p, This->node %p\n", node_obj->node, This->node);
468
469 if(!node_obj->node->parent)
470 if(xmldoc_remove_orphan(node_obj->node->doc, node_obj->node) != S_OK)
471 WARN("%p is not an orphan of %p\n", node_obj->node, node_obj->node->doc);
472
473 refcount = xmlnode_get_inst_cnt(node_obj);
474
475 if(before)
476 {
477 xmlnode *before_node_obj = get_node_obj(before);
478 IXMLDOMNode_Release(before);
479 if(!before_node_obj) return E_FAIL;
480 }
481
482 /* unlink from current parent first */
483 if(node_obj->parent)
484 {
485 hr = IXMLDOMNode_removeChild(node_obj->parent, node_obj->iface, NULL);
486 if (hr == S_OK) xmldoc_remove_orphan(node_obj->node->doc, node_obj->node);
487 }
488 doc = node_obj->node->doc;
489
490 if(before)
491 {
492 xmlNodePtr new_node;
493 xmlnode *before_node_obj = get_node_obj(before);
494
495 /* refs count including subtree */
496 if (doc != before_node_obj->node->doc)
497 refcount = xmlnode_get_inst_cnt(node_obj);
498
499 if (refcount) xmldoc_add_refs(before_node_obj->node->doc, refcount);
500 new_node = xmlAddPrevSibling(before_node_obj->node, node_obj->node);
501 if (new_node != node_obj->node)
502 {
503 if (refcount != 1)
504 FIXME("referenced xmlNode was freed, expect crashes\n");
505 xmlnode_add_ref(new_node);
506 node_obj->node = new_node;
507 }
508 if (refcount) xmldoc_release_refs(doc, refcount);
509 node_obj->parent = This->parent;
510 }
511 else
512 {
513 xmlNodePtr new_node;
514
515 if (doc != This->node->doc)
516 refcount = xmlnode_get_inst_cnt(node_obj);
517
518 if (refcount) xmldoc_add_refs(This->node->doc, refcount);
519 /* xmlAddChild doesn't unlink node from previous parent */
520 xmlUnlinkNode(node_obj->node);
521 new_node = xmlAddChild(This->node, node_obj->node);
522 if (new_node != node_obj->node)
523 {
524 if (refcount != 1)
525 FIXME("referenced xmlNode was freed, expect crashes\n");
526 xmlnode_add_ref(new_node);
527 node_obj->node = new_node;
528 }
529 if (refcount) xmldoc_release_refs(doc, refcount);
530 node_obj->parent = This->iface;
531 }
532
533 if(ret)
534 {
535 IXMLDOMNode_AddRef(new_child);
536 *ret = new_child;
537 }
538
539 TRACE("ret S_OK\n");
540 return S_OK;
541}
@ VT_NULL
Definition: compat.h:2296
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
LONG xmldoc_release_refs(xmlDocPtr doc, LONG refs)
Definition: domdoc.c:624
LONG xmldoc_add_refs(xmlDocPtr doc, LONG refs)
Definition: domdoc.c:612
xmlnode * get_node_obj(IXMLDOMNode *node)
Definition: node.c:168
int xmlnode_get_inst_cnt(xmlnode *node)
Definition: node.c:413
#define V_UNKNOWN(A)
Definition: oleauto.h:281
IXMLDOMNode * parent
IXMLDOMNode * iface
xmlNodePtr node
__inline int before(__u32 seq1, __u32 seq2)
Definition: tcpcore.h:2390

Referenced by dom_pi_insertBefore(), domattr_insertBefore(), domcomment_insertBefore(), domdoc_insertBefore(), domelem_insertBefore(), domfrag_insertBefore(), domtext_insertBefore(), entityref_insertBefore(), and unknode_insertBefore().

◆ node_put_text()

HRESULT node_put_text ( xmlnode This,
BSTR  text 
)

Definition at line 867 of file node.c.

868{
869 xmlChar *str, *str2;
870
871 TRACE("(%p)->(%s)\n", This, debugstr_w(text));
872
874
875 /* Escape the string. */
877 free(str);
878
879 xmlNodeSetContent(This->node, str2);
880 xmlFree(str2);
881
882 return S_OK;
883}
XMLPUBFUN xmlChar * xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input)
static xmlChar * xmlchar_from_wchar(const WCHAR *str)
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
Definition: parser.h:35

Referenced by dom_pi_put_text(), domattr_put_text(), domcdata_put_text(), domcomment_put_text(), domelem_put_text(), domfrag_put_text(), domtext_put_text(), entityref_put_text(), and unknode_put_text().

◆ node_put_value()

HRESULT node_put_value ( xmlnode This,
VARIANT value 
)

Definition at line 279 of file node.c.

280{
281 HRESULT hr;
282
283 if (V_VT(value) != VT_BSTR)
284 {
285 VARIANT string_value;
286
287 VariantInit(&string_value);
288 hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
289 if(FAILED(hr)) {
290 WARN("Couldn't convert to VT_BSTR\n");
291 return hr;
292 }
293
294 hr = node_set_content(This, V_BSTR(&string_value));
295 VariantClear(&string_value);
296 }
297 else
299
300 return hr;
301}
HRESULT node_set_content(xmlnode *This, LPCWSTR value)
Definition: node.c:241
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:962
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by dom_pi_put_nodeValue(), domcdata_put_nodeValue(), domcomment_put_nodeValue(), and domtext_put_nodeValue().

◆ node_put_value_escaped()

HRESULT node_put_value_escaped ( xmlnode This,
VARIANT value 
)

Definition at line 303 of file node.c.

304{
305 HRESULT hr;
306
307 if (V_VT(value) != VT_BSTR)
308 {
309 VARIANT string_value;
310
311 VariantInit(&string_value);
312 hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
313 if(FAILED(hr)) {
314 WARN("Couldn't convert to VT_BSTR\n");
315 return hr;
316 }
317
318 hr = node_set_content_escaped(This, V_BSTR(&string_value));
319 VariantClear(&string_value);
320 }
321 else
323
324 return hr;
325}
static HRESULT node_set_content_escaped(xmlnode *This, LPCWSTR value)
Definition: node.c:255

Referenced by domattr_put_nodeValue(), and domattr_put_value().

◆ node_query_interface()

BOOL node_query_interface ( xmlnode This,
REFIID  riid,
void **  ppv 
)

Definition at line 66 of file node.c.

67{
69 TRACE("(%p)->(IID_xmlnode %p)\n", This, ppv);
70 *ppv = This;
71 return TRUE;
72 }
73
74 return dispex_query_interface(&This->dispex, riid, ppv);
75}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
Definition: dispex.c:1656
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147

Referenced by dom_pi_QueryInterface(), domattr_QueryInterface(), domcdata_QueryInterface(), domcomment_QueryInterface(), domdoc_QueryInterface(), domdoctype_QueryInterface(), domelem_QueryInterface(), domfrag_QueryInterface(), domtext_QueryInterface(), entityref_QueryInterface(), and unknode_QueryInterface().

◆ node_remove_child()

HRESULT node_remove_child ( xmlnode This,
IXMLDOMNode child,
IXMLDOMNode **  oldChild 
)

Definition at line 608 of file node.c.

609{
610 xmlnode *child_node;
611
612 if(!child) return E_INVALIDARG;
613
614 if(oldChild)
615 *oldChild = NULL;
616
617 child_node = get_node_obj(child);
618 if(!child_node) return E_FAIL;
619
620 if(child_node->node->parent != This->node)
621 {
622 WARN("childNode %p is not a child of %p\n", child, This);
623 return E_INVALIDARG;
624 }
625
626 xmlUnlinkNode(child_node->node);
627 child_node->parent = NULL;
628 xmldoc_add_orphan(child_node->node->doc, child_node->node);
629
630 if(oldChild)
631 {
632 IXMLDOMNode_AddRef(child);
633 *oldChild = child;
634 }
635
636 return S_OK;
637}

Referenced by dom_pi_removeChild(), domattr_removeChild(), domcomment_removeChild(), domdoc_removeChild(), domelem_removeChild(), domfrag_removeChild(), domtext_removeChild(), entityref_removeChild(), and unknode_removeChild().

◆ node_replace_child()

HRESULT node_replace_child ( xmlnode This,
IXMLDOMNode newChild,
IXMLDOMNode oldChild,
IXMLDOMNode **  ret 
)

Definition at line 543 of file node.c.

545{
546 xmlnode *old_child, *new_child;
547 xmlDocPtr leaving_doc;
548 xmlNode *my_ancestor;
549 int refcount = 0;
550
551 /* Do not believe any documentation telling that newChild == NULL
552 means removal. It does certainly *not* apply to msxml3! */
553 if(!newChild || !oldChild)
554 return E_INVALIDARG;
555
556 if(ret)
557 *ret = NULL;
558
559 old_child = get_node_obj(oldChild);
560 if(!old_child) return E_FAIL;
561
562 if(old_child->node->parent != This->node)
563 {
564 WARN("childNode %p is not a child of %p\n", oldChild, This);
565 return E_INVALIDARG;
566 }
567
568 new_child = get_node_obj(newChild);
569 if(!new_child) return E_FAIL;
570
571 my_ancestor = This->node;
572 while(my_ancestor)
573 {
574 if(my_ancestor == new_child->node)
575 {
576 WARN("tried to create loop\n");
577 return E_FAIL;
578 }
579 my_ancestor = my_ancestor->parent;
580 }
581
582 if(!new_child->node->parent)
583 if(xmldoc_remove_orphan(new_child->node->doc, new_child->node) != S_OK)
584 WARN("%p is not an orphan of %p\n", new_child->node, new_child->node->doc);
585
586 leaving_doc = new_child->node->doc;
587
588 if (leaving_doc != old_child->node->doc)
589 refcount = xmlnode_get_inst_cnt(new_child);
590
591 if (refcount) xmldoc_add_refs(old_child->node->doc, refcount);
592 xmlReplaceNode(old_child->node, new_child->node);
593 if (refcount) xmldoc_release_refs(leaving_doc, refcount);
594 new_child->parent = old_child->parent;
595 old_child->parent = NULL;
596
597 xmldoc_add_orphan(old_child->node->doc, old_child->node);
598
599 if(ret)
600 {
601 IXMLDOMNode_AddRef(oldChild);
602 *ret = oldChild;
603 }
604
605 return S_OK;
606}

Referenced by dom_pi_replaceChild(), domattr_replaceChild(), domcomment_replaceChild(), domdoc_replaceChild(), domelem_replaceChild(), domfrag_replaceChild(), domtext_replaceChild(), entityref_replaceChild(), and unknode_replaceChild().

◆ node_select_nodes()

HRESULT node_select_nodes ( const xmlnode This,
BSTR  query,
IXMLDOMNodeList **  nodes 
)

Definition at line 1558 of file node.c.

1559{
1560 xmlChar* str;
1561 HRESULT hr;
1562
1563 if (!query || !nodes) return E_INVALIDARG;
1564
1566 hr = create_selection(This->node, str, nodes);
1567 free(str);
1568
1569 return hr;
1570}
HRESULT create_selection(xmlNodePtr, xmlChar *, IXMLDOMNodeList **)
Definition: selection.c:764

Referenced by dom_pi_selectNodes(), domattr_selectNodes(), domcdata_selectNodes(), domcomment_selectNodes(), domdoc_selectNodes(), domelem_selectNodes(), domfrag_selectNodes(), domtext_selectNodes(), entityref_selectNodes(), node_select_singlenode(), and unknode_selectNodes().

◆ node_select_singlenode()

HRESULT node_select_singlenode ( const xmlnode This,
BSTR  query,
IXMLDOMNode **  node 
)

Definition at line 1572 of file node.c.

1573{
1575 HRESULT hr;
1576
1577 if (node)
1578 *node = NULL;
1579
1581 if (hr == S_OK)
1582 {
1583 hr = IXMLDOMNodeList_nextNode(list, node);
1584 IXMLDOMNodeList_Release(list);
1585 }
1586 return hr;
1587}
Definition: list.h:37
HRESULT node_select_nodes(const xmlnode *This, BSTR query, IXMLDOMNodeList **nodes)
Definition: node.c:1558
#define list
Definition: rosglue.h:35

Referenced by dom_pi_selectSingleNode(), domattr_selectSingleNode(), domcdata_selectSingleNode(), domcomment_selectSingleNode(), domdoc_selectSingleNode(), domelem_selectSingleNode(), domfrag_selectSingleNode(), domtext_selectSingleNode(), entityref_selectSingleNode(), and unknode_selectSingleNode().

◆ node_set_content()

HRESULT node_set_content ( xmlnode This,
LPCWSTR  value 
)

Definition at line 241 of file node.c.

242{
243 xmlChar *str;
244
245 TRACE("(%p)->(%s)\n", This, debugstr_w(value));
247 if(!str)
248 return E_OUTOFMEMORY;
249
250 xmlNodeSetContent(This->node, str);
251 free(str);
252 return S_OK;
253}

Referenced by dom_pi_put_data(), dom_pi_put_xml_decl(), domcdata_put_data(), domcomment_put_data(), domelem_put_nodeTypedValue(), domtext_put_data(), and node_put_value().

◆ node_set_content_escaped()

static HRESULT node_set_content_escaped ( xmlnode This,
LPCWSTR  value 
)
static

Definition at line 255 of file node.c.

256{
257 xmlChar *str, *escaped;
258
259 TRACE("(%p)->(%s)\n", This, debugstr_w(value));
261 if(!str)
262 return E_OUTOFMEMORY;
263
264 escaped = xmlEncodeSpecialChars(NULL, str);
265 if(!escaped)
266 {
267 free(str);
268 return E_OUTOFMEMORY;
269 }
270
271 xmlNodeSetContent(This->node, escaped);
272
273 free(str);
274 xmlFree(escaped);
275
276 return S_OK;
277}
XMLPUBFUN xmlChar * xmlEncodeSpecialChars(const xmlDoc *doc, const xmlChar *input)

Referenced by node_put_value_escaped().

◆ node_transform_node()

HRESULT node_transform_node ( const xmlnode node,
IXMLDOMNode stylesheet,
BSTR p 
)

Definition at line 1553 of file node.c.

1554{
1555 return node_transform_node_params(node, stylesheet, p, NULL, NULL);
1556}
GLfloat GLfloat p
Definition: glext.h:8902
HRESULT node_transform_node_params(const xmlnode *This, IXMLDOMNode *stylesheet, BSTR *p, ISequentialStream *stream, const struct xslprocessor_params *params)
Definition: node.c:1480

Referenced by dom_pi_transformNode(), domattr_transformNode(), domcdata_transformNode(), domcomment_transformNode(), domdoc_transformNode(), domdoc_transformNodeToObject(), domelem_transformNode(), domfrag_transformNode(), domtext_transformNode(), entityref_transformNode(), and unknode_transformNode().

◆ node_transform_node_params()

HRESULT node_transform_node_params ( const xmlnode This,
IXMLDOMNode stylesheet,
BSTR p,
ISequentialStream stream,
const struct xslprocessor_params params 
)

Definition at line 1480 of file node.c.

1482{
1483 xsltStylesheetPtr xsltSS;
1484 xmlDocPtr sheet_doc;
1485 HRESULT hr = S_OK;
1486 xmlnode *sheet;
1487
1488 if (!stylesheet || (!p && !stream)) return E_INVALIDARG;
1489
1490 if (p) *p = NULL;
1491
1492 sheet = get_node_obj(stylesheet);
1493 if(!sheet) return E_FAIL;
1494
1495 sheet_doc = xmlCopyDoc(sheet->node->doc, 1);
1496 xsltSS = xsltParseStylesheetDoc(sheet_doc);
1497 if (xsltSS)
1498 {
1499 const char **xslparams = NULL;
1500 xmlDocPtr result;
1501 unsigned int i;
1502
1503 /* convert our parameter list to libxml2 format */
1504 if (params && params->count)
1505 {
1506 struct xslprocessor_par *par;
1507
1508 i = 0;
1509 xslparams = malloc((params->count * 2 + 1) * sizeof(char*));
1510 LIST_FOR_EACH_ENTRY(par, &params->list, struct xslprocessor_par, entry)
1511 {
1512 xslparams[i++] = (char*)xmlchar_from_wchar(par->name);
1513 xslparams[i++] = (char*)xmlchar_from_wchar(par->value);
1514 }
1515 xslparams[i] = NULL;
1516 }
1517
1518 if (xslparams)
1519 {
1520 xsltTransformContextPtr ctxt = xsltNewTransformContext(xsltSS, This->node->doc);
1521
1522 /* push parameters to user context */
1523 xsltQuoteUserParams(ctxt, xslparams);
1524 result = xsltApplyStylesheetUser(xsltSS, This->node->doc, NULL, NULL, NULL, ctxt);
1526
1527 for (i = 0; i < params->count*2; i++)
1528 free((char*)xslparams[i]);
1529 free(xslparams);
1530 }
1531 else
1532 result = xsltApplyStylesheet(xsltSS, This->node->doc, NULL);
1533
1534 if (result)
1535 {
1536 if (stream)
1538 else
1540 xmlFreeDoc(result);
1541 }
1542
1543 xsltFreeStylesheet(xsltSS);
1544 }
1545 else
1546 xmlFreeDoc(sheet_doc);
1547
1548 if (p && !*p) *p = SysAllocStringLen(NULL, 0);
1549
1550 return hr;
1551}
xsltTransformContextPtr xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc)
Definition: transform.c:564
xmlDocPtr xsltApplyStylesheetUser(xsltStylesheetPtr style, xmlDocPtr doc, const char **params, const char *output, FILE *profile, xsltTransformContextPtr userCtxt)
Definition: transform.c:6273
xmlDocPtr xsltApplyStylesheet(xsltStylesheetPtr style, xmlDocPtr doc, const char **params)
Definition: transform.c:6230
void xsltFreeTransformContext(xsltTransformContextPtr ctxt)
Definition: transform.c:721
GLenum const GLfloat * params
Definition: glext.h:5645
GLuint64EXT * result
Definition: glext.h:11304
uint32_t entry
Definition: isohybrid.c:63
static HRESULT node_transform_write_to_bstr(xsltStylesheetPtr style, xmlDocPtr result, BSTR *str)
Definition: node.c:1234
static HRESULT node_transform_write_to_stream(xsltStylesheetPtr style, xmlDocPtr result, ISequentialStream *stream)
Definition: node.c:1262
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
Definition: parse.h:23
int xsltQuoteUserParams(xsltTransformContextPtr ctxt, const char **params)
Definition: variables.c:1716
void xsltFreeStylesheet(xsltStylesheetPtr style)
Definition: xslt.c:965
xsltStylesheetPtr xsltParseStylesheetDoc(xmlDocPtr doc)
Definition: xslt.c:6736

Referenced by domdoc_transformNodeToObject(), node_transform_node(), and xslprocessor_transform().

◆ node_transform_write()

static HRESULT node_transform_write ( xsltStylesheetPtr  style,
xmlDocPtr  result,
BOOL  omit_encoding,
const char encoding,
xmlOutputBufferPtr  output 
)
static

Definition at line 1180 of file node.c.

1181{
1182 const xmlChar *method;
1183 int indent;
1184
1186 {
1187 ERR("unknown output method\n");
1188 return E_FAIL;
1189 }
1190
1193
1194 if (!method && (result->type == XML_HTML_DOCUMENT_NODE))
1195 method = (const xmlChar *) "html";
1196
1197 if (method && xmlStrEqual(method, (const xmlChar *)"html"))
1198 {
1199 htmlSetMetaEncoding(result, (const xmlChar *)encoding);
1200 if (indent == -1)
1201 indent = 1;
1202 htmldoc_dumpcontent(output, result, encoding, indent);
1203 }
1204 else if (method && xmlStrEqual(method, (const xmlChar *)"xhtml"))
1205 {
1206 htmlSetMetaEncoding(result, (const xmlChar *) encoding);
1207 htmlDocContentDumpOutput(output, result, encoding);
1208 }
1209 else if (method && xmlStrEqual(method, (const xmlChar *)"text"))
1211 else
1212 {
1213 transform_write_xmldecl(result, style, omit_encoding, output);
1214
1215 if (result->children)
1216 {
1217 xmlNodePtr child = result->children;
1218
1219 while (child)
1220 {
1221 xmlNodeDumpOutput(output, result, child, 0, indent == 1, encoding);
1222 if (indent && ((child->type == XML_DTD_NODE) || ((child->type == XML_COMMENT_NODE) && child->next)))
1223 xmlOutputBufferWriteString(output, "\r\n");
1224 child = child->next;
1225 }
1226 }
1227 }
1228
1229 xmlOutputBufferFlush(output);
1230 return S_OK;
1231}
static const WCHAR indent[]
Definition: object.c:1156
method
Definition: dragdrop.c:54
static void transform_write_text(xmlDocPtr result, xsltStylesheetPtr style, xmlOutputBufferPtr output)
Definition: node.c:1027
static void transform_write_xmldecl(xmlDocPtr result, xsltStylesheetPtr style, BOOL omit_encoding, xmlOutputBufferPtr output)
Definition: node.c:1087
#define XSLT_GET_IMPORT_INT(res, style, name)
Definition: node.c:1079
static BOOL transform_is_valid_method(xsltStylesheetPtr style)
Definition: node.c:1174
#define XSLT_GET_IMPORT_PTR(res, style, name)
Definition: node.c:1070
static void htmldoc_dumpcontent(xmlOutputBufferPtr buf, xmlDocPtr doc, const char *encoding, int format)
Definition: node.c:1150

Referenced by node_transform_write_to_bstr(), and node_transform_write_to_stream().

◆ node_transform_write_to_bstr()

static HRESULT node_transform_write_to_bstr ( xsltStylesheetPtr  style,
xmlDocPtr  result,
BSTR str 
)
static

Definition at line 1234 of file node.c.

1235{
1236 HRESULT hr = S_OK;
1237
1239 *str = SysAllocStringLen(NULL, 0);
1240 else
1241 {
1242 xmlOutputBufferPtr output = xmlAllocOutputBuffer(xmlFindCharEncodingHandler("UTF-16"));
1243 const xmlChar *content;
1244 size_t len;
1245
1246 *str = NULL;
1247 if (!output)
1248 return E_OUTOFMEMORY;
1249
1250 hr = node_transform_write(style, result, TRUE, "UTF-16", output);
1251 content = xmlBufContent(output->conv);
1252 len = xmlBufUse(output->conv);
1253 /* UTF-16 encoder places UTF-16 bom, we don't need it for BSTR */
1254 content += sizeof(WCHAR);
1255 *str = SysAllocStringLen((WCHAR*)content, len/sizeof(WCHAR) - 1);
1256 xmlOutputBufferClose(output);
1257 }
1258
1259 return *str ? hr : E_OUTOFMEMORY;
1260}
xmlChar * xmlBufContent(const xmlBuf *buf)
Definition: buf.c:490
size_t xmlBufUse(const xmlBufPtr buf)
Definition: buf.c:570
xmlCharEncodingHandlerPtr xmlFindCharEncodingHandler(const char *name)
Definition: encoding.c:1677
static HRESULT node_transform_write(xsltStylesheetPtr style, xmlDocPtr result, BOOL omit_encoding, const char *encoding, xmlOutputBufferPtr output)
Definition: node.c:1180
static BOOL transform_is_empty_resultdoc(xmlDocPtr result)
Definition: node.c:1169

Referenced by node_transform_node_params().

◆ node_transform_write_to_stream()

static HRESULT node_transform_write_to_stream ( xsltStylesheetPtr  style,
xmlDocPtr  result,
ISequentialStream stream 
)
static

Definition at line 1262 of file node.c.

1263{
1264 static const xmlChar *utf16 = (const xmlChar*)"UTF-16";
1265 xmlOutputBufferPtr output;
1266 const xmlChar *encoding;
1267 HRESULT hr;
1268
1270 {
1271 WARN("empty result document\n");
1272 return S_OK;
1273 }
1274
1275 if (style->methodURI && (!style->method || !xmlStrEqual(style->method, (const xmlChar *) "xhtml")))
1276 {
1277 ERR("unknown output method\n");
1278 return E_FAIL;
1279 }
1280
1281 /* default encoding is UTF-16 */
1282 XSLT_GET_IMPORT_PTR(encoding, style, encoding);
1283 if (!encoding)
1284 encoding = utf16;
1285
1286 output = xmlOutputBufferCreateIO(transform_to_stream_write, NULL, stream, xmlFindCharEncodingHandler((const char*)encoding));
1287 if (!output)
1288 return E_OUTOFMEMORY;
1289
1290 hr = node_transform_write(style, result, FALSE, (const char*)encoding, output);
1291 xmlOutputBufferClose(output);
1292 return hr;
1293}
static int XMLCALL transform_to_stream_write(void *context, const char *buffer, int len)
Definition: node.c:1019

Referenced by node_transform_node_params().

◆ SupportErrorInfo_AddRef()

static ULONG WINAPI SupportErrorInfo_AddRef ( ISupportErrorInfo iface)
static

Definition at line 106 of file node.c.

107{
110 TRACE("%p, refcount %ld.\n", iface, ref );
111 return ref;
112}
#define InterlockedIncrement
Definition: armddk.h:53
static SupportErrorInfo * impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
Definition: node.c:85
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ SupportErrorInfo_InterfaceSupportsErrorInfo()

static HRESULT WINAPI SupportErrorInfo_InterfaceSupportsErrorInfo ( ISupportErrorInfo iface,
REFIID  riid 
)
static

Definition at line 127 of file node.c.

128{
130 enum tid_t const *tid;
131
132 TRACE("(%p)->(%s)\n", This, debugstr_guid(riid));
133
134 tid = This->iids;
135 while (*tid != NULL_tid)
136 {
138 return S_OK;
139 tid++;
140 }
141
142 return S_FALSE;
143}
static const IID * get_riid_from_tid(tid_t tid)
Definition: automation.c:84
tid_t
Definition: ieframe.h:311
static TfClientId tid
#define debugstr_guid
Definition: kernel32.h:35
@ NULL_tid
Definition: msxml_dispex.h:38

◆ SupportErrorInfo_QueryInterface()

static HRESULT WINAPI SupportErrorInfo_QueryInterface ( ISupportErrorInfo iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 90 of file node.c.

91{
93 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
94
95 *obj = NULL;
96
97 if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ISupportErrorInfo)) {
98 *obj = iface;
99 ISupportErrorInfo_AddRef(iface);
100 return S_OK;
101 }
102
103 return E_NOINTERFACE;
104}
const GUID IID_IUnknown
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ SupportErrorInfo_Release()

static ULONG WINAPI SupportErrorInfo_Release ( ISupportErrorInfo iface)
static

Definition at line 114 of file node.c.

115{
118
119 TRACE("%p, refcount %ld.\n", iface, ref);
120
121 if (!ref)
122 free(This);
123
124 return ref;
125}
#define InterlockedDecrement
Definition: armddk.h:52

◆ transform_is_empty_resultdoc()

static BOOL transform_is_empty_resultdoc ( xmlDocPtr  result)
inlinestatic

Definition at line 1169 of file node.c.

1170{
1171 return !result->children || ((result->children->type == XML_DTD_NODE) && !result->children->next);
1172}

Referenced by node_transform_write_to_bstr(), and node_transform_write_to_stream().

◆ transform_is_valid_method()

static BOOL transform_is_valid_method ( xsltStylesheetPtr  style)
inlinestatic

Definition at line 1174 of file node.c.

1175{
1176 return !style->methodURI || !(style->method && xmlStrEqual(style->method, (const xmlChar *)"xhtml"));
1177}

Referenced by node_transform_write().

◆ transform_to_stream_write()

static int XMLCALL transform_to_stream_write ( void context,
const char buffer,
int  len 
)
static

Definition at line 1019 of file node.c.

1020{
1021 DWORD written;
1022 HRESULT hr = ISequentialStream_Write((ISequentialStream *)context, buffer, len, &written);
1023 return hr == S_OK ? written : -1;
1024}

Referenced by node_transform_write_to_stream().

◆ transform_write_text()

static void transform_write_text ( xmlDocPtr  result,
xsltStylesheetPtr  style,
xmlOutputBufferPtr  output 
)
static

Definition at line 1027 of file node.c.

1028{
1029 xmlNodePtr cur = result->children;
1030 while (cur)
1031 {
1032 if (cur->type == XML_TEXT_NODE)
1033 xmlOutputBufferWriteString(output, (const char*)cur->content);
1034
1035 /* skip to next node */
1036 if (cur->children)
1037 {
1038 if ((cur->children->type != XML_ENTITY_DECL) &&
1039 (cur->children->type != XML_ENTITY_REF_NODE) &&
1040 (cur->children->type != XML_ENTITY_NODE))
1041 {
1042 cur = cur->children;
1043 continue;
1044 }
1045 }
1046
1047 if (cur->next) {
1048 cur = cur->next;
1049 continue;
1050 }
1051
1052 do
1053 {
1054 cur = cur->parent;
1055 if (cur == NULL)
1056 break;
1057 if (cur == (xmlNodePtr) style->doc) {
1058 cur = NULL;
1059 break;
1060 }
1061 if (cur->next) {
1062 cur = cur->next;
1063 break;
1064 }
1065 } while (cur);
1066 }
1067}

Referenced by node_transform_write().

◆ transform_write_xmldecl()

static void transform_write_xmldecl ( xmlDocPtr  result,
xsltStylesheetPtr  style,
BOOL  omit_encoding,
xmlOutputBufferPtr  output 
)
static

Definition at line 1087 of file node.c.

1088{
1089 int omit_xmldecl, standalone;
1090
1091 XSLT_GET_IMPORT_INT(omit_xmldecl, style, omitXmlDeclaration);
1092 if (omit_xmldecl == 1) return;
1093
1094 XSLT_GET_IMPORT_INT(standalone, style, standalone);
1095
1096 xmlOutputBufferWriteString(output, "<?xml version=");
1097 if (result->version)
1098 {
1099 xmlOutputBufferWriteString(output, "\"");
1100 xmlOutputBufferWriteString(output, (const char *)result->version);
1101 xmlOutputBufferWriteString(output, "\"");
1102 }
1103 else
1104 xmlOutputBufferWriteString(output, "\"1.0\"");
1105
1106 if (!omit_encoding)
1107 {
1108 const xmlChar *encoding;
1109
1110 /* default encoding is UTF-16 */
1111 XSLT_GET_IMPORT_PTR(encoding, style, encoding);
1112 xmlOutputBufferWriteString(output, " encoding=");
1113 xmlOutputBufferWriteString(output, "\"");
1114 xmlOutputBufferWriteString(output, encoding ? (const char *)encoding : "UTF-16");
1115 xmlOutputBufferWriteString(output, "\"");
1116 }
1117
1118 /* standalone attribute */
1119 if (standalone != -1)
1120 xmlOutputBufferWriteString(output, standalone == 0 ? " standalone=\"no\"" : " standalone=\"yes\"");
1121
1122 xmlOutputBufferWriteString(output, "?>");
1123}

Referenced by node_transform_write().

◆ unknode_AddRef()

static ULONG WINAPI unknode_AddRef ( IXMLDOMNode iface)
static

Definition at line 1699 of file node.c.

1701{
1703
1704 return InterlockedIncrement(&This->ref);
1705}
static unknode * unknode_from_IXMLDOMNode(IXMLDOMNode *iface)
Definition: node.c:1668

◆ unknode_appendChild()

static HRESULT WINAPI unknode_appendChild ( IXMLDOMNode iface,
IXMLDOMNode newNode,
IXMLDOMNode **  outNewNode 
)
static

Definition at line 1980 of file node.c.

1983{
1985 return node_append_child(&This->node, newNode, outNewNode);
1986}
HRESULT node_append_child(xmlnode *This, IXMLDOMNode *child, IXMLDOMNode **outChild)
Definition: node.c:639

◆ unknode_cloneNode()

static HRESULT WINAPI unknode_cloneNode ( IXMLDOMNode iface,
VARIANT_BOOL  pbool,
IXMLDOMNode **  outNode 
)
static

Definition at line 2004 of file node.c.

2007{
2009 return node_clone(&This->node, pbool, outNode );
2010}
HRESULT node_clone(xmlnode *This, VARIANT_BOOL deep, IXMLDOMNode **cloneNode)
Definition: node.c:679

◆ unknode_from_IXMLDOMNode()

◆ unknode_get_attributes()

static HRESULT WINAPI unknode_get_attributes ( IXMLDOMNode iface,
IXMLDOMNamedNodeMap **  attributeMap 
)
static

Definition at line 1936 of file node.c.

1939{
1941
1942 FIXME("(%p)->(%p)\n", This, attributeMap);
1943
1944 return return_null_ptr((void**)attributeMap);
1945}
static HRESULT return_null_ptr(void **p)

◆ unknode_get_baseName()

static HRESULT WINAPI unknode_get_baseName ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 2161 of file node.c.

2164{
2166 return node_get_base_name(&This->node, p);
2167}

◆ unknode_get_childNodes()

static HRESULT WINAPI unknode_get_childNodes ( IXMLDOMNode iface,
IXMLDOMNodeList **  outList 
)
static

Definition at line 1881 of file node.c.

1884{
1886
1887 TRACE("(%p)->(%p)\n", This, outList);
1888
1889 return node_get_child_nodes(&This->node, outList);
1890}
HRESULT node_get_child_nodes(xmlnode *This, IXMLDOMNodeList **ret)
Definition: node.c:353

◆ unknode_get_dataType()

static HRESULT WINAPI unknode_get_dataType ( IXMLDOMNode iface,
VARIANT var1 
)
static

Definition at line 2076 of file node.c.

2079{
2081 TRACE("(%p)->(%p)\n", This, var1);
2082 return return_null_var(var1);
2083}
static HRESULT return_null_var(VARIANT *p)

◆ unknode_get_definition()

static HRESULT WINAPI unknode_get_definition ( IXMLDOMNode iface,
IXMLDOMNode **  definitionNode 
)
static

Definition at line 2049 of file node.c.

2052{
2054 FIXME("(%p)->(%p)\n", This, definitionNode);
2055 return E_NOTIMPL;
2056}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ unknode_get_firstChild()

static HRESULT WINAPI unknode_get_firstChild ( IXMLDOMNode iface,
IXMLDOMNode **  domNode 
)
static

Definition at line 1892 of file node.c.

1895{
1897
1898 TRACE("(%p)->(%p)\n", This, domNode);
1899
1900 return node_get_first_child(&This->node, domNode);
1901}
HRESULT node_get_first_child(xmlnode *This, IXMLDOMNode **ret)
Definition: node.c:365

◆ unknode_get_lastChild()

static HRESULT WINAPI unknode_get_lastChild ( IXMLDOMNode iface,
IXMLDOMNode **  domNode 
)
static

Definition at line 1903 of file node.c.

1906{
1908
1909 TRACE("(%p)->(%p)\n", This, domNode);
1910
1911 return node_get_last_child(&This->node, domNode);
1912}
HRESULT node_get_last_child(xmlnode *This, IXMLDOMNode **ret)
Definition: node.c:370

◆ unknode_get_namespaceURI()

static HRESULT WINAPI unknode_get_namespaceURI ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 2144 of file node.c.

2147{
2149 TRACE("(%p)->(%p)\n", This, p);
2150 return node_get_namespaceURI(&This->node, p);
2151}
HRESULT node_get_namespaceURI(xmlnode *This, BSTR *namespaceURI)
Definition: node.c:1589

◆ unknode_get_nextSibling()

static HRESULT WINAPI unknode_get_nextSibling ( IXMLDOMNode iface,
IXMLDOMNode **  domNode 
)
static

Definition at line 1925 of file node.c.

1928{
1930
1931 TRACE("(%p)->(%p)\n", This, domNode);
1932
1933 return node_get_next_sibling(&This->node, domNode);
1934}
HRESULT node_get_next_sibling(xmlnode *This, IXMLDOMNode **ret)
Definition: node.c:380

◆ unknode_get_nodeName()

static HRESULT WINAPI unknode_get_nodeName ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 1801 of file node.c.

1804{
1806
1807 FIXME("(%p)->(%p)\n", This, p);
1808
1809 return node_get_nodeName(&This->node, p);
1810}
HRESULT node_get_nodeName(xmlnode *This, BSTR *name)
Definition: node.c:178

◆ unknode_get_nodeType()

static HRESULT WINAPI unknode_get_nodeType ( IXMLDOMNode iface,
DOMNodeType domNodeType 
)
static

Definition at line 1836 of file node.c.

1839{
1841
1842 FIXME("(%p)->(%p)\n", This, domNodeType);
1843
1844 switch (This->node.node->type)
1845 {
1846 case XML_ELEMENT_NODE:
1847 case XML_ATTRIBUTE_NODE:
1848 case XML_TEXT_NODE:
1849 case XML_CDATA_SECTION_NODE:
1850 case XML_ENTITY_REF_NODE:
1851 case XML_ENTITY_NODE:
1852 case XML_PI_NODE:
1853 case XML_COMMENT_NODE:
1854 case XML_DOCUMENT_NODE:
1855 case XML_DOCUMENT_TYPE_NODE:
1856 case XML_DOCUMENT_FRAG_NODE:
1857 case XML_NOTATION_NODE:
1858 /* we only care about this set of types, libxml2 type values are
1859 exactly what we need */
1860 *domNodeType = (DOMNodeType)This->node.node->type;
1861 break;
1862 default:
1863 *domNodeType = NODE_INVALID;
1864 break;
1865 }
1866
1867 return S_OK;
1868}
@ NODE_INVALID
Definition: shared.h:244

◆ unknode_get_nodeTypedValue()

static HRESULT WINAPI unknode_get_nodeTypedValue ( IXMLDOMNode iface,
VARIANT var1 
)
static

Definition at line 2058 of file node.c.

2061{
2063 FIXME("(%p)->(%p)\n", This, var1);
2064 return return_null_var(var1);
2065}

◆ unknode_get_nodeTypeString()

static HRESULT WINAPI unknode_get_nodeTypeString ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 2012 of file node.c.

2015{
2017
2018 FIXME("(%p)->(%p)\n", This, p);
2019
2020 return node_get_nodeName(&This->node, p);
2021}

◆ unknode_get_nodeValue()

static HRESULT WINAPI unknode_get_nodeValue ( IXMLDOMNode iface,
VARIANT value 
)
static

Definition at line 1812 of file node.c.

1815{
1817
1818 FIXME("(%p)->(%p)\n", This, value);
1819
1820 if(!value)
1821 return E_INVALIDARG;
1822
1823 V_VT(value) = VT_NULL;
1824 return S_FALSE;
1825}

◆ unknode_get_ownerDocument()

static HRESULT WINAPI unknode_get_ownerDocument ( IXMLDOMNode iface,
IXMLDOMDocument **  domDocument 
)
static

Definition at line 1996 of file node.c.

1999{
2001 return node_get_owner_doc(&This->node, domDocument);
2002}
HRESULT node_get_owner_doc(const xmlnode *This, IXMLDOMDocument **doc)
Definition: node.c:672

◆ unknode_get_parentNode()

static HRESULT WINAPI unknode_get_parentNode ( IXMLDOMNode iface,
IXMLDOMNode **  parent 
)
static

Definition at line 1870 of file node.c.

1873{
1875 FIXME("(%p)->(%p)\n", This, parent);
1876 if (!parent) return E_INVALIDARG;
1877 *parent = NULL;
1878 return S_FALSE;
1879}

◆ unknode_get_parsed()

static HRESULT WINAPI unknode_get_parsed ( IXMLDOMNode iface,
VARIANT_BOOL isParsed 
)
static

Definition at line 2134 of file node.c.

2137{
2139 FIXME("(%p)->(%p) stub!\n", This, isParsed);
2140 *isParsed = VARIANT_TRUE;
2141 return S_OK;
2142}

◆ unknode_get_prefix()

static HRESULT WINAPI unknode_get_prefix ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 2153 of file node.c.

2156{
2158 return node_get_prefix(&This->node, p);
2159}

◆ unknode_get_previousSibling()

static HRESULT WINAPI unknode_get_previousSibling ( IXMLDOMNode iface,
IXMLDOMNode **  domNode 
)
static

Definition at line 1914 of file node.c.

1917{
1919
1920 TRACE("(%p)->(%p)\n", This, domNode);
1921
1922 return node_get_previous_sibling(&This->node, domNode);
1923}
HRESULT node_get_previous_sibling(xmlnode *This, IXMLDOMNode **ret)
Definition: node.c:375

◆ unknode_get_specified()

static HRESULT WINAPI unknode_get_specified ( IXMLDOMNode iface,
VARIANT_BOOL isSpecified 
)
static

Definition at line 2039 of file node.c.

2042{
2044 FIXME("(%p)->(%p) stub!\n", This, isSpecified);
2045 *isSpecified = VARIANT_TRUE;
2046 return S_OK;
2047}

◆ unknode_get_text()

static HRESULT WINAPI unknode_get_text ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 2023 of file node.c.

2026{
2028 return node_get_text(&This->node, p);
2029}
HRESULT node_get_text(const xmlnode *This, BSTR *text)
Definition: node.c:842

◆ unknode_get_xml()

static HRESULT WINAPI unknode_get_xml ( IXMLDOMNode iface,
BSTR p 
)
static

Definition at line 2099 of file node.c.

2102{
2104
2105 FIXME("(%p)->(%p)\n", This, p);
2106
2107 return node_get_xml(&This->node, FALSE, p);
2108}
HRESULT node_get_xml(xmlnode *This, BOOL ensure_eol, BSTR *ret)
Definition: node.c:936

◆ unknode_GetIDsOfNames()

static HRESULT WINAPI unknode_GetIDsOfNames ( IXMLDOMNode iface,
REFIID  riid,
LPOLESTR rgszNames,
UINT  cNames,
LCID  lcid,
DISPID rgDispId 
)
static

Definition at line 1746 of file node.c.

1753{
1755 HRESULT hr;
1756
1757 TRACE("%p, %s, %p, %u, %lx, %p.\n", iface, debugstr_guid(riid), rgszNames, cNames,
1758 lcid, rgDispId);
1759
1760 if(!rgszNames || cNames == 0 || !rgDispId)
1761 return E_INVALIDARG;
1762
1764 if(SUCCEEDED(hr))
1765 {
1766 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
1767 ITypeInfo_Release(typeinfo);
1768 }
1769
1770 return hr;
1771}
HRESULT get_typeinfo(enum type_id tid, ITypeInfo **ret)
Definition: apps.c:124
LCID lcid
Definition: locale.c:5656
@ IXMLDOMNode_tid
Definition: msxml_dispex.h:51

◆ unknode_GetTypeInfo()

static HRESULT WINAPI unknode_GetTypeInfo ( IXMLDOMNode iface,
UINT  iTInfo,
LCID  lcid,
ITypeInfo **  ppTInfo 
)
static

Definition at line 1735 of file node.c.

1740{
1741 TRACE("%p, %u, %lx, %p.\n", iface, iTInfo, lcid, ppTInfo);
1742
1743 return get_typeinfo(IXMLDOMNode_tid, ppTInfo);
1744}

◆ unknode_GetTypeInfoCount()

static HRESULT WINAPI unknode_GetTypeInfoCount ( IXMLDOMNode iface,
UINT pctinfo 
)
static

Definition at line 1722 of file node.c.

1725{
1727
1728 TRACE("(%p)->(%p)\n", This, pctinfo);
1729
1730 *pctinfo = 1;
1731
1732 return S_OK;
1733}

◆ unknode_hasChildNodes()

static HRESULT WINAPI unknode_hasChildNodes ( IXMLDOMNode iface,
VARIANT_BOOL pbool 
)
static

Definition at line 1988 of file node.c.

1991{
1993 return node_has_childnodes(&This->node, pbool);
1994}
HRESULT node_has_childnodes(const xmlnode *This, VARIANT_BOOL *ret)
Definition: node.c:658

◆ unknode_insertBefore()

static HRESULT WINAPI unknode_insertBefore ( IXMLDOMNode iface,
IXMLDOMNode newNode,
VARIANT  refChild,
IXMLDOMNode **  outOldNode 
)
static

Definition at line 1947 of file node.c.

1951{
1953
1954 FIXME("(%p)->(%p x%d %p)\n", This, newNode, V_VT(&refChild), outOldNode);
1955
1956 return node_insert_before(&This->node, newNode, &refChild, outOldNode);
1957}
HRESULT node_insert_before(xmlnode *This, IXMLDOMNode *new_child, const VARIANT *ref_child, IXMLDOMNode **ret)
Definition: node.c:432

◆ unknode_Invoke()

static HRESULT WINAPI unknode_Invoke ( IXMLDOMNode iface,
DISPID  dispIdMember,
REFIID  riid,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT puArgErr 
)
static

Definition at line 1773 of file node.c.

1783{
1785 HRESULT hr;
1786
1787 TRACE("%p, %ld, %s, %lx, %d, %p, %p, %p, %p.\n", iface, dispIdMember, debugstr_guid(riid),
1788 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
1789
1791 if(SUCCEEDED(hr))
1792 {
1793 hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags, pDispParams,
1794 pVarResult, pExcepInfo, puArgErr);
1795 ITypeInfo_Release(typeinfo);
1796 }
1797
1798 return hr;
1799}
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337

◆ unknode_put_dataType()

static HRESULT WINAPI unknode_put_dataType ( IXMLDOMNode iface,
BSTR  p 
)
static

Definition at line 2085 of file node.c.

2088{
2090
2091 FIXME("(%p)->(%s)\n", This, debugstr_w(p));
2092
2093 if(!p)
2094 return E_INVALIDARG;
2095
2096 return E_FAIL;
2097}

◆ unknode_put_nodeTypedValue()

static HRESULT WINAPI unknode_put_nodeTypedValue ( IXMLDOMNode iface,
VARIANT  typedValue 
)
static

Definition at line 2067 of file node.c.

2070{
2072 FIXME("(%p)->(%s)\n", This, debugstr_variant(&typedValue));
2073 return E_NOTIMPL;
2074}
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46

◆ unknode_put_nodeValue()

static HRESULT WINAPI unknode_put_nodeValue ( IXMLDOMNode iface,
VARIANT  value 
)
static

Definition at line 1827 of file node.c.

1830{
1832 FIXME("(%p)->(v%d)\n", This, V_VT(&value));
1833 return E_FAIL;
1834}

◆ unknode_put_text()

static HRESULT WINAPI unknode_put_text ( IXMLDOMNode iface,
BSTR  p 
)
static

Definition at line 2031 of file node.c.

2034{
2036 return node_put_text(&This->node, p);
2037}
HRESULT node_put_text(xmlnode *This, BSTR text)
Definition: node.c:867

◆ unknode_QueryInterface()

static HRESULT WINAPI unknode_QueryInterface ( IXMLDOMNode iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 1673 of file node.c.

1677{
1679
1680 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
1681
1682 if (IsEqualGUID(riid, &IID_IUnknown)) {
1683 *ppvObject = iface;
1684 }else if (IsEqualGUID( riid, &IID_IDispatch) ||
1685 IsEqualGUID( riid, &IID_IXMLDOMNode)) {
1686 *ppvObject = &This->IXMLDOMNode_iface;
1687 }else if(node_query_interface(&This->node, riid, ppvObject)) {
1688 return *ppvObject ? S_OK : E_NOINTERFACE;
1689 }else {
1690 FIXME("interface %s not implemented\n", debugstr_guid(riid));
1691 *ppvObject = NULL;
1692 return E_NOINTERFACE;
1693 }
1694
1695 IUnknown_AddRef((IUnknown*)*ppvObject);
1696 return S_OK;
1697}
BOOL node_query_interface(xmlnode *This, REFIID riid, void **ppv)
Definition: node.c:66
const GUID IID_IDispatch

◆ unknode_Release()

static ULONG WINAPI unknode_Release ( IXMLDOMNode iface)
static

Definition at line 1707 of file node.c.

1709{
1711 LONG ref;
1712
1713 ref = InterlockedDecrement( &This->ref );
1714 if(!ref) {
1715 destroy_xmlnode(&This->node);
1716 free(This);
1717 }
1718
1719 return ref;
1720}
void destroy_xmlnode(xmlnode *This)
Definition: node.c:1638

◆ unknode_removeChild()

static HRESULT WINAPI unknode_removeChild ( IXMLDOMNode iface,
IXMLDOMNode domNode,
IXMLDOMNode **  oldNode 
)
static

Definition at line 1972 of file node.c.

1975{
1977 return node_remove_child(&This->node, domNode, oldNode);
1978}
HRESULT node_remove_child(xmlnode *This, IXMLDOMNode *child, IXMLDOMNode **oldChild)
Definition: node.c:608

◆ unknode_replaceChild()

static HRESULT WINAPI unknode_replaceChild ( IXMLDOMNode iface,
IXMLDOMNode newNode,
IXMLDOMNode oldNode,
IXMLDOMNode **  outOldNode 
)
static

Definition at line 1959 of file node.c.

1964{
1966
1967 FIXME("(%p)->(%p %p %p)\n", This, newNode, oldNode, outOldNode);
1968
1969 return node_replace_child(&This->node, newNode, oldNode, outOldNode);
1970}
HRESULT node_replace_child(xmlnode *This, IXMLDOMNode *newChild, IXMLDOMNode *oldChild, IXMLDOMNode **ret)
Definition: node.c:543

◆ unknode_selectNodes()

static HRESULT WINAPI unknode_selectNodes ( IXMLDOMNode iface,
BSTR  p,
IXMLDOMNodeList **  outList 
)
static

Definition at line 2118 of file node.c.

2121{
2123 return node_select_nodes(&This->node, p, outList);
2124}

◆ unknode_selectSingleNode()

static HRESULT WINAPI unknode_selectSingleNode ( IXMLDOMNode iface,
BSTR  p,
IXMLDOMNode **  outNode 
)
static

Definition at line 2126 of file node.c.

2129{
2131 return node_select_singlenode(&This->node, p, outNode);
2132}
HRESULT node_select_singlenode(const xmlnode *This, BSTR query, IXMLDOMNode **node)
Definition: node.c:1572

◆ unknode_transformNode()

static HRESULT WINAPI unknode_transformNode ( IXMLDOMNode iface,
IXMLDOMNode domNode,
BSTR p 
)
static

Definition at line 2110 of file node.c.

2113{
2115 return node_transform_node(&This->node, domNode, p);
2116}
HRESULT node_transform_node(const xmlnode *node, IXMLDOMNode *stylesheet, BSTR *p)
Definition: node.c:1553

◆ unknode_transformNodeToObject()

static HRESULT WINAPI unknode_transformNodeToObject ( IXMLDOMNode iface,
IXMLDOMNode domNode,
VARIANT  var1 
)
static

Definition at line 2169 of file node.c.

2172{
2174 FIXME("(%p)->(%p %s)\n", This, domNode, debugstr_variant(&var1));
2175 return E_NOTIMPL;
2176}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msxml  )

◆ xml_write_quotedstring()

static void xml_write_quotedstring ( xmlOutputBufferPtr  buf,
const xmlChar string 
)
static

Definition at line 976 of file node.c.

977{
978 const xmlChar *cur, *base;
979
980 if (xmlStrchr(string, '\"'))
981 {
982 if (xmlStrchr(string, '\''))
983 {
984 xmlOutputBufferWrite(buf, 1, "\"");
985 base = cur = string;
986
987 while (*cur)
988 {
989 if (*cur == '"')
990 {
991 if (base != cur)
992 xmlOutputBufferWrite(buf, cur-base, (const char*)base);
993 xmlOutputBufferWrite(buf, 6, "&quot;");
994 cur++;
995 base = cur;
996 }
997 else
998 cur++;
999 }
1000 if (base != cur)
1001 xmlOutputBufferWrite(buf, cur-base, (const char*)base);
1002 xmlOutputBufferWrite(buf, 1, "\"");
1003 }
1004 else
1005 {
1006 xmlOutputBufferWrite(buf, 1, "\'");
1007 xmlOutputBufferWriteString(buf, (const char*)string);
1008 xmlOutputBufferWrite(buf, 1, "\'");
1009 }
1010 }
1011 else
1012 {
1013 xmlOutputBufferWrite(buf, 1, "\"");
1014 xmlOutputBufferWriteString(buf, (const char*)string);
1015 xmlOutputBufferWrite(buf, 1, "\"");
1016 }
1017}
char string[160]
Definition: util.h:11
XMLPUBFUN const xmlChar * xmlStrchr(const xmlChar *str, xmlChar val)
Definition: xmlstring.c:327

Referenced by htmldtd_dumpcontent().

◆ xmlnode_add_ref()

void xmlnode_add_ref ( xmlNodePtr  node)

Definition at line 420 of file node.c.

421{
422 if (node->type == XML_DOCUMENT_NODE) return;
423 InterlockedIncrement((LONG*)&node->_private);
424}

Referenced by create_nodemap(), init_xmlnode(), and node_insert_before().

◆ xmlnode_get_inst_cnt()

int xmlnode_get_inst_cnt ( xmlnode node)

Definition at line 413 of file node.c.

414{
415 return node_get_inst_cnt(node->node);
416}

Referenced by domdoc_put_documentElement(), node_insert_before(), and node_replace_child().

◆ xmlnode_release()

void xmlnode_release ( xmlNodePtr  node)

Definition at line 426 of file node.c.

427{
428 if (node->type == XML_DOCUMENT_NODE) return;
429 InterlockedDecrement((LONG*)&node->_private);
430}

Referenced by destroy_xmlnode(), and xmlnodemap_Release().

◆ xmlNodePtr_from_domnode()

xmlNodePtr xmlNodePtr_from_domnode ( IXMLDOMNode iface,
xmlElementType  type 
)

Definition at line 52 of file node.c.

53{
55
56 if ( !iface )
57 return NULL;
58 This = get_node_obj( iface );
59 if ( !This || !This->node )
60 return NULL;
61 if ( type && This->node->type != type )
62 return NULL;
63 return This->node;
64}

Referenced by cache_entry_from_url(), and schema_cache_add().

◆ xslt_doc_default_loader()

xmlDocPtr xslt_doc_default_loader ( const xmlChar uri,
xmlDictPtr  dict,
int  options,
void _ctxt,
xsltLoadType  type 
)

Definition at line 1401 of file node.c.

1403{
1404 IUri *import_uri = NULL;
1405 xmlParserInputPtr input;
1406 xmlParserCtxtPtr pctxt;
1407 xmlDocPtr doc = NULL;
1409 HRESULT hr;
1410 bsc_t *bsc;
1411 BSTR uriW;
1412
1413 TRACE("%s, %p, %#x, %p, %d\n", debugstr_a((const char *)uri), dict, options, _ctxt, type);
1414
1415 pctxt = xmlNewParserCtxt();
1416 if (!pctxt)
1417 return NULL;
1418
1419 if (dict && pctxt->dict)
1420 {
1421 xmlDictFree(pctxt->dict);
1422 pctxt->dict = NULL;
1423 }
1424
1425 if (dict)
1426 {
1427 pctxt->dict = dict;
1428 xmlDictReference(pctxt->dict);
1429 }
1430
1431 xmlCtxtUseOptions(pctxt, options);
1432
1433 hr = xslt_doc_get_uri(uri, _ctxt, type, &import_uri);
1434 if (FAILED(hr))
1435 goto failed;
1436
1437 hr = CreateURLMonikerEx2(NULL, import_uri, &moniker, 0);
1438 if (FAILED(hr))
1439 goto failed;
1440
1442 IMoniker_Release(moniker);
1443 if (FAILED(hr))
1444 goto failed;
1445
1446 if (FAILED(detach_bsc(bsc)))
1447 goto failed;
1448
1449 if (!input)
1450 goto failed;
1451
1452 inputPush(pctxt, input);
1453 xmlParseDocument(pctxt);
1454
1455 if (pctxt->wellFormed)
1456 {
1457 doc = pctxt->myDoc;
1458 /* Set imported uri, to give nested imports a chance. */
1459 if (IUri_GetPropertyBSTR(import_uri, Uri_PROPERTY_ABSOLUTE_URI, &uriW, 0) == S_OK)
1460 {
1461 doc->name = (char *)xmlchar_from_wcharn(uriW, SysStringLen(uriW), TRUE);
1462 SysFreeString(uriW);
1463 }
1464 }
1465 else
1466 {
1467 doc = NULL;
1468 xmlFreeDoc(pctxt->myDoc);
1469 pctxt->myDoc = NULL;
1470 }
1471
1472failed:
1473 xmlFreeParserCtxt(pctxt);
1474 if (import_uri)
1475 IUri_Release(import_uri);
1476
1477 return doc;
1478}
HRESULT detach_bsc(bsc_t *bsc)
Definition: bsc.c:342
HRESULT bind_url(IMoniker *mon, HRESULT(*onDataAvailable)(void *, char *, DWORD), void *obj, bsc_t **ret)
Definition: bsc.c:299
#define debugstr_a
Definition: kernel32.h:31
const char * uri
Definition: sec_mgr.c:1588
static xmlChar * xmlchar_from_wcharn(const WCHAR *str, int nchars, BOOL use_xml_alloc)
static HRESULT import_loader_onDataAvailable(void *ctxt, char *ptr, DWORD len)
Definition: node.c:1331
static HRESULT xslt_doc_get_uri(const xmlChar *uri, void *_ctxt, xsltLoadType type, IUri **doc_uri)
Definition: node.c:1353
XMLPUBFUN int inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value)
Definition: parser.c:1897
void xmlDictFree(xmlDictPtr dict)
Definition: dict.c:333
int xmlDictReference(xmlDictPtr dict)
Definition: dict.c:317
XMLPUBFUN int xmlParseDocument(xmlParserCtxtPtr ctxt)
Definition: parser.c:11009
XMLPUBFUN int xmlCtxtUseOptions(xmlParserCtxtPtr ctxt, int options)
Definition: parser.c:14698
XMLPUBFUN void xmlFreeParserCtxt(xmlParserCtxtPtr ctxt)
XMLPUBFUN xmlParserCtxtPtr xmlNewParserCtxt(void)
Definition: bsc.c:39
Definition: xmldoc.c:231
Definition: main.c:40
HRESULT WINAPI CreateURLMonikerEx2(IMoniker *pmkContext, IUri *pUri, IMoniker **ppmk, DWORD dwFlags)
Definition: umon.c:668

Referenced by init_libxslt().

◆ xslt_doc_get_uri()

static HRESULT xslt_doc_get_uri ( const xmlChar uri,
void _ctxt,
xsltLoadType  type,
IUri **  doc_uri 
)
static

Definition at line 1353 of file node.c.

1354{
1356 IUri *href_uri;
1357 HRESULT hr;
1358 BSTR uriW;
1359
1360 *doc_uri = NULL;
1361
1362 uriW = bstr_from_xmlChar(uri);
1363 hr = CreateUri(uriW, Uri_CREATE_ALLOW_RELATIVE | Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, &href_uri);
1364 SysFreeString(uriW);
1365 if (FAILED(hr))
1366 {
1367 WARN("Failed to create href uri, %#lx.\n", hr);
1368 return hr;
1369 }
1370
1371 if (type == XSLT_LOAD_STYLESHEET && style->doc && style->doc->name)
1372 {
1373 IUri *base_uri;
1374 BSTR baseuriW;
1375
1376 baseuriW = bstr_from_xmlChar((xmlChar *)style->doc->name);
1377 hr = CreateUri(baseuriW, Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, &base_uri);
1378 SysFreeString(baseuriW);
1379 if (FAILED(hr))
1380 {
1381 WARN("Failed to create base uri, %#lx.\n", hr);
1382 return hr;
1383 }
1384
1385 hr = CoInternetCombineIUri(base_uri, href_uri, 0, doc_uri, 0);
1386 IUri_Release(base_uri);
1387 if (FAILED(hr))
1388 WARN("Failed to combine uris, hr %#lx.\n", hr);
1389 }
1390 else
1391 {
1392 *doc_uri = href_uri;
1393 IUri_AddRef(*doc_uri);
1394 }
1395
1396 IUri_Release(href_uri);
1397
1398 return hr;
1399}
HRESULT WINAPI CoInternetCombineIUri(IUri *pBaseUri, IUri *pRelativeUri, DWORD dwCombineFlags, IUri **ppCombinedUri, DWORD_PTR dwReserved)
Definition: uri.c:6716
HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI)
Definition: uri.c:5700
@ XSLT_LOAD_STYLESHEET
Definition: documents.h:55
xsltStylesheet * xsltStylesheetPtr

Referenced by xslt_doc_default_loader().

Variable Documentation

◆ IID_xmlnode

const IID IID_xmlnode = {0x4f2f4ba2,0xb822,0x11df,{0x8b,0x8a,0x68,0x50,0xdf,0xd7,0x20,0x85}}
static

Definition at line 50 of file node.c.

Referenced by get_node_obj(), and node_query_interface().

◆ SupportErrorInfoVtbl

const struct ISupportErrorInfoVtbl SupportErrorInfoVtbl
static
Initial value:
= {
}
static HRESULT WINAPI SupportErrorInfo_InterfaceSupportsErrorInfo(ISupportErrorInfo *iface, REFIID riid)
Definition: node.c:127
static ULONG WINAPI SupportErrorInfo_AddRef(ISupportErrorInfo *iface)
Definition: node.c:106
static HRESULT WINAPI SupportErrorInfo_QueryInterface(ISupportErrorInfo *iface, REFIID riid, void **obj)
Definition: node.c:90
static ULONG WINAPI SupportErrorInfo_Release(ISupportErrorInfo *iface)
Definition: node.c:114

Definition at line 145 of file node.c.

Referenced by node_create_supporterrorinfo().

◆ unknode_vtbl

const struct IXMLDOMNodeVtbl unknode_vtbl
static

Definition at line 2178 of file node.c.

Referenced by create_node().