trenni 1.7.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +7 -3
  4. data/Gemfile +4 -0
  5. data/README.md +72 -10
  6. data/Rakefile +85 -0
  7. data/benchmark/call_vs_yield.rb +51 -0
  8. data/benchmark/interpolation_vs_concat.rb +29 -0
  9. data/benchmark/io_vs_string.rb +14 -4
  10. data/entities.json +2233 -0
  11. data/ext/trenni/extconf.rb +13 -0
  12. data/ext/trenni/markup.c +1981 -0
  13. data/ext/trenni/markup.h +6 -0
  14. data/ext/trenni/markup.rl +223 -0
  15. data/ext/trenni/template.c +1113 -0
  16. data/ext/trenni/template.h +6 -0
  17. data/ext/trenni/template.rl +77 -0
  18. data/ext/trenni/trenni.c +64 -0
  19. data/ext/trenni/trenni.h +28 -0
  20. data/lib/trenni.rb +1 -0
  21. data/lib/trenni/buffer.rb +13 -2
  22. data/lib/trenni/builder.rb +54 -47
  23. data/lib/trenni/entities.rb +2154 -0
  24. data/lib/trenni/entities.trenni +34 -0
  25. data/lib/trenni/fallback/markup.rb +1648 -0
  26. data/lib/trenni/fallback/markup.rl +236 -0
  27. data/lib/trenni/fallback/template.rb +843 -0
  28. data/lib/trenni/fallback/template.rl +97 -0
  29. data/lib/trenni/markup.rb +76 -0
  30. data/lib/trenni/native.rb +28 -0
  31. data/lib/trenni/parse_delegate.rb +34 -0
  32. data/lib/trenni/{scanner.rb → parse_error.rb} +9 -54
  33. data/lib/trenni/parsers.rb +12 -0
  34. data/lib/trenni/substitutions.rb +45 -0
  35. data/lib/trenni/template.rb +52 -135
  36. data/lib/trenni/version.rb +1 -1
  37. data/parsers/trenni/entities.rl +11 -0
  38. data/parsers/trenni/markup.rl +43 -0
  39. data/parsers/trenni/template.rl +60 -0
  40. data/spec/trenni/builder_spec.rb +37 -62
  41. data/spec/trenni/corpus/large.rb +4605 -0
  42. data/spec/trenni/corpus/large.xhtml +726 -0
  43. data/spec/trenni/markup_parser_spec.rb +233 -0
  44. data/spec/trenni/markup_spec.rb +48 -0
  45. data/spec/trenni/parsers_performance_spec.rb +44 -0
  46. data/spec/trenni/template_error_spec.rb +36 -0
  47. data/spec/trenni/template_performance_spec.rb +102 -0
  48. data/spec/trenni/template_spec.rb +90 -64
  49. data/spec/trenni/template_spec/basic.trenni +1 -0
  50. data/spec/trenni/template_spec/capture.trenni +2 -2
  51. data/spec/trenni/template_spec/error.trenni +4 -0
  52. data/trenni.gemspec +9 -6
  53. metadata +57 -15
  54. data/lib/trenni/parser.rb +0 -153
  55. data/spec/trenni/parser_spec.rb +0 -144
