69 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <iostream>
 | 
						|
#include <string>
 | 
						|
#include <list>
 | 
						|
#include <map>
 | 
						|
 | 
						|
 | 
						|
namespace nix {
 | 
						|
 | 
						|
using std::string;
 | 
						|
using std::map;
 | 
						|
using std::list;
 | 
						|
 | 
						|
 | 
						|
typedef map<string, string> XMLAttrs;
 | 
						|
 | 
						|
 | 
						|
class XMLWriter
 | 
						|
{
 | 
						|
private:
 | 
						|
 | 
						|
    std::ostream & output;
 | 
						|
 | 
						|
    bool indent;
 | 
						|
    bool closed;
 | 
						|
 | 
						|
    list<string> pendingElems;
 | 
						|
 | 
						|
public:
 | 
						|
 | 
						|
    XMLWriter(bool indent, std::ostream & output);
 | 
						|
    ~XMLWriter();
 | 
						|
 | 
						|
    void close();
 | 
						|
 | 
						|
    void openElement(const string & name,
 | 
						|
        const XMLAttrs & attrs = XMLAttrs());
 | 
						|
    void closeElement();
 | 
						|
 | 
						|
    void writeEmptyElement(const string & name,
 | 
						|
        const XMLAttrs & attrs = XMLAttrs());
 | 
						|
 | 
						|
private:
 | 
						|
    void writeAttrs(const XMLAttrs & attrs);
 | 
						|
 | 
						|
    void indent_(unsigned int depth);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
class XMLOpenElement
 | 
						|
{
 | 
						|
private:
 | 
						|
    XMLWriter & writer;
 | 
						|
public:
 | 
						|
    XMLOpenElement(XMLWriter & writer, const string & name,
 | 
						|
        const XMLAttrs & attrs = XMLAttrs())
 | 
						|
        : writer(writer)
 | 
						|
    {
 | 
						|
        writer.openElement(name, attrs);
 | 
						|
    }
 | 
						|
    ~XMLOpenElement()
 | 
						|
    {
 | 
						|
        writer.closeElement();
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
}
 |