/*
 * StringFromStringParser.h
 *
 *  Created on: Nov 23, 2013
 *      Author: Jan Travnicek
 */

#ifndef STRING_FROM_STRING_PARSER_H_
#define STRING_FROM_STRING_PARSER_H_

#include "string/StringFeatures.h"
#include "StringFromStringLexer.h"

#include <set>
#include <vector>

#include "alphabet/Symbol.h"

namespace alib {

template<typename T>
struct stringApi;

} /* namespace alib */

namespace string {

class StringFromStringParser {
public:
	StringFromStringParser() {}

private:
	std::vector<alphabet::Symbol> parseContent(std::istream&) const;

	StringFromStringLexer m_StringLexer;

	String parseString(std::istream&) const;
	String parseString(std::istream&, const std::set<FEATURES>& features) const;

	template<typename T> friend struct alib::stringApi;
};

} /* namespace string */

#endif /* STRING_FROM_STRING_PARSER_H_ */