yaml-cpp/token.h

71 lines
2.0 KiB
C
Raw Normal View History

2008-06-26 13:05:28 +04:00
#pragma once
2008-06-28 00:54:43 +04:00
#include <ios>
2008-06-30 08:22:41 +04:00
#include <string>
#include <vector>
2008-06-28 00:54:43 +04:00
2008-06-26 13:05:28 +04:00
namespace YAML
{
enum TOKEN_STATUS { TS_VALID, TS_INVALID, TS_UNVERIFIED };
2008-06-28 00:54:43 +04:00
struct Token {
Token(): status(TS_VALID) {}
2008-06-28 00:54:43 +04:00
virtual ~Token() {}
virtual void Write(std::ostream& out) const {}
friend std::ostream& operator << (std::ostream& out, const Token& token) { token.Write(out); return out; }
TOKEN_STATUS status;
};
2008-06-28 00:54:43 +04:00
struct StreamStartToken: public Token {};
struct StreamEndToken: public Token {};
2008-06-30 08:22:41 +04:00
struct DirectiveToken: public Token {
std::string name;
std::vector <std::string> params;
virtual void Write(std::ostream& out) const { out << name; for(unsigned i=0;i<params.size();i++) out << " " << params[i]; }
};
2008-06-28 00:54:43 +04:00
struct DocumentStartToken: public Token {};
struct DocumentEndToken: public Token {};
struct BlockSeqStartToken: public Token {};
struct BlockMapStartToken: public Token {};
struct BlockEndToken: public Token {};
struct BlockEntryToken: public Token {};
struct FlowSeqStartToken: public Token {};
struct FlowMapStartToken: public Token {};
struct FlowSeqEndToken: public Token {};
struct FlowMapEndToken: public Token {};
struct FlowEntryToken: public Token {};
struct KeyToken: public Token {};
struct ValueToken: public Token {};
2008-06-29 04:33:34 +04:00
struct AnchorToken: public Token {
bool alias;
std::string value;
virtual void Write(std::ostream& out) const { out << (alias ? '*' : '&') << value; }
};
2008-06-28 00:54:43 +04:00
2008-06-30 08:22:41 +04:00
struct TagToken: public Token {
std::string handle, suffix;
virtual void Write(std::ostream& out) const { out << "!" << handle << "!" << suffix; }
};
2008-06-28 00:54:43 +04:00
struct ScalarToken: public Token {
std::string value;
virtual void Write(std::ostream& out) const { out << value; }
};
struct PlainScalarToken: public ScalarToken {};
struct QuotedScalarToken: public ScalarToken {
bool single;
virtual void Write(std::ostream& out) const { out << (single ? '\'' : '\"') << value << (single ? '\'' : '\"'); }
};
2008-06-29 00:08:21 +04:00
struct BlockScalarToken: public ScalarToken {};
2008-06-26 13:05:28 +04:00
}