mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-26 15:02:56 +02:00
Merge remote-tracking branch 'uncool/cst-next'
This need buildfixes and some functional updates...
This commit is contained in:
@@ -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
|
||||
|
@@ -47,7 +47,7 @@
|
||||
|
||||
unsigned long xmlGetNumericAttribute(const xmlNodePtr node, const char *name, const int base)
|
||||
{
|
||||
char *ptr = xmlGetAttribute(node, name);
|
||||
const char *ptr = xmlGetAttribute(node, name);
|
||||
|
||||
if (!ptr)
|
||||
return 0;
|
||||
@@ -57,7 +57,7 @@ unsigned long xmlGetNumericAttribute(const xmlNodePtr node, const char *name, co
|
||||
|
||||
long xmlGetSignedNumericAttribute(const xmlNodePtr node, const char *name, const int base)
|
||||
{
|
||||
char *ptr = xmlGetAttribute(node, name);
|
||||
const char *ptr = xmlGetAttribute(node, name);
|
||||
|
||||
if (!ptr)
|
||||
return 0;
|
||||
@@ -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,12 +204,70 @@ xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* =
|
||||
return doc;
|
||||
}
|
||||
}
|
||||
|
||||
#elif (defined( USE_PUGIXML ) )
|
||||
|
||||
#include <fstream>
|
||||
|
||||
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_encoding enc = pugi::encoding_auto;
|
||||
if(encoding==NULL){
|
||||
std::ifstream in;
|
||||
in.open(filename);
|
||||
if (in.is_open()) {
|
||||
std::string line;
|
||||
getline(in, line);
|
||||
for (std::string::iterator it = line.begin(); it != line.end(); ++ it)
|
||||
*it = toupper(*it);
|
||||
if (line.find("ISO-8859-1",0)!= std::string::npos){
|
||||
enc = pugi::encoding_latin1;
|
||||
}
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
|
||||
pugi::xml_document* tree_parser = new pugi::xml_document();
|
||||
|
||||
if (!tree_parser->load_file(filename, pugi::parse_default, enc))
|
||||
{
|
||||
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)
|
||||
xmlDocPtr parseXml(const char * data,const char *encoding)
|
||||
{
|
||||
XMLTreeParser* tree_parser;
|
||||
|
||||
tree_parser = new XMLTreeParser(NULL);
|
||||
tree_parser = new XMLTreeParser(encoding);
|
||||
|
||||
if (!tree_parser->Parse(data, strlen(data), true))
|
||||
{
|
||||
@@ -201,7 +288,7 @@ xmlDocPtr parseXml(const char * data)
|
||||
return tree_parser;
|
||||
}
|
||||
|
||||
xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* = true */)
|
||||
xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* = true */,const char *encoding)
|
||||
{
|
||||
char buffer[2048];
|
||||
XMLTreeParser* tree_parser;
|
||||
@@ -218,7 +305,7 @@ xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence /* =
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tree_parser = new XMLTreeParser(NULL);
|
||||
tree_parser = new XMLTreeParser(encoding);
|
||||
|
||||
do
|
||||
{
|
||||
|
@@ -41,20 +41,44 @@
|
||||
#ifdef USE_LIBXML
|
||||
#include <libxml/parser.h>
|
||||
#define xmlNextNode next
|
||||
inline char* xmlGetAttribute (xmlNodePtr cur, const char * s) { return (char *)xmlGetProp(cur, (const xmlChar *)s); };
|
||||
inline char* xmlGetName (xmlNodePtr cur) { return (char *)(cur->name); };
|
||||
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 char* xmlGetAttribute (xmlNodePtr cur, const char *s) { return cur->GetAttributeValue(s); }
|
||||
inline char* xmlGetName (xmlNodePtr cur) { return cur->GetType(); }
|
||||
inline 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 */
|
||||
|
||||
|
||||
@@ -66,7 +90,7 @@ std::string Unicode_Character_to_UTF8(const int character);
|
||||
|
||||
std::string convert_UTF8_To_UTF8_XML(const char *s);
|
||||
|
||||
xmlDocPtr parseXml(const char *data);
|
||||
xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence = true);
|
||||
xmlDocPtr parseXml(const char *data,const char *encoding = NULL);
|
||||
xmlDocPtr parseXmlFile(const char * filename, bool warning_by_nonexistence = true,const char *encoding = NULL);
|
||||
|
||||
#endif /* __xmlinterface_h__ */
|
||||
|
Reference in New Issue
Block a user