msxml3: Use single helper to test for handler presence.

oldstable
Nikolay Sivov 2012-07-17 09:58:36 +04:00 committed by Alexandre Julliard
parent 0204b30e84
commit 007ac83fc9
1 changed files with 20 additions and 32 deletions

View File

@ -324,6 +324,12 @@ static inline saxlocator *impl_from_ISAXAttributes( 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 */
static const WCHAR PropertyCharsetW[] = {
'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);
}
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)
{
if (prefix && *prefix)
@ -639,7 +627,7 @@ static void format_error_message_from_id(saxlocator *This, HRESULT hr)
xmlStopParser(This->pParserCtxt);
This->ret = hr;
if(has_error_handler(This))
if (saxreader_has_handler(This, SAXErrorHandler))
{
WCHAR msg[1024];
if(!FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM,
@ -1323,7 +1311,7 @@ static void libxmlStartDocument(void *ctx)
This->column++;
}
if(has_content_handler(This))
if (saxreader_has_handler(This, SAXContentHandler))
{
if(This->vbInterface)
hr = IVBSAXContentHandler_startDocument(handler->vbhandler);
@ -1353,7 +1341,7 @@ static void libxmlEndDocument(void *ctx)
if(This->ret != S_OK) return;
if(has_content_handler(This))
if (saxreader_has_handler(This, SAXContentHandler))
{
if(This->vbInterface)
hr = IVBSAXContentHandler_endDocument(handler->vbhandler);
@ -1395,7 +1383,7 @@ static void libxmlStartElementNS(
{
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)
hr = IVBSAXContentHandler_startPrefixMapping(
@ -1420,7 +1408,7 @@ static void libxmlStartElementNS(
uri = find_element_uri(This, URI);
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;
@ -1488,7 +1476,7 @@ static void libxmlEndElementNS(
uri = find_element_uri(This, URI);
element = pop_element_ns(This);
if (!has_content_handler(This))
if (!saxreader_has_handler(This, SAXContentHandler))
{
This->nb_attributes = 0;
free_element_entry(element);
@ -1523,7 +1511,7 @@ static void libxmlEndElementNS(
if (is_namespaces_enabled(This->saxreader))
{
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)
hr = IVBSAXContentHandler_endPrefixMapping(
@ -1554,7 +1542,7 @@ static void libxmlCharacters(
xmlChar *cur, *end;
BOOL lastEvent = FALSE;
if(!(has_content_handler(This))) return;
if (!saxreader_has_handler(This, SAXContentHandler)) return;
update_position(This, FALSE);
cur = (xmlChar*)This->pParserCtxt->input->cur;
@ -1644,7 +1632,7 @@ static void libxmlSetDocumentLocator(
struct saxcontenthandler_iface *handler = saxreader_get_contenthandler(This->saxreader);
HRESULT hr = S_OK;
if(has_content_handler(This))
if (saxreader_has_handler(This, SAXContentHandler))
{
if(This->vbInterface)
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--)
This->column++;
if (!has_lexical_handler(This)) return;
if (!saxreader_has_handler(This, SAXLexicalHandler)) return;
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));
}
if(!has_error_handler(This))
if (!saxreader_has_handler(This, SAXErrorHandler))
{
xmlStopParser(This->pParserCtxt);
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--)
This->column++;
if (has_lexical_handler(This))
if (saxreader_has_handler(This, SAXLexicalHandler))
{
if (This->vbInterface)
hr = IVBSAXLexicalHandler_startCDATA(lexical->vbhandler);
@ -1801,7 +1789,7 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
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);
if (This->vbInterface)
@ -1820,7 +1808,7 @@ static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
cur = end;
}
if (has_lexical_handler(This))
if (saxreader_has_handler(This, SAXLexicalHandler))
{
if (This->vbInterface)
hr = IVBSAXLexicalHandler_endCDATA(lexical->vbhandler);