|
16 | 16 |
|
17 | 17 | /*** "pegjs/_functions.js" ***/ |
18 | 18 |
|
| 19 | + function flatten(items) { |
| 20 | + const flat = []; |
| 21 | + items.forEach(item => { |
| 22 | + if (Array.isArray(item)) { |
| 23 | + flat.push(...flatten(item)); |
| 24 | + } else { |
| 25 | + flat.push(item); |
| 26 | + } |
| 27 | + }); |
| 28 | + return flat; |
| 29 | + } |
| 30 | + |
19 | 31 | function adjust(item) { |
20 | | - return item[0].concat(item[1].join('')); |
| 32 | + let flat = flatten(item); |
| 33 | + if (flat[flat.length - 1] === '\n') { |
| 34 | + flat = flat.slice(0, -1); |
| 35 | + } |
| 36 | + return flat.join(''); |
21 | 37 | } |
22 | 38 |
|
23 | 39 | function trim({desc, str, first, last}) { |
@@ -118,8 +134,10 @@ page_task |
118 | 134 |
|
119 | 135 | { let task = { description, tests: [], hints: [] }; |
120 | 136 | actions.forEach(({type, value}) => { |
| 137 | + // task actions |
121 | 138 | if (taskTypes.includes(type)) { |
122 | 139 | task[type].push(value); |
| 140 | + // page actions |
123 | 141 | } else if (pageTypes.includes(type)) { |
124 | 142 | output.pages[pages.length - 1][type] = value; |
125 | 143 | } |
@@ -160,11 +178,21 @@ on_page_complete |
160 | 178 | = '@onPageComplete' |
161 | 179 | '(' |
162 | 180 | quote |
163 | | - content: [a-zA-Z0-9 ]+ |
164 | | - quote |
165 | | - ')' |
| 181 | + content: until_end |
166 | 182 | break |
167 | | - { return { type: 'onPageComplete', value: content.join('') }; } |
| 183 | + { |
| 184 | + let value = adjust(content); |
| 185 | + if (value.match(/[\'\"]\)/)) { |
| 186 | + // remove '\')' from end |
| 187 | + value = value.slice(0, -2); |
| 188 | + } else { |
| 189 | + throw `Invalid @onPageComplete(). Expected closing quote and bracket but found: ${value}`; |
| 190 | + } |
| 191 | + return { |
| 192 | + type: 'onPageComplete', |
| 193 | + value, |
| 194 | + }; |
| 195 | + } |
168 | 196 |
|
169 | 197 | /*** "pegjs/task-actions.pegjs" ***/ |
170 | 198 |
|
@@ -235,9 +263,10 @@ description |
235 | 263 |
|
236 | 264 | /*** "pegjs/characters.pegjs" ***/ |
237 | 265 |
|
238 | | -content = [^#^@^+] [^\n^\r]+ [\n\r] |
| 266 | +content = [^#^@^+] until_end |
| 267 | +until_end = [^\n^\r]+ [\n\r] |
239 | 268 | space = [ \s] |
240 | 269 | break = [\n\r]? |
241 | | -file_path = [a-z_\-\s0-9\.]+ |
| 270 | +file_path = [a-zA-Z0-9_\-\s\.]+ |
242 | 271 | quote = [\"\'\`] |
243 | 272 |
|
0 commit comments