Chris@16: #ifndef BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP Chris@16: #define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP Chris@16: Chris@16: // MS compatible compilers support #pragma once Chris@101: #if defined(_MSC_VER) Chris@16: # pragma once Chris@16: #endif Chris@16: Chris@16: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 Chris@16: // xml_escape.hpp Chris@16: Chris@16: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . Chris@16: // Use, modification and distribution is subject to the Boost Software Chris@16: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org for updates, documentation, and revision history. Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace archive { Chris@16: namespace iterators { Chris@16: Chris@16: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 Chris@16: // insert escapes into xml text Chris@16: Chris@16: template Chris@16: class xml_escape Chris@16: : public escape, Base> Chris@16: { Chris@16: friend class boost::iterator_core_access; Chris@16: Chris@16: typedef escape, Base> super_t; Chris@16: Chris@16: public: Chris@16: char fill(const char * & bstart, const char * & bend); Chris@16: wchar_t fill(const wchar_t * & bstart, const wchar_t * & bend); Chris@16: Chris@16: template Chris@16: xml_escape(BOOST_PFTO_WRAPPER(T) start) : Chris@16: super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast< T >(start)))) Chris@16: {} Chris@16: // intel 7.1 doesn't like default copy constructor Chris@16: xml_escape(const xml_escape & rhs) : Chris@16: super_t(rhs.base_reference()) Chris@16: {} Chris@16: }; Chris@16: Chris@16: template Chris@16: char xml_escape::fill( Chris@16: const char * & bstart, Chris@16: const char * & bend Chris@16: ){ Chris@16: char current_value = * this->base_reference(); Chris@16: switch(current_value){ Chris@16: case '<': Chris@16: bstart = "<"; Chris@16: bend = bstart + 4; Chris@16: break; Chris@16: case '>': Chris@16: bstart = ">"; Chris@16: bend = bstart + 4; Chris@16: break; Chris@16: case '&': Chris@16: bstart = "&"; Chris@16: bend = bstart + 5; Chris@16: break; Chris@16: case '"': Chris@16: bstart = """; Chris@16: bend = bstart + 6; Chris@16: break; Chris@16: case '\'': Chris@16: bstart = "'"; Chris@16: bend = bstart + 6; Chris@16: break; Chris@16: default: Chris@16: return current_value; Chris@16: } Chris@16: return *bstart; Chris@16: } Chris@16: Chris@16: template Chris@16: wchar_t xml_escape::fill( Chris@16: const wchar_t * & bstart, Chris@16: const wchar_t * & bend Chris@16: ){ Chris@16: wchar_t current_value = * this->base_reference(); Chris@16: switch(current_value){ Chris@16: case '<': Chris@16: bstart = L"<"; Chris@16: bend = bstart + 4; Chris@16: break; Chris@16: case '>': Chris@16: bstart = L">"; Chris@16: bend = bstart + 4; Chris@16: break; Chris@16: case '&': Chris@16: bstart = L"&"; Chris@16: bend = bstart + 5; Chris@16: break; Chris@16: case '"': Chris@16: bstart = L"""; Chris@16: bend = bstart + 6; Chris@16: break; Chris@16: case '\'': Chris@16: bstart = L"'"; Chris@16: bend = bstart + 6; Chris@16: break; Chris@16: default: Chris@16: return current_value; Chris@16: } Chris@16: return *bstart; Chris@16: } Chris@16: Chris@16: } // namespace iterators Chris@16: } // namespace archive Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP