msxml3: Use single helper to test for handler presence.
This commit is contained in:
parent
0204b30e84
commit
007ac83fc9
|
@ -324,6 +324,12 @@ static inline saxlocator *impl_from_ISAXAttributes( ISAXAttributes *iface )
|
||||||
return CONTAINING_RECORD(iface, saxlocator, ISAXAttributes_iface);
|
return CONTAINING_RECORD(iface, saxlocator, ISAXAttributes_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int saxreader_has_handler(const saxlocator *locator, enum saxhandler_type type)
|
||||||
|
{
|
||||||
|
return (locator->vbInterface && locator->saxreader->saxhandlers[type].vbhandler) ||
|
||||||
|
(!locator->vbInterface && locator->saxreader->saxhandlers[type].handler);
|
||||||
|
}
|
||||||
|
|
||||||
/* property names */
|
/* property names */
|
||||||
static const WCHAR PropertyCharsetW[] = {
|
static const WCHAR PropertyCharsetW[] = {
|
||||||
'c','h','a','r','s','e','t',0
|
'c','h','a','r','s','e','t',0
|
||||||
|
@ -394,24 +400,6 @@ static BOOL is_namespaces_enabled(const saxreader *reader)
|
||||||
return (reader->version < MSXML4) || (reader->features & Namespaces);
|
return (reader->version < MSXML4) || (reader->features & Namespaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int has_content_handler(const saxlocator *locator)
|
|
||||||
{
|
|
||||||
return (locator->vbInterface && locator->saxreader->saxhandlers[SAXContentHandler].vbhandler) ||
|
|
||||||
(!locator->vbInterface && locator->saxreader->saxhandlers[SAXContentHandler].handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int has_lexical_handler(const saxlocator *locator)
|
|
||||||
{
|
|
||||||
return (locator->vbInterface && locator->saxreader->saxhandlers[SAXLexicalHandler].vbhandler) ||
|
|
||||||
(!locator->vbInterface && locator->saxreader->saxhandlers[SAXLexicalHandler].handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int has_error_handler(const saxlocator *locator)
|
|
||||||
{
|
|
||||||
return (locator->vbInterface && locator->saxreader->saxhandlers[SAXErrorHandler].vbhandler) ||
|
|
||||||
(!locator->vbInterface && locator->saxreader->saxhandlers[SAXErrorHandler].handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BSTR build_qname(BSTR prefix, BSTR local)
|
static BSTR build_qname(BSTR prefix, BSTR local)
|
||||||
{
|
{
|
||||||
if (prefix && *prefix)
|
if (prefix && *prefix)
|
||||||
|
@ -639,7 +627,7 @@ static void format_error_message_from_id(saxlocator *This, HRESULT hr)
|
||||||
xmlStopParser(This->pParserCtxt);
|
xmlStopParser(This->pParserCtxt);
|
||||||
This->ret = hr;
|
This->ret = hr;
|
||||||
|
|
||||||
if(has_error_handler(This))
|
if (saxreader_has_handler(This, SAXErrorHandler))
|
||||||
{
|
{
|
||||||
WCHAR msg[1024];
|
WCHAR msg[1024];
|
||||||
if(!FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM,
|
if(!FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM,
|
||||||
|
@ -1323,7 +1311,7 @@ static void libxmlStartDocument(void *ctx)
|
||||||
This->column++;
|
This->column++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(has_content_handler(This))
|
if (saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
if(This->vbInterface)
|
if(This->vbInterface)
|
||||||
hr = IVBSAXContentHandler_startDocument(handler->vbhandler);
|
hr = IVBSAXContentHandler_startDocument(handler->vbhandler);
|
||||||
|
@ -1353,7 +1341,7 @@ static void libxmlEndDocument(void *ctx)
|
||||||
|
|
||||||
if(This->ret != S_OK) return;
|
if(This->ret != S_OK) return;
|
||||||
|
|
||||||
if(has_content_handler(This))
|
if (saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
if(This->vbInterface)
|
if(This->vbInterface)
|
||||||
hr = IVBSAXContentHandler_endDocument(handler->vbhandler);
|
hr = IVBSAXContentHandler_endDocument(handler->vbhandler);
|
||||||
|
@ -1395,7 +1383,7 @@ static void libxmlStartElementNS(
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < nb_namespaces && has_content_handler(This); i++)
|
for (i = 0; i < nb_namespaces && saxreader_has_handler(This, SAXContentHandler); i++)
|
||||||
{
|
{
|
||||||
if (This->vbInterface)
|
if (This->vbInterface)
|
||||||
hr = IVBSAXContentHandler_startPrefixMapping(
|
hr = IVBSAXContentHandler_startPrefixMapping(
|
||||||
|
@ -1420,7 +1408,7 @@ static void libxmlStartElementNS(
|
||||||
|
|
||||||
uri = find_element_uri(This, URI);
|
uri = find_element_uri(This, URI);
|
||||||
hr = SAXAttributes_populate(This, nb_namespaces, namespaces, nb_attributes, attributes);
|
hr = SAXAttributes_populate(This, nb_namespaces, namespaces, nb_attributes, attributes);
|
||||||
if (hr == S_OK && has_content_handler(This))
|
if (hr == S_OK && saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
BSTR local;
|
BSTR local;
|
||||||
|
|
||||||
|
@ -1488,7 +1476,7 @@ static void libxmlEndElementNS(
|
||||||
uri = find_element_uri(This, URI);
|
uri = find_element_uri(This, URI);
|
||||||
element = pop_element_ns(This);
|
element = pop_element_ns(This);
|
||||||
|
|
||||||
if (!has_content_handler(This))
|
if (!saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
This->nb_attributes = 0;
|
This->nb_attributes = 0;
|
||||||
free_element_entry(element);
|
free_element_entry(element);
|
||||||
|
@ -1523,7 +1511,7 @@ static void libxmlEndElementNS(
|
||||||
if (is_namespaces_enabled(This->saxreader))
|
if (is_namespaces_enabled(This->saxreader))
|
||||||
{
|
{
|
||||||
int i = -1;
|
int i = -1;
|
||||||
while (iterate_endprefix_index(This, element, &i) && has_content_handler(This))
|
while (iterate_endprefix_index(This, element, &i) && saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
if (This->vbInterface)
|
if (This->vbInterface)
|
||||||
hr = IVBSAXContentHandler_endPrefixMapping(
|
hr = IVBSAXContentHandler_endPrefixMapping(
|
||||||
|
@ -1554,7 +1542,7 @@ static void libxmlCharacters(
|
||||||
xmlChar *cur, *end;
|
xmlChar *cur, *end;
|
||||||
BOOL lastEvent = FALSE;
|
BOOL lastEvent = FALSE;
|
||||||
|
|
||||||
if(!(has_content_handler(This))) return;
|
if (!saxreader_has_handler(This, SAXContentHandler)) return;
|
||||||
|
|
||||||
update_position(This, FALSE);
|
update_position(This, FALSE);
|
||||||
cur = (xmlChar*)This->pParserCtxt->input->cur;
|
cur = (xmlChar*)This->pParserCtxt->input->cur;
|
||||||
|
@ -1644,7 +1632,7 @@ static void libxmlSetDocumentLocator(
|
||||||
struct saxcontenthandler_iface *handler = saxreader_get_contenthandler(This->saxreader);
|
struct saxcontenthandler_iface *handler = saxreader_get_contenthandler(This->saxreader);
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
if(has_content_handler(This))
|
if (saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
if(This->vbInterface)
|
if(This->vbInterface)
|
||||||
hr = IVBSAXContentHandler_putref_documentLocator(handler->vbhandler,
|
hr = IVBSAXContentHandler_putref_documentLocator(handler->vbhandler,
|
||||||
|
@ -1678,7 +1666,7 @@ static void libxmlComment(void *ctx, const xmlChar *value)
|
||||||
for(; p>=This->pParserCtxt->input->base && *p!='\n' && *p!='\r'; p--)
|
for(; p>=This->pParserCtxt->input->base && *p!='\n' && *p!='\r'; p--)
|
||||||
This->column++;
|
This->column++;
|
||||||
|
|
||||||
if (!has_lexical_handler(This)) return;
|
if (!saxreader_has_handler(This, SAXLexicalHandler)) return;
|
||||||
|
|
||||||
bValue = pooled_bstr_from_xmlChar(&This->saxreader->pool, value);
|
bValue = pooled_bstr_from_xmlChar(&This->saxreader->pool, value);
|
||||||
|
|
||||||
|
@ -1717,7 +1705,7 @@ static void libxmlFatalError(void *ctx, const char *msg, ...)
|
||||||
TRACE("fatal error for %p: %s\n", This, debugstr_w(error));
|
TRACE("fatal error for %p: %s\n", This, debugstr_w(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!has_error_handler(This))
|
if (!saxreader_has_handler(This, SAXErrorHandler))
|
||||||
{
|
{
|
||||||
xmlStopParser(This->pParserCtxt);
|
xmlStopParser(This->pParserCtxt);
|
||||||
This->ret = E_FAIL;
|
This->ret = E_FAIL;
|
||||||
|
@ -1767,7 +1755,7 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
|
||||||
for(; beg>=This->pParserCtxt->input->base && *beg!='\n' && *beg!='\r'; beg--)
|
for(; beg>=This->pParserCtxt->input->base && *beg!='\n' && *beg!='\r'; beg--)
|
||||||
This->column++;
|
This->column++;
|
||||||
|
|
||||||
if (has_lexical_handler(This))
|
if (saxreader_has_handler(This, SAXLexicalHandler))
|
||||||
{
|
{
|
||||||
if (This->vbInterface)
|
if (This->vbInterface)
|
||||||
hr = IVBSAXLexicalHandler_startCDATA(lexical->vbhandler);
|
hr = IVBSAXLexicalHandler_startCDATA(lexical->vbhandler);
|
||||||
|
@ -1801,7 +1789,7 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
|
||||||
|
|
||||||
if(change) *end = '\n';
|
if(change) *end = '\n';
|
||||||
|
|
||||||
if (has_content_handler(This))
|
if (saxreader_has_handler(This, SAXContentHandler))
|
||||||
{
|
{
|
||||||
Chars = pooled_bstr_from_xmlCharN(&This->saxreader->pool, cur, end-cur+1);
|
Chars = pooled_bstr_from_xmlCharN(&This->saxreader->pool, cur, end-cur+1);
|
||||||
if (This->vbInterface)
|
if (This->vbInterface)
|
||||||
|
@ -1820,7 +1808,7 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
|
||||||
cur = end;
|
cur = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_lexical_handler(This))
|
if (saxreader_has_handler(This, SAXLexicalHandler))
|
||||||
{
|
{
|
||||||
if (This->vbInterface)
|
if (This->vbInterface)
|
||||||
hr = IVBSAXLexicalHandler_endCDATA(lexical->vbhandler);
|
hr = IVBSAXLexicalHandler_endCDATA(lexical->vbhandler);
|
||||||
|
|
Loading…
Reference in New Issue