/*
 * StringToXMLComposer.cpp
 *
 *  Created on: Nov 23, 2013
 *      Author: Jan Travnicek
 */

#include "StringToXMLComposer.h"

namespace string {

void StringToXMLComposer::Visit(std::list<sax::Token>& out, const alphabet::Symbol& symbol) {
	out.push_back(sax::Token("symbol", sax::Token::START_ELEMENT));
	out.push_back(sax::Token(symbol.getSymbol(), sax::Token::CHARACTER));
	out.push_back(sax::Token("symbol", sax::Token::END_ELEMENT));
}

void StringToXMLComposer::Visit(std::list<sax::Token>& out, const String& string) {
	out.push_back(sax::Token("string", sax::Token::START_ELEMENT));
	for(const auto& symbol : string.getContent()) {
		Visit(out, symbol);
	}
	out.push_back(sax::Token("string", sax::Token::END_ELEMENT));
}

std::list<sax::Token> StringToXMLComposer::compose(const String& string) {
	std::list<sax::Token> out;
	Visit(out, string);
	return out;
}

} /* namespace string */