8 #ifndef __ABG_LIBXML_UTILS_H__
9 #define __ABG_LIBXML_UTILS_H__
11 #include <libxml/xmlreader.h>
26 using std::shared_ptr;
39 operator()(xmlTextReaderPtr reader)
40 {xmlFreeTextReader(reader);}
47 operator()(xmlChar* str)
64 #define XML_READER_GET_NODE_NAME(reader) \
65 xml::build_sptr(xmlTextReaderName(reader.get()))
69 #define XML_READER_GET_NODE_TYPE(reader) \
70 static_cast<xmlReaderTypes> (xmlTextReaderNodeType(reader.get()))
74 #define XML_READER_GET_ATTRIBUTE(reader, name) \
75 xml::build_sptr(xmlTextReaderGetAttribute(reader.get(), BAD_CAST(name)))
79 #define XML_NODE_GET_ATTRIBUTE(node, name) \
80 xml::build_sptr(xmlGetProp(node, BAD_CAST(name)))
82 #define CHAR_STR(xml_char_str) \
83 reinterpret_cast<char*>(xml_char_str.get())
87 std::string& escaped);
94 std::string& escaped);
101 std::string& escaped);
108 std::string& escaped);
129 #endif //__ABG_LIBXML_UTILS_H__
shared_ptr< T > build_sptr(T *p)
This is to be specialized for the diverse C types that needs wrapping in shared_ptr.
reader_sptr new_reader_from_istream(std::istream *in)
Instanciate an xmlTextReader that parses a content coming from an input stream.
void unescape_xml_comment(const std::string &str, std::string &escaped)
Read a string, detect the '#&45;' entity and un-escape it into the '-' character. ...
shared_ptr< xmlChar > xml_char_sptr
A convenience typedef for a shared pointer of xmlChar.
Utilities to ease the wrapping of C types into std::shared_ptr.
bool xml_char_sptr_to_string(xml_char_sptr &ssptr, std::string &s)
Convert a shared pointer to xmlChar into an std::string.
reader_sptr new_reader_from_buffer(const std::string &buffer)
Instanciate an xmlTextReader that parses the content of an in-memory buffer, wrap it into a smart poi...
shared_ptr< xmlTextReader > build_sptr< xmlTextReader >(::xmlTextReader *p)
Build and return a shared_ptr for a pointer to xmlTextReader.
shared_ptr< xmlChar > build_sptr< xmlChar >(xmlChar *p)
Build and return a shared_ptr for a pointer to xmlChar.
shared_ptr< xmlTextReader > reader_sptr
A convenience typedef for a shared pointer of xmlTextReader.
This functor is used to instantiate a shared_ptr for the xmlTextReader.
Toplevel namespace for libabigail.
void escape_xml_comment(const std::string &str, std::string &escaped)
Escape the '-' character, to avoid having a '–' in a comment.
void unescape_xml_string(const std::string &str, std::string &escaped)
Read a string, detect the 5 predefined XML entities it may contain and un-escape them, by writting their corresponding characters back in. The pre-defined entities are:
void initialize()
The initialization function of libxml2 abstraction layer. This function must be called prior to using...
void escape_xml_string(const std::string &str, std::string &escaped)
Escape the 5 characters representing the predefined XML entities.
int get_xml_node_depth(xmlNodePtr n)
Return the depth of an xml element node.
reader_sptr new_reader_from_file(const std::string &path)
Instantiate an xmlTextReader that parses the content of an on-disk file, wrap it into a smart pointer...
This functor is used to instantiate a shared_ptr for xmlChar.