* `nix-instantiate --print-args': produce XML output so that the
result can be used more easily by scripts.
This commit is contained in:
		
							parent
							
								
									4750f6c5ed
								
							
						
					
					
						commit
						0e267e2625
					
				
					 4 changed files with 81 additions and 60 deletions
				
			
		| 
						 | 
				
			
			@ -2,7 +2,8 @@ lib_LTLIBRARIES = libutil.la
 | 
			
		|||
 | 
			
		||||
libutil_la_SOURCES = util.cc util.hh hash.cc hash.hh \
 | 
			
		||||
 archive.cc archive.hh aterm.cc aterm.hh \
 | 
			
		||||
 aterm-map.cc aterm-map.hh
 | 
			
		||||
 aterm-map.cc aterm-map.hh \
 | 
			
		||||
 xml-writer.cc xml-writer.hh
 | 
			
		||||
 | 
			
		||||
if !HAVE_OPENSSL
 | 
			
		||||
libutil_la_SOURCES += \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,61 +1,6 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <list>
 | 
			
		||||
#include <map>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef map<string, string> XMLAttrs;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class XMLWriter
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    
 | 
			
		||||
    ostream & output;
 | 
			
		||||
 | 
			
		||||
    bool closed;
 | 
			
		||||
 | 
			
		||||
    list<string> pendingElems;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    XMLWriter(ostream & output);
 | 
			
		||||
    ~XMLWriter();
 | 
			
		||||
 | 
			
		||||
    void close();
 | 
			
		||||
 | 
			
		||||
    void openElement(const string & name,
 | 
			
		||||
        const XMLAttrs & attrs = XMLAttrs());
 | 
			
		||||
    void closeElement();
 | 
			
		||||
 | 
			
		||||
    void writeShortElement(const string & name,
 | 
			
		||||
        const XMLAttrs & attrs = XMLAttrs());
 | 
			
		||||
    
 | 
			
		||||
    void writeCharData(const string & data);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void writeAttrs(const XMLAttrs & attrs);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
#include "xml-writer.hh"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
XMLWriter::XMLWriter(ostream & output)
 | 
			
		||||
| 
						 | 
				
			
			@ -138,6 +83,7 @@ void XMLWriter::writeAttrs(const XMLAttrs & attrs)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
int main(int argc, char * * argv)
 | 
			
		||||
{
 | 
			
		||||
    XMLWriter doc(cout);
 | 
			
		||||
| 
						 | 
				
			
			@ -159,3 +105,4 @@ int main(int argc, char * * argv)
 | 
			
		|||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										64
									
								
								src/libutil/xml-writer.hh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/libutil/xml-writer.hh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
#ifndef __XML_WRITER_H
 | 
			
		||||
#define __XML_WRITER_H
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <list>
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef map<string, string> XMLAttrs;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class XMLWriter
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    
 | 
			
		||||
    ostream & output;
 | 
			
		||||
 | 
			
		||||
    bool closed;
 | 
			
		||||
 | 
			
		||||
    list<string> pendingElems;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    XMLWriter(ostream & output);
 | 
			
		||||
    ~XMLWriter();
 | 
			
		||||
 | 
			
		||||
    void close();
 | 
			
		||||
 | 
			
		||||
    void openElement(const string & name,
 | 
			
		||||
        const XMLAttrs & attrs = XMLAttrs());
 | 
			
		||||
    void closeElement();
 | 
			
		||||
 | 
			
		||||
    void writeShortElement(const string & name,
 | 
			
		||||
        const XMLAttrs & attrs = XMLAttrs());
 | 
			
		||||
    
 | 
			
		||||
    void writeCharData(const string & data);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void writeAttrs(const XMLAttrs & attrs);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* !__XML_WRITER_H */
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue