55 ExhaustiveErrors = 1 << 1,
56 ExternalGeneralEntities = 1 << 2,
57 ExternalParameterEntities = 1 << 3,
58 ForcedResync = 1 << 4,
59 NamespacePrefixes = 1 << 5,
61 ParameterEntities = 1 << 7,
62 PreserveSystemIndentifiers = 1 << 8,
64 SchemaValidation = 1 << 10,
65 ServerHttpRequest = 1 << 11,
66 SuppressValidationfatalError = 1 << 12,
67 UseInlineSchema = 1 << 13,
68 UseSchemaLocation = 1 << 14,
69 LexicalHandlerParEntities = 1 << 15
73static const WCHAR FeatureExternalGeneralEntitiesW[] = {
74 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
's',
'a',
'x',
'/',
75 'f',
'e',
'a',
't',
'u',
'r',
'e',
's',
'/',
'e',
'x',
't',
'e',
'r',
'n',
'a',
'l',
'-',
'g',
'e',
'n',
'e',
'r',
'a',
'l',
76 '-',
'e',
'n',
't',
'i',
't',
'i',
'e',
's',0
79static const WCHAR FeatureExternalParameterEntitiesW[] = {
80 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
's',
'a',
'x',
'/',
'f',
'e',
'a',
't',
'u',
'r',
'e',
's',
81 '/',
'e',
'x',
't',
'e',
'r',
'n',
'a',
'l',
'-',
'p',
'a',
'r',
'a',
'm',
'e',
't',
'e',
'r',
'-',
'e',
'n',
't',
'i',
't',
'i',
'e',
's',0
84static const WCHAR FeatureLexicalHandlerParEntitiesW[] = {
85 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
's',
'a',
'x',
'/',
'f',
'e',
'a',
't',
'u',
'r',
'e',
's',
86 '/',
'l',
'e',
'x',
'i',
'c',
'a',
'l',
'-',
'h',
'a',
'n',
'd',
'l',
'e',
'r',
'/',
'p',
'a',
'r',
'a',
'm',
'e',
't',
'e',
'r',
'-',
'e',
'n',
't',
'i',
't',
'i',
'e',
's',0
89static const WCHAR FeatureProhibitDTDW[] = {
90 'p',
'r',
'o',
'h',
'i',
'b',
'i',
't',
'-',
'd',
't',
'd',0
93static const WCHAR FeatureNamespacesW[] = {
94 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
's',
'a',
'x',
'/',
'f',
'e',
'a',
't',
'u',
'r',
'e',
's',
95 '/',
'n',
'a',
'm',
'e',
's',
'p',
'a',
'c',
'e',
's',0
98static const WCHAR FeatureNamespacePrefixesW[] = {
99 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
's',
'a',
'x',
'/',
'f',
'e',
'a',
't',
'u',
'r',
'e',
's',
100 '/',
'n',
'a',
'm',
'e',
's',
'p',
'a',
'c',
'e',
'-',
'p',
'r',
'e',
'f',
'i',
'x',
'e',
's',0
103static const WCHAR ExhaustiveErrorsW[] = {
104 'e',
'x',
'h',
'a',
'u',
's',
't',
'i',
'v',
'e',
'-',
'e',
'r',
'r',
'o',
'r',
's',0
107static const WCHAR SchemaValidationW[] = {
108 's',
'c',
'h',
'e',
'm',
'a',
'-',
'v',
'a',
'l',
'i',
'd',
'a',
't',
'i',
'o',
'n',0
111struct saxreader_feature_pair
117static const struct saxreader_feature_pair saxreader_feature_map[] = {
118 { ExhaustiveErrors, ExhaustiveErrorsW },
119 { ExternalGeneralEntities, FeatureExternalGeneralEntitiesW },
120 { ExternalParameterEntities, FeatureExternalParameterEntitiesW },
121 { LexicalHandlerParEntities, FeatureLexicalHandlerParEntitiesW },
122 { NamespacePrefixes, FeatureNamespacePrefixesW },
123 { Namespaces, FeatureNamespacesW },
124 { ProhibitDTD, FeatureProhibitDTDW },
125 { SchemaValidation, SchemaValidationW },
128static saxreader_feature get_saxreader_feature(
const WCHAR *
name)
141 return saxreader_feature_map[
n].feature;
149 return FeatureUnknown;
179 SAXContentHandler = 0,
188struct saxanyhandler_iface
194struct saxcontenthandler_iface
197 IVBSAXContentHandler *vbhandler;
200struct saxerrorhandler_iface
203 IVBSAXErrorHandler *vbhandler;
206struct saxlexicalhandler_iface
209 IVBSAXLexicalHandler *vbhandler;
212struct saxentityresolver_iface
215 IVBSAXEntityResolver *vbhandler;
218struct saxhandler_iface
221 struct saxcontenthandler_iface
content;
222 struct saxentityresolver_iface entityresolver;
223 struct saxerrorhandler_iface
error;
224 struct saxlexicalhandler_iface lexical;
225 struct saxanyhandler_iface anyhandler;
232 IVBSAXXMLReader IVBSAXXMLReader_iface;
233 ISAXXMLReader ISAXXMLReader_iface;
236 struct saxhandler_iface saxhandlers[SAXHandler_Last];
239 struct bstrpool
pool;
240 saxreader_feature features;
241 BSTR xmldecl_version;
247 struct saxanyhandler_iface *iface = &
reader->saxhandlers[
type].u.anyhandler;
251 IUnknown_AddRef(unk);
253 if ((vb && iface->vbhandler) || (!vb && iface->handler))
254 IUnknown_Release(vb ? iface->vbhandler : iface->handler);
257 iface->vbhandler = unk;
259 iface->handler = unk;
266 const struct saxanyhandler_iface *iface = &
reader->saxhandlers[
type].u.anyhandler;
270 if ((vb && iface->vbhandler) || (!vb && iface->handler))
273 IUnknown_AddRef(iface->vbhandler);
275 IUnknown_AddRef(iface->handler);
278 *
ret = vb ? iface->vbhandler : iface->handler;
283static struct saxcontenthandler_iface *saxreader_get_contenthandler(saxreader *
reader)
285 return &
reader->saxhandlers[SAXContentHandler].u.content;
288static struct saxerrorhandler_iface *saxreader_get_errorhandler(saxreader *
reader)
290 return &
reader->saxhandlers[SAXErrorHandler].u.error;
293static struct saxlexicalhandler_iface *saxreader_get_lexicalhandler(saxreader *
reader)
295 return &
reader->saxhandlers[SAXLexicalHandler].u.lexical;
300 IVBSAXLocator IVBSAXLocator_iface;
301 ISAXLocator ISAXLocator_iface;
302 IVBSAXAttributes IVBSAXAttributes_iface;
303 ISAXAttributes ISAXAttributes_iface;
305 saxreader *saxreader;
313 struct list elements;
316 int attr_alloc_count;
327static inline saxreader *impl_from_IVBSAXXMLReader( IVBSAXXMLReader *iface )
332static inline saxreader *impl_from_ISAXXMLReader( ISAXXMLReader *iface )
337static inline saxlocator *impl_from_IVBSAXLocator( IVBSAXLocator *iface )
342static inline saxlocator *impl_from_ISAXLocator( ISAXLocator *iface )
357static inline BOOL saxreader_has_handler(
const saxlocator *
locator,
enum saxhandler_type
type)
359 struct saxanyhandler_iface *iface = &
locator->saxreader->saxhandlers[
type].u.anyhandler;
360 return (
locator->vbInterface && iface->vbhandler) || (!
locator->vbInterface && iface->handler);
365 struct saxcontenthandler_iface *
content = saxreader_get_contenthandler(
locator->saxreader);
368 if (!saxreader_has_handler(
locator, SAXContentHandler))
return S_OK;
371 hr = IVBSAXContentHandler_characters(
content->vbhandler, &chars);
379static const WCHAR PropertyCharsetW[] = {
380 'c',
'h',
'a',
'r',
's',
'e',
't',0
382static const WCHAR PropertyXmlDeclVersionW[] = {
383 'x',
'm',
'l',
'd',
'e',
'c',
'l',
'-',
'v',
'e',
'r',
's',
'i',
'o',
'n',0
385static const WCHAR PropertyDeclHandlerW[] = {
386 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
387 's',
'a',
'x',
'/',
'p',
'r',
'o',
'p',
'e',
'r',
't',
'i',
'e',
's',
'/',
388 'd',
'e',
'c',
'l',
'a',
'r',
'a',
't',
'i',
'o',
'n',
389 '-',
'h',
'a',
'n',
'd',
'l',
'e',
'r',0
391static const WCHAR PropertyDomNodeW[] = {
392 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
393 's',
'a',
'x',
'/',
'p',
'r',
'o',
'p',
'e',
'r',
't',
'i',
'e',
's',
'/',
394 'd',
'o',
'm',
'-',
'n',
'o',
'd',
'e',0
396static const WCHAR PropertyInputSourceW[] = {
397 'i',
'n',
'p',
'u',
't',
'-',
's',
'o',
'u',
'r',
'c',
'e',0
399static const WCHAR PropertyLexicalHandlerW[] = {
400 'h',
't',
't',
'p',
':',
'/',
'/',
'x',
'm',
'l',
'.',
'o',
'r',
'g',
'/',
401 's',
'a',
'x',
'/',
'p',
'r',
'o',
'p',
'e',
'r',
't',
'i',
'e',
's',
'/',
402 'l',
'e',
'x',
'i',
'c',
'a',
'l',
'-',
'h',
'a',
'n',
'd',
'l',
'e',
'r',0
404static const WCHAR PropertyMaxElementDepthW[] = {
405 'm',
'a',
'x',
'-',
'e',
'l',
'e',
'm',
'e',
'n',
't',
'-',
'd',
'e',
'p',
't',
'h',0
407static const WCHAR PropertyMaxXMLSizeW[] = {
408 'm',
'a',
'x',
'-',
'x',
'm',
'l',
'-',
's',
'i',
'z',
'e',0
410static const WCHAR PropertySchemaDeclHandlerW[] = {
411 's',
'c',
'h',
'e',
'm',
'a',
'-',
'd',
'e',
'c',
'l',
'a',
'r',
'a',
't',
'i',
'o',
'n',
'-',
412 'h',
'a',
'n',
'd',
'l',
'e',
'r',0
414static const WCHAR PropertyXMLDeclEncodingW[] = {
415 'x',
'm',
'l',
'd',
'e',
'c',
'l',
'-',
'e',
'n',
'c',
'o',
'd',
'i',
'n',
'g',0
417static const WCHAR PropertyXMLDeclStandaloneW[] = {
418 'x',
'm',
'l',
'd',
'e',
'c',
'l',
'-',
's',
't',
'a',
'n',
'd',
'a',
'l',
'o',
'n',
'e',0
420static const WCHAR PropertyXMLDeclVersionW[] = {
421 'x',
'm',
'l',
'd',
'e',
'c',
'l',
'-',
'v',
'e',
'r',
's',
'i',
'o',
'n',0
428 value = VARIANT_FALSE;
430 value = VARIANT_TRUE;
432 if (
value == VARIANT_TRUE)
435 reader->features &= ~feature;
446static BOOL is_namespaces_enabled(
const saxreader *
reader)
478 ret->local = bstr_from_xmlChar(
local);
480 ret->qname = build_qname(
ret->prefix,
ret->local);
482 ret->ns_count = nb_ns;
484 for (
i=0;
i < nb_ns;
i++)
486 ret->ns[
i].prefix = bstr_from_xmlChar(namespaces[2*
i]);
487 ret->ns[
i].uri = bstr_from_xmlChar(namespaces[2*
i+1]);
493static void free_element_entry(element_entry *
element)
511static void push_element_ns(saxlocator *
locator, element_entry *
element)
516static element_entry * pop_element_ns(saxlocator *
locator)
534 uriW = bstr_from_xmlChar(
uri);
558static inline BOOL iterate_endprefix_index(saxlocator *
This,
const element_entry *
element,
int *
i)
562 if (*
i == -1) *
i = 0;
else ++*
i;
567 if (*
i == -1) *
i =
element->ns_count-1;
else --*
i;
572static BOOL bstr_pool_insert(
struct bstrpool *
pool,
BSTR pool_entry)
594 pool->pool[
pool->index++] = pool_entry;
598static void free_bstr_pool(
struct bstrpool *
pool)
602 for (
i = 0;
i <
pool->index;
i++)
620 if(
len != -1) dLen++;
625 if(
len != -1) bstr[dLen-1] =
'\0';
638 return bstr_from_xmlChar(
name);
641 bstr = bstr_from_xmlChar(qname);
649 BSTR pool_entry = bstr_from_xmlChar(
buf);
651 if (pool_entry && !bstr_pool_insert(
pool, pool_entry))
662 BSTR pool_entry = bstr_from_xmlCharN(
buf,
len);
664 if (pool_entry && !bstr_pool_insert(
pool, pool_entry))
673static void format_error_message_from_id(saxlocator *
This,
HRESULT hr)
675 struct saxerrorhandler_iface *
handler = saxreader_get_errorhandler(
This->saxreader);
679 if (saxreader_has_handler(
This, SAXErrorHandler))
685 FIXME(
"MSXML errors not yet supported.\n");
689 if(
This->vbInterface)
692 IVBSAXErrorHandler_fatalError(
handler->vbhandler,
693 &
This->IVBSAXLocator_iface, &bstrMsg,
hr);
697 ISAXErrorHandler_fatalError(
handler->handler,
702static void update_position(saxlocator *
This,
BOOL fix_column)
705 const xmlChar *baseP =
This->pParserCtxt->input->base;
711 for(;
p>=baseP && *
p!=
'\n' && *
p!=
'\r';
p--)
722 IVBSAXAttributes* iface,
728 return IVBSAXLocator_QueryInterface(&
This->IVBSAXLocator_iface,
riid,
ppvObject);
731static ULONG WINAPI ivbsaxattributes_AddRef(IVBSAXAttributes* iface)
734 return IVBSAXLocator_AddRef(&
This->IVBSAXLocator_iface);
737static ULONG WINAPI ivbsaxattributes_Release(IVBSAXAttributes* iface)
740 return IVBSAXLocator_Release(&
This->IVBSAXLocator_iface);
743static HRESULT WINAPI ivbsaxattributes_GetTypeInfoCount( IVBSAXAttributes *iface,
UINT* pctinfo )
755 IVBSAXAttributes *iface,
760 TRACE(
"(%p)->(%u %u %p)\n",
This, iTInfo, lcid, ppTInfo);
766 IVBSAXAttributes *iface,
780 if(!rgszNames || cNames == 0 || !rgDispId)
786 hr = ITypeInfo_GetIDsOfNames(
typeinfo, rgszNames, cNames, rgDispId);
794 IVBSAXAttributes *iface,
799 DISPPARAMS* pDispParams,
801 EXCEPINFO* pExcepInfo,
809 lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
815 pDispParams, pVarResult, pExcepInfo, puArgErr);
824 IVBSAXAttributes* iface,
828 return ISAXAttributes_getLength(&
This->ISAXAttributes_iface,
nLength);
832 IVBSAXAttributes* iface,
847 hr = ISAXAttributes_getURI(&
This->ISAXAttributes_iface, nIndex, &uriW, &
len);
855 IVBSAXAttributes* iface,
870 hr = ISAXAttributes_getLocalName(&
This->ISAXAttributes_iface, nIndex, &
nameW, &
len);
878 IVBSAXAttributes* iface,
887 TRACE(
"(%p)->(%d %p)\n",
This, nIndex, QName);
893 hr = ISAXAttributes_getQName(&
This->ISAXAttributes_iface, nIndex, &
nameW, &
len);
901 IVBSAXAttributes* iface,
912 IVBSAXAttributes* iface,
917 return ISAXAttributes_getIndexFromQName(&
This->ISAXAttributes_iface, QName,
922 IVBSAXAttributes* iface,
937 hr = ISAXAttributes_getType(&
This->ISAXAttributes_iface, nIndex, &
typeW, &
len);
945 IVBSAXAttributes* iface,
970 IVBSAXAttributes* iface,
985 hr = ISAXAttributes_getTypeFromQName(&
This->ISAXAttributes_iface, QName,
SysStringLen(QName),
994 IVBSAXAttributes* iface,
1009 hr = ISAXAttributes_getValue(&
This->ISAXAttributes_iface, nIndex, &
valueW, &
len);
1017 IVBSAXAttributes* iface,
1042 IVBSAXAttributes* iface,
1057 hr = ISAXAttributes_getValueFromQName(&
This->ISAXAttributes_iface, QName,
1065static const struct IVBSAXAttributesVtbl ivbsaxattributes_vtbl =
1067 ivbsaxattributes_QueryInterface,
1068 ivbsaxattributes_AddRef,
1069 ivbsaxattributes_Release,
1070 ivbsaxattributes_GetTypeInfoCount,
1071 ivbsaxattributes_GetTypeInfo,
1072 ivbsaxattributes_GetIDsOfNames,
1073 ivbsaxattributes_Invoke,
1074 ivbsaxattributes_get_length,
1075 ivbsaxattributes_getURI,
1076 ivbsaxattributes_getLocalName,
1077 ivbsaxattributes_getQName,
1078 ivbsaxattributes_getIndexFromName,
1079 ivbsaxattributes_getIndexFromQName,
1080 ivbsaxattributes_getType,
1081 ivbsaxattributes_getTypeFromName,
1082 ivbsaxattributes_getTypeFromQName,
1083 ivbsaxattributes_getValue,
1084 ivbsaxattributes_getValueFromName,
1085 ivbsaxattributes_getValueFromQName
1091 ISAXAttributes* iface,
1104 return ISAXLocator_AddRef(&
This->ISAXLocator_iface);
1112 return ISAXLocator_Release(&
This->ISAXLocator_iface);
1117 ISAXAttributes* iface,
1127static inline BOOL is_valid_attr_index(
const saxlocator *
locator,
int index)
1133 ISAXAttributes* iface,
1153 ISAXAttributes* iface,
1155 const WCHAR **pLocalName,
1156 int *pLocalNameLength)
1162 if(!pLocalName || !pLocalNameLength)
return E_POINTER;
1165 *pLocalName =
This->attributes[
index].szLocalname;
1171 ISAXAttributes* iface,
1173 const WCHAR **pQName,
1180 if(!pQName || !pQNameLength)
return E_POINTER;
1183 *pQName =
This->attributes[
index].szQName;
1189 ISAXAttributes* iface,
1193 const WCHAR **localName,
1194 int *pLocalNameSize,
1195 const WCHAR **QName,
1202 if(!
uri || !pUriLength || !localName || !pLocalNameSize
1203 || !QName || !pQNameLength)
return E_POINTER;
1208 *localName =
This->attributes[
index].szLocalname;
1210 *QName =
This->attributes[
index].szQName;
1218 ISAXAttributes* iface,
1221 const WCHAR *pLocalName,
1222 int cocalNameLength,
1232 for(
i=0;
i<
This->attr_count;
i++)
1237 if(cUriLength &&
memcmp(pUri,
This->attributes[
i].szURI,
1238 sizeof(
WCHAR)*cUriLength))
1240 if(cocalNameLength &&
memcmp(pLocalName,
This->attributes[
i].szLocalname,
1241 sizeof(
WCHAR)*cocalNameLength))
1252 ISAXAttributes* iface,
1253 const WCHAR *pQName,
1264 for(
i=0;
i<
This->attr_count;
i++)
1267 if(
memcmp(pQName,
This->attributes[
i].szQName,
sizeof(
WCHAR)*nQNameLength))
continue;
1277 ISAXAttributes* iface,
1279 const WCHAR **pType,
1284 FIXME(
"(%p)->(%d) stub\n",
This, nIndex);
1289 ISAXAttributes* iface,
1292 const WCHAR *pLocalName,
1294 const WCHAR **pType,
1305 ISAXAttributes* iface,
1306 const WCHAR *pQName,
1308 const WCHAR **pType,
1318 ISAXAttributes* iface,
1338 ISAXAttributes* iface,
1341 const WCHAR *pLocalName,
1352 hr = ISAXAttributes_getIndexFromName(iface,
1353 pUri, nUri, pLocalName, nLocalName, &
index);
1360 ISAXAttributes* iface,
1361 const WCHAR *pQName,
1371 hr = ISAXAttributes_getIndexFromQName(iface, pQName, nQName, &
index);
1377static const struct ISAXAttributesVtbl isaxattributes_vtbl =
1402 static const WCHAR ampescW[] = {
'&',
'#',
'3',
'8',
';',0};
1440static void free_attribute_values(saxlocator *
locator)
1458 int nb_namespaces,
const xmlChar **xmlNamespaces,
1459 int nb_attributes,
const xmlChar **xmlAttributes)
1461 static const xmlChar xmlns[] =
"xmlns";
1462 static const WCHAR xmlnsW[] = {
'x',
'm',
'l',
'n',
's',0 };
1464 struct _attributes *attrs;
1468 if ((
locator->saxreader->features & NamespacePrefixes) == 0)
1471 locator->attr_count = nb_namespaces + nb_attributes;
1475 attrs = heap_realloc_zero(
locator->attributes,
new_size *
sizeof(
struct _attributes));
1478 free_attribute_values(
locator);
1490 for (
i = 0;
i < nb_namespaces;
i++)
1495 attrs[nb_attributes+
i].szURI =
locator->namespaceUri;
1498 attrs[nb_attributes+
i].szValue = bstr_from_xmlChar(xmlNamespaces[2*
i+1]);
1501 if(!xmlNamespaces[2*
i])
1504 attrs[nb_attributes+
i].szQName = QName_from_xmlChar(xmlns, xmlNamespaces[2*
i]);
1507 for (
i = 0;
i < nb_attributes;
i++)
1509 static const xmlChar xmlA[] =
"xml";
1512 attrs[
i].szURI = bstr_from_xmlChar(xmlAttributes[
i*5+2]);
1515 attrs[
i].szURI = find_element_uri(
locator, xmlAttributes[
i*5+2]);
1518 attrs[
i].szLocalname = bstr_from_xmlChar(xmlAttributes[
i*5]);
1521 attrs[
i].szValue = saxreader_get_unescaped_value(xmlAttributes[
i*5+3], xmlAttributes[
i*5+4]-xmlAttributes[
i*5+3]);
1524 attrs[
i].szQName = QName_from_xmlChar(xmlAttributes[
i*5+1], xmlAttributes[
i*5]);
1531static void libxmlStartDocument(
void *
ctx)
1534 struct saxcontenthandler_iface *
handler = saxreader_get_contenthandler(
This->saxreader);
1541 while(
p>
This->pParserCtxt->input->base && *
p!=
'>')
1543 if(*
p==
'\n' || (*
p==
'\r' && *(
p+1)!=
'\n'))
1548 for(;
p>=
This->pParserCtxt->input->base && *
p!=
'\n' && *
p!=
'\r';
p--)
1553 if (
This->pParserCtxt->standalone != -1)
1556 This->saxreader->xmldecl_version = bstr_from_xmlChar(
This->pParserCtxt->version);
1559 if (saxreader_has_handler(
This, SAXContentHandler))
1561 if(
This->vbInterface)
1562 hr = IVBSAXContentHandler_startDocument(
handler->vbhandler);
1564 hr = ISAXContentHandler_startDocument(
handler->handler);
1566 if (sax_callback_failed(
This,
hr))
1567 format_error_message_from_id(
This,
hr);
1571static void libxmlEndDocument(
void *
ctx)
1574 struct saxcontenthandler_iface *
handler = saxreader_get_contenthandler(
This->saxreader);
1579 if(
This->column > 1)
1589 if (saxreader_has_handler(
This, SAXContentHandler))
1591 if(
This->vbInterface)
1592 hr = IVBSAXContentHandler_endDocument(
handler->vbhandler);
1594 hr = ISAXContentHandler_endDocument(
handler->handler);
1596 if (sax_callback_failed(
This,
hr))
1597 format_error_message_from_id(
This,
hr);
1601static void libxmlStartElementNS(
1613 struct saxcontenthandler_iface *
handler = saxreader_get_contenthandler(
This->saxreader);
1619 if(*(
This->pParserCtxt->input->cur) ==
'/')
1624 element = alloc_element_entry(localname,
prefix, nb_namespaces, namespaces);
1627 if (is_namespaces_enabled(
This->saxreader))
1631 for (
i = 0;
i < nb_namespaces && saxreader_has_handler(
This, SAXContentHandler);
i++)
1633 if (
This->vbInterface)
1634 hr = IVBSAXContentHandler_startPrefixMapping(
1639 hr = ISAXContentHandler_startPrefixMapping(
1646 if (sax_callback_failed(
This,
hr))
1648 format_error_message_from_id(
This,
hr);
1654 uri = find_element_uri(
This, URI);
1655 hr = SAXAttributes_populate(
This, nb_namespaces, namespaces, nb_attributes, attributes);
1656 if (
hr ==
S_OK && saxreader_has_handler(
This, SAXContentHandler))
1660 if (is_namespaces_enabled(
This->saxreader))
1665 if (
This->vbInterface)
1666 hr = IVBSAXContentHandler_startElement(
handler->vbhandler,
1669 hr = ISAXContentHandler_startElement(
handler->handler,
1673 &
This->ISAXAttributes_iface);
1675 if (sax_callback_failed(
This,
hr))
1676 format_error_message_from_id(
This,
hr);
1680static void libxmlEndElementNS(
1687 struct saxcontenthandler_iface *
handler = saxreader_get_contenthandler(
This->saxreader);
1694 p =
This->pParserCtxt->input->cur;
1699 while(
p>
This->pParserCtxt->input->base && *
p!=
'>')
1701 if(*
p==
'\n' || (*
p==
'\r' && *(
p+1)!=
'\n'))
1706 else if(*(
p-1)!=
'>' || *(
p-2)!=
'/')
1709 while(
p-2>=
This->pParserCtxt->input->base
1710 && *(
p-2)!=
'<' && *(
p-1)!=
'/')
1712 if(*
p==
'\n' || (*
p==
'\r' && *(
p+1)!=
'\n'))
1718 for(;
p>=
This->pParserCtxt->input->base && *
p!=
'\n' && *
p!=
'\r';
p--)
1721 uri = find_element_uri(
This, URI);
1724 if (!saxreader_has_handler(
This, SAXContentHandler))
1726 free_attribute_values(
This);
1727 This->attr_count = 0;
1732 if (is_namespaces_enabled(
This->saxreader))
1737 if (
This->vbInterface)
1738 hr = IVBSAXContentHandler_endElement(
1742 hr = ISAXContentHandler_endElement(
1748 free_attribute_values(
This);
1749 This->attr_count = 0;
1751 if (sax_callback_failed(
This,
hr))
1753 format_error_message_from_id(
This,
hr);
1758 if (is_namespaces_enabled(
This->saxreader))
1761 while (iterate_endprefix_index(
This,
element, &
i) && saxreader_has_handler(
This, SAXContentHandler))
1763 if (
This->vbInterface)
1764 hr = IVBSAXContentHandler_endPrefixMapping(
1767 hr = ISAXContentHandler_endPrefixMapping(
1770 if (sax_callback_failed(
This,
hr))
break;
1773 if (sax_callback_failed(
This,
hr))
1774 format_error_message_from_id(
This,
hr);
1780static void libxmlCharacters(
1791 if (!saxreader_has_handler(
This, SAXContentHandler))
return;
1795 while(
cur>=
This->pParserCtxt->input->base && *
cur!=
'>')
1797 if(*
cur==
'\n' || (*
cur==
'\r' && *(
cur+1)!=
'\n'))
1802 for(;
cur>=
This->pParserCtxt->input->base && *
cur!=
'\n' && *
cur!=
'\r';
cur--)
1806 if(*(ch-1)==
'\r')
cur--;
1843 Chars = pooled_bstr_from_xmlCharN(&
This->saxreader->pool,
cur,
end-
cur);
1844 hr = saxreader_saxcharacters(
This, Chars);
1846 if (sax_callback_failed(
This,
hr))
1848 format_error_message_from_id(
This,
hr);
1870static void libxmlSetDocumentLocator(
1875 struct saxcontenthandler_iface *
handler = saxreader_get_contenthandler(
This->saxreader);
1878 if (saxreader_has_handler(
This, SAXContentHandler))
1880 if(
This->vbInterface)
1881 hr = IVBSAXContentHandler_putref_documentLocator(
handler->vbhandler,
1882 &
This->IVBSAXLocator_iface);
1884 hr = ISAXContentHandler_putDocumentLocator(
handler->handler, &
This->ISAXLocator_iface);
1888 format_error_message_from_id(
This,
hr);
1894 struct saxlexicalhandler_iface *
handler = saxreader_get_lexicalhandler(
This->saxreader);
1900 while(
p-4>=
This->pParserCtxt->input->base
1901 &&
memcmp(
p-4,
"<!--",
sizeof(
char[4])))
1903 if(*
p==
'\n' || (*
p==
'\r' && *(
p+1)!=
'\n'))
1909 for(;
p>=
This->pParserCtxt->input->base && *
p!=
'\n' && *
p!=
'\r';
p--)
1912 if (!saxreader_has_handler(
This, SAXLexicalHandler))
return;
1914 bValue = pooled_bstr_from_xmlChar(&
This->saxreader->pool,
value);
1916 if (
This->vbInterface)
1917 hr = IVBSAXLexicalHandler_comment(
handler->vbhandler, &bValue);
1922 format_error_message_from_id(
This,
hr);
1925static void libxmlFatalError(
void *
ctx,
const char *
msg, ...)
1928 struct saxerrorhandler_iface *
handler = saxreader_get_errorhandler(
This->saxreader);
1951 if (!saxreader_has_handler(
This, SAXErrorHandler))
1959 FIXME(
"Error handling is not compatible.\n");
1961 if(
This->vbInterface)
1964 IVBSAXErrorHandler_fatalError(
handler->vbhandler, &
This->IVBSAXLocator_iface,
1989 while ((*
ptr ==
'\r' || *
ptr ==
'\n') &&
ptr >= bstr)
2002 if (*(
ptr+1) ==
'\r' || *(
ptr+1) ==
'\n')
2021 struct saxlexicalhandler_iface *lexical = saxreader_get_lexicalhandler(
locator->saxreader);
2027 if (saxreader_has_handler(
locator, SAXLexicalHandler))
2030 hr = IVBSAXLexicalHandler_startCDATA(lexical->vbhandler);
2032 hr = ISAXLexicalHandler_startCDATA(lexical->handler);
2037 format_error_message_from_id(
locator,
hr);
2061 hr = saxreader_saxcharacters(
locator, chars);
2077 hr = saxreader_saxcharacters(
locator, chars);
2081 if (saxreader_has_handler(
locator, SAXLexicalHandler))
2084 hr = IVBSAXLexicalHandler_endCDATA(lexical->vbhandler);
2086 hr = ISAXLexicalHandler_endCDATA(lexical->handler);
2090 format_error_message_from_id(
locator,
hr);
2095 FIXME(
"entity resolving not implemented, %s, %s\n", publicid, systemid);
2103 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2125 IVBSAXLocator_AddRef( iface );
2130static ULONG WINAPI ivbsaxlocator_AddRef(IVBSAXLocator* iface)
2132 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2134 return ISAXLocator_AddRef(&
This->ISAXLocator_iface);
2137static ULONG WINAPI ivbsaxlocator_Release(IVBSAXLocator* iface)
2139 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2140 return ISAXLocator_Release(&
This->ISAXLocator_iface);
2144static HRESULT WINAPI ivbsaxlocator_GetTypeInfoCount( IVBSAXLocator *iface,
UINT* pctinfo )
2146 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2156 IVBSAXLocator *iface,
2159 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2161 TRACE(
"(%p)->(%u %u %p)\n",
This, iTInfo, lcid, ppTInfo);
2167 IVBSAXLocator *iface,
2174 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2181 if(!rgszNames || cNames == 0 || !rgDispId)
2187 hr = ITypeInfo_GetIDsOfNames(
typeinfo, rgszNames, cNames, rgDispId);
2195 IVBSAXLocator *iface,
2200 DISPPARAMS* pDispParams,
2202 EXCEPINFO* pExcepInfo,
2205 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2210 lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
2216 pDispParams, pVarResult, pExcepInfo, puArgErr);
2225 IVBSAXLocator* iface,
2228 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2229 return ISAXLocator_getColumnNumber(&
This->ISAXLocator_iface, pnColumn);
2233 IVBSAXLocator* iface,
2236 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2237 return ISAXLocator_getLineNumber(&
This->ISAXLocator_iface, pnLine);
2242 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2243 const WCHAR *publicidW;
2252 hr = ISAXLocator_getPublicId(&
This->ISAXLocator_iface, &publicidW);
2261 saxlocator *
This = impl_from_IVBSAXLocator( iface );
2262 const WCHAR *systemidW;
2271 hr = ISAXLocator_getSystemId(&
This->ISAXLocator_iface, &systemidW);
2278static const struct IVBSAXLocatorVtbl VBSAXLocatorVtbl =
2280 ivbsaxlocator_QueryInterface,
2281 ivbsaxlocator_AddRef,
2282 ivbsaxlocator_Release,
2283 ivbsaxlocator_GetTypeInfoCount,
2284 ivbsaxlocator_GetTypeInfo,
2285 ivbsaxlocator_GetIDsOfNames,
2286 ivbsaxlocator_Invoke,
2287 ivbsaxlocator_get_columnNumber,
2288 ivbsaxlocator_get_lineNumber,
2289 ivbsaxlocator_get_publicId,
2290 ivbsaxlocator_get_systemId
2297 saxlocator *
This = impl_from_ISAXLocator( iface );
2318 ISAXLocator_AddRef( iface );
2323static ULONG WINAPI isaxlocator_AddRef(ISAXLocator* iface)
2325 saxlocator *
This = impl_from_ISAXLocator( iface );
2334 saxlocator *
This = impl_from_ISAXLocator( iface );
2341 element_entry *
element, *element2;
2363 ISAXXMLReader_Release(&
This->saxreader->ISAXXMLReader_iface);
2375 saxlocator *
This = impl_from_ISAXLocator( iface );
2377 *pnColumn =
This->column;
2385 saxlocator *
This = impl_from_ISAXLocator( iface );
2387 *pnLine =
This->line;
2393 const WCHAR ** ppwchPublicId)
2396 saxlocator *
This = impl_from_ISAXLocator( iface );
2402 This->publicId = publicId;
2409 *ppwchPublicId =
This->publicId;
2415 const WCHAR ** ppwchSystemId)
2418 saxlocator *
This = impl_from_ISAXLocator( iface );
2424 This->systemId = systemId;
2431 *ppwchSystemId =
This->systemId;
2435static const struct ISAXLocatorVtbl SAXLocatorVtbl =
2437 isaxlocator_QueryInterface,
2439 isaxlocator_Release,
2440 isaxlocator_getColumnNumber,
2441 isaxlocator_getLineNumber,
2442 isaxlocator_getPublicId,
2443 isaxlocator_getSystemId
2446static HRESULT SAXLocator_create(saxreader *
reader, saxlocator **ppsaxlocator,
BOOL vbInterface)
2448 static const WCHAR w3xmlns[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'w',
'w',
'w',
'.',
'w',
'3',
'.',
2449 'o',
'r',
'g',
'/',
'2',
'0',
'0',
'0',
'/',
'x',
'm',
'l',
'n',
's',
'/',0 };
2457 locator->IVBSAXLocator_iface.lpVtbl = &VBSAXLocatorVtbl;
2458 locator->ISAXLocator_iface.lpVtbl = &SAXLocatorVtbl;
2459 locator->IVBSAXAttributes_iface.lpVtbl = &ivbsaxattributes_vtbl;
2460 locator->ISAXAttributes_iface.lpVtbl = &isaxattributes_vtbl;
2462 locator->vbInterface = vbInterface;
2465 ISAXXMLReader_AddRef(&
reader->ISAXXMLReader_iface);
2479 ISAXXMLReader_Release(&
reader->ISAXXMLReader_iface);
2484 locator->attr_alloc_count = 8;
2486 locator->attributes = heap_alloc_zero(
sizeof(
struct _attributes)*
locator->attr_alloc_count);
2489 ISAXXMLReader_Release(&
reader->ISAXXMLReader_iface);
2499 TRACE(
"returning %p\n", *ppsaxlocator);
2520 const unsigned char *
buff = (
unsigned char*)
buffer;
2539 if ((
size >= 2) && *
ptr ==
'<' &&
ptr[1] !=
'?')
2553 ISAXLocator_Release(&
locator->ISAXLocator_iface);
2584 ISAXLocator_Release(&
locator->ISAXLocator_iface);
2603 locator->pParserCtxt = xmlCreatePushParserCtxt(
2608 ISAXLocator_Release(&
locator->ISAXLocator_iface);
2617 if (
FAILED(
hr) || !dataRead)
break;
2634 ISAXLocator_Release(&
locator->ISAXLocator_iface);
2648 free_bstr_pool(&
This->pool);
2650 switch(
V_VT(&varInput))
2661 LONG lBound, uBound;
2671 hr = internal_parseBuffer(
This, pSAData, dataRead, vbInterface);
2683 if(IUnknown_QueryInterface(
V_UNKNOWN(&varInput),
2684 &IID_IXMLDOMDocument, (
void**)&
xmlDoc) ==
S_OK)
2688 IXMLDOMDocument_get_xml(
xmlDoc, &bstrData);
2689 hr = internal_parseBuffer(
This, (
const char*)bstrData,
2691 IXMLDOMDocument_Release(
xmlDoc);
2697 IUnknown_QueryInterface(
V_UNKNOWN(&varInput), &IID_ISequentialStream, (
void**)&
stream);
2700 IUnknown_QueryInterface(
V_UNKNOWN(&varInput), &IID_IStream, (
void**)&
stream);
2705 ISequentialStream_Release(
stream);
2709 WARN(
"IUnknown* input doesn't support any of expected interfaces\n");
2716 WARN(
"vt %d not implemented\n",
V_VT(&varInput));
2737static HRESULT internal_parseURL(
2754 IMoniker_Release(mon);
2771 case SAXDeclHandler:
2772 riid = vb ? &IID_IVBSAXDeclHandler : &IID_ISAXDeclHandler;
2774 case SAXLexicalHandler:
2775 riid = vb ? &IID_IVBSAXLexicalHandler : &IID_ISAXLexicalHandler;
2778 ERR(
"wrong handler type %d\n",
type);
2800 ERR(
"value type %d not supported\n",
V_VT(
v));
2807static HRESULT internal_putProperty(
2820 if(!
memcmp(prop, PropertyDeclHandlerW,
sizeof(PropertyDeclHandlerW)))
2821 return saxreader_put_handler_from_variant(
This, SAXDeclHandler,
v, vbInterface);
2823 if(!
memcmp(prop, PropertyLexicalHandlerW,
sizeof(PropertyLexicalHandlerW)))
2824 return saxreader_put_handler_from_variant(
This, SAXLexicalHandler,
v, vbInterface);
2826 if(!
memcmp(prop, PropertyMaxXMLSizeW,
sizeof(PropertyMaxXMLSizeW)))
2833 if(!
memcmp(prop, PropertyMaxElementDepthW,
sizeof(PropertyMaxElementDepthW)))
2842 if(!
memcmp(prop, PropertyCharsetW,
sizeof(PropertyCharsetW)))
2845 if(!
memcmp(prop, PropertyDomNodeW,
sizeof(PropertyDomNodeW)))
2848 if(!
memcmp(prop, PropertyInputSourceW,
sizeof(PropertyInputSourceW)))
2851 if(!
memcmp(prop, PropertySchemaDeclHandlerW,
sizeof(PropertySchemaDeclHandlerW)))
2854 if(!
memcmp(prop, PropertyXMLDeclEncodingW,
sizeof(PropertyXMLDeclEncodingW)))
2857 if(!
memcmp(prop, PropertyXMLDeclStandaloneW,
sizeof(PropertyXMLDeclStandaloneW)))
2860 if(!
memcmp(prop, PropertyXMLDeclVersionW,
sizeof(PropertyXMLDeclVersionW)))
2872 if (!
memcmp(PropertyLexicalHandlerW, prop,
sizeof(PropertyLexicalHandlerW)))
2879 if (!
memcmp(PropertyDeclHandlerW, prop,
sizeof(PropertyDeclHandlerW)))
2886 if (!
memcmp(PropertyXmlDeclVersionW, prop,
sizeof(PropertyXmlDeclVersionW)))
2902 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
2928 IVBSAXXMLReader_AddRef( iface );
2933static ULONG WINAPI saxxmlreader_AddRef(IVBSAXXMLReader* iface)
2935 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
2941 IVBSAXXMLReader* iface)
2943 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
2953 for (
i = 0;
i < SAXHandler_Last;
i++)
2955 struct saxanyhandler_iface *saxiface = &
This->saxhandlers[
i].u.anyhandler;
2957 if (saxiface->handler)
2958 IUnknown_Release(saxiface->handler);
2960 if (saxiface->vbhandler)
2961 IUnknown_Release(saxiface->vbhandler);
2965 free_bstr_pool(&
This->pool);
2973static HRESULT WINAPI saxxmlreader_GetTypeInfoCount( IVBSAXXMLReader *iface,
UINT* pctinfo )
2975 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
2976 return IDispatchEx_GetTypeInfoCount(&
This->dispex.IDispatchEx_iface, pctinfo);
2980 IVBSAXXMLReader *iface,
2983 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
2984 return IDispatchEx_GetTypeInfo(&
This->dispex.IDispatchEx_iface,
2985 iTInfo, lcid, ppTInfo);
2989 IVBSAXXMLReader *iface,
2996 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
2997 return IDispatchEx_GetIDsOfNames(&
This->dispex.IDispatchEx_iface,
2998 riid, rgszNames, cNames, lcid, rgDispId);
3002 IVBSAXXMLReader *iface,
3007 DISPPARAMS* pDispParams,
3009 EXCEPINFO* pExcepInfo,
3012 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3013 return IDispatchEx_Invoke(&
This->dispex.IDispatchEx_iface,
3014 dispIdMember,
riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
3019 IVBSAXXMLReader* iface,
3023 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3024 return ISAXXMLReader_getFeature(&
This->ISAXXMLReader_iface, feature_name,
value);
3028 IVBSAXXMLReader* iface,
3032 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3033 return ISAXXMLReader_putFeature(&
This->ISAXXMLReader_iface, feature_name,
value);
3037 IVBSAXXMLReader* iface,
3041 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3046 IVBSAXXMLReader* iface,
3050 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3055 IVBSAXXMLReader* iface,
3056 IVBSAXEntityResolver **resolver)
3058 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3059 return saxreader_get_handler(
This, SAXEntityResolver,
TRUE, (
void**)resolver);
3063 IVBSAXXMLReader* iface,
3064 IVBSAXEntityResolver *resolver)
3066 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3067 return saxreader_put_handler(
This, SAXEntityResolver, resolver,
TRUE);
3071 IVBSAXXMLReader* iface,
3072 IVBSAXContentHandler **
handler)
3074 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3075 return saxreader_get_handler(
This, SAXContentHandler,
TRUE, (
void**)
handler);
3079 IVBSAXXMLReader* iface,
3080 IVBSAXContentHandler *
handler)
3082 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3087 IVBSAXXMLReader* iface,
3090 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3091 return saxreader_get_handler(
This, SAXDTDHandler,
TRUE, (
void**)
handler);
3095 IVBSAXXMLReader* iface,
3098 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3103 IVBSAXXMLReader* iface,
3106 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3107 return saxreader_get_handler(
This, SAXErrorHandler,
TRUE, (
void**)
handler);
3111 IVBSAXXMLReader* iface,
3114 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3119 IVBSAXXMLReader* iface,
3122 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3124 FIXME(
"(%p)->(%p) stub\n",
This, pBaseUrl);
3129 IVBSAXXMLReader* iface,
3132 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3133 return ISAXXMLReader_putBaseURL(&
This->ISAXXMLReader_iface, pBaseUrl);
3137 IVBSAXXMLReader* iface,
3138 BSTR *pSecureBaseUrl)
3140 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3142 FIXME(
"(%p)->(%p) stub\n",
This, pSecureBaseUrl);
3147 IVBSAXXMLReader* iface,
3150 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3151 return ISAXXMLReader_putSecureBaseURL(&
This->ISAXXMLReader_iface, secureBaseUrl);
3155 IVBSAXXMLReader* iface,
3158 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3159 return internal_parse(
This, varInput,
TRUE);
3163 IVBSAXXMLReader* iface,
3166 saxreader *
This = impl_from_IVBSAXXMLReader( iface );
3170static const struct IVBSAXXMLReaderVtbl VBSAXXMLReaderVtbl =
3172 saxxmlreader_QueryInterface,
3173 saxxmlreader_AddRef,
3174 saxxmlreader_Release,
3175 saxxmlreader_GetTypeInfoCount,
3176 saxxmlreader_GetTypeInfo,
3177 saxxmlreader_GetIDsOfNames,
3178 saxxmlreader_Invoke,
3179 saxxmlreader_getFeature,
3180 saxxmlreader_putFeature,
3181 saxxmlreader_getProperty,
3182 saxxmlreader_putProperty,
3183 saxxmlreader_get_entityResolver,
3184 saxxmlreader_put_entityResolver,
3185 saxxmlreader_get_contentHandler,
3186 saxxmlreader_put_contentHandler,
3187 saxxmlreader_get_dtdHandler,
3188 saxxmlreader_put_dtdHandler,
3189 saxxmlreader_get_errorHandler,
3190 saxxmlreader_put_errorHandler,
3191 saxxmlreader_get_baseURL,
3192 saxxmlreader_put_baseURL,
3193 saxxmlreader_get_secureBaseURL,
3194 saxxmlreader_put_secureBaseURL,
3196 saxxmlreader_parseURL
3203 saxreader *
This = impl_from_ISAXXMLReader( iface );
3204 return IVBSAXXMLReader_QueryInterface(&
This->IVBSAXXMLReader_iface,
riid,
ppvObject);
3207static ULONG WINAPI isaxxmlreader_AddRef(ISAXXMLReader* iface)
3209 saxreader *
This = impl_from_ISAXXMLReader( iface );
3210 return IVBSAXXMLReader_AddRef(&
This->IVBSAXXMLReader_iface);
3213static ULONG WINAPI isaxxmlreader_Release(ISAXXMLReader* iface)
3215 saxreader *
This = impl_from_ISAXXMLReader( iface );
3216 return IVBSAXXMLReader_Release(&
This->IVBSAXXMLReader_iface);
3221 ISAXXMLReader* iface,
3222 const WCHAR *feature_name,
3225 saxreader *
This = impl_from_ISAXXMLReader( iface );
3230 feature = get_saxreader_feature(feature_name);
3236 feature == NamespacePrefixes ||
3237 feature == ExhaustiveErrors ||
3246 ISAXXMLReader* iface,
3247 const WCHAR *feature_name,
3250 saxreader *
This = impl_from_ISAXXMLReader( iface );
3255 feature = get_saxreader_feature(feature_name);
3258 if ((
feature == ExhaustiveErrors &&
value == VARIANT_FALSE) ||
3259 (
feature == SchemaValidation &&
value == VARIANT_FALSE) ||
3266 if (
feature == LexicalHandlerParEntities ||
3268 feature == ExternalGeneralEntities ||
3269 feature == ExternalParameterEntities)
3280 ISAXXMLReader* iface,
3284 saxreader *
This = impl_from_ISAXXMLReader( iface );
3289 ISAXXMLReader* iface,
3293 saxreader *
This = impl_from_ISAXXMLReader( iface );
3298 ISAXXMLReader* iface,
3299 ISAXEntityResolver **resolver)
3301 saxreader *
This = impl_from_ISAXXMLReader( iface );
3302 return saxreader_get_handler(
This, SAXEntityResolver,
FALSE, (
void**)resolver);
3306 ISAXXMLReader* iface,
3307 ISAXEntityResolver *resolver)
3309 saxreader *
This = impl_from_ISAXXMLReader( iface );
3310 return saxreader_put_handler(
This, SAXEntityResolver, resolver,
FALSE);
3314 ISAXXMLReader* iface,
3317 saxreader *
This = impl_from_ISAXXMLReader( iface );
3318 return saxreader_get_handler(
This, SAXContentHandler,
FALSE, (
void**)
handler);
3322 ISAXXMLReader* iface,
3325 saxreader *
This = impl_from_ISAXXMLReader( iface );
3330 ISAXXMLReader* iface,
3333 saxreader *
This = impl_from_ISAXXMLReader( iface );
3338 ISAXXMLReader* iface,
3341 saxreader *
This = impl_from_ISAXXMLReader( iface );
3346 ISAXXMLReader* iface,
3349 saxreader *
This = impl_from_ISAXXMLReader( iface );
3350 return saxreader_get_handler(
This, SAXErrorHandler,
FALSE, (
void**)
handler);
3353static HRESULT WINAPI isaxxmlreader_putErrorHandler(ISAXXMLReader* iface, ISAXErrorHandler *
handler)
3355 saxreader *
This = impl_from_ISAXXMLReader( iface );
3360 ISAXXMLReader* iface,
3363 saxreader *
This = impl_from_ISAXXMLReader( iface );
3370 ISAXXMLReader* iface,
3371 const WCHAR *pBaseUrl)
3373 saxreader *
This = impl_from_ISAXXMLReader( iface );
3380 ISAXXMLReader* iface,
3381 const WCHAR **pSecureBaseUrl)
3383 saxreader *
This = impl_from_ISAXXMLReader( iface );
3384 FIXME(
"(%p)->(%p) stub\n",
This, pSecureBaseUrl);
3389 ISAXXMLReader* iface,
3390 const WCHAR *secureBaseUrl)
3392 saxreader *
This = impl_from_ISAXXMLReader( iface );
3399 ISAXXMLReader* iface,
3402 saxreader *
This = impl_from_ISAXXMLReader( iface );
3403 return internal_parse(
This, varInput,
FALSE);
3407 ISAXXMLReader* iface,
3410 saxreader *
This = impl_from_ISAXXMLReader( iface );
3414static const struct ISAXXMLReaderVtbl SAXXMLReaderVtbl =
3416 isaxxmlreader_QueryInterface,
3417 isaxxmlreader_AddRef,
3418 isaxxmlreader_Release,
3419 isaxxmlreader_getFeature,
3420 isaxxmlreader_putFeature,
3421 isaxxmlreader_getProperty,
3422 isaxxmlreader_putProperty,
3423 isaxxmlreader_getEntityResolver,
3424 isaxxmlreader_putEntityResolver,
3425 isaxxmlreader_getContentHandler,
3426 isaxxmlreader_putContentHandler,
3427 isaxxmlreader_getDTDHandler,
3428 isaxxmlreader_putDTDHandler,
3429 isaxxmlreader_getErrorHandler,
3430 isaxxmlreader_putErrorHandler,
3431 isaxxmlreader_getBaseURL,
3432 isaxxmlreader_putBaseURL,
3433 isaxxmlreader_getSecureBaseURL,
3434 isaxxmlreader_putSecureBaseURL,
3435 isaxxmlreader_parse,
3436 isaxxmlreader_parseURL
3439static const tid_t saxreader_iface_tids[] = {
3447 saxreader_iface_tids
3454 TRACE(
"(%p)\n", ppObj);
3460 reader->IVBSAXXMLReader_iface.lpVtbl = &VBSAXXMLReaderVtbl;
3461 reader->ISAXXMLReader_iface.lpVtbl = &SAXXMLReaderVtbl;
3469 reader->features = Namespaces | NamespacePrefixes;
3476 reader->sax.startDocument = libxmlStartDocument;
3477 reader->sax.endDocument = libxmlEndDocument;
3478 reader->sax.startElementNs = libxmlStartElementNS;
3479 reader->sax.endElementNs = libxmlEndElementNS;
3480 reader->sax.characters = libxmlCharacters;
3481 reader->sax.setDocumentLocator = libxmlSetDocumentLocator;
3482 reader->sax.comment = libxmlComment;
3483 reader->sax.error = libxmlFatalError;
3484 reader->sax.fatalError = libxmlFatalError;
3485 reader->sax.cdataBlock = libxml_cdatablock;
3486 reader->sax.resolveEntity = libxmlresolveentity;
3488 *ppObj = &
reader->IVBSAXXMLReader_iface;
3490 TRACE(
"returning iface %p\n", *ppObj);
3499 MESSAGE(
"This program tried to use a SAX XML Reader object, but\n"
3500 "libxml2 support was not present at compile time.\n");
XMLPUBFUN int XMLCALL xmlSAX2GetColumnNumber(void *ctx)
XMLPUBFUN const xmlChar *XMLCALL xmlSAX2GetSystemId(void *ctx)
XMLPUBFUN xmlParserInputPtr XMLCALL xmlSAX2ResolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
XMLPUBFUN const xmlChar *XMLCALL xmlSAX2GetPublicId(void *ctx)
XMLPUBFUN int XMLCALL xmlSAX2GetLineNumber(void *ctx)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
HRESULT get_typeinfo(enum type_id tid, ITypeInfo **ret)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
static const TCHAR empty_str[]
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
HRESULT detach_bsc(bsc_t *bsc)
HRESULT bind_url(IMoniker *mon, HRESULT(*onDataAvailable)(void *, char *, DWORD), void *obj, bsc_t **ret)
HRESULT create_moniker_from_url(LPCWSTR url, IMoniker **mon)
#define MultiByteToWideChar
static const WCHAR version[]
static const WCHAR valueW[]
UINT(* handler)(MSIPACKAGE *)
HRESULT SAXXMLReader_create(MSXML_VERSION version, LPVOID *ppObj)
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY *psa, UINT nDim, LONG *plLbound)
UINT WINAPI SafeArrayGetElemsize(SAFEARRAY *psa)
static const WCHAR typeW[]
@ XML_CHAR_ENCODING_UTF16LE
XMLPUBFUN const char *XMLCALL xmlGetCharEncodingName(xmlCharEncoding enc)
XMLPUBFUN xmlCharEncoding XMLCALL xmlDetectCharEncoding(const unsigned char *in, int len)
static unsigned char buff[32768]
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
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
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 * u
static const char * enc_name(unsigned char enc)
int __cdecl vsprintf(char *_Dest, const char *_Format, va_list _Args)
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
#define memmove(s1, s2, n)
static const char * debugstr_variant(const VARIANT *var)
static HRESULT WINAPI isaxattributes_getTypeFromQName(ISAXAttributes *iface, const WCHAR *pQName, int nQName, const WCHAR **pType, int *nType)
static ULONG WINAPI isaxattributes_AddRef(ISAXAttributes *iface)
static HRESULT WINAPI isaxattributes_getLength(ISAXAttributes *iface, int *length)
static ULONG WINAPI isaxattributes_Release(ISAXAttributes *iface)
static HRESULT WINAPI isaxattributes_getValue(ISAXAttributes *iface, int index, const WCHAR **value, int *nValue)
static HRESULT WINAPI isaxattributes_getValueFromQName(ISAXAttributes *iface, const WCHAR *pQName, int nQName, const WCHAR **pValue, int *nValue)
static HRESULT WINAPI isaxattributes_getValueFromName(ISAXAttributes *iface, const WCHAR *pUri, int nUri, const WCHAR *pLocalName, int nLocalName, const WCHAR **pValue, int *nValue)
static HRESULT WINAPI isaxattributes_getIndexFromName(ISAXAttributes *iface, const WCHAR *pUri, int cUriLength, const WCHAR *pLocalName, int cocalNameLength, int *index)
static HRESULT WINAPI isaxattributes_getQName(ISAXAttributes *iface, int index, const WCHAR **QName, int *QNameLength)
static HRESULT WINAPI isaxattributes_getType(ISAXAttributes *iface, int nIndex, const WCHAR **pType, int *pTypeLength)
static HRESULT WINAPI isaxattributes_QueryInterface(ISAXAttributes *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI isaxattributes_getName(ISAXAttributes *iface, int nIndex, const WCHAR **pUri, int *pUriLength, const WCHAR **pLocalName, int *pLocalNameSize, const WCHAR **pQName, int *pQNameLength)
static HRESULT WINAPI isaxattributes_getIndexFromQName(ISAXAttributes *iface, const WCHAR *pQName, int nQNameLength, int *index)
static HRESULT WINAPI isaxattributes_getLocalName(ISAXAttributes *iface, int nIndex, const WCHAR **pLocalName, int *pLocalNameLength)
static HRESULT WINAPI isaxattributes_getTypeFromName(ISAXAttributes *iface, const WCHAR *pUri, int nUri, const WCHAR *pLocalName, int nLocalName, const WCHAR **pType, int *nType)
static HRESULT WINAPI isaxattributes_getURI(ISAXAttributes *iface, int nIndex, const WCHAR **pUrl, int *pUriSize)
static VARIANTARG static DISPID
INTERNETFEATURELIST feature
static IBindStatusCallbackEx bsc
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
static HRESULT return_bstrn(const WCHAR *value, int len, BSTR *p)
static HRESULT return_bstr(const WCHAR *value, BSTR *p)
static mxattributes * impl_from_IVBSAXAttributes(IVBSAXAttributes *iface)
static mxattributes * impl_from_ISAXAttributes(ISAXAttributes *iface)
UINT WINAPI SysStringByteLen(BSTR str)
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
XMLPUBFUN int XMLCALL xmlSwitchEncoding(xmlParserCtxtPtr ctxt, xmlCharEncoding enc)
XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateMemoryParserCtxt(const char *buffer, int size)
#define IsEqualGUID(rguid1, rguid2)
XMLPUBVAR xmlFreeFunc xmlFree
XMLPUBFUN void XMLCALL xmlStopParser(xmlParserCtxtPtr ctxt)
XMLPUBFUN void XMLCALL xmlFreeParserCtxt(xmlParserCtxtPtr ctxt)
XMLPUBFUN int XMLCALL xmlParseDocument(xmlParserCtxtPtr ctxt)
XMLPUBFUN xmlChar *XMLCALL xmlBuildQName(const xmlChar *ncname, const xmlChar *prefix, xmlChar *memory, int len)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Character const *const prefix
#define CONTAINING_RECORD(address, type, field)
#define FORMAT_MESSAGE_FROM_SYSTEM
_In_ DWORD _Out_ _In_ WORD wFlags
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
XMLPUBFUN xmlChar *XMLCALL xmlStrdup(const xmlChar *cur)
XMLPUBFUN int XMLCALL xmlStrEqual(const xmlChar *str1, const xmlChar *str2)