Imported Upstream version 1.57.0
[platform/upstream/boost.git] / boost / test / utils / xml_printer.hpp
1 //  (C) Copyright Gennadiy Rozental 2004-2008.
2 //  Distributed under the Boost Software License, Version 1.0.
3 //  (See accompanying file LICENSE_1_0.txt or copy at
4 //  http://www.boost.org/LICENSE_1_0.txt)
5
6 //  See http://www.boost.org/libs/test for the library home page.
7 //
8 //  File        : $RCSfile$
9 //
10 //  Version     : $Revision$
11 //
12 //  Description : common code used by any agent serving as XML printer
13 // ***************************************************************************
14
15 #ifndef BOOST_TEST_XML_PRINTER_HPP_071894GER
16 #define BOOST_TEST_XML_PRINTER_HPP_071894GER
17
18 // Boost.Test
19 #include <boost/test/utils/basic_cstring/basic_cstring.hpp>
20 #include <boost/test/utils/fixed_mapping.hpp>
21 #include <boost/test/utils/custom_manip.hpp>
22 #include <boost/test/utils/foreach.hpp>
23 #include <boost/test/utils/basic_cstring/io.hpp>
24
25 // Boost
26 #include <boost/config.hpp>
27
28 // STL
29 #include <iostream>
30
31 #include <boost/test/detail/suppress_warnings.hpp>
32
33 //____________________________________________________________________________//
34
35 namespace boost {
36
37 namespace unit_test {
38
39 // ************************************************************************** //
40 // **************               xml print helpers              ************** //
41 // ************************************************************************** //
42
43 inline void
44 print_escaped( std::ostream& where_to, const_string value )
45 {
46     static fixed_mapping<char,char const*> char_type(
47         '<' , "lt",
48         '>' , "gt",
49         '&' , "amp",
50         '\'', "apos" ,
51         '"' , "quot",
52
53         0
54     );
55
56     BOOST_TEST_FOREACH( char, c, value ) {
57         char const* ref = char_type[c];
58
59         if( ref )
60             where_to << '&' << ref << ';';
61         else
62             where_to << c;
63     }
64 }
65
66 //____________________________________________________________________________//
67
68 inline void
69 print_escaped( std::ostream& where_to, std::string const& value )
70 {
71     print_escaped( where_to, const_string( value ) );
72 }
73
74 //____________________________________________________________________________//
75
76 template<typename T>
77 inline void
78 print_escaped( std::ostream& where_to, T const& value )
79 {
80     where_to << value;
81 }
82
83 //____________________________________________________________________________//
84
85 typedef custom_manip<struct attr_value_t> attr_value;
86
87 template<typename T>
88 inline std::ostream&
89 operator<<( custom_printer<attr_value> const& p, T const& value )
90 {
91     *p << "=\"";
92     print_escaped( *p, value );
93     *p << '"';
94
95     return *p;
96 }
97
98 //____________________________________________________________________________//
99
100 typedef custom_manip<struct cdata_t> cdata;
101
102 inline std::ostream&
103 operator<<( custom_printer<cdata> const& p, const_string value )
104 {
105     return *p << BOOST_TEST_L( "<![CDATA[" ) << value << BOOST_TEST_L( "]]>" );
106 }
107
108 //____________________________________________________________________________//
109
110 } // namespace unit_test
111
112 } // namespace boost
113
114 //____________________________________________________________________________//
115
116 #include <boost/test/detail/enable_warnings.hpp>
117
118 #endif // BOOST_TEST_XML_PRINTER_HPP_071894GER