@@ -201,9 +201,7 @@ task_action
201201 = '@action'
202202 '('
203203 value : action_type
204- ')'
205- break
206-
204+ // must complete with ')' & \n
207205 {
208206 return {
209207 type: ' actions' ,
@@ -223,28 +221,41 @@ action_open
223221 '('
224222 file : file_path
225223 ')'
224+ break ?
225+ ')'
226226 { return ` open(${ file} )` ; }
227227
228228action_insert
229229 = 'insert'
230- content : ( between_code_block / between_brackets )
230+ content :
231+ (
232+ between_code_block_and_brackets
233+ / between_brackets
234+ )
235+ break ?
236+ ')'
231237 { return ` insert(\" ${ content} \" )` ; }
232238
233239action_set
234240 = 'set'
235- content : ( between_code_block / between_brackets )
241+ content : (
242+ between_code_block_and_brackets
243+ / between_brackets
244+ )
245+ break ?
246+ ')'
236247 { return ` set(\" ${ content} \" )` ; }
237248
238249action_write
239250 = 'write'
240251 '('
241252 to : file_path
242253 ',' space ?
243- quote
244- content : [^ \'\" ] + // TODO: make this more flexible
245- quote
246- ')'
247- { return ` write(${ to} , \" ${ adjust ( content) } \" )` }
254+ content : ( between_code_block_with_closing_bracket
255+ / until_end_quote_bracket ) // TODO: make this more flexible
256+ break ?
257+
258+ { return ` write(${ to} , \" ${ content} \" )` }
248259
249260action_write_from_file
250261 = 'writeFromFile'
@@ -253,6 +264,8 @@ action_write_from_file
253264 ',' space ?
254265 from : file_path
255266 ')'
267+ break ?
268+ ')'
256269 { return ` writeFromFile(${ to} , ${ from} )` ; }
257270
258271/*** "pegjs/shared.pegjs" ***/
@@ -293,13 +306,33 @@ between_brackets
293306 { return trimQuotes (adjust (content)); }
294307
295308between_code_block
296- = '('
297- break ?
309+ = break ?
298310 code_block
299311 break ?
300- content : ( [^\` ]+ / '`' [^\` ]+ )+
312+ content : ( [^\` ]+ / '`' [^\` ]+ )+ // not three back ticks
301313 code_block
302314 break ?
303- ')'
304315 { return adjust (content); }
305316
317+ between_code_block_and_brackets
318+ = '('
319+ content : between_code_block
320+ ')'
321+ { return content; }
322+
323+ between_code_block_with_closing_bracket
324+ = content : between_code_block
325+ ')'
326+ break ?
327+ ')'
328+ { return content; }
329+
330+ until_end_quote_bracket
331+ = content : until_end
332+ {
333+ // trim off final quote & bracket
334+ if (content .match (/ [\"\'\` ][\n\r ] ? \) [\n\r ] ? \) $ / )) {
335+ return content .slice (1 , - 3 );
336+ }
337+ }
338+
0 commit comments