fig 0.1.81 → 0.2.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 (43) hide show
  1. data/Changes +87 -0
  2. data/lib/fig.rb +1 -1
  3. data/lib/fig/command.rb +5 -0
  4. data/lib/fig/command/action/dump_package_definition_for_command_line.rb +62 -0
  5. data/lib/fig/command/action/dump_package_definition_parsed.rb +19 -2
  6. data/lib/fig/command/action/list_local.rb +9 -1
  7. data/lib/fig/command/action/list_remote.rb +9 -1
  8. data/lib/fig/command/action/role/list_variables_in_a_tree.rb +1 -1
  9. data/lib/fig/command/action/run_command_line.rb +1 -1
  10. data/lib/fig/command/action/run_command_statement.rb +4 -2
  11. data/lib/fig/command/options.rb +50 -18
  12. data/lib/fig/command/options/parser.rb +16 -15
  13. data/lib/fig/command/package_applier.rb +5 -3
  14. data/lib/fig/grammar/v0.rb +287 -289
  15. data/lib/fig/grammar/v0.treetop +66 -42
  16. data/lib/fig/grammar/v1.rb +629 -533
  17. data/lib/fig/grammar/v1.treetop +102 -39
  18. data/lib/fig/grammar_monkey_patches.rb +21 -0
  19. data/lib/fig/operating_system.rb +53 -36
  20. data/lib/fig/package_descriptor.rb +1 -12
  21. data/lib/fig/parser.rb +8 -33
  22. data/lib/fig/parser_package_build_state.rb +92 -31
  23. data/lib/fig/repository_package_publisher.rb +2 -2
  24. data/lib/fig/runtime_environment.rb +54 -120
  25. data/lib/fig/statement.rb +6 -6
  26. data/lib/fig/statement/asset.rb +1 -13
  27. data/lib/fig/statement/command.rb +47 -0
  28. data/lib/fig/statement/environment_variable.rb +64 -3
  29. data/lib/fig/statement/grammar_version.rb +4 -0
  30. data/lib/fig/statement/include.rb +4 -0
  31. data/lib/fig/statement/override.rb +4 -0
  32. data/lib/fig/statement/path.rb +40 -16
  33. data/lib/fig/statement/retrieve.rb +61 -5
  34. data/lib/fig/statement/set.rb +16 -19
  35. data/lib/fig/string_tokenizer.rb +63 -25
  36. data/lib/fig/tokenized_string.rb +31 -5
  37. data/lib/fig/tokenized_string/plain_segment.rb +32 -2
  38. data/lib/fig/tokenized_string/token.rb +12 -0
  39. data/lib/fig/unparser.rb +27 -12
  40. data/lib/fig/unparser/v0.rb +4 -5
  41. data/lib/fig/unparser/v1.rb +43 -6
  42. data/lib/fig/url.rb +13 -0
  43. metadata +44 -42
@@ -21,7 +21,12 @@ module Fig
21
21
  include Fig::Grammar::Version
22
22
 
23
23
  rule package
