1 // -*- C++ -*- 2 3 // Copyright (C) 2005-2021 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the terms 7 // of the GNU General Public License as published by the Free Software 8 // Foundation; either version 3, or (at your option) any later 9 // version. 10 11 // This library is distributed in the hope that it will be useful, but 12 // WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 // General Public License for more details. 15 16 // You should have received a copy of the GNU General Public License 17 // along with this library; see the file COPYING3. If not see 18 // <http://www.gnu.org/licenses/>. 19 20 21 // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 22 23 // Permission to use, copy, modify, sell, and distribute this software 24 // is hereby granted without fee, provided that the above copyright 25 // notice appears in all copies, and that both that copyright notice 26 // and this permission notice appear in supporting documentation. None 27 // of the above authors, nor IBM Haifa Research Laboratories, make any 28 // representation about the suitability of this software for any 29 // purpose. It is provided "as is" without express or implied 30 // warranty. 31 32 /** 33 * @file xml.hpp 34 * Contains some xml utilities. 35 */ 36 37 #ifndef PB_DS_XML_HPP 38 #define PB_DS_XML_HPP 39 40 #include <string> 41 #include <sstream> 42 43 namespace __gnu_pbds 44 { 45 namespace test 46 { 47 namespace detail 48 { 49 std::string make_xml_name_start_tag(std::string name)50 make_xml_name_start_tag(std::string name) 51 { return ("<" + name); } 52 53 template<typename V> 54 std::string make_xml_attrib_val(std::string attrib,const V val)55 make_xml_attrib_val(std::string attrib, const V val) 56 { 57 std::ostringstream sstrm; 58 sstrm << " " << attrib << " = \"" << val << "\""; 59 return (sstrm.str()); 60 } 61 62 std::string make_xml_name_start_tag_end_delimiter()63 make_xml_name_start_tag_end_delimiter() 64 { return (">\n"); } 65 66 std::string make_xml_name_end_tag(std::string name)67 make_xml_name_end_tag(std::string name) 68 { return ("</" + name + ">\n"); } 69 } // namespace detail 70 71 std::string make_xml_tag(const std::string name,const std::string data=std::string (""))72 make_xml_tag(const std::string name, 73 const std::string data = std::string("")) 74 { 75 std::ostringstream sstrm; 76 sstrm << detail::make_xml_name_start_tag(name); 77 sstrm << detail::make_xml_name_start_tag_end_delimiter(); 78 sstrm << data; 79 sstrm << detail::make_xml_name_end_tag(name); 80 return sstrm.str(); 81 } 82 83 template<typename Val0> 84 std::string make_xml_tag(const std::string name,const std::string attrib0,const Val0 val0,const std::string data=std::string (""))85 make_xml_tag(const std::string name, 86 const std::string attrib0, 87 const Val0 val0, 88 const std::string data = std::string("")) 89 { 90 std::ostringstream sstrm; 91 92 sstrm << detail::make_xml_name_start_tag(name); 93 sstrm << detail::make_xml_attrib_val(attrib0, val0); 94 sstrm << detail::make_xml_name_start_tag_end_delimiter(); 95 sstrm << data; 96 sstrm << detail::make_xml_name_end_tag(name); 97 return sstrm.str(); 98 } 99 100 template<typename Val0, typename Val1> 101 std::string make_xml_tag(const std::string name,const std::string attrib0,const Val0 val0,const std::string attrib1,const Val1 val1,const std::string data=std::string (""))102 make_xml_tag(const std::string name, 103 const std::string attrib0, 104 const Val0 val0, 105 const std::string attrib1, 106 const Val1 val1, 107 const std::string data = std::string("")) 108 { 109 std::ostringstream sstrm; 110 sstrm << detail::make_xml_name_start_tag(name); 111 sstrm << detail::make_xml_attrib_val(attrib0, val0); 112 sstrm << detail::make_xml_attrib_val(attrib1, val1); 113 sstrm << detail::make_xml_name_start_tag_end_delimiter(); 114 sstrm << data; 115 sstrm << detail::make_xml_name_end_tag(name); 116 return sstrm.str(); 117 } 118 } // namespace test 119 } // namespace __gnu_pbds 120 121 #endif // #ifndef PB_DS_XML_HPP 122