@@ -0,0 +1,236 @@
1
+ # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ %%{
22
+ machine markup;
23
+
24
+ action identifier_begin {
25
+ identifier_begin = p
26
+ }
27
+
28
+ action identifier_end {
29
+ identifier_end = p
30
+ }
31
+
32
+ action pcdata_begin {
33
+ pcdata = ""
34
+ }
35
+
36
+ action pcdata_end {
37
+ }
38
+
39
+ action characters_begin {
40
+ characters_begin = p
41
+ }
42
+
43
+ action characters_end {
44
+ characters_end = p
45
+
46
+ pcdata << data.byteslice(characters_begin...characters_end)
47
+ }
48
+
49
+ action entity_error {
50
+ raise ParseError.new("could not parse entity", buffer, p)
51
+ }
52
+
53
+ action entity_begin {
54
+ entity_begin = p
55
+ }
56
+
57
+ action entity_name {
58
+ entity_end = p
59
+
60
+ name = data.byteslice(entity_begin...entity_end)
61
+
62
+ pcdata << entities[name]
63
+ }
64
+
65
+ action entity_hex {
66
+ entity_end = p
67
+
68
+ pcdata << data.byteslice(entity_begin...entity_end).to_i(16)
69
+ }
70
+
71
+ action entity_number {
72
+ entity_end = p
73
+
74
+ pcdata << data.byteslice(entity_begin...entity_end).to_i(10)
75
+ }
76
+
77
+ action doctype_begin {
78
+ doctype_begin = p
79
+ }
80
+
81
+ action doctype_end {
82
+ doctype_end = p
83
+
84
+ delegate.doctype(data.byteslice(doctype_begin...doctype_end))
85
+ }
86
+
87
+ action doctype_error {
88
+ raise ParseError.new("could not parse doctype", buffer, p)
89
+ }
90
+
91
+ action comment_begin {
92
+ comment_begin = p
93
+ }
94
+
95
+ action comment_end {
96
+ comment_end = p
97
+
98
+ delegate.comment(data.byteslice(comment_begin...comment_end))
99
+ }
100
+
101
+ action comment_error {
102
+ raise ParseError.new("could not parse comment", buffer, p)
103
+ }
104
+
105
+ action instruction_begin {
106
+ instruction_begin = p
107
+ }
108
+
109
+ action instruction_text_begin {
110
+ }
111
+
112
+ action instruction_text_end {
113
+ }
114
+
115
+ action instruction_end {
116
+ delegate.instruction(data.byteslice(instruction_begin, p-instruction_begin))
117
+ }
118
+
119
+ action instruction_error {
120
+ raise ParseError.new("could not parse instruction", buffer, p)
121
+ }
122
+
123
+ action tag_name {
124
+ self_closing = false
125
+
126
+ delegate.open_tag_begin(data.byteslice(identifier_begin...identifier_end), identifier_begin)
127
+ }
128
+
129
+ action tag_opening_begin {
130
+ }
131
+
132
+ action tag_self_closing {
133
+ self_closing = true
134
+ }
135
+
136
+ action attribute_begin {
137
+ has_value = false
138
+ pcdata = ""
139
+ }
140
+
141
+ action attribute_value {
142
+ has_value = true
143
+ }
144
+
145
+ action attribute_empty {
146
+ has_value = true
147
+ }
148
+
149
+ action attribute {
150
+ if has_value
151
+ value = pcdata
152
+ else
153
+ value = true
154
+ end
155
+
156
+ delegate.attribute(data.byteslice(identifier_begin...identifier_end), value)
157
+ }
158
+
159
+ action tag_opening_end {
160
+ delegate.open_tag_end(self_closing)
161
+ }
162
+
163
+ action tag_closing_begin {
164
+ }
165
+
166
+ action tag_closing_end {
167
+ delegate.close_tag(data.byteslice(identifier_begin...identifier_end), identifier_begin)
168
+ }
169
+
170
+ action tag_error {
171
+ raise ParseError.new("could not parse tag", buffer, p)
172
+ }
173
+
174
+ action cdata_begin {
175
+ cdata_begin = p
176
+ }
177
+
178
+ action cdata_end {
179
+ cdata_end = p
180
+
181
+ delegate.cdata(data.byteslice(cdata_begin...cdata_end))
182
+ }
183
+
184
+ action cdata_error {
185
+ raise ParseError.new("could not parse cdata", buffer, p)
186
+ }
187
+
188
+ action text_begin {
189
+ }
190
+
191
+ action text_end {
192
+ delegate.text(pcdata)
193
+ }
194
+
195
+ # This magic ensures that we process bytes.
196
+ getkey bytes[p];
197
+
198
+ include markup "trenni/markup.rl";
199
+ }%%
200
+
201
+ require_relative '../parse_error'
202
+
203
+ module Trenni
204
+ module Fallback
205
+ %% write data;
206
+
207
+ def self.parse_markup(buffer, delegate, entities)
208
+ data = buffer.read
209
+ bytes = data.bytes
210
+
211
+ p = 0
212
+ # Must set pe here or it gets incorrectly set to data.length
213
+ pe = eof = data.bytesize
214
+ stack = []
215
+
216
+ pcdata = nil
217
+ characters_begin = characters_end = nil
218
+ entity_begin = entity_end = nil
219
+ identifier_begin = identifier_end = nil
220
+ doctype_begin = doctype_end = nil
221
+ comment_begin = comment_end = nil
222
+ instruction_begin = instruction_end = nil
223
+ cdata_begin = cdata_end = nil
224
+ has_value = false
225
+
226
+ %% write init;
227
+ %% write exec;
228
+
229
+ if p != eof
230
+ raise ParseError.new("could not consume all input", buffer, p)
231
+ end
232
+
233
+ return nil
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,843 @@
1
+
2
+ # line 1 "template.rl"
3
+ # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+
24
+ # line 68 "template.rl"
25
+
26
+
27
+ require_relative '../parse_error'
28
+
29
+ module Trenni
30
+ module Fallback
31
+
32
+ # line 33 "template.rb"
33
+ class << self
34
+ attr_accessor :_template_trans_keys
35
+ private :_template_trans_keys, :_template_trans_keys=
36
+ end
37
+ self._template_trans_keys = [
38
+ 0, 0, 10, 60, 123, 123,
39
+ 63, 63, 123, 123, 63,
40
+ 63, 63, 63, 114, 114,
41
+ 9, 32, 63, 63, 62, 62,
42
+ 9, 32, 123, 123, 63,
43
+ 63, 0, 127, 0, 127,
44
+ 63, 63, 62, 62, 0, 127,
45
+ 63, 63, 62, 62, 34,
46
+ 125, 34, 35, 35, 125,
47
+ 35, 125, 34, 39, 35, 125,
48
+ 35, 125, 34, 123, 34,
49
+ 123, 39, 39, 34, 125,
50
+ 34, 125, 34, 35, 35, 125,
51
+ 35, 125, 34, 39, 35,
52
+ 125, 35, 125, 34, 123,
53
+ 34, 123, 39, 39, 34, 125,
54
+ 9, 60, 10, 60, 10,
55
+ 60, 9, 60, 9, 32,
56
+ 0, 0, 34, 39, 34, 35,
57
+ 39, 39, 0, 0, 34,
58
+ 39, 34, 35, 39, 39,
59
+ 0, 0, 0
60
+ ]
61
+
62
+ class << self
63
+ attr_accessor :_template_key_spans
64
+ private :_template_key_spans, :_template_key_spans=
65
+ end
66
+ self._template_key_spans = [
67
+ 0, 51, 1, 1, 1, 1, 1, 1,
68
+ 24, 1, 1, 24, 1, 1, 128, 128,
69
+ 1, 1, 128, 1, 1, 92, 2, 91,
70
+ 91, 6, 91, 91, 90, 90, 1, 92,
71
+ 92, 2, 91, 91, 6, 91, 91, 90,
72
+ 90, 1, 92, 52, 51, 51, 52, 24,
73
+ 0, 6, 2, 1, 0, 6, 2, 1,
74
+ 0
75
+ ]
76
+
77
+ class << self
78
+ attr_accessor :_template_index_offsets
79
+ private :_template_index_offsets, :_template_index_offsets=
80
+ end
81
+ self._template_index_offsets = [
82
+ 0, 0, 52, 54, 56, 58, 60, 62,
83
+ 64, 89, 91, 93, 118, 120, 122, 251,
84
+ 380, 382, 384, 513, 515, 517, 610, 613,
85
+ 705, 797, 804, 896, 988, 1079, 1170, 1172,
86
+ 1265, 1358, 1361, 1453, 1545, 1552, 1644, 1736,
87
+ 1827, 1918, 1920, 2013, 2066, 2118, 2170, 2223,
88
+ 2248, 2249, 2256, 2259, 2261, 2262, 2269, 2272,
89
+ 2274
90
+ ]
91
+
92
+ class << self
93
+ attr_accessor :_template_indicies
94
+ private :_template_indicies, :_template_indicies=
95
+ end
96
+ self._template_indicies = [
97
+ 2, 1, 1, 1, 1, 1, 1, 1,
98
+ 1, 1, 1, 1, 1, 1, 1, 1,
99
+ 1, 1, 1, 1, 1, 1, 1, 1,
100
+ 1, 3, 1, 1, 1, 1, 1, 1,
101
+ 1, 1, 1, 1, 1, 1, 1, 1,
102
+ 1, 1, 1, 1, 1, 1, 1, 1,
103
+ 1, 1, 4, 1, 0, 1, 0, 1,
104
+ 5, 6, 5, 6, 7, 6, 8, 5,
105
+ 10, 10, 10, 10, 10, 5, 5, 5,
106
+ 5, 5, 5, 5, 5, 5, 5, 5,
107
+ 5, 5, 5, 5, 5, 5, 5, 10,
108
+ 5, 12, 11, 13, 11, 13, 15, 13,
109
+ 13, 13, 14, 14, 14, 14, 14, 14,
110
+ 14, 14, 14, 14, 14, 14, 14, 14,
111
+ 14, 14, 14, 14, 13, 14, 16, 6,
112
+ 17, 6, 19, 19, 19, 19, 19, 19,
113
+ 19, 19, 19, 19, 19, 19, 19, 19,
114
+ 19, 19, 19, 19, 19, 19, 19, 19,
115
+ 19, 19, 19, 19, 19, 19, 19, 19,
116
+ 19, 19, 19, 19, 19, 19, 19, 19,
117
+ 19, 19, 19, 19, 19, 19, 19, 18,
118
+ 18, 19, 18, 18, 18, 18, 18, 18,
119
+ 18, 18, 18, 18, 18, 19, 19, 19,
120
+ 19, 19, 19, 18, 18, 18, 18, 18,
121
+ 18, 18, 18, 18, 18, 18, 18, 18,
122
+ 18, 18, 18, 18, 18, 18, 18, 18,
123
+ 18, 18, 18, 18, 18, 19, 19, 19,
124
+ 19, 18, 19, 18, 18, 18, 18, 18,
125
+ 18, 18, 18, 18, 18, 18, 18, 18,
126
+ 18, 18, 18, 18, 20, 18, 18, 18,
127
+ 18, 18, 18, 18, 18, 19, 19, 19,
128
+ 19, 19, 18, 19, 19, 19, 19, 19,
129
+ 19, 19, 19, 19, 21, 21, 21, 21,
130
+ 21, 19, 19, 19, 19, 19, 19, 19,
131
+ 19, 19, 19, 19, 19, 19, 19, 19,
132
+ 19, 19, 19, 21, 19, 19, 19, 19,
133
+ 19, 19, 19, 19, 19, 19, 19, 19,
134
+ 18, 18, 19, 18, 18, 18, 18, 18,
135
+ 18, 18, 18, 18, 18, 18, 19, 19,
136
+ 19, 19, 19, 19, 18, 18, 18, 18,
137
+ 18, 18, 18, 18, 18, 18, 18, 18,
138
+ 18, 18, 18, 18, 18, 18, 18, 18,
139
+ 18, 18, 18, 18, 18, 18, 19, 19,
140
+ 19, 19, 18, 19, 18, 18, 18, 18,
141
+ 18, 18, 18, 18, 18, 18, 18, 18,
142
+ 18, 18, 18, 18, 18, 18, 18, 18,
143
+ 18, 18, 18, 18, 18, 18, 19, 19,
144
+ 19, 19, 19, 18, 22, 21, 23, 21,
145
+ 19, 19, 19, 19, 19, 19, 19, 19,
146
+ 19, 24, 24, 24, 24, 24, 19, 19,
147
+ 19, 19, 19, 19, 19, 19, 19, 19,
148
+ 19, 19, 19, 19, 19, 19, 19, 19,
149
+ 24, 19, 19, 19, 19, 19, 19, 19,
150
+ 19, 19, 19, 19, 19, 18, 18, 19,
151
+ 18, 18, 18, 18, 18, 18, 18, 18,
152
+ 18, 18, 18, 19, 19, 19, 19, 19,
153
+ 19, 18, 18, 18, 18, 18, 18, 18,
154
+ 18, 18, 18, 18, 18, 18, 18, 18,
155
+ 18, 18, 18, 18, 18, 18, 18, 18,
156
+ 18, 18, 18, 19, 19, 19, 19, 18,
157
+ 19, 18, 18, 18, 18, 18, 18, 18,
158
+ 18, 18, 18, 18, 18, 18, 18, 18,
159
+ 18, 18, 18, 18, 18, 18, 18, 18,
160
+ 18, 18, 18, 19, 19, 19, 19, 19,
161
+ 18, 26, 25, 27, 25, 29, 28, 28,
162
+ 28, 28, 30, 28, 28, 28, 28, 28,
163
+ 28, 28, 28, 28, 28, 28, 28, 28,
164
+ 28, 28, 28, 28, 28, 28, 28, 28,
165
+ 28, 28, 28, 28, 28, 28, 28, 28,
166
+ 28, 28, 28, 28, 28, 28, 28, 28,
167
+ 28, 28, 28, 28, 28, 28, 28, 28,
168
+ 28, 28, 28, 28, 28, 28, 28, 28,
169
+ 28, 28, 28, 28, 28, 28, 28, 28,
170
+ 28, 28, 28, 28, 28, 28, 28, 28,
171
+ 28, 28, 28, 28, 28, 28, 28, 28,
172
+ 28, 28, 28, 28, 28, 28, 31, 28,
173
+ 32, 28, 33, 34, 29, 35, 33, 33,
174
+ 33, 36, 33, 33, 33, 33, 33, 33,
175
+ 33, 33, 33, 33, 33, 33, 33, 33,
176
+ 33, 33, 33, 33, 33, 33, 33, 33,
177
+ 33, 33, 33, 33, 33, 33, 33, 33,
178
+ 33, 33, 33, 33, 33, 33, 33, 33,
179
+ 33, 33, 33, 33, 33, 33, 33, 33,
180
+ 33, 33, 33, 33, 33, 33, 33, 33,
181
+ 33, 33, 33, 33, 33, 33, 33, 33,
182
+ 33, 33, 33, 33, 33, 33, 33, 33,
183
+ 33, 33, 33, 33, 33, 33, 33, 33,
184
+ 33, 33, 33, 33, 33, 37, 33, 38,
185
+ 33, 35, 33, 33, 33, 36, 33, 33,
186
+ 33, 33, 33, 33, 33, 33, 33, 33,
187
+ 33, 33, 33, 33, 33, 33, 33, 33,
188
+ 33, 33, 33, 33, 33, 33, 33, 33,
189
+ 33, 33, 33, 33, 33, 33, 33, 33,
190
+ 33, 33, 33, 33, 33, 33, 33, 33,
191
+ 33, 33, 33, 33, 33, 33, 33, 33,
192
+ 33, 33, 33, 33, 33, 33, 33, 33,
193
+ 33, 33, 33, 33, 33, 33, 33, 33,
194
+ 33, 33, 33, 33, 33, 33, 33, 33,
195
+ 33, 33, 33, 33, 33, 33, 33, 33,
196
+ 33, 39, 33, 38, 33, 40, 41, 36,
197
+ 36, 36, 40, 36, 42, 40, 40, 40,
198
+ 40, 40, 40, 40, 40, 40, 40, 40,
199
+ 40, 40, 40, 40, 40, 40, 40, 40,
200
+ 40, 40, 40, 40, 40, 40, 40, 40,
201
+ 40, 40, 40, 40, 40, 40, 40, 40,
202
+ 40, 40, 40, 40, 40, 40, 40, 40,
203
+ 40, 40, 40, 40, 40, 40, 40, 40,
204
+ 40, 40, 40, 40, 40, 40, 40, 40,
205
+ 40, 40, 40, 40, 40, 40, 40, 40,
206
+ 40, 40, 40, 40, 40, 40, 40, 40,
207
+ 40, 40, 40, 40, 40, 40, 40, 40,
208
+ 40, 40, 40, 40, 43, 40, 44, 40,
209
+ 42, 40, 40, 40, 40, 40, 40, 40,
210
+ 40, 40, 40, 40, 40, 40, 40, 40,
211
+ 40, 40, 40, 40, 40, 40, 40, 40,
212
+ 40, 40, 40, 40, 40, 40, 40, 40,
213
+ 40, 40, 40, 40, 40, 40, 40, 40,
214
+ 40, 40, 40, 40, 40, 40, 40, 40,
215
+ 40, 40, 40, 40, 40, 40, 40, 40,
216
+ 40, 40, 40, 40, 40, 40, 40, 40,
217
+ 40, 40, 40, 40, 40, 40, 40, 40,
218
+ 40, 40, 40, 40, 40, 40, 40, 40,
219
+ 40, 40, 40, 40, 40, 40, 40, 40,
220
+ 45, 40, 44, 40, 40, 41, 36, 36,
221
+ 36, 40, 36, 36, 36, 36, 36, 36,
222
+ 36, 36, 36, 36, 36, 36, 36, 36,
223
+ 36, 36, 36, 36, 36, 36, 36, 36,
224
+ 36, 36, 36, 36, 36, 36, 36, 36,
225
+ 36, 36, 36, 36, 36, 36, 36, 36,
226
+ 36, 36, 36, 36, 36, 36, 36, 36,
227
+ 36, 36, 36, 36, 36, 36, 36, 36,
228
+ 36, 36, 36, 36, 36, 36, 36, 36,
229
+ 36, 36, 36, 36, 36, 36, 36, 36,
230
+ 36, 36, 36, 36, 36, 36, 36, 36,
231
+ 36, 36, 36, 36, 36, 46, 36, 33,
232
+ 34, 29, 29, 29, 29, 29, 29, 29,
233
+ 29, 29, 29, 29, 29, 29, 29, 29,
234
+ 29, 29, 29, 29, 29, 29, 29, 29,
235
+ 29, 29, 29, 29, 29, 29, 29, 29,
236
+ 29, 29, 29, 29, 29, 29, 29, 29,
237
+ 29, 29, 29, 29, 29, 29, 29, 29,
238
+ 29, 29, 29, 29, 29, 29, 29, 29,
239
+ 29, 29, 29, 29, 29, 29, 29, 29,
240
+ 29, 29, 29, 29, 29, 29, 29, 29,
241
+ 29, 29, 29, 29, 29, 29, 29, 29,
242
+ 29, 29, 29, 29, 29, 29, 29, 29,
243
+ 47, 29, 48, 30, 36, 48, 48, 48,
244
+ 48, 48, 48, 48, 48, 48, 48, 48,
245
+ 48, 48, 48, 48, 48, 48, 48, 48,
246
+ 48, 48, 48, 48, 48, 48, 48, 48,
247
+ 48, 48, 48, 48, 48, 48, 48, 48,
248
+ 48, 48, 48, 48, 48, 48, 48, 48,
249
+ 48, 48, 48, 48, 48, 48, 48, 48,
250
+ 48, 48, 48, 48, 48, 48, 48, 48,
251
+ 48, 48, 48, 48, 48, 48, 48, 48,
252
+ 48, 48, 48, 48, 48, 48, 48, 48,
253
+ 48, 48, 48, 48, 48, 48, 48, 48,
254
+ 48, 48, 48, 48, 48, 49, 48, 50,
255
+ 48, 52, 51, 51, 51, 51, 53, 51,
256
+ 51, 51, 51, 51, 51, 51, 51, 51,
257
+ 51, 51, 51, 51, 51, 51, 51, 51,
258
+ 51, 51, 51, 51, 51, 51, 51, 51,
259
+ 51, 51, 51, 51, 51, 51, 51, 51,
260
+ 51, 51, 51, 51, 51, 51, 51, 51,
261
+ 51, 51, 51, 51, 51, 51, 51, 51,
262
+ 51, 51, 51, 51, 51, 51, 51, 51,
263
+ 51, 51, 51, 51, 51, 51, 51, 51,
264
+ 51, 51, 51, 51, 51, 51, 51, 51,
265
+ 51, 51, 51, 51, 51, 51, 51, 51,
266
+ 51, 51, 54, 51, 55, 51, 56, 57,
267
+ 52, 58, 56, 56, 56, 59, 56, 56,
268
+ 56, 56, 56, 56, 56, 56, 56, 56,
269
+ 56, 56, 56, 56, 56, 56, 56, 56,
270
+ 56, 56, 56, 56, 56, 56, 56, 56,
271
+ 56, 56, 56, 56, 56, 56, 56, 56,
272
+ 56, 56, 56, 56, 56, 56, 56, 56,
273
+ 56, 56, 56, 56, 56, 56, 56, 56,
274
+ 56, 56, 56, 56, 56, 56, 56, 56,
275
+ 56, 56, 56, 56, 56, 56, 56, 56,
276
+ 56, 56, 56, 56, 56, 56, 56, 56,
277
+ 56, 56, 56, 56, 56, 56, 56, 56,
278
+ 56, 60, 56, 61, 56, 58, 56, 56,
279
+ 56, 59, 56, 56, 56, 56, 56, 56,
280
+ 56, 56, 56, 56, 56, 56, 56, 56,
281
+ 56, 56, 56, 56, 56, 56, 56, 56,
282
+ 56, 56, 56, 56, 56, 56, 56, 56,
283
+ 56, 56, 56, 56, 56, 56, 56, 56,
284
+ 56, 56, 56, 56, 56, 56, 56, 56,
285
+ 56, 56, 56, 56, 56, 56, 56, 56,
286
+ 56, 56, 56, 56, 56, 56, 56, 56,
287
+ 56, 56, 56, 56, 56, 56, 56, 56,
288
+ 56, 56, 56, 56, 56, 56, 56, 56,
289
+ 56, 56, 56, 56, 56, 62, 56, 61,
290
+ 56, 63, 64, 59, 59, 59, 63, 59,
291
+ 65, 63, 63, 63, 63, 63, 63, 63,
292
+ 63, 63, 63, 63, 63, 63, 63, 63,
293
+ 63, 63, 63, 63, 63, 63, 63, 63,
294
+ 63, 63, 63, 63, 63, 63, 63, 63,
295
+ 63, 63, 63, 63, 63, 63, 63, 63,
296
+ 63, 63, 63, 63, 63, 63, 63, 63,
297
+ 63, 63, 63, 63, 63, 63, 63, 63,
298
+ 63, 63, 63, 63, 63, 63, 63, 63,
299
+ 63, 63, 63, 63, 63, 63, 63, 63,
300
+ 63, 63, 63, 63, 63, 63, 63, 63,
301
+ 63, 63, 63, 63, 63, 63, 63, 63,
302
+ 66, 63, 67, 63, 65, 63, 63, 63,
303
+ 63, 63, 63, 63, 63, 63, 63, 63,
304
+ 63, 63, 63, 63, 63, 63, 63, 63,
305
+ 63, 63, 63, 63, 63, 63, 63, 63,
306
+ 63, 63, 63, 63, 63, 63, 63, 63,
307
+ 63, 63, 63, 63, 63, 63, 63, 63,
308
+ 63, 63, 63, 63, 63, 63, 63, 63,
309
+ 63, 63, 63, 63, 63, 63, 63, 63,
310
+ 63, 63, 63, 63, 63, 63, 63, 63,
311
+ 63, 63, 63, 63, 63, 63, 63, 63,
312
+ 63, 63, 63, 63, 63, 63, 63, 63,
313
+ 63, 63, 63, 63, 68, 63, 67, 63,
314
+ 63, 64, 59, 59, 59, 63, 59, 59,
315
+ 59, 59, 59, 59, 59, 59, 59, 59,
316
+ 59, 59, 59, 59, 59, 59, 59, 59,
317
+ 59, 59, 59, 59, 59, 59, 59, 59,
318
+ 59, 59, 59, 59, 59, 59, 59, 59,
319
+ 59, 59, 59, 59, 59, 59, 59, 59,
320
+ 59, 59, 59, 59, 59, 59, 59, 59,
321
+ 59, 59, 59, 59, 59, 59, 59, 59,
322
+ 59, 59, 59, 59, 59, 59, 59, 59,
323
+ 59, 59, 59, 59, 59, 59, 59, 59,
324
+ 59, 59, 59, 59, 59, 59, 59, 59,
325
+ 59, 69, 59, 56, 57, 52, 52, 52,
326
+ 52, 52, 52, 52, 52, 52, 52, 52,
327
+ 52, 52, 52, 52, 52, 52, 52, 52,
328
+ 52, 52, 52, 52, 52, 52, 52, 52,
329
+ 52, 52, 52, 52, 52, 52, 52, 52,
330
+ 52, 52, 52, 52, 52, 52, 52, 52,
331
+ 52, 52, 52, 52, 52, 52, 52, 52,
332
+ 52, 52, 52, 52, 52, 52, 52, 52,
333
+ 52, 52, 52, 52, 52, 52, 52, 52,
334
+ 52, 52, 52, 52, 52, 52, 52, 52,
335
+ 52, 52, 52, 52, 52, 52, 52, 52,
336
+ 52, 52, 52, 52, 70, 52, 71, 53,
337
+ 59, 71, 71, 71, 71, 71, 71, 71,
338
+ 71, 71, 71, 71, 71, 71, 71, 71,
339
+ 71, 71, 71, 71, 71, 71, 71, 71,
340
+ 71, 71, 71, 71, 71, 71, 71, 71,
341
+ 71, 71, 71, 71, 71, 71, 71, 71,
342
+ 71, 71, 71, 71, 71, 71, 71, 71,
343
+ 71, 71, 71, 71, 71, 71, 71, 71,
344
+ 71, 71, 71, 71, 71, 71, 71, 71,
345
+ 71, 71, 71, 71, 71, 71, 71, 71,
346
+ 71, 71, 71, 71, 71, 71, 71, 71,
347
+ 71, 71, 71, 71, 71, 71, 71, 71,
348
+ 71, 72, 71, 73, 71, 74, 2, 74,
349
+ 74, 74, 6, 6, 6, 6, 6, 6,
350
+ 6, 6, 6, 6, 6, 6, 6, 6,
351
+ 6, 6, 6, 6, 74, 6, 6, 75,
352
+ 6, 6, 6, 6, 6, 6, 6, 6,
353
+ 6, 6, 6, 6, 6, 6, 6, 6,
354
+ 6, 6, 6, 6, 6, 6, 6, 6,
355
+ 76, 6, 2, 6, 6, 6, 6, 6,
356
+ 6, 6, 6, 6, 6, 6, 6, 6,
357
+ 6, 6, 6, 6, 6, 6, 6, 6,
358
+ 6, 6, 6, 78, 6, 6, 6, 6,
359
+ 6, 6, 6, 6, 6, 6, 6, 6,
360
+ 6, 6, 6, 6, 6, 6, 6, 6,
361
+ 6, 6, 6, 6, 79, 6, 2, 1,
362
+ 1, 1, 1, 1, 1, 1, 1, 1,
363
+ 1, 1, 1, 1, 1, 1, 1, 1,
364
+ 1, 1, 1, 1, 1, 1, 1, 3,
365
+ 1, 1, 1, 1, 1, 1, 1, 1,
366
+ 1, 1, 1, 1, 1, 1, 1, 1,
367
+ 1, 1, 1, 1, 1, 1, 1, 1,
368
+ 4, 1, 74, 2, 74, 74, 74, 6,
369
+ 6, 6, 6, 6, 6, 6, 6, 6,
370
+ 6, 6, 6, 6, 6, 6, 6, 6,
371
+ 6, 74, 6, 6, 78, 6, 6, 6,
372
+ 6, 6, 6, 6, 6, 6, 6, 6,
373
+ 6, 6, 6, 6, 6, 6, 6, 6,
374
+ 6, 6, 6, 6, 6, 81, 6, 13,
375
+ 15, 13, 13, 13, 14, 14, 14, 14,
376
+ 14, 14, 14, 14, 14, 14, 14, 14,
377
+ 14, 14, 14, 14, 14, 14, 13, 14,
378
+ 82, 40, 41, 36, 36, 36, 40, 36,
379
+ 33, 34, 29, 48, 30, 83, 63, 64,
380
+ 59, 59, 59, 63, 59, 56, 57, 52,
381
+ 71, 53, 83, 0
382
+ ]
383
+
384
+ class << self
385
+ attr_accessor :_template_trans_targs
386
+ private :_template_trans_targs, :_template_trans_targs=
387
+ end
388
+ self._template_trans_targs = [
389
+ 43, 1, 45, 2, 3, 43, 44, 7,
390
+ 8, 43, 9, 9, 10, 11, 43, 47,
391
+ 48, 14, 15, 0, 18, 16, 17, 43,
392
+ 19, 19, 20, 47, 21, 22, 30, 21,
393
+ 52, 23, 29, 24, 25, 23, 50, 23,
394
+ 26, 28, 27, 26, 49, 26, 25, 22,
395
+ 31, 31, 51, 32, 33, 41, 32, 56,
396
+ 34, 40, 35, 36, 34, 54, 34, 37,
397
+ 39, 38, 37, 53, 37, 36, 33, 42,
398
+ 42, 55, 46, 12, 13, 43, 4, 5,
399
+ 43, 6, 43, 0
400
+ ]
401
+
402
+ class << self
403
+ attr_accessor :_template_trans_actions
404
+ private :_template_trans_actions, :_template_trans_actions=
405
+ end
406
+ self._template_trans_actions = [
407
+ 1, 0, 2, 0, 0, 3, 2, 0,
408
+ 0, 4, 5, 0, 6, 0, 7, 8,
409
+ 0, 0, 0, 9, 0, 0, 0, 10,
410
+ 5, 0, 6, 11, 0, 0, 0, 13,
411
+ 14, 0, 0, 0, 0, 13, 14, 15,
412
+ 0, 0, 0, 13, 14, 15, 16, 16,
413
+ 0, 13, 14, 0, 0, 0, 13, 18,
414
+ 0, 0, 0, 0, 13, 18, 15, 0,
415
+ 0, 0, 13, 18, 15, 16, 16, 0,
416
+ 13, 18, 20, 0, 0, 21, 0, 0,
417
+ 22, 0, 23, 0
418
+ ]
419
+
420
+ class << self
421
+ attr_accessor :_template_to_state_actions
422
+ private :_template_to_state_actions, :_template_to_state_actions=
423
+ end
424
+ self._template_to_state_actions = [
425
+ 0, 0, 0, 0, 0, 0, 0, 0,
426
+ 0, 0, 0, 0, 0, 0, 0, 0,
427
+ 0, 0, 0, 0, 0, 12, 12, 12,
428
+ 0, 12, 12, 0, 0, 0, 0, 12,
429
+ 12, 12, 12, 0, 12, 12, 0, 0,
430
+ 0, 0, 12, 12, 0, 0, 0, 0,
431
+ 0, 0, 0, 0, 0, 0, 0, 0,
432
+ 0
433
+ ]
434
+
435
+ class << self
436
+ attr_accessor :_template_from_state_actions
437
+ private :_template_from_state_actions, :_template_from_state_actions=
438
+ end
439
+ self._template_from_state_actions = [
440
+ 0, 0, 0, 0, 0, 0, 0, 0,
441
+ 0, 0, 0, 0, 0, 0, 0, 0,
442
+ 0, 0, 0, 0, 0, 0, 0, 0,
443
+ 0, 0, 0, 0, 0, 0, 0, 0,
444
+ 0, 0, 0, 0, 0, 0, 0, 0,
445
+ 0, 0, 0, 19, 0, 0, 0, 0,
446
+ 0, 0, 0, 0, 0, 0, 0, 0,
447
+ 0
448
+ ]
449
+
450
+ class << self
451
+ attr_accessor :_template_eof_actions
452
+ private :_template_eof_actions, :_template_eof_actions=
453
+ end
454
+ self._template_eof_actions = [
455
+ 0, 0, 0, 0, 0, 0, 0, 0,
456
+ 0, 0, 0, 0, 0, 0, 9, 9,
457
+ 9, 9, 9, 9, 9, 0, 0, 0,
458
+ 0, 0, 0, 0, 0, 0, 0, 0,
459
+ 17, 17, 17, 17, 17, 17, 17, 17,
460
+ 17, 17, 17, 0, 0, 0, 0, 0,
461
+ 0, 0, 0, 0, 0, 0, 0, 0,
462
+ 0
463
+ ]
464
+
465
+ class << self
466
+ attr_accessor :_template_eof_trans
467
+ private :_template_eof_trans, :_template_eof_trans=
468
+ end
469
+ self._template_eof_trans = [
470
+ 0, 1, 1, 1, 6, 6, 6, 6,
471
+ 10, 10, 10, 15, 0, 0, 0, 0,
472
+ 0, 0, 0, 0, 0, 0, 0, 0,
473
+ 0, 0, 0, 0, 0, 0, 0, 0,
474
+ 0, 0, 0, 0, 0, 0, 0, 0,
475
+ 0, 0, 0, 0, 78, 81, 78, 15,
476
+ 83, 0, 0, 0, 0, 0, 0, 0,
477
+ 0
478
+ ]
479
+
480
+ class << self
481
+ attr_accessor :template_start
482
+ end
483
+ self.template_start = 43;
484
+ class << self
485
+ attr_accessor :template_first_final
486
+ end
487
+ self.template_first_final = 43;
488
+ class << self
489
+ attr_accessor :template_error
490
+ end
491
+ self.template_error = 0;
492
+
493
+ class << self
494
+ attr_accessor :template_en_parse_nested_expression
495
+ end
496
+ self.template_en_parse_nested_expression = 21;
497
+ class << self
498
+ attr_accessor :template_en_parse_expression
499
+ end
500
+ self.template_en_parse_expression = 32;
501
+ class << self
502
+ attr_accessor :template_en_main
503
+ end
504
+ self.template_en_main = 43;
505
+
506
+
507
+ # line 75 "template.rl"
508
+
509
+ def self.parse_template(buffer, delegate)
510
+ data = buffer.read
511
+ bytes = data.bytes
512
+
513
+ p = 0
514
+ pe = eof = data.bytesize
515
+ stack = []
516
+
517
+ expression_begin = expression_end = nil
518
+ instruction_begin = instruction_end = nil
519
+
520
+
521
+ # line 522 "template.rb"
522
+ begin
523
+ p ||= 0
524
+ pe ||= data.length
525
+ cs = template_start
526
+ top = 0
527
+ ts = nil
528
+ te = nil
529
+ act = 0
530
+ end
531
+
532
+ # line 88 "template.rl"
533
+
534
+ # line 535 "template.rb"
535
+ begin
536
+ testEof = false
537
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
538
+ _goto_level = 0
539
+ _resume = 10
540
+ _eof_trans = 15
541
+ _again = 20
542
+ _test_eof = 30
543
+ _out = 40
544
+ while true
545
+ if _goto_level <= 0
546
+ if p == pe
547
+ _goto_level = _test_eof
548
+ next
549
+ end
550
+ if cs == 0
551
+ _goto_level = _out
552
+ next
553
+ end
554
+ end
555
+ if _goto_level <= _resume
556
+ case _template_from_state_actions[cs]
557
+ when 19 then
558
+ # line 1 "NONE"
559
+ begin
560
+ ts = p
561
+ end
562
+ # line 563 "template.rb"
563
+ end
564
+ _keys = cs << 1
565
+ _inds = _template_index_offsets[cs]
566
+ _slen = _template_key_spans[cs]
567
+ _wide = ( bytes[p])
568
+ _trans = if ( _slen > 0 &&
569
+ _template_trans_keys[_keys] <= _wide &&
570
+ _wide <= _template_trans_keys[_keys + 1]
571
+ ) then
572
+ _template_indicies[ _inds + _wide - _template_trans_keys[_keys] ]
573
+ else
574
+ _template_indicies[ _inds + _slen ]
575
+ end
576
+ end
577
+ if _goto_level <= _eof_trans
578
+ cs = _template_trans_targs[_trans]
579
+ if _template_trans_actions[_trans] != 0
580
+ case _template_trans_actions[_trans]
581
+ when 5 then
582
+ # line 24 "template.rl"
583
+ begin
584
+
585
+ instruction_begin = p
586
+ end
587
+ when 6 then
588
+ # line 28 "template.rl"
589
+ begin
590
+
591
+ instruction_end = p
592
+ end
593
+ when 9 then
594
+ # line 40 "template.rl"
595
+ begin
596
+
597
+ raise ParseError.new("failed to parse instruction", buffer, p)
598
+ end
599
+ when 16 then
600
+ # line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
601
+ begin
602
+ begin
603
+ stack[top] = cs
604
+ top+= 1
605
+ cs = 21
606
+ _goto_level = _again
607
+ next
608
+ end
609
+ end
610
+ when 13 then
611
+ # line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
612
+ begin
613
+ begin
614
+ stack[top] = cs
615
+ top+= 1
616
+ cs = 21
617
+ _goto_level = _again
618
+ next
619
+ end
620
+ end
621
+ when 14 then
622
+ # line 20 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
623
+ begin
624
+ begin
625
+ top -= 1
626
+ cs = stack[top]
627
+ _goto_level = _again
628
+ next
629
+ end
630
+ end
631
+ when 2 then
632
+ # line 1 "NONE"
633
+ begin
634
+ te = p+1
635
+ end
636
+ when 10 then
637
+ # line 60 "template.rl"
638
+ begin
639
+ te = p+1
640
+ begin
641
+ delegate.text(data.byteslice(ts...te))
642
+ end
643
+ end
644
+ when 22 then
645
+ # line 60 "template.rl"
646
+ begin
647
+ te = p
648
+ p = p - 1; begin
649
+ delegate.text(data.byteslice(ts...te))
650
+ end
651
+ end
652
+ when 21 then
653
+ # line 60 "template.rl"
654
+ begin
655
+ te = p
656
+ p = p - 1; begin
657
+ delegate.text(data.byteslice(ts...te))
658
+ end
659
+ end
660
+ when 1 then
661
+ # line 60 "template.rl"
662
+ begin
663
+ begin p = ((te))-1; end
664
+ begin
665
+ delegate.text(data.byteslice(ts...te))
666
+ end
667
+ end
668
+ when 3 then
669
+ # line 60 "template.rl"
670
+ begin
671
+ begin p = ((te))-1; end
672
+ begin
673
+ delegate.text(data.byteslice(ts...te))
674
+ end
675
+ end
676
+ when 7 then
677
+ # line 1 "NONE"
678
+ begin
679
+ case act
680
+ when 1 then
681
+ begin begin p = ((te))-1; end
682
+
683
+ delegate.instruction(data.byteslice(instruction_begin...instruction_end), "\n")
684
+ end
685
+ when 3 then
686
+ begin begin p = ((te))-1; end
687
+
688
+ delegate.instruction(data.byteslice(instruction_begin...instruction_end))
689
+ end
690
+ when 6 then
691
+ begin begin p = ((te))-1; end
692
+
693
+ delegate.text(data.byteslice(ts...te))
694
+ end
695
+ end
696
+ end
697
+ when 4 then
698
+ # line 40 "template.rl"
699
+ begin
700
+
701
+ raise ParseError.new("failed to parse instruction", buffer, p)
702
+ end
703
+ # line 60 "template.rl"
704
+ begin
705
+ begin p = ((te))-1; end
706
+ begin
707
+ delegate.text(data.byteslice(ts...te))
708
+ end
709
+ end
710
+ when 23 then
711
+ # line 44 "template.rl"
712
+ begin
713
+
714
+ expression_begin = p
715
+ end
716
+ # line 53 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
717
+ begin
718
+ te = p
719
+ p = p - 1; begin cs = 32; end
720
+ end
721
+ when 15 then
722
+ # line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
723
+ begin
724
+ begin
725
+ stack[top] = cs
726
+ top+= 1
727
+ cs = 21
728
+ _goto_level = _again
729
+ next
730
+ end
731
+ end
732
+ # line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
733
+ begin
734
+ begin
735
+ stack[top] = cs
736
+ top+= 1
737
+ cs = 21
738
+ _goto_level = _again
739
+ next
740
+ end
741
+ end
742
+ when 8 then
743
+ # line 1 "NONE"
744
+ begin
745
+ te = p+1
746
+ end
747
+ # line 36 "template.rl"
748
+ begin
749
+ act = 1; end
750
+ when 11 then
751
+ # line 1 "NONE"
752
+ begin
753
+ te = p+1
754
+ end
755
+ # line 32 "template.rl"
756
+ begin
757
+ act = 3; end
758
+ when 20 then
759
+ # line 1 "NONE"
760
+ begin
761
+ te = p+1
762
+ end
763
+ # line 60 "template.rl"
764
+ begin
765
+ act = 6; end
766
+ when 18 then
767
+ # line 48 "template.rl"
768
+ begin
769
+
770
+ expression_end = p
771
+ end
772
+ # line 52 "template.rl"
773
+ begin
774
+
775
+ delegate.expression(data.byteslice(expression_begin...expression_end))
776
+ end
777
+ # line 21 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
778
+ begin
779
+ cs = 43; end
780
+ # line 781 "template.rb"
781
+ end
782
+ end
783
+ end
784
+ if _goto_level <= _again
785
+ case _template_to_state_actions[cs]
786
+ when 12 then
787
+ # line 1 "NONE"
788
+ begin
789
+ ts = nil; end
790
+ # line 791 "template.rb"
791
+ end
792
+
793
+ if cs == 0
794
+ _goto_level = _out
795
+ next
796
+ end
797
+ p += 1
798
+ if p != pe
799
+ _goto_level = _resume
800
+ next
801
+ end
802
+ end
803
+ if _goto_level <= _test_eof
804
+ if p == eof
805
+ if _template_eof_trans[cs] > 0
806
+ _trans = _template_eof_trans[cs] - 1;
807
+ _goto_level = _eof_trans
808
+ next;
809
+ end
810
+ case _template_eof_actions[cs]
811
+ when 9 then
812
+ # line 40 "template.rl"
813
+ begin
814
+
815
+ raise ParseError.new("failed to parse instruction", buffer, p)
816
+ end
817
+ when 17 then
818
+ # line 56 "template.rl"
819
+ begin
820
+
821
+ raise ParseError.new("failed to parse expression", buffer, p)
822
+ end
823
+ # line 824 "template.rb"
824
+ end
825
+ end
826
+
827
+ end
828
+ if _goto_level <= _out
829
+ break
830
+ end
831
+ end
832
+ end
833
+
834
+ # line 89 "template.rl"
835
+
836
+ if p != eof
837
+ raise ParseError.new("could not consume all input", buffer, p)
838
+ end
839
+
840
+ return nil
841
+ end
842
+ end
843
+ end