From d0fdeeed970c8a60d3f07a7ac2f605e186b671ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Tue, 21 Jul 2009 19:10:20 +0200 Subject: Add namespace support to LibXML parser. diff --git a/Swiften/Parser/LibXMLParser.cpp b/Swiften/Parser/LibXMLParser.cpp index 8f14f21..91ff72b 100644 --- a/Swiften/Parser/LibXMLParser.cpp +++ b/Swiften/Parser/LibXMLParser.cpp @@ -9,20 +9,16 @@ namespace Swift { -static void handleStartElement(void *client, const xmlChar* name, const xmlChar** attributes) { +static void handleStartElement(void *client, const xmlChar* name, const xmlChar*, const xmlChar* xmlns, int, const xmlChar**, int nbAttributes, int, const xmlChar ** attributes) { AttributeMap attributeValues; - const xmlChar** currentAttribute = attributes; - if (currentAttribute) { - while (*currentAttribute) { - attributeValues[String(reinterpret_cast(*currentAttribute))] = String(reinterpret_cast(*(currentAttribute+1))); - currentAttribute += 2; - } + for (int i = 0; i < nbAttributes*5; i += 5) { + attributeValues[String(reinterpret_cast(attributes[i]))] = String(reinterpret_cast(attributes[i+3]), attributes[i+4]-attributes[i+3]); } - static_cast(client)->handleStartElement(reinterpret_cast(name), attributeValues); + static_cast(client)->handleStartElement(reinterpret_cast(name), (xmlns ? reinterpret_cast(xmlns) : String()), attributeValues); } -static void handleEndElement(void *client, const xmlChar* name) { - static_cast(client)->handleEndElement(reinterpret_cast(name)); +static void handleEndElement(void *client, const xmlChar* name, const xmlChar*, const xmlChar* xmlns) { + static_cast(client)->handleEndElement(reinterpret_cast(name), (xmlns ? reinterpret_cast(xmlns) : String())); } static void handleCharacterData(void* client, const xmlChar* data, int len) { @@ -40,8 +36,8 @@ static void handleWarning(void*, const char*, ... ) { LibXMLParser::LibXMLParser(XMLParserClient* client) : XMLParser(client) { memset(&handler_, 0, sizeof(handler_) ); handler_.initialized = XML_SAX2_MAGIC; - handler_.startElement = &handleStartElement; - handler_.endElement = &handleEndElement; + handler_.startElementNs = &handleStartElement; + handler_.endElementNs = &handleEndElement; handler_.characters = &handleCharacterData; handler_.warning = &handleWarning; handler_.error = &handleError; diff --git a/Swiften/Parser/LibXMLParser.h b/Swiften/Parser/LibXMLParser.h index f8faef6..58a65f1 100644 --- a/Swiften/Parser/LibXMLParser.h +++ b/Swiften/Parser/LibXMLParser.h @@ -1,5 +1,4 @@ -#ifndef SWIFTEN_LibXMLParser_H -#define SWIFTEN_LibXMLParser_H +#pragma once #include #include @@ -19,5 +18,3 @@ namespace Swift { xmlParserCtxtPtr context_; }; } - -#endif -- cgit v0.10.2-6-g49f6