token.h 1.41 KB
Newer Older
Jesse Beder's avatar
Jesse Beder committed
1
2
#pragma once

3
4
#include <ios>

Jesse Beder's avatar
Jesse Beder committed
5
6
namespace YAML
{
7
	struct Token {
Jesse Beder's avatar
Jesse Beder committed
8
		Token(): isValid(true), isPossible(true) {}
9
10
11
12
		virtual ~Token() {}
		virtual void Write(std::ostream& out) const {}

		friend std::ostream& operator << (std::ostream& out, const Token& token) { token.Write(out); return out; }
Jesse Beder's avatar
Jesse Beder committed
13
		bool isValid, isPossible;
14
	};
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

	struct StreamStartToken: public Token {};
	struct StreamEndToken: public Token {};
	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 {};
Jesse Beder's avatar
Jesse Beder committed
34
35
36
37
38
39
	struct AnchorToken: public Token {
		bool alias;
		std::string value;

		virtual void Write(std::ostream& out) const { out << (alias ? '*' : '&') << value; }
	};
40
41
42
43
44
45
46
47

	struct ScalarToken: public Token {
		std::string value;
		virtual void Write(std::ostream& out) const { out << value; }
	};

	struct PlainScalarToken: public ScalarToken {};
	struct QuotedScalarToken: public ScalarToken {};
48
	struct BlockScalarToken: public ScalarToken {};
Jesse Beder's avatar
Jesse Beder committed
49
}