markdown_exec 1.8.5 → 1.8.7

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.
@@ -7,5 +7,5 @@ module MarkdownExec
7
7
  BIN_NAME = 'mde'
8
8
  GEM_NAME = 'markdown_exec'
9
9
  TAP_DEBUG = 'MDE_DEBUG'
10
- VERSION = '1.8.5'
10
+ VERSION = '1.8.7'
11
11
  end
data/lib/markdown_exec.rb CHANGED
@@ -41,6 +41,8 @@ tap_config envvar: MarkdownExec::TAP_DEBUG
41
41
  $stderr.sync = true
42
42
  $stdout.sync = true
43
43
 
44
+ ARGV_SEP = '--'
45
+
44
46
  # custom error: file specified is missing
45
47
  #
46
48
  class FileMissingError < StandardError; end
@@ -136,10 +138,11 @@ module MarkdownExec
136
138
  )
137
139
  end
138
140
 
139
- # return arguments before `--`
141
+ # return arguments before ARGV_SEP
142
+ # arguments after ARGV_SEP are passed to the generatede script
140
143
  #
141
144
  def arguments_for_mde(argv = ARGV)
142
- case ind = argv.find_index('--')
145
+ case ind = argv.find_index(ARGV_SEP)
143
146
  when nil
144
147
  argv
145
148
  when 0
@@ -205,14 +208,13 @@ module MarkdownExec
205
208
  # Reports and executes block logic
206
209
  def execute_block_logic(files)
207
210
  @options[:filename] = select_document_if_multiple(files)
208
- @options.select_execute_bash_and_special_blocks
211
+ @options.document_menu_loop
209
212
  end
210
213
 
211
214
  ## Executes the block specified in the options
212
215
  #
213
216
  def execute_block_with_error_handling
214
217
  finalize_cli_argument_processing
215
- @options[:input_cli_rest] = @rest
216
218
  execute_code_block_based_on_options(@options)
217
219
  rescue FileMissingError
218
220
  warn "File missing: #{$!}"
@@ -293,6 +295,7 @@ module MarkdownExec
293
295
  #
294
296
  block_name = rest.shift
295
297
  @options[:block_name] = block_name if block_name.present?
298
+ @options[:input_cli_rest] = @rest
296
299
  rescue FileMissingError
297
300
  warn_format('finalize_cli_argument_processing',
298
301
  "File missing -- #{$!}", { abort: true })
@@ -346,10 +349,11 @@ module MarkdownExec
346
349
  ->(_) { exit }
347
350
  when 'find'
348
351
  ->(value) {
352
+ find_path = @options[:find_path].present? ? @options[:find_path] : @options[:path]
349
353
  @fout.fout 'Searching in: ' \
350
- "#{HashDelegator.new(@options).string_send_color(@options[:path],
354
+ "#{HashDelegator.new(@options).string_send_color(find_path,
351
355
  :menu_chrome_color)}"
352
- searcher = DirectorySearcher.new(value, [@options[:path]])
356
+ searcher = DirectorySearcher.new(value, [find_path])
353
357
 
354
358
  @fout.fout 'In file contents'
355
359
  hash = searcher.search_in_file_contents
@@ -546,7 +550,7 @@ module MarkdownExec
546
550
 
547
551
  saved_name_split filename
548
552
  @options[:save_executed_script] = false
549
- @options.select_execute_bash_and_special_blocks
553
+ @options.document_menu_loop
550
554
  rescue StandardError
551
555
  error_handler('run_last_script')
552
556
  end
@@ -613,7 +617,7 @@ module MarkdownExec
613
617
 
614
618
  saved_name_split(filename)
615
619
 
616
- @options.select_execute_bash_and_special_blocks ### ({ save_executed_script: false })
620
+ @options.document_menu_loop ### ({ save_executed_script: false })
617
621
  end
618
622
 
619
623
  public
data/lib/mdoc.rb CHANGED
@@ -23,6 +23,7 @@ module MarkdownExec
23
23
  #
