OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Translates a string of characters into a YAML serialization tree. | 6 * Translates a string of characters into a YAML serialization tree. |
7 * | 7 * |
8 * This parser is designed to closely follow the spec. All productions in the | 8 * This parser is designed to closely follow the spec. All productions in the |
9 * spec are numbered, and the corresponding methods in the parser have the same | 9 * spec are numbered, and the corresponding methods in the parser have the same |
10 * numbers. This is certainly not the most efficient way of parsing YAML, but it | 10 * numbers. This is certainly not the most efficient way of parsing YAML, but it |
11 * is the easiest to write and read in the context of the spec. | 11 * is the easiest to write and read in the context of the spec. |
12 * | 12 * |
13 * Methods corresponding to productions are also named as in the spec, | 13 * Methods corresponding to productions are also named as in the spec, |
14 * translating the name of the method (although not the annotation characters) | 14 * translating the name of the method (although not the annotation characters) |
15 * into camel-case for dart style.. For example, the spec has a production named | 15 * into camel-case for dart style.. For example, the spec has a production named |
16 * `nb-ns-plain-in-line`, and the method implementing it is named | 16 * `nb-ns-plain-in-line`, and the method implementing it is named |
17 * `nb_ns_plainInLine`. The exception to that rule is methods that just | 17 * `nb_ns_plainInLine`. The exception to that rule is methods that just |
18 * recognize character classes; these are named `is*`. | 18 * recognize character classes; these are named `is*`. |
19 */ | 19 */ |
20 class _Parser { | 20 class _Parser { |
21 static final TAB = 0x9; | 21 static const TAB = 0x9; |
22 static final LF = 0xA; | 22 static const LF = 0xA; |
23 static final CR = 0xD; | 23 static const CR = 0xD; |
24 static final SP = 0x20; | 24 static const SP = 0x20; |
25 static final TILDE = 0x7E; | 25 static const TILDE = 0x7E; |
26 static final NEL = 0x85; | 26 static const NEL = 0x85; |
27 static final PLUS = 0x2B; | 27 static const PLUS = 0x2B; |
28 static final HYPHEN = 0x2D; | 28 static const HYPHEN = 0x2D; |
29 static final QUESTION_MARK = 0x3F; | 29 static const QUESTION_MARK = 0x3F; |
30 static final COLON = 0x3A; | 30 static const COLON = 0x3A; |
31 static final COMMA = 0x2C; | 31 static const COMMA = 0x2C; |
32 static final LEFT_BRACKET = 0x5B; | 32 static const LEFT_BRACKET = 0x5B; |
33 static final RIGHT_BRACKET = 0x5D; | 33 static const RIGHT_BRACKET = 0x5D; |
34 static final LEFT_BRACE = 0x7B; | 34 static const LEFT_BRACE = 0x7B; |
35 static final RIGHT_BRACE = 0x7D; | 35 static const RIGHT_BRACE = 0x7D; |
36 static final HASH = 0x23; | 36 static const HASH = 0x23; |
37 static final AMPERSAND = 0x26; | 37 static const AMPERSAND = 0x26; |
38 static final ASTERISK = 0x2A; | 38 static const ASTERISK = 0x2A; |
39 static final EXCLAMATION = 0x21; | 39 static const EXCLAMATION = 0x21; |
40 static final VERTICAL_BAR = 0x7C; | 40 static const VERTICAL_BAR = 0x7C; |
41 static final GREATER_THAN = 0x3E; | 41 static const GREATER_THAN = 0x3E; |
42 static final SINGLE_QUOTE = 0x27; | 42 static const SINGLE_QUOTE = 0x27; |
43 static final DOUBLE_QUOTE = 0x22; | 43 static const DOUBLE_QUOTE = 0x22; |
44 static final PERCENT = 0x25; | 44 static const PERCENT = 0x25; |
45 static final AT = 0x40; | 45 static const AT = 0x40; |
46 static final GRAVE_ACCENT = 0x60; | 46 static const GRAVE_ACCENT = 0x60; |
47 | 47 |
48 static final NULL = 0x0; | 48 static const NULL = 0x0; |
49 static final BELL = 0x7; | 49 static const BELL = 0x7; |
50 static final BACKSPACE = 0x8; | 50 static const BACKSPACE = 0x8; |
51 static final VERTICAL_TAB = 0xB; | 51 static const VERTICAL_TAB = 0xB; |
52 static final FORM_FEED = 0xC; | 52 static const FORM_FEED = 0xC; |
53 static final ESCAPE = 0x1B; | 53 static const ESCAPE = 0x1B; |
54 static final SLASH = 0x2F; | 54 static const SLASH = 0x2F; |
55 static final BACKSLASH = 0x5C; | 55 static const BACKSLASH = 0x5C; |
56 static final UNDERSCORE = 0x5F; | 56 static const UNDERSCORE = 0x5F; |
57 static final NBSP = 0xA0; | 57 static const NBSP = 0xA0; |
58 static final LINE_SEPARATOR = 0x2028; | 58 static const LINE_SEPARATOR = 0x2028; |
59 static final PARAGRAPH_SEPARATOR = 0x2029; | 59 static const PARAGRAPH_SEPARATOR = 0x2029; |
60 | 60 |
61 static final NUMBER_0 = 0x30; | 61 static const NUMBER_0 = 0x30; |
62 static final NUMBER_9 = 0x39; | 62 static const NUMBER_9 = 0x39; |
63 | 63 |
64 static final LETTER_A = 0x61; | 64 static const LETTER_A = 0x61; |
65 static final LETTER_B = 0x62; | 65 static const LETTER_B = 0x62; |
66 static final LETTER_E = 0x65; | 66 static const LETTER_E = 0x65; |
67 static final LETTER_F = 0x66; | 67 static const LETTER_F = 0x66; |
68 static final LETTER_N = 0x6E; | 68 static const LETTER_N = 0x6E; |
69 static final LETTER_R = 0x72; | 69 static const LETTER_R = 0x72; |
70 static final LETTER_T = 0x74; | 70 static const LETTER_T = 0x74; |
71 static final LETTER_U = 0x75; | 71 static const LETTER_U = 0x75; |
72 static final LETTER_V = 0x76; | 72 static const LETTER_V = 0x76; |
73 static final LETTER_X = 0x78; | 73 static const LETTER_X = 0x78; |
74 | 74 |
75 static final LETTER_CAP_A = 0x41; | 75 static const LETTER_CAP_A = 0x41; |
76 static final LETTER_CAP_F = 0x46; | 76 static const LETTER_CAP_F = 0x46; |
77 static final LETTER_CAP_L = 0x4C; | 77 static const LETTER_CAP_L = 0x4C; |
78 static final LETTER_CAP_N = 0x4E; | 78 static const LETTER_CAP_N = 0x4E; |
79 static final LETTER_CAP_P = 0x50; | 79 static const LETTER_CAP_P = 0x50; |
80 static final LETTER_CAP_U = 0x55; | 80 static const LETTER_CAP_U = 0x55; |
81 static final LETTER_CAP_X = 0x58; | 81 static const LETTER_CAP_X = 0x58; |
82 | 82 |
83 static final C_SEQUENCE_ENTRY = 4; | 83 static const C_SEQUENCE_ENTRY = 4; |
84 static final C_MAPPING_KEY = 5; | 84 static const C_MAPPING_KEY = 5; |
85 static final C_MAPPING_VALUE = 6; | 85 static const C_MAPPING_VALUE = 6; |
86 static final C_COLLECT_ENTRY = 7; | 86 static const C_COLLECT_ENTRY = 7; |
87 static final C_SEQUENCE_START = 8; | 87 static const C_SEQUENCE_START = 8; |
88 static final C_SEQUENCE_END = 9; | 88 static const C_SEQUENCE_END = 9; |
89 static final C_MAPPING_START = 10; | 89 static const C_MAPPING_START = 10; |
90 static final C_MAPPING_END = 11; | 90 static const C_MAPPING_END = 11; |
91 static final C_COMMENT = 12; | 91 static const C_COMMENT = 12; |
92 static final C_ANCHOR = 13; | 92 static const C_ANCHOR = 13; |
93 static final C_ALIAS = 14; | 93 static const C_ALIAS = 14; |
94 static final C_TAG = 15; | 94 static const C_TAG = 15; |
95 static final C_LITERAL = 16; | 95 static const C_LITERAL = 16; |
96 static final C_FOLDED = 17; | 96 static const C_FOLDED = 17; |
97 static final C_SINGLE_QUOTE = 18; | 97 static const C_SINGLE_QUOTE = 18; |
98 static final C_DOUBLE_QUOTE = 19; | 98 static const C_DOUBLE_QUOTE = 19; |
99 static final C_DIRECTIVE = 20; | 99 static const C_DIRECTIVE = 20; |
100 static final C_RESERVED = 21; | 100 static const C_RESERVED = 21; |
101 | 101 |
102 static final BLOCK_OUT = 0; | 102 static const BLOCK_OUT = 0; |
103 static final BLOCK_IN = 1; | 103 static const BLOCK_IN = 1; |
104 static final FLOW_OUT = 2; | 104 static const FLOW_OUT = 2; |
105 static final FLOW_IN = 3; | 105 static const FLOW_IN = 3; |
106 static final BLOCK_KEY = 4; | 106 static const BLOCK_KEY = 4; |
107 static final FLOW_KEY = 5; | 107 static const FLOW_KEY = 5; |
108 | 108 |
109 static final CHOMPING_STRIP = 0; | 109 static const CHOMPING_STRIP = 0; |
110 static final CHOMPING_KEEP = 1; | 110 static const CHOMPING_KEEP = 1; |
111 static final CHOMPING_CLIP = 2; | 111 static const CHOMPING_CLIP = 2; |
112 | 112 |
113 /** The source string being parsed. */ | 113 /** The source string being parsed. */ |
114 final String s; | 114 final String s; |
115 | 115 |
116 /** The current position in the source string. */ | 116 /** The current position in the source string. */ |
117 int pos = 0; | 117 int pos = 0; |
118 | 118 |
119 /** The length of the string being parsed. */ | 119 /** The length of the string being parsed. */ |
120 final int len; | 120 final int len; |
121 | 121 |
(...skipping 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1894 | 1894 |
1895 /** The information in the header for a block scalar. */ | 1895 /** The information in the header for a block scalar. */ |
1896 class _BlockHeader { | 1896 class _BlockHeader { |
1897 final int additionalIndent; | 1897 final int additionalIndent; |
1898 final int chomping; | 1898 final int chomping; |
1899 | 1899 |
1900 _BlockHeader(this.additionalIndent, this.chomping); | 1900 _BlockHeader(this.additionalIndent, this.chomping); |
1901 | 1901 |
1902 bool get autoDetectIndent => additionalIndent == null; | 1902 bool get autoDetectIndent => additionalIndent == null; |
1903 } | 1903 } |
OLD | NEW |