diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2015-02-04 14:09:54 +0100 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2015-02-04 14:09:54 +0100 |
commit | bd82d030011cd8b9655e5ded6b6df9343b42a6bd (patch) | |
tree | de82d886dfea0cb7dbb6e80436218a25cb211bc3 /include/libHX/libxml_helper.h |
Imported Upstream version 3.22upstream/3.22
Diffstat (limited to 'include/libHX/libxml_helper.h')
-rw-r--r-- | include/libHX/libxml_helper.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/include/libHX/libxml_helper.h b/include/libHX/libxml_helper.h new file mode 100644 index 0000000..599ede1 --- /dev/null +++ b/include/libHX/libxml_helper.h @@ -0,0 +1,113 @@ +#ifndef _LIBHX_LIBXML_HELPER_H +#define _LIBHX_LIBXML_HELPER_H 1 + +#ifdef __cplusplus +# include <cstring> +#else +# include <string.h> +#endif +#include <libHX/defs.h> +#include <libxml/parser.h> + +#ifdef __cplusplus +extern "C" { +#endif + +static __inline__ int xml_strcmp(const xmlChar *a, const char *b) +{ +#ifdef __cplusplus + return strcmp(signed_cast<const char *>(a), b); +#else + return strcmp(signed_cast(const char *, a), b); +#endif +} + +static __inline__ int xml_strcasecmp(const xmlChar *a, const char *b) +{ +#ifdef __cplusplus + return strcasecmp(signed_cast<const char *>(a), b); +#else + return strcasecmp(signed_cast(const char *, a), b); +#endif +} + +static __inline__ char *xml_getprop(xmlNode *node, const char *attr) +{ +#ifdef __cplusplus + return signed_cast<char *>(xmlGetProp(node, + signed_cast<const xmlChar *>(attr))); +#else + return signed_cast(char *, xmlGetProp(node, + signed_cast(const xmlChar *, attr))); +#endif +} + +/** + * xmlGetNsProp takes, as 3rd argument, a full namespace string. + * That is unwieldy. + */ +static __inline__ char *xml_getnsprop(xmlNode *node, const char *nsprefix, + const char *key) +{ + const struct _xmlAttr *attr = NULL; + for (attr = node->properties; attr != NULL; attr = attr->next) + if (attr->ns != NULL && attr->ns->prefix != NULL && + xml_strcmp(attr->ns->prefix, nsprefix) == 0) + break; + if (attr == NULL) + return NULL; +#ifdef __cplusplus + return signed_cast<char *>(xmlGetNsProp(node, + signed_cast<const xmlChar *>(key), attr->ns->href)); +#else + return signed_cast(char *, xmlGetNsProp(node, + signed_cast(const xmlChar *, key), attr->ns->href)); +#endif +} + +static __inline__ xmlAttr * +xml_newprop(xmlNode *node, const char *name, const char *value) +{ +#ifdef __cplusplus + return xmlNewProp(node, signed_cast<const xmlChar *>(name), + signed_cast<const xmlChar *>(value)); +#else + return xmlNewProp(node, signed_cast(const xmlChar *, name), + signed_cast(const xmlChar *, value)); +#endif +} + +/** + * @ptr: parent node + * @name: name of new node + * @value: string, or %NULL + */ +static __inline__ xmlNode * +xml_newnode(xmlNode *ptr, const char *name, const char *value) +{ +#ifdef __cplusplus + return xmlNewTextChild(ptr, NULL, signed_cast<const xmlChar *>(name), + signed_cast<const xmlChar *>(value)); +#else + return xmlNewTextChild(ptr, NULL, signed_cast(const xmlChar *, name), + signed_cast(const xmlChar *, value)); +#endif +} + +static __inline__ xmlAttr * +xml_setprop(xmlNode *node, const char *name, const char *value) +{ +#ifdef __cplusplus + return xmlSetProp(node, signed_cast<const xmlChar *>(name), + signed_cast<const xmlChar *>(value)); +#else + return xmlSetProp(node, signed_cast(const xmlChar *, name), + signed_cast(const xmlChar *, value)); +#endif +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _LIBHX_LIBXML_HELPER_H */ |