24
24
  def initialize(table = [])
25
25
  @table = table
26
+ # &bc '@table.count:',@table.count
26
27
  end
27
28
 
28
29
  def collect_block_code_cann(fcb)
@@ -69,20 +70,28 @@ module MarkdownExec
69
70
  # @param name [String] The name of the code block to start the retrieval from.
70
71
  # @return [Array<Hash>] An array of code blocks required by the specified code block.
71
72
  #
72
- def collect_recursively_required_blocks(name)
73
+ def collect_block_dependencies(name)
73
74
  name_block = get_block_by_anyname(name)
74
75
  if name_block.nil? || name_block.keys.empty?
75
76
  raise "Named code block `#{name}` not found. (@#{__LINE__})"
76
77
  end
77
78
 
78
79
  dependencies = collect_dependencies(name_block[:oname])
80
+ # &bc 'dependencies.count:',dependencies.count
79
81
  all_dependency_names = collect_unique_names(dependencies).push(name_block[:oname]).uniq
80
- unmet_dependencies = all_dependency_names.dup
82
+ # &bc 'all_dependency_names.count:',all_dependency_names.count
81
83
 
82
- # in order of appearance in document (@table)
83
- # insert function blocks
84
- blocks = @table.select { |fcb| all_dependency_names.include? fcb[:oname] }
85
- .map do |fcb|
84
+ # select non-chrome blocks in order of appearance in source documents
85
+ #
86
+ blocks = @table.select do |fcb|
87
+ !fcb.fetch(:chrome, false) && all_dependency_names.include?(fcb.fetch(:oname))
88
+ end
89
+ # &bc 'blocks.count:',blocks.count
90
+
91
+ ## add cann key to blocks, calc unmet_dependencies
92
+ #
93
+ unmet_dependencies = all_dependency_names.dup
94
+ blocks = blocks.map do |fcb|
86
95
  unmet_dependencies.delete(fcb[:oname]) # may not exist if block name is duplicated
87
96
  if (call = fcb[:call])
