add pugixml

Origin commit data
------------------
Branch: ni/coolstream
Commit: 422c91d117
Author: Jacek Jendrzej <overx300@gmail.com>
Date: 2015-04-27 (Mon, 27 Apr 2015)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
Jacek Jendrzej
2015-04-27 22:26:45 +02:00
parent 76b56751fa
commit c30289f3f0
16 changed files with 236 additions and 111 deletions

View File

@@ -1,11 +1,18 @@
AM_CPPFLAGS = \
-I$(top_builddir) \
-I$(top_srcdir) \
-I$(srcdir)/xmltok
-I$(top_srcdir)
if USE_PUGIXML
else
AM_CPPFLAGS += -I$(srcdir)/xmltok
endif
AM_CXXFLAGS = -fno-rtti -fno-exceptions
noinst_LIBRARIES = libtuxbox-xmltree.a
libtuxbox_xmltree_a_SOURCES = \
hashtab.c xmlparse.cpp xmlrole.c xmltok.c xmltree.cpp xmlinterface.cpp
libtuxbox_xmltree_a_SOURCES = xmlinterface.cpp
if USE_PUGIXML
else
libtuxbox_xmltree_a_SOURCES += hashtab.c xmlparse.cpp xmlrole.c xmltok.c xmltree.cpp
endif

View File

@@ -68,17 +68,46 @@ long xmlGetSignedNumericAttribute(const xmlNodePtr node, const char *name, const
xmlNodePtr xmlGetNextOccurence(xmlNodePtr cur, const char * s)
{
while ((cur != NULL) && (strcmp(xmlGetName(cur), s) != 0))
cur = cur->xmlNextNode;
cur = xmlNextNode(cur);
return cur;
}
#if USE_PUGIXML
std::string to_utf8(unsigned int cp)
{
std::string result;
int count;
if (cp < 0x0080)
count = 1;
else if (cp < 0x0800)
count = 2;
else if (cp < 0x10000)
count = 3;
else if (cp <= 0x10FFFF)
count = 4;
else
return result;
result.resize(count);
for (int i = count-1; i > 0; --i)
{
result[i] = (char) (0x80 | (cp & 0x3F));
cp >>= 6;
}
for (int i = 0; i < count; ++i)
cp |= (1 << (7-i));
result[0] = (char) cp;
return result;
}
#endif
std::string Unicode_Character_to_UTF8(const int character)
{
#ifdef USE_LIBXML
xmlChar buf[5];
int length = xmlCopyChar(4, buf, character);
return std::string((char*)buf, length);
#elif (defined( USE_PUGIXML ) )
return to_utf8(character);
#else /* USE_LIBXML */
char buf[XML_UTF8_ENCODE_MAX];
int length = XmlUtf8Encode(character, buf);
@@ -124,7 +153,7 @@ std::string convert_UTF8_To_UTF8_XML(const char* s)
}
#ifdef USE_LIBXML
xmlDocPtr parseXml(const char * data)
xmlDocPtr parseXml(const char * data,char *)
{
xmlDocPtr doc;
xmlNodePtr cur;
@@ -150,7 +179,7 @@ xmlDocPtr parseXml(const char * data)
}
}
xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* = true */)
xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* = true */,char *)
{
xmlDocPtr doc;
xmlNodePtr cur;
@@ -175,6 +204,46 @@ xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* =
return doc;
}
}
#elif (defined( USE_PUGIXML ) )
xmlDocPtr parseXml(const char * data,const char* /*encoding*/)
{
pugi::xml_document* tree_parser = new pugi::xml_document();
if (!tree_parser->load_string(data))
{
delete tree_parser;
return NULL;
}
if (!tree_parser->root())
{
printf("Error: No Root Node\n");
delete tree_parser;
return NULL;
}
return tree_parser;
}
xmlDocPtr parseXmlFile(const char * filename, bool,const char* /*encoding*/)
{
pugi::xml_document* tree_parser = new pugi::xml_document();
if (!tree_parser->load_file(filename))
{
delete tree_parser;
return NULL;
}
if (!tree_parser->root())
{
printf("Error: No Root Node\n");
delete tree_parser;
return NULL;
}
return tree_parser;
}
#else /* USE_LIBXML */
xmlDocPtr parseXml(const char * data,const char *encoding)
{

View File

@@ -43,18 +43,42 @@
#define xmlNextNode next
inline const char* xmlGetAttribute (xmlNodePtr cur, const char * s) { return (const char *)xmlGetProp(cur, (const xmlChar *)s); };
inline const char* xmlGetName (xmlNodePtr cur) { return (const char *)(cur->name); };
/* ------------------------------------------------ USE_PUGIXML ------------------------------------------------*/
#elif (defined( USE_PUGIXML ) )
#include <pugixml.hpp>
typedef pugi::xml_document *xmlDocPtr;
typedef pugi::xml_node xmlNodePtr;
inline void xmlFreeDoc (xmlDocPtr doc) { delete doc; }
inline const char* xmlGetName (const xmlNodePtr cur) { return cur.name(); }
inline xmlNodePtr xmlNextNode (xmlNodePtr cur) { return cur.next_sibling(); }
inline xmlNodePtr xmlChildrenNode (xmlNodePtr cur) { return cur.first_child(); }
inline const char* xmlGetData (xmlNodePtr cur) { return cur.child_value(); }
inline const char* xmlGetAttribute (const xmlNodePtr cur, const char *s)
{
if(cur.attribute(s))
return cur.attribute(s).value();
else
return NULL;
}
inline xmlNodePtr xmlDocGetRootElement(xmlDocPtr doc)
{
xmlNodePtr firstNode = doc->root().first_child();
return firstNode;
}
/* ------------------------------------------------ END of USE_PUGIXML ------------------------------------------------*/
#else /* use libxmltree */
#include "xmltree.h"
typedef XMLTreeParser* xmlDocPtr;
typedef XMLTreeNode* xmlNodePtr;
#define xmlChildrenNode GetChild()
#define xmlNextNode GetNext()
inline xmlNodePtr xmlDocGetRootElement(xmlDocPtr doc) { return doc->RootNode(); }
inline void xmlFreeDoc (xmlDocPtr doc) { delete doc; }
inline const char* xmlGetAttribute (xmlNodePtr cur, const char *s) { return cur->GetAttributeValue(s); }
inline const char* xmlGetName (xmlNodePtr cur) { return cur->GetType(); }
inline const char* xmlGetData (xmlNodePtr cur) { return cur->GetData(); }
inline xmlNodePtr xmlChildrenNode (xmlNodePtr cur) { return cur->GetChild(); }
inline xmlNodePtr xmlNextNode (xmlNodePtr cur) { return cur->GetNext(); }
inline xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc) { return doc->RootNode(); }
inline void xmlFreeDoc (xmlDocPtr doc) { delete doc; }
inline const char* xmlGetAttribute (xmlNodePtr cur, const char *s) { return cur->GetAttributeValue(s); }
inline const char* xmlGetName (xmlNodePtr cur) { return cur->GetType(); }
inline const char* xmlGetData (xmlNodePtr cur) { return cur->GetData(); }
#endif /* USE_LIBXML */