token.h 2.01 KB
Newer Older
beder's avatar
beder committed
1
2
#pragma once

beder's avatar
beder committed
3
#include <ios>
beder's avatar
beder committed
4
5
#include <string>
#include <vector>
beder's avatar
beder committed
6

beder's avatar
beder committed
7
8
namespace YAML
{
9
10
	enum TOKEN_STATUS { TS_VALID, TS_INVALID, TS_UNVERIFIED };

beder's avatar
beder committed
11
	struct Token {
12
		Token(): status(TS_VALID) {}
beder's avatar
beder committed
13
14
15
16
		virtual ~Token() {}
		virtual void Write(std::ostream& out) const {}

		friend std::ostream& operator << (std::ostream& out, const Token& token) { token.Write(out); return out; }
17
		TOKEN_STATUS status;
18
	};
beder's avatar
beder committed
19
20
21

	struct StreamStartToken: public Token {};
	struct StreamEndToken: public Token {};
beder's avatar
beder committed
22
23
24
25
26
27
28
	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]; }
	};

beder's avatar
beder committed
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
	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 {};
beder's avatar
beder committed
45
46
47
48
49
50
	struct AnchorToken: public Token {
		bool alias;
		std::string value;

		virtual void Write(std::ostream& out) const { out << (alias ? '*' : '&') << value; }
	};
beder's avatar
beder committed
51

beder's avatar
beder committed
52
53
54
55
56
57
	struct TagToken: public Token {
		std::string handle, suffix;

		virtual void Write(std::ostream& out) const { out << "!" << handle << "!" << suffix; }
	};

beder's avatar
beder committed
58
59
60
61
62
63
	struct ScalarToken: public Token {
		std::string value;
		virtual void Write(std::ostream& out) const { out << value; }
	};

	struct PlainScalarToken: public ScalarToken {};
64
65
66
67
68
	struct QuotedScalarToken: public ScalarToken {
		bool single;
		virtual void Write(std::ostream& out) const { out << (single ? '\'' : '\"') << value << (single ? '\'' : '\"'); }
	};

beder's avatar
beder committed
69
	struct BlockScalarToken: public ScalarToken {};
beder's avatar
beder committed
70
}