12#ifndef ZYPP_BASE_XML_H
13#define ZYPP_BASE_XML_H
22#include <zypp-core/base/Easy.h>
23#include <zypp-core/base/String.h>
24#include <zypp-core/parser/xml/XmlEscape.h>
37 std::string asXmlNodeAttr(
const Tp & val_r )
43 struct NodeAttr :
public std::pair<std::string,std::string>
45 typedef std::pair<std::string,std::string>
Pair;
47 template <
typename Tp>
48 NodeAttr( std::string key_r,
const Tp & val_r )
52 NodeAttr( std::string key_r, std::string val_r )
87 typedef NodeAttr
Attr;
89 struct OptionalContentType {};
90 static constexpr OptionalContentType
optionalContent = OptionalContentType();
93 Node( std::ostream & out_r, std::string name_r,
const std::initializer_list<Attr> & attrs_r = {} )
98 Node( std::ostream & out_r, std::string name_r,
Attr attr_r )
99 :
Node( out_r,
std::move(name_r), { attr_r } )
103 Node( std::ostream & out_r, std::string name_r, OptionalContentType,
const std::initializer_list<Attr> & attrs_r = {} )
108 Node( std::ostream & out_r, std::string name_r, OptionalContentType,
Attr attr_r )
127 struct HasContentException{};
132 Node &
addAttr(
const std::initializer_list<Attr> & attrs_r = {} )
135 throw HasContentException();
142 {
return addAttr( { attr_r } ); }
160 void printStart(
const std::initializer_list<Attr> & attrs_r )
176 void printAttr(
const std::initializer_list<Attr> & attrs_r )
178 for (
const auto & pair : attrs_r )
179 _out <<
" " << pair.first <<
"=\"" <<
xml::escape( pair.second ) <<
"\"";
183 {
return _name.empty(); }
197 inline std::ostream &
node( std::ostream & out_r,
const std::string & name_r,
const std::initializer_list<Node::Attr> & attrs_r = {} )
203 inline std::ostream &
node( std::ostream & out_r,
const std::string & name_r,
Node::Attr attr_r )
204 {
return node( out_r, name_r, { attr_r } ); }
213 inline std::ostream &
dumpAsXmlOn( std::ostream &
str,
const Tp & obj,
const std::string & name_r )
216 const std::string & content(
asString( obj ) );
217 if ( ! content.empty() ) *guard <<
xml::escape( content );
String related utilities and Regular expression matching.
std::string asString(TInt val, char zero='0', char one='1')
For printing bits.
std::string unescape(const std::string &in_r)
Unescape xml special charaters (& -> &; from IoBind library)
detail::EscapedString escape(const std::string &in_r)
Escape xml special charaters (& -> &; from IoBind library).
std::ostream & node(std::ostream &out_r, const std::string &name_r, Node::Attr attr_r)
Easy-to use interface to the ZYPP dependency resolver.
std::ostream & dumpAsXmlOn(std::ostream &str, const Repository &obj)
std::pair< std::string, std::string > Pair
NodeAttr(std::string key_r, const Tp &val_r)
std::string asXmlNodeAttr(const Tp &val_r)
NODE ATTRIBUTE representation of types [asString].
void printStart(const std::initializer_list< Attr > &attrs_r)
std::ostream & operator*()
Return the output stream.
void printAttr(const std::initializer_list< Attr > &attrs_r)
Node & addAttr(const std::initializer_list< Attr > &attrs_r={})
Add additional attributes (requires OptionalContentType)
~Node()
Dtor wrting end tag.
static constexpr OptionalContentType optionalContent
Node(std::ostream &out_r, std::string name_r, const std::initializer_list< Attr > &attrs_r={})
Ctor taking nodename and attribute list.
#define NON_COPYABLE_BUT_MOVE(CLASS)
Delete copy ctor and copy assign but enable default move.