1//line scan_string_lit.rl:1
2
3package hclsyntax
4
5// This file is generated from scan_string_lit.rl. DO NOT EDIT.
6
7//line scan_string_lit.go:9
8var _hclstrtok_actions []byte = []byte{
9	0, 1, 0, 1, 1, 2, 1, 0,
10}
11
12var _hclstrtok_key_offsets []byte = []byte{
13	0, 0, 2, 4, 6, 10, 14, 18,
14	22, 27, 31, 36, 41, 46, 51, 57,
15	62, 74, 85, 96, 107, 118, 129, 140,
16	151,
17}
18
19var _hclstrtok_trans_keys []byte = []byte{
20	128, 191, 128, 191, 128, 191, 10, 13,
21	36, 37, 10, 13, 36, 37, 10, 13,
22	36, 37, 10, 13, 36, 37, 10, 13,
23	36, 37, 123, 10, 13, 36, 37, 10,
24	13, 36, 37, 92, 10, 13, 36, 37,
25	92, 10, 13, 36, 37, 92, 10, 13,
26	36, 37, 92, 10, 13, 36, 37, 92,
27	123, 10, 13, 36, 37, 92, 85, 117,
28	128, 191, 192, 223, 224, 239, 240, 247,
29	248, 255, 10, 13, 36, 37, 92, 48,
30	57, 65, 70, 97, 102, 10, 13, 36,
31	37, 92, 48, 57, 65, 70, 97, 102,
32	10, 13, 36, 37, 92, 48, 57, 65,
33	70, 97, 102, 10, 13, 36, 37, 92,
34	48, 57, 65, 70, 97, 102, 10, 13,
35	36, 37, 92, 48, 57, 65, 70, 97,
36	102, 10, 13, 36, 37, 92, 48, 57,
37	65, 70, 97, 102, 10, 13, 36, 37,
38	92, 48, 57, 65, 70, 97, 102, 10,
39	13, 36, 37, 92, 48, 57, 65, 70,
40	97, 102,
41}
42
43var _hclstrtok_single_lengths []byte = []byte{
44	0, 0, 0, 0, 4, 4, 4, 4,
45	5, 4, 5, 5, 5, 5, 6, 5,
46	2, 5, 5, 5, 5, 5, 5, 5,
47	5,
48}
49
50var _hclstrtok_range_lengths []byte = []byte{
51	0, 1, 1, 1, 0, 0, 0, 0,
52	0, 0, 0, 0, 0, 0, 0, 0,
53	5, 3, 3, 3, 3, 3, 3, 3,
54	3,
55}
56
57var _hclstrtok_index_offsets []byte = []byte{
58	0, 0, 2, 4, 6, 11, 16, 21,
59	26, 32, 37, 43, 49, 55, 61, 68,
60	74, 82, 91, 100, 109, 118, 127, 136,
61	145,
62}
63
64var _hclstrtok_indicies []byte = []byte{
65	0, 1, 2, 1, 3, 1, 5, 6,
66	7, 8, 4, 10, 11, 12, 13, 9,
67	14, 11, 12, 13, 9, 10, 11, 15,
68	13, 9, 10, 11, 12, 13, 14, 9,
69	10, 11, 12, 15, 9, 17, 18, 19,
70	20, 21, 16, 23, 24, 25, 26, 27,
71	22, 0, 24, 25, 26, 27, 22, 23,
72	24, 28, 26, 27, 22, 23, 24, 25,
73	26, 27, 0, 22, 23, 24, 25, 28,
74	27, 22, 29, 30, 22, 2, 3, 31,
75	22, 0, 23, 24, 25, 26, 27, 32,
76	32, 32, 22, 23, 24, 25, 26, 27,
77	33, 33, 33, 22, 23, 24, 25, 26,
78	27, 34, 34, 34, 22, 23, 24, 25,
79	26, 27, 30, 30, 30, 22, 23, 24,
80	25, 26, 27, 35, 35, 35, 22, 23,
81	24, 25, 26, 27, 36, 36, 36, 22,
82	23, 24, 25, 26, 27, 37, 37, 37,
83	22, 23, 24, 25, 26, 27, 0, 0,
84	0, 22,
85}
86
87var _hclstrtok_trans_targs []byte = []byte{
88	11, 0, 1, 2, 4, 5, 6, 7,
89	9, 4, 5, 6, 7, 9, 5, 8,
90	10, 11, 12, 13, 15, 16, 10, 11,
91	12, 13, 15, 16, 14, 17, 21, 3,
92	18, 19, 20, 22, 23, 24,
93}
94
95var _hclstrtok_trans_actions []byte = []byte{
96	0, 0, 0, 0, 0, 1, 1, 1,
97	1, 3, 5, 5, 5, 5, 0, 0,
98	0, 1, 1, 1, 1, 1, 3, 5,
99	5, 5, 5, 5, 0, 0, 0, 0,
100	0, 0, 0, 0, 0, 0,
101}
102
103var _hclstrtok_eof_actions []byte = []byte{
104	0, 0, 0, 0, 0, 3, 3, 3,
105	3, 3, 0, 3, 3, 3, 3, 3,
106	3, 3, 3, 3, 3, 3, 3, 3,
107	3,
108}
109
110const hclstrtok_start int = 4
111const hclstrtok_first_final int = 4
112const hclstrtok_error int = 0
113
114const hclstrtok_en_quoted int = 10
115const hclstrtok_en_unquoted int = 4
116
117//line scan_string_lit.rl:10
118
119func scanStringLit(data []byte, quoted bool) [][]byte {
120	var ret [][]byte
121
122//line scan_string_lit.rl:61
123
124	// Ragel state
125	p := 0          // "Pointer" into data
126	pe := len(data) // End-of-data "pointer"
127	ts := 0
128	te := 0
129	eof := pe
130
131	var cs int // current state
132	switch {
133	case quoted:
134		cs = hclstrtok_en_quoted
135	default:
136		cs = hclstrtok_en_unquoted
137	}
138
139	// Make Go compiler happy
140	_ = ts
141	_ = eof
142
143	/*token := func () {
144	    ret = append(ret, data[ts:te])
145	}*/
146
147//line scan_string_lit.go:154
148	{
149	}
150
151//line scan_string_lit.go:158
152	{
153		var _klen int
154		var _trans int
155		var _acts int
156		var _nacts uint
157		var _keys int
158		if p == pe {
159			goto _test_eof
160		}
161		if cs == 0 {
162			goto _out
163		}
164	_resume:
165		_keys = int(_hclstrtok_key_offsets[cs])
166		_trans = int(_hclstrtok_index_offsets[cs])
167
168		_klen = int(_hclstrtok_single_lengths[cs])
169		if _klen > 0 {
170			_lower := int(_keys)
171			var _mid int
172			_upper := int(_keys + _klen - 1)
173			for {
174				if _upper < _lower {
175					break
176				}
177
178				_mid = _lower + ((_upper - _lower) >> 1)
179				switch {
180				case data[p] < _hclstrtok_trans_keys[_mid]:
181					_upper = _mid - 1
182				case data[p] > _hclstrtok_trans_keys[_mid]:
183					_lower = _mid + 1
184				default:
185					_trans += int(_mid - int(_keys))
186					goto _match
187				}
188			}
189			_keys += _klen
190			_trans += _klen
191		}
192
193		_klen = int(_hclstrtok_range_lengths[cs])
194		if _klen > 0 {
195			_lower := int(_keys)
196			var _mid int
197			_upper := int(_keys + (_klen << 1) - 2)
198			for {
199				if _upper < _lower {
200					break
201				}
202
203				_mid = _lower + (((_upper - _lower) >> 1) & ^1)
204				switch {
205				case data[p] < _hclstrtok_trans_keys[_mid]:
206					_upper = _mid - 2
207				case data[p] > _hclstrtok_trans_keys[_mid+1]:
208					_lower = _mid + 2
209				default:
210					_trans += int((_mid - int(_keys)) >> 1)
211					goto _match
212				}
213			}
214			_trans += _klen
215		}
216
217	_match:
218		_trans = int(_hclstrtok_indicies[_trans])
219		cs = int(_hclstrtok_trans_targs[_trans])
220
221		if _hclstrtok_trans_actions[_trans] == 0 {
222			goto _again
223		}
224
225		_acts = int(_hclstrtok_trans_actions[_trans])
226		_nacts = uint(_hclstrtok_actions[_acts])
227		_acts++
228		for ; _nacts > 0; _nacts-- {
229			_acts++
230			switch _hclstrtok_actions[_acts-1] {
231			case 0:
232//line scan_string_lit.rl:40
233
234				// If te is behind p then we've skipped over some literal
235				// characters which we must now return.
236				if te < p {
237					ret = append(ret, data[te:p])
238				}
239				ts = p
240
241			case 1:
242//line scan_string_lit.rl:48
243
244				te = p
245				ret = append(ret, data[ts:te])
246
247//line scan_string_lit.go:253
248			}
249		}
250
251	_again:
252		if cs == 0 {
253			goto _out
254		}
255		p++
256		if p != pe {
257			goto _resume
258		}
259	_test_eof:
260		{
261		}
262		if p == eof {
263			__acts := _hclstrtok_eof_actions[cs]
264			__nacts := uint(_hclstrtok_actions[__acts])
265			__acts++
266			for ; __nacts > 0; __nacts-- {
267				__acts++
268				switch _hclstrtok_actions[__acts-1] {
269				case 1:
270//line scan_string_lit.rl:48
271
272					te = p
273					ret = append(ret, data[ts:te])
274
275//line scan_string_lit.go:278
276				}
277			}
278		}
279
280	_out:
281		{
282		}
283	}
284
285//line scan_string_lit.rl:89
286
287	if te < p {
288		// Collect any leftover literal characters at the end of the input
289		ret = append(ret, data[te:p])
290	}
291
292	// If we fall out here without being in a final state then we've
293	// encountered something that the scanner can't match, which should
294	// be impossible (the scanner matches all bytes _somehow_) but we'll
295	// tolerate it and let the caller deal with it.
296	if cs < hclstrtok_first_final {
297		ret = append(ret, data[p:len(data)])
298	}
299
300	return ret
301}
302