24
- optional_ws grammar_version:grammar_version? ws* statements:(package_statement*) optional_ws {
24
+ optional_ws
25
+ grammar_version:grammar_version?
26
+ ws*
27
+ statements:(package_statement*)
28
+ optional_ws
29
+ {
25
30
  def to_package(directory, build_state)
26
31
  return build_state.new_package_statement(
27
32
  directory, grammar_version, statements
@@ -54,39 +59,29 @@ module Fig
54
59
  }
55
60
  end
56
61
 
57
- rule asset_location
58
- # Unquoted allows globbing for files, quoted does not.
59
- #
60
- # Unquoted, anything but:
61
- # @ - To allow for package substitution
62
- # ' - Future expansion
63
- # "<>| - Characters not allowed in filenames on Windows
64
- # \s - Necessary for the "ws" token to work
65
- (location:[^@'"<>|\s]+ ws)
66
-
67
- # Quoted, anything but:
68
- # @ - To allow for package substitution
69
- # ' - Future expansion
70
- # "<>| - Characters not allowed in filenames on Windows
71
- # *?\[\]{} - Characters significant to Dir.glob()
72
- # \s - We just don't want these. :]
73
- / ('"' location:[^@'"<>|*?\[\]{}\s]+ '"' ws)
74
- end
75
-
76
62
  rule retrieve
77
- statement_start:'retrieve' ws+ var:environment_variable_name '->' path:retrieve_path ws+ {
63
+ statement_start:'retrieve'
64
+ ws+
65
+ variable:environment_variable_name '->' path:retrieve_path
66
+ ws+
67
+ {
78
68
  def to_package_statement(build_state)
79
- return build_state.new_retrieve_statement(statement_start, var, path)
69
+ return build_state.new_retrieve_statement(
70
+ statement_start, variable, path
71
+ )
80
72
  end
81
73
  }
82
74
  end
83
75
 
84
- rule retrieve_path
85
- [a-zA-Z0-9_/.\[\]-]+
86
- end
87
-
88
76
  rule config
89
- statement_start:'config' ws+ config_name ws+ statements:config_statement* 'end' ws+ {
77
+ statement_start:'config'
78
+ ws+
79
+ config_name
80
+ ws+
81
+ statements:config_statement*
82
+ 'end'
83
+ ws+
84
+ {
90
85
  def to_package_statement(build_state)
91
86
  return build_state.new_configuration_statement(
92
87
  statement_start, config_name, statements
@@ -95,10 +90,6 @@ module Fig
95
90
  }
96
91
  end
97
92
 
98
- rule config_name
99
- [a-zA-Z0-9_.-]+
100
- end
101
-
102
93
  rule config_statement
103
94
  override / include / command / path / set
104
95
  end
@@ -123,10 +114,6 @@ module Fig
123
114
  }
124
115
  end
125
116
 
126
- rule environment_variable_name
127
- [a-zA-Z0-9_]+
128
- end
129
-
130
117
  rule set
131
118
  statement_start:'set' ws+ environment_variable_name_value ws+ {
132
119
  def to_config_statement(build_state)
@@ -138,7 +125,11 @@ module Fig
138
125
  end
139
126
 
140
127
  rule path
141
- statement_start:('add' / 'append' / 'path') ws+ environment_variable_name_value ws+ {
128
+ statement_start:('add' / 'append' / 'path')
129
+ ws+
130
+ environment_variable_name_value
131
+ ws+
132
+ {
142
133
  def to_config_statement(build_state)
143
134
  return build_state.new_environment_variable_statement(
144
135
  Statement::Path, statement_start, environment_variable_name_value
@@ -147,14 +138,10 @@ module Fig
147
138
  }
148
139
  end
149
140
 
150
- rule environment_variable_name_value
151
- [\S]+
152
- end
153
-
154
141
  rule command
155
142
  statement_start:'command' ws+ command_line ws+ {
156
143
  def to_config_statement(build_state)
157
- return build_state.new_command_statement(
144
+ return build_state.new_v0_command_statement(
158
145
  statement_start, command_line
159
146
  )
160
147
  end
@@ -162,12 +149,49 @@ module Fig
162
149
  end
163
150
 
164
151
  rule command_line
165
- '"' value:[^"]* '"'
152
+ '"' [^"]* '"'
166
153
  end
167
154
 
155
+ # Terminals
156
+
168
157
  rule descriptor_string
169
158
  [\S]+
170
159
  end
160
+
161
+ rule config_name
162
+ [a-zA-Z0-9_.-]+
163
+ end
164
+
165
+ rule environment_variable_name
166
+ [a-zA-Z0-9_]+
167
+ end
168
+
169
+ rule environment_variable_name_value
170
+ [\S]+
171
+ end
172
+
173
+ rule asset_location
174
+ # Unquoted allows globbing for files, quoted does not.
175
+ #
176
+ # Unquoted, anything but:
177
+ # @ - To allow for package substitution
178
+ # ' - Future expansion
179
+ # "<>| - Characters not allowed in filenames on Windows
180
+ # \s - Necessary for the "ws" token to work
181
+ (location:[^@'"<>|\s]+ ws)
182
+
183
+ # Quoted, anything but:
184
+ # @ - To allow for package substitution
185
+ # ' - Future expansion
186
+ # "<>| - Characters not allowed in filenames on Windows
187
+ # *?\[\]{} - Characters significant to Dir.glob()
188
+ # \s - We just don't want these. :]
189
+ / ('"' location:[^@'"<>|*?\[\]{}\s]+ '"' ws)
190
+ end
191
+
192
+ rule retrieve_path
193
+ [a-zA-Z0-9_/.\[\]-]+
194
+ end
171
195
  end
172
196
  end
173
197
  end
@@ -265,7 +265,7 @@ module Fig
265
265
  end
266
266
  s0 << r2
267
267
  if r2
268
- r4 = _nt_asset_location
268
+ r4 = _nt_quoted_or_bare_string
269
269
  s0 << r4
270
270
  end
271
271
  end
@@ -339,7 +339,7 @@ module Fig
339
339
  end
340
340
  s0 << r2
341
341
  if r2
342
- r4 = _nt_asset_location
342
+ r4 = _nt_quoted_or_bare_string
343
343
  s0 << r4
344
344
  end
345
345
  end
@@ -357,238 +357,12 @@ module Fig
357
357
  r0
358
358
  end
359
359
 
360
- module AssetLocation0
361
- end
362
-
363
- module AssetLocation1
364
- end
365
-
366
- module AssetLocation2
367
- end
368
-
369
- module AssetLocation3
370
- end
371
-
372
- def _nt_asset_location
373
- start_index = index
374
- if node_cache[:asset_location].has_key?(index)
375
- cached = node_cache[:asset_location][index]
376
- if cached
377
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
378
- @index = cached.interval.end
379
- end
380
- return cached
381
- end
382
-
383
- i0 = index
384
- i1, s1 = index, []
385
- if has_terminal?('"', false, index)
386
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
387
- @index += 1
388
- else
389
- terminal_parse_failure('"')
390
- r2 = nil
391
- end
392
- s1 << r2
393
- if r2
394
- s3, i3 = [], index
395
- loop do
396
- i4 = index
397
- if has_terminal?('\G[^"\\\\]', true, index)
398
- r5 = true
399
- @index += 1
400
- else
401
- r5 = nil
402
- end
403
- if r5
404
- r4 = r5
405
- else
406
- i6, s6 = index, []
407
- if has_terminal?('\\', false, index)
408
- r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
409
- @index += 1
410
- else
411
- terminal_parse_failure('\\')
412
- r7 = nil
413
- end
414
- s6 << r7
415
- if r7
416
- if index < input_length
417
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
418
- @index += 1
419
- else
420
- terminal_parse_failure("any character")
421
- r8 = nil
422
- end
423
- s6 << r8
424
- end
425
- if s6.last
426
- r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
427
- r6.extend(AssetLocation0)
428
- else
429
- @index = i6
430
- r6 = nil
431
- end
432
- if r6
433
- r4 = r6
434
- else
435
- @index = i4
436
- r4 = nil
437
- end
438
- end
439
- if r4
440
- s3 << r4
441
- else
442
- break
443
- end
444
- end
445
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
446
- s1 << r3
447
- if r3
448
- if has_terminal?('"', false, index)
449
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
450
- @index += 1
451
- else
452
- terminal_parse_failure('"')
453
- r9 = nil
454
- end
455
- s1 << r9
456
- end
457
- end
458
- if s1.last
459
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
460
- r1.extend(AssetLocation1)
461
- else
462
- @index = i1
463
- r1 = nil
464
- end
465
- if r1
466
- r0 = r1
467
- else
468
- i10, s10 = index, []
469
- if has_terminal?("'", false, index)
470
- r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
471
- @index += 1
472
- else
473
- terminal_parse_failure("'")
474
- r11 = nil
475
- end
476
- s10 << r11
477
- if r11
478
- s12, i12 = [], index
479
- loop do
480
- i13 = index
481
- if has_terminal?('\G[^\'\\\\]', true, index)
482
- r14 = true
483
- @index += 1
484
- else
485
- r14 = nil
486
- end
487
- if r14
488
- r13 = r14
489
- else
490
- i15, s15 = index, []
491
- if has_terminal?('\\', false, index)
492
- r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
493
- @index += 1
494
- else
495
- terminal_parse_failure('\\')
496
- r16 = nil
497
- end
498
- s15 << r16
499
- if r16
500
- if index < input_length
501
- r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
502
- @index += 1
503
- else
504
- terminal_parse_failure("any character")
505
- r17 = nil
506
- end
507
- s15 << r17
508
- end
509
- if s15.last
510
- r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
511
- r15.extend(AssetLocation2)
512
- else
513
- @index = i15
514
- r15 = nil
515
- end
516
- if r15
517
- r13 = r15
518
- else
519
- @index = i13
520
- r13 = nil
521
- end
522
- end
523
- if r13
524
- s12 << r13
525
- else
526
- break
527
- end
528
- end
529
- r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
530
- s10 << r12
531
- if r12
532
- if has_terminal?("'", false, index)
533
- r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
534
- @index += 1
535
- else
536
- terminal_parse_failure("'")
537
- r18 = nil
538
- end
539
- s10 << r18
540
- end
541
- end
542
- if s10.last
543
- r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
544
- r10.extend(AssetLocation3)
545
- else
546
- @index = i10
547
- r10 = nil
548
- end
549
- if r10
550
- r0 = r10
551
- else
552
- s19, i19 = [], index
553
- loop do
554
- if has_terminal?('\G[^\\s#]', true, index)
555
- r20 = true
556
- @index += 1
557
- else
558
- r20 = nil
559
- end
560
- if r20
561
- s19 << r20
562
- else
563
- break
564
- end
565
- end
566
- if s19.empty?
567
- @index = i19
568
- r19 = nil
569
- else
570
- r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
571
- end
572
- if r19
573
- r0 = r19
574
- else
575
- @index = i0
576
- r0 = nil
577
- end
578
- end
579
- end
580
-
581
- node_cache[:asset_location][start_index] = r0
582
-
583
- r0
584
- end
585
-
586
360
  module Retrieve0
587
361
  def statement_start
588
362
  elements[0]
589
363
  end
590
364
 
591
- def var
365
+ def variable
592
366
  elements[2]
593
367
  end
594
368
 
@@ -599,7 +373,9 @@ module Fig
599
373
 
600
374
  module Retrieve1
601
375
  def to_package_statement(build_state)
602
- return build_state.new_retrieve_statement(statement_start, var, path)
376
+ return build_state.new_retrieve_statement(
377
+ statement_start, variable, path
378
+ )
603
379
  end
604
380
  end
605
381
 
@@ -653,7 +429,7 @@ module Fig
653
429
  end
654
430
  s0 << r5
655
431
  if r5
656
- r6 = _nt_retrieve_path
432
+ r6 = _nt_quoted_or_bare_string
657
433
  s0 << r6
658
434
  end
659
435
  end
@@ -673,43 +449,6 @@ module Fig
673
449
  r0
674
450
  end
675
451
 
676
- def _nt_retrieve_path
677
- start_index = index
678
- if node_cache[:retrieve_path].has_key?(index)
679
- cached = node_cache[:retrieve_path][index]
680
- if cached
681
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
682
- @index = cached.interval.end
683
- end
684
- return cached
685
- end
686
-
687
- s0, i0 = [], index
688
- loop do
689
- if has_terminal?('\G[a-zA-Z0-9_/.\\[\\]-]', true, index)
690
- r1 = true
691
- @index += 1
692
- else
693
- r1 = nil
694
- end
695
- if r1
696
- s0 << r1
697
- else
698
- break
699
- end
700
- end
701
- if s0.empty?
702
- @index = i0
703
- r0 = nil
704
- else
705
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
706
- end
707
-
708
- node_cache[:retrieve_path][start_index] = r0
709
-
710
- r0
711
- end
712
-
713
452
  module Config0
714
453
  def statement_start
715
454
  elements[0]
@@ -830,43 +569,6 @@ module Fig
830
569
  r0
831
570
  end
832
571
 
833
- def _nt_config_name
834
- start_index = index
835
- if node_cache[:config_name].has_key?(index)
836
- cached = node_cache[:config_name][index]
837
- if cached
838
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
839
- @index = cached.interval.end
840
- end
841
- return cached
842
- end
843
-
844
- s0, i0 = [], index
845
- loop do
846
- if has_terminal?('\G[a-zA-Z0-9_.-]', true, index)
847
- r1 = true
848
- @index += 1
849
- else
850
- r1 = nil
851
- end
852
- if r1
853
- s0 << r1
854
- else
855
- break
856
- end
857
- end
858
- if s0.empty?
859
- @index = i0
860
- r0 = nil
861
- else
862
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
863
- end
864
-
865
- node_cache[:config_name][start_index] = r0
866
-
867
- r0
868
- end
869
-
870
572
  module ConfigStatementWithWs0
871
573
  def config_statement
872
574
  elements[0]
@@ -1119,43 +821,6 @@ module Fig
1119
821
  r0
1120
822
  end
1121
823
 
1122
- def _nt_environment_variable_name
1123
- start_index = index
1124
- if node_cache[:environment_variable_name].has_key?(index)
1125
- cached = node_cache[:environment_variable_name][index]
1126
- if cached
1127
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1128
- @index = cached.interval.end
1129
- end
1130
- return cached
1131
- end
1132
-
1133
- s0, i0 = [], index
1134
- loop do
1135
- if has_terminal?('\G[a-zA-Z0-9_]', true, index)
1136
- r1 = true
1137
- @index += 1
1138
- else
1139
- r1 = nil
1140
- end
1141
- if r1
1142
- s0 << r1
1143
- else
1144
- break
1145
- end
1146
- end
1147
- if s0.empty?
1148
- @index = i0
1149
- r0 = nil
1150
- else
1151
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1152
- end
1153
-
1154
- node_cache[:environment_variable_name][start_index] = r0
1155
-
1156
- r0
1157
- end
1158
-
1159
824
  module Set0
1160
825
  def statement_start
1161
826
  elements[0]
@@ -1333,21 +998,631 @@ module Fig
1333
998
  r0
1334
999
  end
1335
1000
 
1336
- module EnvironmentVariableNameValue0
1337
- end
1001
+ module Command0
1002
+ def statement_start
1003
+ elements[0]
1004
+ end
1338
1005
 
1339
- module EnvironmentVariableNameValue1
1340
- end
1006
+ def command_line
1007
+ elements[2]
1008
+ end
1341
1009
 
1342
- module EnvironmentVariableNameValue2
1343
1010
  end
1344
1011
 
1345
- module EnvironmentVariableNameValue3
1346
- end
1012
+ module Command1
1013
+ def to_config_statement(build_state)
1014
+ return build_state.new_v1_command_statement(
1015
+ statement_start, gather_command_argument_nodes(command_line)
1016
+ )
1017
+ end
1347
1018
 
1348
- def _nt_environment_variable_name_value
1349
- start_index = index
1350
- if node_cache[:environment_variable_name_value].has_key?(index)
1019
+ def gather_command_argument_nodes(node, arguments = [])
1020
+ if node.respond_to? 'quoted_or_bare_string?'
1021
+ arguments << node
1022
+ return arguments
1023
+ end
1024
+
1025
+ return arguments if not node.elements
1026
+
1027
+ node.elements.each do
1028
+ |element|
1029
+ gather_command_argument_nodes(element, arguments)
1030
+ end
1031
+
1032
+ return arguments
1033
+ end
1034
+ end
1035
+
1036
+ def _nt_command
1037
+ start_index = index
1038
+ if node_cache[:command].has_key?(index)
1039
+ cached = node_cache[:command][index]
1040
+ if cached
1041
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1042
+ @index = cached.interval.end
1043
+ end
1044
+ return cached
1045
+ end
1046
+
1047
+ i0, s0 = index, []
1048
+ if has_terminal?('command', false, index)
1049
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
1050
+ @index += 7
1051
+ else
1052
+ terminal_parse_failure('command')
1053
+ r1 = nil
1054
+ end
1055
+ s0 << r1
1056
+ if r1
1057
+ s2, i2 = [], index
1058
+ loop do
1059
+ r3 = _nt_ws_or_comment
1060
+ if r3
1061
+ s2 << r3
1062
+ else
1063
+ break
1064
+ end
1065
+ end
1066
+ if s2.empty?
1067
+ @index = i2
1068
+ r2 = nil
1069
+ else
1070
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1071
+ end
1072
+ s0 << r2
1073
+ if r2
1074
+ r4 = _nt_command_line
1075
+ s0 << r4
1076
+ if r4
1077
+ s5, i5 = [], index
1078
+ loop do
1079
+ r6 = _nt_ws_or_comment
1080
+ if r6
1081
+ s5 << r6
1082
+ else
1083
+ break
1084
+ end
1085
+ end
1086
+ if s5.empty?
1087
+ @index = i5
1088
+ r5 = nil
1089
+ else
1090
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1091
+ end
1092
+ s0 << r5
1093
+ if r5
1094
+ if has_terminal?('end', false, index)
1095
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
1096
+ @index += 3
1097
+ else
1098
+ terminal_parse_failure('end')
1099
+ r7 = nil
1100
+ end
1101
+ s0 << r7
1102
+ end
1103
+ end
1104
+ end
1105
+ end
1106
+ if s0.last
1107
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1108
+ r0.extend(Command0)
1109
+ r0.extend(Command1)
1110
+ else
1111
+ @index = i0
1112
+ r0 = nil
1113
+ end
1114
+
1115
+ node_cache[:command][start_index] = r0
1116
+
1117
+ r0
1118
+ end
1119
+
1120
+ module CommandLine0
1121
+ def quoted_or_bare_string
1122
+ elements[1]
1123
+ end
1124
+
1125
+ end
1126
+
1127
+ module CommandLine1
1128
+ def quoted_or_bare_string
1129
+ elements[0]
1130
+ end
1131
+
1132
+ end
1133
+
1134
+ def _nt_command_line
1135
+ start_index = index
1136
+ if node_cache[:command_line].has_key?(index)
1137
+ cached = node_cache[:command_line][index]
1138
+ if cached
1139
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1140
+ @index = cached.interval.end
1141
+ end
1142
+ return cached
1143
+ end
1144
+
1145
+ i0, s0 = index, []
1146
+ r1 = _nt_quoted_or_bare_string
1147
+ s0 << r1
1148
+ if r1
1149
+ i2 = index
1150
+ r3 = lambda { |sequence| sequence[-1].text_value == 'end' }.call(s0)
1151
+ if r3
1152
+ r2 = nil
1153
+ else
1154
+ @index = i2
1155
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1156
+ end
1157
+ s0 << r2
1158
+ if r2
1159
+ s4, i4 = [], index
1160
+ loop do
1161
+ i5, s5 = index, []
1162
+ s6, i6 = [], index
1163
+ loop do
1164
+ r7 = _nt_ws_or_comment
1165
+ if r7
1166
+ s6 << r7
1167
+ else
1168
+ break
1169
+ end
1170
+ end
1171
+ if s6.empty?
1172
+ @index = i6
1173
+ r6 = nil
1174
+ else
1175
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
1176
+ end
1177
+ s5 << r6
1178
+ if r6
1179
+ r8 = _nt_quoted_or_bare_string
1180
+ s5 << r8
1181
+ if r8
1182
+ i9 = index
1183
+ r10 = lambda { |sequence| sequence[-1].text_value == 'end' }.call(s5)
1184
+ if r10
1185
+ r9 = nil
1186
+ else
1187
+ @index = i9
1188
+ r9 = instantiate_node(SyntaxNode,input, index...index)
1189
+ end
1190
+ s5 << r9
1191
+ end
1192
+ end
1193
+ if s5.last
1194
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1195
+ r5.extend(CommandLine0)
1196
+ else
1197
+ @index = i5
1198
+ r5 = nil
1199
+ end
1200
+ if r5
1201
+ s4 << r5
1202
+ else
1203
+ break
1204
+ end
1205
+ end
1206
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1207
+ s0 << r4
1208
+ end
1209
+ end
1210
+ if s0.last
1211
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1212
+ r0.extend(CommandLine1)
1213
+ else
1214
+ @index = i0
1215
+ r0 = nil
1216
+ end
1217
+
1218
+ node_cache[:command_line][start_index] = r0
1219
+
1220
+ r0
1221
+ end
1222
+
1223
+ def _nt_descriptor_string
1224
+ start_index = index
1225
+ if node_cache[:descriptor_string].has_key?(index)
1226
+ cached = node_cache[:descriptor_string][index]
1227
+ if cached
1228
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1229
+ @index = cached.interval.end
1230
+ end
1231
+ return cached
1232
+ end
1233
+
1234
+ s0, i0 = [], index
1235
+ loop do
1236
+ if has_terminal?('\G[^\\s#]', true, index)
1237
+ r1 = true
1238
+ @index += 1
1239
+ else
1240
+ r1 = nil
1241
+ end
1242
+ if r1
1243
+ s0 << r1
1244
+ else
1245
+ break
1246
+ end
1247
+ end
1248
+ if s0.empty?
1249
+ @index = i0
1250
+ r0 = nil
1251
+ else
1252
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1253
+ end
1254
+
1255
+ node_cache[:descriptor_string][start_index] = r0
1256
+
1257
+ r0
1258
+ end
1259
+
1260
+ def _nt_config_name
1261
+ start_index = index
1262
+ if node_cache[:config_name].has_key?(index)
1263
+ cached = node_cache[:config_name][index]
1264
+ if cached
1265
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1266
+ @index = cached.interval.end
1267
+ end
1268
+ return cached
1269
+ end
1270
+
1271
+ s0, i0 = [], index
1272
+ loop do
1273
+ if has_terminal?('\G[a-zA-Z0-9_.-]', true, index)
1274
+ r1 = true
1275
+ @index += 1
1276
+ else
1277
+ r1 = nil
1278
+ end
1279
+ if r1
1280
+ s0 << r1
1281
+ else
1282
+ break
1283
+ end
1284
+ end
1285
+ if s0.empty?
1286
+ @index = i0
1287
+ r0 = nil
1288
+ else
1289
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1290
+ end
1291
+
1292
+ node_cache[:config_name][start_index] = r0
1293
+
1294
+ r0
1295
+ end
1296
+
1297
+ module QuotedOrBareString0
1298
+ end
1299
+
1300
+ module QuotedOrBareString1
1301
+ end
1302
+
1303
+ module QuotedOrBareString2
1304
+ def quoted_or_bare_string?() return true end
1305
+ end
1306
+
1307
+ module QuotedOrBareString3
1308
+ end
1309
+
1310
+ module QuotedOrBareString4
1311
+ end
1312
+
1313
+ module QuotedOrBareString5
1314
+ def quoted_or_bare_string?() return true end
1315
+ end
1316
+
1317
+ module QuotedOrBareString6
1318
+ def quoted_or_bare_string?() return true end
1319
+ end
1320
+
1321
+ def _nt_quoted_or_bare_string
1322
+ start_index = index
1323
+ if node_cache[:quoted_or_bare_string].has_key?(index)
1324
+ cached = node_cache[:quoted_or_bare_string][index]
1325
+ if cached
1326
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1327
+ @index = cached.interval.end
1328
+ end
1329
+ return cached
1330
+ end
1331
+
1332
+ i0 = index
1333
+ i1, s1 = index, []
1334
+ s2, i2 = [], index
1335
+ loop do
1336
+ if has_terminal?('\G[^\\s#\\\\"]', true, index)
1337
+ r3 = true
1338
+ @index += 1
1339
+ else
1340
+ r3 = nil
1341
+ end
1342
+ if r3
1343
+ s2 << r3
1344
+ else
1345
+ break
1346
+ end
1347
+ end
1348
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1349
+ s1 << r2
1350
+ if r2
1351
+ if has_terminal?('"', false, index)
1352
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1353
+ @index += 1
1354
+ else
1355
+ terminal_parse_failure('"')
1356
+ r4 = nil
1357
+ end
1358
+ s1 << r4
1359
+ if r4
1360
+ s5, i5 = [], index
1361
+ loop do
1362
+ i6 = index
1363
+ if has_terminal?('\G[^"\\\\]', true, index)
1364
+ r7 = true
1365
+ @index += 1
1366
+ else
1367
+ r7 = nil
1368
+ end
1369
+ if r7
1370
+ r6 = r7
1371
+ else
1372
+ i8, s8 = index, []
1373
+ if has_terminal?('\\', false, index)
1374
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1375
+ @index += 1
1376
+ else
1377
+ terminal_parse_failure('\\')
1378
+ r9 = nil
1379
+ end
1380
+ s8 << r9
1381
+ if r9
1382
+ if index < input_length
1383
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1384
+ @index += 1
1385
+ else
1386
+ terminal_parse_failure("any character")
1387
+ r10 = nil
1388
+ end
1389
+ s8 << r10
1390
+ end
1391
+ if s8.last
1392
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1393
+ r8.extend(QuotedOrBareString0)
1394
+ else
1395
+ @index = i8
1396
+ r8 = nil
1397
+ end
1398
+ if r8
1399
+ r6 = r8
1400
+ else
1401
+ @index = i6
1402
+ r6 = nil
1403
+ end
1404
+ end
1405
+ if r6
1406
+ s5 << r6
1407
+ else
1408
+ break
1409
+ end
1410
+ end
1411
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1412
+ s1 << r5
1413
+ if r5
1414
+ if has_terminal?('"', false, index)
1415
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
1416
+ @index += 1
1417
+ else
1418
+ terminal_parse_failure('"')
1419
+ r11 = nil
1420
+ end
1421
+ s1 << r11
1422
+ end
1423
+ end
1424
+ end
1425
+ if s1.last
1426
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1427
+ r1.extend(QuotedOrBareString1)
1428
+ r1.extend(QuotedOrBareString2)
1429
+ else
1430
+ @index = i1
1431
+ r1 = nil
1432
+ end
1433
+ if r1
1434
+ r0 = r1
1435
+ else
1436
+ i12, s12 = index, []
1437
+ s13, i13 = [], index
1438
+ loop do
1439
+ if has_terminal?('\G[^\\s#\\\\\']', true, index)
1440
+ r14 = true
1441
+ @index += 1
1442
+ else
1443
+ r14 = nil
1444
+ end
1445
+ if r14
1446
+ s13 << r14
1447
+ else
1448
+ break
1449
+ end
1450
+ end
1451
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
1452
+ s12 << r13
1453
+ if r13
1454
+ if has_terminal?("'", false, index)
1455
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
1456
+ @index += 1
1457
+ else
1458
+ terminal_parse_failure("'")
1459
+ r15 = nil
1460
+ end
1461
+ s12 << r15
1462
+ if r15
1463
+ s16, i16 = [], index
1464
+ loop do
1465
+ i17 = index
1466
+ if has_terminal?('\G[^\'\\\\]', true, index)
1467
+ r18 = true
1468
+ @index += 1
1469
+ else
1470
+ r18 = nil
1471
+ end
1472
+ if r18
1473
+ r17 = r18
1474
+ else
1475
+ i19, s19 = index, []
1476
+ if has_terminal?('\\', false, index)
1477
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
1478
+ @index += 1
1479
+ else
1480
+ terminal_parse_failure('\\')
1481
+ r20 = nil
1482
+ end
1483
+ s19 << r20
1484
+ if r20
1485
+ if index < input_length
1486
+ r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
1487
+ @index += 1
1488
+ else
1489
+ terminal_parse_failure("any character")
1490
+ r21 = nil
1491
+ end
1492
+ s19 << r21
1493
+ end
1494
+ if s19.last
1495
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
1496
+ r19.extend(QuotedOrBareString3)
1497
+ else
1498
+ @index = i19
1499
+ r19 = nil
1500
+ end
1501
+ if r19
1502
+ r17 = r19
1503
+ else
1504
+ @index = i17
1505
+ r17 = nil
1506
+ end
1507
+ end
1508
+ if r17
1509
+ s16 << r17
1510
+ else
1511
+ break
1512
+ end
1513
+ end
1514
+ r16 = instantiate_node(SyntaxNode,input, i16...index, s16)
1515
+ s12 << r16
1516
+ if r16
1517
+ if has_terminal?("'", false, index)
1518
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
1519
+ @index += 1
1520
+ else
1521
+ terminal_parse_failure("'")
1522
+ r22 = nil
1523
+ end
1524
+ s12 << r22
1525
+ end
1526
+ end
1527
+ end
1528
+ if s12.last
1529
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
1530
+ r12.extend(QuotedOrBareString4)
1531
+ r12.extend(QuotedOrBareString5)
1532
+ else
1533
+ @index = i12
1534
+ r12 = nil
1535
+ end
1536
+ if r12
1537
+ r0 = r12
1538
+ else
1539
+ s23, i23 = [], index
1540
+ loop do
1541
+ if has_terminal?('\G[^\\s#]', true, index)
1542
+ r24 = true
1543
+ @index += 1
1544
+ else
1545
+ r24 = nil
1546
+ end
1547
+ if r24
1548
+ s23 << r24
1549
+ else
1550
+ break
1551
+ end
1552
+ end
1553
+ if s23.empty?
1554
+ @index = i23
1555
+ r23 = nil
1556
+ else
1557
+ r23 = instantiate_node(SyntaxNode,input, i23...index, s23)
1558
+ r23.extend(QuotedOrBareString6)
1559
+ end
1560
+ if r23
1561
+ r0 = r23
1562
+ else
1563
+ @index = i0
1564
+ r0 = nil
1565
+ end
1566
+ end
1567
+ end
1568
+
1569
+ node_cache[:quoted_or_bare_string][start_index] = r0
1570
+
1571
+ r0
1572
+ end
1573
+
1574
+ def _nt_environment_variable_name
1575
+ start_index = index
1576
+ if node_cache[:environment_variable_name].has_key?(index)
1577
+ cached = node_cache[:environment_variable_name][index]
1578
+ if cached
1579
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1580
+ @index = cached.interval.end
1581
+ end
1582
+ return cached
1583
+ end
1584
+
1585
+ s0, i0 = [], index
1586
+ loop do
1587
+ if has_terminal?('\G[a-zA-Z0-9_]', true, index)
1588
+ r1 = true
1589
+ @index += 1
1590
+ else
1591
+ r1 = nil
1592
+ end
1593
+ if r1
1594
+ s0 << r1
1595
+ else
1596
+ break
1597
+ end
1598
+ end
1599
+ if s0.empty?
1600
+ @index = i0
1601
+ r0 = nil
1602
+ else
1603
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1604
+ end
1605
+
1606
+ node_cache[:environment_variable_name][start_index] = r0
1607
+
1608
+ r0
1609
+ end
1610
+
1611
+ module EnvironmentVariableNameValue0
1612
+ end
1613
+
1614
+ module EnvironmentVariableNameValue1
1615
+ end
1616
+
1617
+ module EnvironmentVariableNameValue2
1618
+ end
1619
+
1620
+ module EnvironmentVariableNameValue3
1621
+ end
1622
+
1623
+ def _nt_environment_variable_name_value
1624
+ start_index = index
1625
+ if node_cache[:environment_variable_name_value].has_key?(index)
1351
1626
  cached = node_cache[:environment_variable_name_value][index]
1352
1627
  if cached
1353
1628
  cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@@ -1360,7 +1635,7 @@ module Fig
1360
1635
  i1, s1 = index, []
1361
1636
  s2, i2 = [], index
1362
1637
  loop do
1363
- if has_terminal?('\G[^\\s#\\\\"]', true, index)
1638
+ if has_terminal?('\G[^\\s#\\\\\'"]', true, index)
1364
1639
  r3 = true
1365
1640
  @index += 1
1366
1641
  else
@@ -1462,7 +1737,7 @@ module Fig
1462
1737
  i12, s12 = index, []
1463
1738
  s13, i13 = [], index
1464
1739
  loop do
1465
- if has_terminal?('\G[^\\s#\\\\\']', true, index)
1740
+ if has_terminal?('\G[^\\s#\\\\\'"]', true, index)
1466
1741
  r14 = true
1467
1742
  @index += 1
1468
1743
  else
@@ -1595,185 +1870,6 @@ module Fig
1595
1870
  r0
1596
1871
  end
1597
1872
 
1598
- module Command0
1599
- def statement_start
1600
- elements[0]
1601
- end
1602
-
1603
- def command_line
1604
- elements[2]
1605
- end
1606
- end
1607
-
1608
- module Command1
1609
- def to_config_statement(build_state)
1610
- return build_state.new_command_statement(
1611
- statement_start, command_line
1612
- )
1613
- end
1614
- end
1615
-
1616
- def _nt_command
1617
- start_index = index
1618
- if node_cache[:command].has_key?(index)
1619
- cached = node_cache[:command][index]
1620
- if cached
1621
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1622
- @index = cached.interval.end
1623
- end
1624
- return cached
1625
- end
1626
-
1627
- i0, s0 = index, []
1628
- if has_terminal?('command', false, index)
1629
- r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
1630
- @index += 7
1631
- else
1632
- terminal_parse_failure('command')
1633
- r1 = nil
1634
- end
1635
- s0 << r1
1636
- if r1
1637
- s2, i2 = [], index
1638
- loop do
1639
- r3 = _nt_ws_or_comment
1640
- if r3
1641
- s2 << r3
1642
- else
1643
- break
1644
- end
1645
- end
1646
- if s2.empty?
1647
- @index = i2
1648
- r2 = nil
1649
- else
1650
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1651
- end
1652
- s0 << r2
1653
- if r2
1654
- r4 = _nt_command_line
1655
- s0 << r4
1656
- end
1657
- end
1658
- if s0.last
1659
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1660
- r0.extend(Command0)
1661
- r0.extend(Command1)
1662
- else
1663
- @index = i0
1664
- r0 = nil
1665
- end
1666
-
1667
- node_cache[:command][start_index] = r0
1668
-
1669
- r0
1670
- end
1671
-
1672
- module CommandLine0
1673
- def value
1674
- elements[1]
1675
- end
1676
-
1677
- end
1678
-
1679
- def _nt_command_line
1680
- start_index = index
1681
- if node_cache[:command_line].has_key?(index)
1682
- cached = node_cache[:command_line][index]
1683
- if cached
1684
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1685
- @index = cached.interval.end
1686
- end
1687
- return cached
1688
- end
1689
-
1690
- i0, s0 = index, []
1691
- if has_terminal?('"', false, index)
1692
- r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1693
- @index += 1
1694
- else
1695
- terminal_parse_failure('"')
1696
- r1 = nil
1697
- end
1698
- s0 << r1
1699
- if r1
1700
- s2, i2 = [], index
1701
- loop do
1702
- if has_terminal?('\G[^"]', true, index)
1703
- r3 = true
1704
- @index += 1
1705
- else
1706
- r3 = nil
1707
- end
1708
- if r3
1709
- s2 << r3
1710
- else
1711
- break
1712
- end
1713
- end
1714
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1715
- s0 << r2
1716
- if r2
1717
- if has_terminal?('"', false, index)
1718
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1719
- @index += 1
1720
- else
1721
- terminal_parse_failure('"')
1722
- r4 = nil
1723
- end
1724
- s0 << r4
1725
- end
1726
- end
1727
- if s0.last
1728
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1729
- r0.extend(CommandLine0)
1730
- else
1731
- @index = i0
1732
- r0 = nil
1733
- end
1734
-
1735
- node_cache[:command_line][start_index] = r0
1736
-
1737
- r0
1738
- end
1739
-
1740
- def _nt_descriptor_string
1741
- start_index = index
1742
- if node_cache[:descriptor_string].has_key?(index)
1743
- cached = node_cache[:descriptor_string][index]
1744
- if cached
1745
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1746
- @index = cached.interval.end
1747
- end
1748
- return cached
1749
- end
1750
-
1751
- s0, i0 = [], index
1752
- loop do
1753
- if has_terminal?('\G[^\\s#]', true, index)
1754
- r1 = true
1755
- @index += 1
1756
- else
1757
- r1 = nil
1758
- end
1759
- if r1
1760
- s0 << r1
1761
- else
1762
- break
1763
- end
1764
- end
1765
- if s0.empty?
1766
- @index = i0
1767
- r0 = nil
1768
- else
1769
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1770
- end
1771
-
1772
- node_cache[:descriptor_string][start_index] = r0
1773
-
1774
- r0
1775
- end
1776
-
1777
1873
  end
1778
1874
 
1779
1875
  class V1Parser < Treetop::Runtime::CompiledParser