mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-26 03:32:08 +00:00
c4991c6444
* include/abg-libxml-utils.h (escape_xml_string) (unescape_xml_string): Declare new functions. * src/abg-libxml-utils.cc (escape_xml_string) (unescape_xml_string): Define them. * src/abg-reader.cc (build_function_decl, build_var_decl) (build_type_decl, build_enum_type_decl, build_class_decl) (build_type_tparameter, build_non_type_tparameter) (build_template_tparameter, handle_namespace_decl) (handle_typedef_decl): Use unescape_xml_string. * src/abg-writer.cc (write_type_decl, write_function_decl) (write_class_decl, write_type_tparameter) (write_non_type_tparameter, write_template_tparameter): Use escape_xml_string. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
118 lines
3.4 KiB
C++
118 lines
3.4 KiB
C++
// -*- mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013 Red Hat, Inc.
|
|
//
|
|
// This file is part of the GNU Application Binary Interface Generic
|
|
// Analysis and Instrumentation Library (libabigail). This library is
|
|
// free software; you can redistribute it and/or modify it under the
|
|
// terms of the GNU Lesser General Public License as published by the
|
|
// Free Software Foundation; either version 3, or (at your option) any
|
|
// later version.
|
|
|
|
// This library is distributed in the hope that it will be useful, but
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Lesser Public License for more details.
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this program; see the file COPYING-LGPLV3. If
|
|
// not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/// @file
|
|
|
|
#include <tr1/memory>
|
|
#include <istream>
|
|
#include <libxml/xmlreader.h>
|
|
|
|
namespace abigail
|
|
{
|
|
/// Internal namespace for xml.
|
|
namespace xml
|
|
{
|
|
|
|
using std::tr1::shared_ptr;
|
|
|
|
/// This functor is used to instantiate a shared_ptr for the
|
|
/// xmlTextReader.
|
|
struct textReaderDeleter
|
|
{
|
|
void
|
|
operator()(xmlTextReaderPtr reader)
|
|
{ xmlFreeTextReader(reader); }
|
|
};
|
|
|
|
|
|
typedef shared_ptr<xmlTextReader> reader_sptr;
|
|
|
|
/// This functor is used to instantiate a shared_ptr for xmlChar
|
|
struct charDeleter
|
|
{
|
|
void
|
|
operator()(xmlChar* str)
|
|
{ xmlFree(str); }
|
|
};
|
|
|
|
typedef shared_ptr<xmlChar> xml_char_sptr;
|
|
|
|
reader_sptr new_reader_from_file(const std::string& path);
|
|
reader_sptr new_reader_from_buffer(const std::string& buffer);
|
|
reader_sptr new_reader_from_istream(std::istream*);
|
|
xml_char_sptr build_xml_char_sptr(xmlChar*);
|
|
|
|
template<class T>
|
|
shared_ptr<T> build_sptr(T*);
|
|
|
|
/// Specialization of build_sptr for xmlTextReader
|
|
template<>
|
|
shared_ptr<xmlTextReader> build_sptr<xmlTextReader>(xmlTextReader *p);
|
|
|
|
/// Specialization of build_str for xmlChar.
|
|
template<>
|
|
shared_ptr<xmlChar> build_sptr<xmlChar>(xmlChar *p);
|
|
|
|
int get_xml_node_depth(xmlNodePtr);
|
|
|
|
/// Get the name of the current element node the reader is pointing
|
|
/// to. Note that this macro returns an instance of
|
|
/// shared_ptr<xmlChar> so that the caller doesn't have to worry about
|
|
/// managing memory itself. Also note that the reader is a
|
|
/// shared_ptr<xmlTextReader>
|
|
#define XML_READER_GET_NODE_NAME(reader) \
|
|
xml::build_sptr(xmlTextReaderName(reader.get()))
|
|
|
|
/// Get the type of the current node of the shared_ptr<xmlTextReader>
|
|
/// passed in argument.
|
|
#define XML_READER_GET_NODE_TYPE(reader) \
|
|
static_cast<xmlReaderTypes> (xmlTextReaderNodeType(reader.get()))
|
|
|
|
/// Get the value of attribute 'name' on the current node of 'reader'
|
|
/// which is an instance of shared_ptr<xmlTextReader>.
|
|
#define XML_READER_GET_ATTRIBUTE(reader, name) \
|
|
xml::build_sptr(xmlTextReaderGetAttribute(reader.get(), BAD_CAST(name)))
|
|
|
|
/// Get the value of attribute 'name' ont the instance of xmlNodePtr
|
|
/// denoted by 'node'.
|
|
#define XML_NODE_GET_ATTRIBUTE(node, name) \
|
|
xml::build_sptr(xmlGetProp(node, BAD_CAST(name)))
|
|
|
|
#define CHAR_STR(xml_char_str) \
|
|
reinterpret_cast<char*>(xml_char_str.get())
|
|
|
|
void
|
|
escape_xml_string(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
escape_xml_string(const std::string& str);
|
|
|
|
|
|
void
|
|
unescape_xml_string(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
unescape_xml_string(const std::string& str);
|
|
|
|
}//end namespace xml
|
|
}//end namespace abigail
|