- XMLStreamWriter(TextOutputStream& ostream)
- : m_ostream(ostream)
- {
- m_elements.push_back(state_t());
- m_elements.back().m_state = state_t::eContent;
- m_ostream.write('<');
- m_ostream.write('?');
- write_string("xml");
- visit("version", "1.0");
- m_ostream.write('?');
- m_ostream.write('>');
- }
-
- void pushElement(const XMLElement& element)
- {
- if(m_elements.back().m_state == state_t::eStartElement)
- {
- m_elements.back().m_state = state_t::eContent;
- m_ostream.write('>');
- }
-
- m_elements.push_back(state_t());
-
- m_ostream.write('<');
- write_string(element.name());
- element.forEachAttribute(*this);
- }
- void popElement(const char* name)
- {
- if(m_elements.back().m_state == state_t::eStartElement)
- {
- m_ostream.write('/');
- m_ostream.write('>');
- m_elements.pop_back();
- }
- else
- {
- m_ostream.write('<');
- m_ostream.write('/');
- write_string(name);
- m_ostream.write('>');
- m_elements.pop_back();
- }
- }
- std::size_t write(const char* data, std::size_t length)
- {
- if(m_elements.back().m_state == state_t::eStartElement)
- {
- m_elements.back().m_state = state_t::eContent;
- m_ostream.write('>');
- }
- write_cdata(data, length);
- return length;
- }
-
- void visit(const char* name, const char* value)
- {
- m_ostream.write(' ');
- write_string(name);
- m_ostream.write('=');
- write_quoted_string(value);
- }
+XMLStreamWriter( TextOutputStream& ostream )
+ : m_ostream( ostream ){
+ m_elements.push_back( state_t() );
+ m_elements.back().m_state = state_t::eContent;
+ m_ostream.write( '<' );
+ m_ostream.write( '?' );
+ write_string( "xml" );
+ visit( "version", "1.0" );
+ m_ostream.write( '?' );
+ m_ostream.write( '>' );
+}
+
+void pushElement( const XMLElement& element ){
+ if ( m_elements.back().m_state == state_t::eStartElement ) {
+ m_elements.back().m_state = state_t::eContent;
+ m_ostream.write( '>' );
+ }
+
+ m_elements.push_back( state_t() );
+
+ m_ostream.write( '<' );
+ write_string( element.name() );
+ element.forEachAttribute( *this );
+}
+void popElement( const char* name ){
+ if ( m_elements.back().m_state == state_t::eStartElement ) {
+ m_ostream.write( '/' );
+ m_ostream.write( '>' );
+ m_elements.pop_back();
+ }
+ else
+ {
+ m_ostream.write( '<' );
+ m_ostream.write( '/' );
+ write_string( name );
+ m_ostream.write( '>' );
+ m_elements.pop_back();
+ }
+}
+std::size_t write( const char* data, std::size_t length ){
+ if ( m_elements.back().m_state == state_t::eStartElement ) {
+ m_elements.back().m_state = state_t::eContent;
+ m_ostream.write( '>' );
+ }
+ write_cdata( data, length );
+ return length;
+}
+
+void visit( const char* name, const char* value ){
+ m_ostream.write( ' ' );
+ write_string( name );
+ m_ostream.write( '=' );
+ write_quoted_string( value );
+}