88
97
  [get_block_by_oname("[#{call.match(/^%\((\S+) |\)/)[1]}]")
@@ -91,6 +100,7 @@ module MarkdownExec
91
100
  []
92
101
  end + [fcb]
93
102
  end.flatten(1)
103
+ # &bc 'unmet_dependencies.count:',unmet_dependencies.count
94
104
 
95
105
  { all_dependency_names: all_dependency_names,
96
106
  blocks: blocks,
@@ -103,11 +113,13 @@ module MarkdownExec
103
113
  # @param name [String] The name of the code block to start the collection from.
104
114
  # @return [Array<String>] An array of strings containing the collected code blocks.
105
115
  #
106
- def collect_recursively_required_code(name, label_body: true, label_format_above: nil,
107
- label_format_below: nil, block_source:)
108
- block_search = collect_recursively_required_blocks(name)
116
+ def collect_recursively_required_code(name, block_source:, label_body: true, label_format_above: nil,
117
+ label_format_below: nil)
118
+ block_search = collect_block_dependencies(name)
109
119
  if block_search[:blocks]
110
120
  blocks = collect_wrapped_blocks(block_search[:blocks])
121
+ # &bc 'blocks.count:',blocks.count
122
+
111
123
  block_search.merge(
112
124
  { block_names: blocks.map { |block| block[:oname] },
113
125
  code: blocks.map do |fcb|
@@ -134,6 +146,8 @@ module MarkdownExec
134
146
  else
135
147
  block_search.merge({ block_names: [], code: [] })
136
148
  end
149
+ rescue StandardError
150
+ error_handler('collect_recursively_required_code')
137
151
  end
138
152
 
139
153
  def collect_unique_names(hash)
@@ -160,6 +174,13 @@ module MarkdownExec
160
174
  end.flatten(1).compact
161
175
  end
162
176
 
177
+ def error_handler(name = '', opts = {})
178
+ Exceptions.error_handler(
179
+ "MDoc.#{name} -- #{$!}",
180
+ opts
181
+ )
182
+ end
183
+
163
184
  # Retrieves code blocks based on the provided options.
164
185
  #
165
186
  # @param opts [Hash] The options used for filtering code blocks.
@@ -432,13 +453,13 @@ if $PROGRAM_NAME == __FILE__
432
453
  end
433
454
 
434
455
  ### broken test
435
- def test_collect_recursively_required_blocks
436
- result = @doc.collect_recursively_required_blocks('block3')[:blocks]
456
+ def test_collect_block_dependencies
457
+ result = @doc.collect_block_dependencies('block3')[:blocks]
437
458
  expected_result = [@table[0], @table[1], @table[2]]
438
459
  assert_equal expected_result, result
439
460
 
440
461
  assert_raises(RuntimeError) do
441
- @doc.collect_recursively_required_blocks('missing_block')
462
+ @doc.collect_block_dependencies('missing_block')
442
463
  end
443
464
  end
444
465
 
data/lib/menu.src.yml CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  - :arg_name: NAME
19
19
  :compreply: false
20
- :description: Name of block
20
+ :description: Name of block to execute
21
21
  :env_var: MDE_BLOCK_NAME
22
22
  :long_name: block-name
23
23
  :opt_name: block_name
@@ -203,18 +203,20 @@
203
203
  ## match fenced code indented by spaces
204
204
  #
205
205
  - :default: "^(?<indent> *)`{3,}"
206
+ :description: Matches the start and end of a fenced code block
206
207
  :env_var: MDE_FENCED_START_AND_END_REGEX
207
208
  :opt_name: fenced_start_and_end_regex
208
209
  :procname: val_as_str
209
210
 
210
211
  - :default: "^(?<indent> *)`{3,}(?<shell>[^`\\s]*) *:?(?<name>[^\\s]*) *(?<rest>.*) *$"
212
+ :description: Match the start of a fenced block
211
213
  :env_var: MDE_FENCED_START_EXTENDED_REGEX
212
214
  :opt_name: fenced_start_extended_regex
213
215
  :procname: val_as_str
214
216
 
215
217
  - :arg_name: RELATIVE_PATH
216
218
  :compreply: "."
217
- :description: Name of document
219
+ :description: Name of the document to load
218
220
  :env_var: MDE_FILENAME
219
221
  :long_name: filename
220
222
  :opt_name: filename
@@ -228,17 +230,25 @@
228
230
  :procname: find
229
231
  :short_name: "?"
230
232
 
231
- - :default: "^# *(?<name>[^#]*?) *$"
233
+ - :arg_name: FIND_PATH
234
+ :default: ""
235
+ :description: Path for find (uses PATH if empty)
236
+ :env_var: MDE_FIND_PATH
237
+ :long_name: find-path
238
+ :opt_name: find_path
239
+ :procname: val_as_str
240
+
241
+ - :default: "^# *(?<line>[^#]*?) *$"
232
242
  :env_var: MDE_HEADING1_MATCH
233
243
  :opt_name: heading1_match
234
244
  :procname: val_as_str
235
245
 
236
- - :default: "^## *(?<name>[^#]*?) *$"
246
+ - :default: "^## *(?<line>[^#]*?) *$"
237
247
  :env_var: MDE_HEADING2_MATCH
238
248
  :opt_name: heading2_match
239
249
  :procname: val_as_str
240
250
 
241
- - :default: "^### *(?<name>.+?) *$"
251
+ - :default: "^### *(?<line>.+?) *$"
242
252
  :env_var: MDE_HEADING3_MATCH
243
253
  :opt_name: heading3_match
244
254
  :procname: val_as_str
@@ -353,8 +363,8 @@
353
363
  :procname: val_as_bool
354
364
 
355
365
  - :arg_name: BOOL
356
- :default: false
357
- :description: Display headings (levels 1,2,3) in block selection menu
366
+ :default: true
367
+ :description: Controls whether headings(levels 1,2,3) are displayed in the block selection menu
358
368
  :env_var: MDE_MENU_BLOCKS_WITH_HEADINGS
359
369
  :opt_name: menu_blocks_with_headings
360
370
  :procname: val_as_bool
@@ -409,6 +419,42 @@
409
419
  :opt_name: menu_final_divider
410
420
  :procname: val_as_str
411
421
 
422
+ - :default: fg_rgbh_80_80_c0
423
+ :description: Color for heading 1 in menu
424
+ :env_var: MDE_MENU_HEADING1_COLOR
425
+ :opt_name: menu_heading1_color
426
+ :procname: val_as_str
427
+
428
+ - :default: "# %{line}"
429
+ :description: format for menu heading1 in menu
430
+ :env_var: MDE_MENU_HEADING1_FORMAT
431
+ :opt_name: menu_heading1_format
432
+ :procname: val_as_str
433
+
434
+ - :default: fg_rgbh_60_60_c0
435
+ :description: Color for heading 2 in menu
436
+ :env_var: MDE_MENU_HEADING2_COLOR
437
+ :opt_name: menu_heading2_color
438
+ :procname: val_as_str
439
+
440
+ - :default: "## %{line}"
441
+ :description: format for menu heading2 in menu
442
+ :env_var: MDE_MENU_HEADING2_FORMAT
443
+ :opt_name: menu_heading2_format
444
+ :procname: val_as_str
445
+
446
+ - :default: fg_rgbh_40_40_c0
447
+ :description: Color for heading 3 in menu
448
+ :env_var: MDE_MENU_HEADING3_COLOR
449
+ :opt_name: menu_heading3_color
450
+ :procname: val_as_str
451
+
452
+ - :default: "### %{line}"
453
+ :description: format for menu heading3 in menu
454
+ :env_var: MDE_MENU_HEADING3_FORMAT
455
+ :opt_name: menu_heading3_format
456
+ :procname: val_as_str
457
+
412
458
  - :default: "0"
413
459
  :description: Import levels for blocks to appear in menu. Empty is all.
414
460
  :env_var: MDE_MENU_IMPORT_LEVEL_MATCH
@@ -424,11 +470,31 @@
424
470
 
425
471
  - :arg_name: BOOL
426
472
  :default: false
427
- :description: Include imported notes in menu
473
+ # :description: Include imported notes in menu
474
+ :description: Whether imported blocks should be included in the menu
428
475
  :env_var: MDE_MENU_INCLUDE_IMPORTED_NOTES
429
476
  :opt_name: menu_include_imported_notes
430
477
  :procname: val_as_bool
431
478
 
479
+ - :arg_name: BOOL
480
+ :default: true
481
+ :description: Display inherited lines at top of menu (vs bottom)
482
+ :env_var: MDE_MENU_INHERITED_LINES_AT_TOP
483
+ :opt_name: menu_inherited_lines_at_top
484
+ :procname: val_as_bool
485
+
486
+ - :default: fg_rgbh_94_00_D3
487
+ :description: Color of inherited lines in menu
488
+ :env_var: MDE_MENU_INHERITED_LINES_COLOR
489
+ :opt_name: menu_inherited_lines_color
490
+ :procname: val_as_str
491
+
492
+ - :default: "%{line}"
493
+ :description: format for inherited lines in menu
494
+ :env_var: MDE_MENU_INHERITED_LINES_FORMAT
495
+ :opt_name: menu_inherited_lines_format
496
+ :procname: val_as_str
497
+
432
498
  - :default:
433
499
  :line: ""
434
500
  :description: opening demarcation for menu
@@ -500,6 +566,12 @@
500
566
  :opt_name: menu_opts_set_format
501
567
  :procname: val_as_str
502
568
 
569
+ - :default: "."
570
+ :description: Block name to display menu
571
+ :env_var: MDE_MENU_PERSIST_BLOCK_NAME
572
+ :opt_name: menu_persist_block_name
573
+ :procname: val_as_str
574
+
503
575
  - :default: fg_rgbh_ff_ff_ff
504
576
  :description: Color of menu task
505
577
  :env_var: MDE_MENU_TASK_COLOR
@@ -556,6 +628,13 @@
556
628
  :opt_name: menu_with_exit
557
629
  :procname: val_as_bool
558
630
 
631
+ - :arg_name: BOOL
632
+ :default: true
633
+ :description: Display inherited lines in menu
634
+ :env_var: MDE_MENU_WITH_INHERITED_LINES
635
+ :opt_name: menu_with_inherited_lines
636
+ :procname: val_as_bool
637
+
559
638
  - :arg_name: BOOL
560
639
  :default: false
561
640
  :description: Hide decorative menu entries
@@ -606,7 +685,7 @@
606
685
 
607
686
  - :arg_name: BOOL
608
687
  :default: true
609
- :description: Display standard output from execution
688
+ :description: Whether standard output from execution is displayed
610
689
  :env_var: MDE_OUTPUT_STDOUT
611
690
  :long_name: output-stdout
612
691
  :opt_name: output_stdout
@@ -628,14 +707,14 @@
628
707
 
629
708
  - :arg_name: BOOL
630
709
  :default: true
631
- :description: Pause afte executing a BASH block
632
- :env_var: MDE_PAUSE_after_script_execution
710
+ :description: Wheter to pause after manually executing a block and the next menu
711
+ :env_var: MDE_PAUSE_AFTER_SCRIPT_EXECUTION
633
712
  :opt_name: pause_after_script_execution
634
713
  :procname: val_as_bool
635
714
 
636
715
  - :default: "\nContinue?"
637
- :description: Prompt after script execution
638
- :env_var: MDE_PROMPT_after_script_execution
716
+ :description: Prompt after manually executing a block and the next menu
717
+ :env_var: MDE_PROMPT_AFTER_SCRIPT_EXECUTION
639
718
  :opt_name: prompt_after_script_execution
640
719
  :procname: val_as_str
641
720
 
@@ -717,7 +796,7 @@
717
796
 
718
797
  - :arg_name: BOOL
719
798
  :default: false
720
- :description: Save executed script
799
+ :description: Wheter to save an executed script`
721
800
  :env_var: MDE_SAVE_EXECUTED_SCRIPT
722
801
  :long_name: save-executed-script
723
802
  :opt_name: save_executed_script
@@ -759,7 +838,7 @@
759
838
 
760
839
  - :arg_name: RELATIVE_PATH
761
840
  :default: logs
762
- :description: Saved script folder
841
+ :description: Folder where saved scripts are stored
763
842
  :env_var: MDE_SAVED_SCRIPT_FOLDER
764
843
  :long_name: saved-script-folder
765
844
  :opt_name: saved_script_folder
@@ -884,7 +963,7 @@
884
963
 
885
964
  - :arg_name: BOOL
886
965
  :default: true
887
- :description: Pause for user to approve script
966
+ :description: Requires user approval before executing a script
888
967
  :env_var: MDE_USER_MUST_APPROVE
889
968
  :long_name: user-must-approve
890
969
  :opt_name: user_must_approve
data/lib/menu.yml CHANGED
@@ -1,4 +1,4 @@
1
- # MDE - Markdown Executor (1.8.5)
1
+ # MDE - Markdown Executor (1.8.7)
2
2
  ---
3
3
  - :description: Show current configuration values
4
4
  :procname: show_config
@@ -15,7 +15,7 @@
15
15
  :procname: val_as_str
16
16
  - :arg_name: NAME
17
17
  :compreply: false
18
- :description: Name of block
18
+ :description: Name of block to execute
19
19
  :env_var: MDE_BLOCK_NAME
20
20
  :long_name: block-name
21
21
  :opt_name: block_name
@@ -174,17 +174,19 @@
174
174
  :procname: exit
175
175
  :short_name: x
176
176
  - :default: "^(?<indent> *)`{3,}"
177
+ :description: Matches the start and end of a fenced code block
177
178
  :env_var: MDE_FENCED_START_AND_END_REGEX
178
179
  :opt_name: fenced_start_and_end_regex
179
180
  :procname: val_as_str
180
181
  - :default: "^(?<indent> *)`{3,}(?<shell>[^`\\s]*) *:?(?<name>[^\\s]*) *(?<rest>.*)
181
182
  *$"
183
+ :description: Match the start of a fenced block
182
184
  :env_var: MDE_FENCED_START_EXTENDED_REGEX
183
185
  :opt_name: fenced_start_extended_regex
184
186
  :procname: val_as_str
185
187
  - :arg_name: RELATIVE_PATH
186
188
  :compreply: "."
187
- :description: Name of document
189
+ :description: Name of the document to load
188
190
  :env_var: MDE_FILENAME
189
191
  :long_name: filename
190
192
  :opt_name: filename
@@ -196,15 +198,22 @@
196
198
  :long_name: find
197
199
  :procname: find
198
200
  :short_name: "?"
199
- - :default: "^# *(?<name>[^#]*?) *$"
201
+ - :arg_name: FIND_PATH
202
+ :default: ''
203
+ :description: Path for find (uses PATH if empty)
204
+ :env_var: MDE_FIND_PATH
205
+ :long_name: find-path
206
+ :opt_name: find_path
207
+ :procname: val_as_str
208
+ - :default: "^# *(?<line>[^#]*?) *$"
200
209
  :env_var: MDE_HEADING1_MATCH
201
210
  :opt_name: heading1_match
202
211
  :procname: val_as_str
203
- - :default: "^## *(?<name>[^#]*?) *$"
212
+ - :default: "^## *(?<line>[^#]*?) *$"
204
213
  :env_var: MDE_HEADING2_MATCH
205
214
  :opt_name: heading2_match
206
215
  :procname: val_as_str
207
- - :default: "^### *(?<name>.+?) *$"
216
+ - :default: "^### *(?<line>.+?) *$"
208
217
  :env_var: MDE_HEADING3_MATCH
209
218
  :opt_name: heading3_match
210
219
  :procname: val_as_str
@@ -299,8 +308,9 @@
299
308
  :opt_name: menu_blocks_with_docname
300
309
  :procname: val_as_bool
301
310
  - :arg_name: BOOL
302
- :default: false
303
- :description: Display headings (levels 1,2,3) in block selection menu
311
+ :default: true
312
+ :description: Controls whether headings(levels 1,2,3) are displayed in the block
313
+ selection menu
304
314
  :env_var: MDE_MENU_BLOCKS_WITH_HEADINGS
305
315
  :opt_name: menu_blocks_with_headings
306
316
  :procname: val_as_bool
@@ -346,6 +356,36 @@
346
356
  :env_var: MDE_MENU_FINAL_DIVIDER
347
357
  :opt_name: menu_final_divider
348
358
  :procname: val_as_str
359
+ - :default: fg_rgbh_80_80_c0
360
+ :description: Color for heading 1 in menu
361
+ :env_var: MDE_MENU_HEADING1_COLOR
362
+ :opt_name: menu_heading1_color
363
+ :procname: val_as_str
364
+ - :default: "# %{line}"
365
+ :description: format for menu heading1 in menu
366
+ :env_var: MDE_MENU_HEADING1_FORMAT
367
+ :opt_name: menu_heading1_format
368
+ :procname: val_as_str
369
+ - :default: fg_rgbh_60_60_c0
370
+ :description: Color for heading 2 in menu
371
+ :env_var: MDE_MENU_HEADING2_COLOR
372
+ :opt_name: menu_heading2_color
373
+ :procname: val_as_str
374
+ - :default: "## %{line}"
375
+ :description: format for menu heading2 in menu
376
+ :env_var: MDE_MENU_HEADING2_FORMAT
377
+ :opt_name: menu_heading2_format
378
+ :procname: val_as_str
379
+ - :default: fg_rgbh_40_40_c0
380
+ :description: Color for heading 3 in menu
381
+ :env_var: MDE_MENU_HEADING3_COLOR
382
+ :opt_name: menu_heading3_color
383
+ :procname: val_as_str
384
+ - :default: "### %{line}"
385
+ :description: format for menu heading3 in menu
386
+ :env_var: MDE_MENU_HEADING3_FORMAT
387
+ :opt_name: menu_heading3_format
388
+ :procname: val_as_str
349
389
  - :default: '0'
350
390
  :description: Import levels for blocks to appear in menu. Empty is all.
351
391
  :env_var: MDE_MENU_IMPORT_LEVEL_MATCH
@@ -359,10 +399,26 @@
359
399
  :procname: val_as_bool
360
400
  - :arg_name: BOOL
361
401
  :default: false
362
- :description: Include imported notes in menu
402
+ :description: Whether imported blocks should be included in the menu
363
403
  :env_var: MDE_MENU_INCLUDE_IMPORTED_NOTES
364
404
  :opt_name: menu_include_imported_notes
365
405
  :procname: val_as_bool
406
+ - :arg_name: BOOL
407
+ :default: true
408
+ :description: Display inherited lines at top of menu (vs bottom)
409
+ :env_var: MDE_MENU_INHERITED_LINES_AT_TOP
410
+ :opt_name: menu_inherited_lines_at_top
411
+ :procname: val_as_bool
412
+ - :default: fg_rgbh_94_00_D3
413
+ :description: Color of inherited lines in menu
414
+ :env_var: MDE_MENU_INHERITED_LINES_COLOR
415
+ :opt_name: menu_inherited_lines_color
416
+ :procname: val_as_str
417
+ - :default: "%{line}"
418
+ :description: format for inherited lines in menu
419
+ :env_var: MDE_MENU_INHERITED_LINES_FORMAT
420
+ :opt_name: menu_inherited_lines_format
421
+ :procname: val_as_str
366
422
  - :default:
367
423
  :line: ''
368
424
  :description: opening demarcation for menu
@@ -421,6 +477,11 @@
421
477
  :env_var: MDE_MENU_OPTS_SET_FORMAT
422
478
  :opt_name: menu_opts_set_format
423
479
  :procname: val_as_str
480
+ - :default: "."
481
+ :description: Block name to display menu
482
+ :env_var: MDE_MENU_PERSIST_BLOCK_NAME
483
+ :opt_name: menu_persist_block_name
484
+ :procname: val_as_str
424
485
  - :default: fg_rgbh_ff_ff_ff
425
486
  :description: Color of menu task
426
487
  :env_var: MDE_MENU_TASK_COLOR
@@ -468,6 +529,12 @@
468
529
  :env_var: MDE_MENU_WITH_EXIT
469
530
  :opt_name: menu_with_exit
470
531
  :procname: val_as_bool
532
+ - :arg_name: BOOL
533
+ :default: true
534
+ :description: Display inherited lines in menu
535
+ :env_var: MDE_MENU_WITH_INHERITED_LINES
536
+ :opt_name: menu_with_inherited_lines
537
+ :procname: val_as_bool
471
538
  - :arg_name: BOOL
472
539
  :default: false
473
540
  :description: Hide decorative menu entries
@@ -511,7 +578,7 @@
511
578
  :procname: val_as_bool
512
579
  - :arg_name: BOOL
513
580
  :default: true
514
- :description: Display standard output from execution
581
+ :description: Whether standard output from execution is displayed
515
582
  :env_var: MDE_OUTPUT_STDOUT
516
583
  :long_name: output-stdout
517
584
  :opt_name: output_stdout
@@ -530,15 +597,15 @@
530
597
  :short_name: p
531
598
  - :arg_name: BOOL
532
599
  :default: true
533
- :description: Pause afte executing a BASH block
534
- :env_var: MDE_PAUSE_after_script_execution
600
+ :description: Wheter to pause after manually executing a block and the next menu
601
+ :env_var: MDE_PAUSE_AFTER_SCRIPT_EXECUTION
535
602
  :opt_name: pause_after_script_execution
536
603
  :procname: val_as_bool
537
604
  - :default: |2-
538
605
 
539
606
  Continue?
540
- :description: Prompt after script execution
541
- :env_var: MDE_PROMPT_after_script_execution
607
+ :description: Prompt after manually executing a block and the next menu
608
+ :env_var: MDE_PROMPT_AFTER_SCRIPT_EXECUTION
542
609
  :opt_name: prompt_after_script_execution
543
610
  :procname: val_as_str
544
611
  - :default: |2-
@@ -615,7 +682,7 @@
615
682
  :procname: val_as_int
616
683
  - :arg_name: BOOL
617
684
  :default: false
618
- :description: Save executed script
685
+ :description: Wheter to save an executed script`
619
686
  :env_var: MDE_SAVE_EXECUTED_SCRIPT
620
687
  :long_name: save-executed-script
621
688
  :opt_name: save_executed_script
@@ -651,7 +718,7 @@
651
718
  :procname: val_as_str
652
719
  - :arg_name: RELATIVE_PATH
653
720
  :default: logs
654
- :description: Saved script folder
721
+ :description: Folder where saved scripts are stored
655
722
  :env_var: MDE_SAVED_SCRIPT_FOLDER
656
723
  :long_name: saved-script-folder
657
724
  :opt_name: saved_script_folder
@@ -760,7 +827,7 @@
760
827
  :procname: val_as_bool
761
828
  - :arg_name: BOOL
762
829
  :default: true
763
- :description: Pause for user to approve script
830
+ :description: Requires user approval before executing a script
764
831
  :env_var: MDE_USER_MUST_APPROVE
765
832
  :long_name: user-must-approve
766
833
  :opt_name: user_must_approve
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # encoding=utf-8
5
+
6
+ require 'find'
7
+
8
+ class RegexpReplacer
9
+ # Constructor to initialize with file path
10
+ def initialize(file_path)
11
+ @file_path = file_path
12
+ end
13
+
14
+ # Perform the replacement based on the specified option
15
+ def perform_replacement(option)
16
+ content = File.read(@file_path)
17
+ modified_content = case option
18
+ when 'v'
19
+ verbose(content)
20
+ when 'q'
21
+ quiet(content)
22
+ else
23
+ raise "Invalid option. Please choose 'v' or 'q'."
24
+ end
25
+ File.write(@file_path, modified_content)
26
+ end
27
+
28
+ private
29
+
30
+ # Replacement for pattern 'v'
31
+ def verbose(content)
32
+ regexp = /^( *)# (&\w+) ('.+)/
33
+ substitution = '\1;;pp [__LINE__,\3] #\2'
34
+ content.gsub(regexp, substitution)
35
+ end
36
+
37
+ # Replacement for pattern 'q'
38
+ def quiet(content)
39
+ regexp = /^( *);; ?pp \[__LINE__,(.+)\] #(&\w+)/
40
+ substitution = '\1# \3 \2'
41
+ content.gsub(regexp, substitution)
42
+ end
43
+ end
44
+
45
+ # Running the script with command line arguments
46
+ if ARGV.length != 2
47
+ puts "Usage: ruby regexp_replacer.rb [file_path] [option ('v' or 'q')]"
48
+ exit
49
+ end
50
+
51
+ file_path, option = ARGV
52
+ replacer = RegexpReplacer.new(file_path)
53
+ begin
54
+ replacer.perform_replacement(option)
55
+ puts "Replacement performed successfully."
56
+ rescue StandardError => e
57
+ puts "Error: #{e.message}"
58
+ end