1 #ifndef EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 2 #define EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 4 #if defined(_MSC_VER) || \ 5 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ 6 (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 13 #include "regex_yaml.h" 23 inline const RegEx& Empty() {
27 inline const RegEx& Space() {
28 static const RegEx e = RegEx(
' ');
31 inline const RegEx& Tab() {
32 static const RegEx e = RegEx(
'\t');
35 inline const RegEx& Blank() {
36 static const RegEx e = Space() | Tab();
39 inline const RegEx& Break() {
40 static const RegEx e = RegEx(
'\n') | RegEx(
"\r\n") | RegEx(
'\r');
43 inline const RegEx& BlankOrBreak() {
44 static const RegEx e = Blank() | Break();
47 inline const RegEx& Digit() {
48 static const RegEx e = RegEx(
'0',
'9');
51 inline const RegEx& Alpha() {
52 static const RegEx e = RegEx(
'a',
'z') | RegEx(
'A',
'Z');
55 inline const RegEx& AlphaNumeric() {
56 static const RegEx e = Alpha() | Digit();
59 inline const RegEx& Word() {
60 static const RegEx e = AlphaNumeric() | RegEx(
'-');
63 inline const RegEx& Hex() {
64 static const RegEx e = Digit() | RegEx(
'A',
'F') | RegEx(
'a',
'f');
69 inline const RegEx& NotPrintable() {
70 static const RegEx e =
72 RegEx(
"\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x7F", REGEX_OR) |
74 (RegEx(
'\xC2') + (RegEx(
'\x80',
'\x84') | RegEx(
'\x86',
'\x9F')));
77 inline const RegEx& Utf8_ByteOrderMark() {
78 static const RegEx e = RegEx(
"\xEF\xBB\xBF");
84 inline const RegEx& DocStart() {
85 static const RegEx e = RegEx(
"---") + (BlankOrBreak() | RegEx());
88 inline const RegEx& DocEnd() {
89 static const RegEx e = RegEx(
"...") + (BlankOrBreak() | RegEx());
92 inline const RegEx& DocIndicator() {
93 static const RegEx e = DocStart() | DocEnd();
96 inline const RegEx& BlockEntry() {
97 static const RegEx e = RegEx(
'-') + (BlankOrBreak() | RegEx());
100 inline const RegEx& Key() {
101 static const RegEx e = RegEx(
'?') + BlankOrBreak();
104 inline const RegEx& KeyInFlow() {
105 static const RegEx e = RegEx(
'?') + BlankOrBreak();
108 inline const RegEx& Value() {
109 static const RegEx e = RegEx(
':') + (BlankOrBreak() | RegEx());
112 inline const RegEx& ValueInFlow() {
113 static const RegEx e = RegEx(
':') + (BlankOrBreak() | RegEx(
",]}", REGEX_OR));
116 inline const RegEx& ValueInJSONFlow() {
117 static const RegEx e = RegEx(
':');
120 inline const RegEx& Ampersand() {
121 static const RegEx e = RegEx(
'&');
124 inline const RegEx Comment() {
125 static const RegEx e = RegEx(
'#');
128 inline const RegEx& Anchor() {
129 static const RegEx e = !(RegEx(
"[]{},", REGEX_OR) | BlankOrBreak());
132 inline const RegEx& AnchorEnd() {
133 static const RegEx e = RegEx(
"?:,]}%@`", REGEX_OR) | BlankOrBreak();
136 inline const RegEx& URI() {
137 static const RegEx e = Word() | RegEx(
"#;/?:@&=+$,_.!~*'()[]", REGEX_OR) |
138 (RegEx(
'%') + Hex() + Hex());
141 inline const RegEx& Tag() {
142 static const RegEx e = Word() | RegEx(
"#;/?:@&=+$_.~*'()", REGEX_OR) |
143 (RegEx(
'%') + Hex() + Hex());
153 inline const RegEx& PlainScalar() {
154 static const RegEx e =
155 !(BlankOrBreak() | RegEx(
",[]{}#&*!|>\'\"%@`", REGEX_OR) |
156 (RegEx(
"-?:", REGEX_OR) + (BlankOrBreak() | RegEx())));
159 inline const RegEx& PlainScalarInFlow() {
160 static const RegEx e =
161 !(BlankOrBreak() | RegEx(
"?,[]{}#&*!|>\'\"%@`", REGEX_OR) |
162 (RegEx(
"-:", REGEX_OR) + (Blank() | RegEx())));
165 inline const RegEx& EndScalar() {
166 static const RegEx e = RegEx(
':') + (BlankOrBreak() | RegEx());
169 inline const RegEx& EndScalarInFlow() {
170 static const RegEx e =
171 (RegEx(
':') + (BlankOrBreak() | RegEx() | RegEx(
",]}", REGEX_OR))) |
172 RegEx(
",?[]{}", REGEX_OR);
176 inline const RegEx& ScanScalarEndInFlow() {
177 static const RegEx e = (EndScalarInFlow() | (BlankOrBreak() + Comment()));
181 inline const RegEx& ScanScalarEnd() {
182 static const RegEx e = EndScalar() | (BlankOrBreak() + Comment());
185 inline const RegEx& EscSingleQuote() {
186 static const RegEx e = RegEx(
"\'\'");
189 inline const RegEx& EscBreak() {
190 static const RegEx e = RegEx(
'\\') + Break();
194 inline const RegEx& ChompIndicator() {
195 static const RegEx e = RegEx(
"+-", REGEX_OR);
198 inline const RegEx& Chomp() {
199 static const RegEx e = (ChompIndicator() + Digit()) |
200 (Digit() + ChompIndicator()) | ChompIndicator() |
206 std::string Escape(Stream& in);
210 const char Directive =
'%';
211 const char FlowSeqStart =
'[';
212 const char FlowSeqEnd =
']';
213 const char FlowMapStart =
'{';
214 const char FlowMapEnd =
'}';
215 const char FlowEntry =
',';
216 const char Alias =
'*';
217 const char Anchor =
'&';
218 const char Tag =
'!';
219 const char LiteralScalar =
'|';
220 const char FoldedScalar =
'>';
221 const char VerbatimTagStart =
'<';
222 const char VerbatimTagEnd =
'>';
226 #endif // EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66