markdown_exec 3.2.0 → 3.4.0

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +40 -0
  3. data/Gemfile.lock +1 -1
  4. data/Rakefile +5 -4
  5. data/bats/block-type-ux-echo-hash-transform.bats +1 -1
  6. data/bats/block-type-ux-exec-hash-transform.bats +8 -0
  7. data/bats/block-type-ux-exec-hash.bats +15 -0
  8. data/bats/block-type-ux-force.bats +9 -0
  9. data/bats/block-type-ux-formats.bats +8 -0
  10. data/bats/block-type-ux-no-name.bats +8 -0
  11. data/bats/block-type-ux-readonly.bats +1 -1
  12. data/bats/block-type-ux-row-format.bats +1 -1
  13. data/bats/command-substitution-options.bats +2 -2
  14. data/bats/import-directive-line-continuation.bats +9 -0
  15. data/bats/import-directive-parameter-symbols.bats +9 -0
  16. data/bats/import-duplicates.bats +4 -2
  17. data/bats/import-parameter-symbols.bats +8 -0
  18. data/bats/markup.bats +1 -1
  19. data/bats/option-expansion.bats +1 -1
  20. data/bats/options.bats +1 -1
  21. data/bats/table-column-truncate.bats +1 -1
  22. data/bats/table.bats +1 -1
  23. data/bats/test_helper.bash +4 -3
  24. data/bin/tab_completion.sh +5 -1
  25. data/docs/dev/block-type-ux-echo-hash-transform.md +14 -12
  26. data/docs/dev/block-type-ux-exec-hash-transform.md +37 -0
  27. data/docs/dev/block-type-ux-exec-hash.md +93 -0
  28. data/docs/dev/block-type-ux-force.md +20 -0
  29. data/docs/dev/block-type-ux-formats.md +58 -0
  30. data/docs/dev/block-type-ux-no-name.md +17 -0
  31. data/docs/dev/block-type-ux-row-format.md +1 -1
  32. data/docs/dev/hexdump_format.md +267 -0
  33. data/docs/dev/import/parameter-symbols.md +6 -0
  34. data/docs/dev/import-directive-line-continuation.md +6 -0
  35. data/docs/dev/import-directive-parameter-symbols.md +9 -0
  36. data/docs/dev/import-parameter-symbols-template.md +24 -0
  37. data/docs/dev/import-parameter-symbols.md +6 -0
  38. data/docs/dev/load-vars-state-demo.md +35 -0
  39. data/docs/dev/table-column-truncate.md +1 -1
  40. data/docs/ux-blocks-examples.md +2 -3
  41. data/examples/import_with_substitution_demo.md +130 -26
  42. data/examples/imports/organism_template.md +86 -29
  43. data/lib/cached_nested_file_reader.rb +279 -29
  44. data/lib/constants.rb +8 -1
  45. data/lib/env_interface.rb +13 -7
  46. data/lib/evaluate_shell_expressions.rb +1 -0
  47. data/lib/fcb.rb +133 -33
  48. data/lib/format_table.rb +77 -29
  49. data/lib/fout.rb +5 -0
  50. data/lib/hash_delegator.rb +1159 -348
  51. data/lib/markdown_exec/version.rb +1 -1
  52. data/lib/markdown_exec.rb +2 -0
  53. data/lib/mdoc.rb +13 -11
  54. data/lib/menu.src.yml +166 -62
  55. data/lib/menu.yml +143 -59
  56. data/lib/string_util.rb +80 -0
  57. data/lib/table_extractor.rb +170 -64
  58. data/lib/ww.rb +810 -36
  59. metadata +22 -2
data/lib/menu.yml CHANGED
@@ -94,6 +94,13 @@
94
94
  :env_var: MDE_BLOCK_TYPE_PORT_SET_FORMAT
95
95
  :default: ": ${%{key}:=%{value}}"
96
96
  :procname: val_as_str
97
+ - :opt_name: blocks
98
+ :arg_name: MESSAGE
99
+ :default:
100
+ :description: List the blocks displayed
101
+ :env_var: MDE_BLOCKS_LIST_MESSAGE
102
+ :long_name: blocks
103
+ :procname: val_as_str
97
104
  - :opt_name: clear_screen_for_select_block
98
105
  :env_var: MDE_CLEAR_SCREEN_FOR_SELECT_BLOCK
99
106
  :description: clear_screen_for_select_block
@@ -121,12 +128,6 @@
121
128
  :arg_name: BOOL
122
129
  :default: true
123
130
  :procname: val_as_bool
124
- - :opt_name: tables_into_columns
125
- :env_var: MDE_TABLES_INTO_COLUMNS
126
- :description: Format tables as columns
127
- :arg_name: BOOL
128
- :default: true
129
- :procname: val_as_bool
130
131
  - :long_name: debug
131
132
  :short_name: d
132
133
  :env_var: MDE_DEBUG
@@ -208,15 +209,9 @@
208
209
  :arg_name: GLOB
209
210
  :default: document_configurations/%{document_filename}_*.sh
210
211
  :procname: val_as_str
211
- - :opt_name: menu_for_saved_lines
212
- :env_var: MDE_MENU_FOR_SAVED_LINES
213
- :description: Add menu options for saved lines
214
- :arg_name: BOOL
215
- :default: true
216
- :procname: val_as_bool
217
- - :opt_name: menu_for_history
218
- :env_var: MDE_MENU_FOR_HISTORY
219
- :description: Add menu options for history
212
+ - :opt_name: document_save_make_directory
213
+ :env_var: MDE_DOCUMENT_SAVE_MAKE_DIRECTORY
214
+ :description: Make the directory if it does not exist when saving
220
215
  :arg_name: BOOL
221
216
  :default: true
222
217
  :procname: val_as_bool
@@ -279,7 +274,7 @@
279
274
  - :opt_name: exception_color_detail
280
275
  :env_var: MDE_EXCEPTION_COLOR_DETAIL
281
276
  :description: Color of exception detail
282
- :default: fg_rgbh_ff_00_7f
277
+ :default: fg_rgbh_ff_99_cc
283
278
  :procname: val_as_str
284
279
  - :opt_name: exception_format_detail
285
280
  :env_var: MDE_EXCEPTION_FORMAT_DETAIL
@@ -289,7 +284,7 @@
289
284
  - :opt_name: exception_color_name
290
285
  :env_var: MDE_EXCEPTION_COLOR_NAME
291
286
  :description: Color of exception name
292
- :default: fg_rgbh_ff_00_00
287
+ :default: fg_rgbh_ff_6b_6b
293
288
  :procname: val_as_str
294
289
  - :opt_name: exception_format_name
295
290
  :env_var: MDE_EXCEPTION_FORMAT_NAME
@@ -358,7 +353,7 @@
358
353
  - :opt_name: execution_report_preview_frame_color
359
354
  :env_var: MDE_EXECUTION_REPORT_PREVIEW_FRAME_COLOR
360
355
  :description: execution_report_preview_frame_color
361
- :default: fg_rgbh_7f_ff_00
356
+ :default: fg_rgbh_90_e0_90
362
357
  :procname: val_as_str
363
358
  - :opt_name: execution_report_preview_head
364
359
  :env_var: MDE_EXECUTION_REPORT_PREVIEW_HEAD
@@ -488,10 +483,38 @@
488
483
  :env_var: MDE_IMPORT_PATHS
489
484
  :default:
490
485
  :procname: val_as_str
491
- - :opt_name: import_pattern
486
+ - :opt_name: import_directive_line_pattern
492
487
  :env_var: MDE_IMPORT_PATTERN
493
- :default: '^(?<indention> *)@import +(?<name>\S+)(?<params>(?: +[A-Za-z_]\w*=(?:"[^"]*"|''[^'']*''|\S+))*)
494
- *$'
488
+ :default: '^(?<indention> *)@import +(?<name>\S+)(?<params>(?: +\w+(?::c=|:e=|:q=|:v=|=)(?:"[^"]*"|''[^'']*''|\S+))*)
489
+ *\\?$'
490
+ :procname: val_as_str
491
+ - :opt_name: import_directive_parameter_scan
492
+ :env_var: MDE_IMPORT_PATTERN_SCAN
493
+ :default: (\w+)(:c=|:e=|:q=|:v=|=)(?:"([^"]*)"|'([^']*)'|(\S+))
494
+ :procname: val_as_str
495
+ - :opt_name: import_parameter_variable_assignment
496
+ :env_var: MDE_IMPORT_PARAMETER_VARIABLE_ASSIGNMENT
497
+ :default: "%{key}=%{value}"
498
+ :procname: val_as_str
499
+ - :opt_name: import_symbol_command_substitution
500
+ :env_var: MDE_IMPORT_SYMBOL_COMMAND_SUBSTITUTION
501
+ :default: ":c="
502
+ :procname: val_as_str
503
+ - :opt_name: import_symbol_evaluated_expression
504
+ :env_var: MDE_IMPORT_SYMBOL_EVALUATED_EXPRESSION
505
+ :default: ":e="
506
+ :procname: val_as_str
507
+ - :opt_name: import_symbol_raw_literal
508
+ :env_var: MDE_IMPORT_SYMBOL_RAW_LITERAL
509
+ :default: "="
510
+ :procname: val_as_str
511
+ - :opt_name: import_symbol_force_quoted_literal
512
+ :env_var: MDE_IMPORT_SYMBOL_FORCE_QUOTED_LITERAL
513
+ :default: ":q="
514
+ :procname: val_as_str
515
+ - :opt_name: import_symbol_variable_reference
516
+ :env_var: MDE_IMPORT_SYMBOL_VARIABLE_REFERENCE
517
+ :default: ":v="
495
518
  :procname: val_as_str
496
519
  - :opt_name: line_decor_main
497
520
  :env_var: MDE_LINE_DECOR_MAIN
@@ -585,7 +608,7 @@
585
608
  - :opt_name: local_name_pattern
586
609
  :env_var: MDE_LOCAL_NAME_PATTERN
587
610
  :description: Pattern for variables not exported in a series of evaluations
588
- :default: "^.{1,3}$"
611
+ :default: "^_\\S{0,12}$"
589
612
  :procname: val_as_str
590
613
  - :opt_name: logged_stdout_filename_prefix
591
614
  :env_var: MDE_LOGGED_STDOUT_FILENAME_PREFIX
@@ -615,7 +638,7 @@
615
638
  - :opt_name: menu_bash_color
616
639
  :env_var: MDE_MENU_BASH_COLOR
617
640
  :description: Color of menu bash
618
- :default: fg_rgbh_00_c0_c0
641
+ :default: fg_rgbh_87_ce_eb
619
642
  :procname: val_as_str
620
643
  - :opt_name: menu_blocks_with_docname
621
644
  :env_var: MDE_MENU_BLOCKS_WITH_DOCNAME
@@ -633,7 +656,7 @@
633
656
  - :opt_name: menu_chrome_color
634
657
  :env_var: MDE_MENU_CHROME_COLOR
635
658
  :description: Color of menu chrome
636
- :default: fg_rgbh_40_c0_c0
659
+ :default: fg_rgbh_b0_b0_b0
637
660
  :procname: val_as_str
638
661
  - :opt_name: menu_chrome_format
639
662
  :env_var: MDE_MENU_CHROME_FORMAT
@@ -653,7 +676,7 @@
653
676
  - :opt_name: menu_divider_color
654
677
  :env_var: MDE_MENU_DIVIDER_COLOR
655
678
  :description: Color of menu divider
656
- :default: fg_rgbh_80_d0_c0
679
+ :default: fg_rgbh_d0_d0_d0
657
680
  :procname: val_as_str
658
681
  - :opt_name: menu_divider_format
659
682
  :env_var: MDE_MENU_DIVIDER_FORMAT
@@ -668,7 +691,7 @@
668
691
  - :opt_name: menu_edit_color
669
692
  :env_var: MDE_MENU_EDIT_COLOR
670
693
  :description: Color of Edit link
671
- :default: fg_rgbh_e0_e0_20
694
+ :default: fg_rgbh_ff_b3_66
672
695
  :procname: val_as_str
673
696
  - :opt_name: menu_exit_at_top
674
697
  :env_var: MDE_MENU_EXIT_AT_TOP
@@ -681,10 +704,22 @@
681
704
  :description: closing demarcations for menu
682
705
  :default:
683
706
  :line: "~~~"
707
+ - :opt_name: menu_for_history
708
+ :env_var: MDE_MENU_FOR_HISTORY
709
+ :description: Add menu options for history
710
+ :arg_name: BOOL
711
+ :default: true
712
+ :procname: val_as_bool
713
+ - :opt_name: menu_for_saved_lines
714
+ :env_var: MDE_MENU_FOR_SAVED_LINES
715
+ :description: Add menu options for saved lines
716
+ :arg_name: BOOL
717
+ :default: true
718
+ :procname: val_as_bool
684
719
  - :opt_name: menu_heading1_color
685
720
  :env_var: MDE_MENU_HEADING1_COLOR
686
721
  :description: Color for heading 1 in menu
687
- :default: fg_bg_rgbh_80_80_c0_10_10_20
722
+ :default: fg_bg_rgbh_70_70_b0_f8_f8_fa
688
723
  :procname: val_as_str
689
724
  - :opt_name: menu_heading1_format
690
725
  :env_var: MDE_MENU_HEADING1_FORMAT
@@ -694,7 +729,7 @@
694
729
  - :opt_name: menu_heading2_color
695
730
  :env_var: MDE_MENU_HEADING2_COLOR
696
731
  :description: Color for heading 2 in menu
697
- :default: fg_bg_rgbh_60_60_c0_10_10_20
732
+ :default: fg_bg_rgbh_60_60_a0_f5_f5_f8
698
733
  :procname: val_as_str
699
734
  - :opt_name: menu_heading2_format
700
735
  :env_var: MDE_MENU_HEADING2_FORMAT
@@ -704,7 +739,7 @@
704
739
  - :opt_name: menu_heading3_color
705
740
  :env_var: MDE_MENU_HEADING3_COLOR
706
741
  :description: Color for heading 3 in menu
707
- :default: fg_bg_rgbh_40_40_c0_10_10_20
742
+ :default: fg_bg_rgbh_50_50_90_f2_f2_f5
708
743
  :procname: val_as_str
709
744
  - :opt_name: menu_heading3_format
710
745
  :env_var: MDE_MENU_HEADING3_FORMAT
@@ -714,7 +749,7 @@
714
749
  - :opt_name: menu_history_color
715
750
  :env_var: MDE_MENU_HISTORY_COLOR
716
751
  :description: Color of History link
717
- :default: fg_rgbh_e0_e0_20
752
+ :default: fg_rgbh_87_ce_eb
718
753
  :procname: val_as_str
719
754
  - :opt_name: menu_import_level_match
720
755
  :env_var: MDE_MENU_IMPORT_LEVEL_MATCH
@@ -731,7 +766,7 @@
731
766
  :env_var: MDE_MENU_INCLUDE_IMPORTED_NOTES
732
767
  :description: Whether imported blocks should be included in the menu
733
768
  :arg_name: BOOL
734
- :default: false
769
+ :default: true
735
770
  :procname: val_as_bool
736
771
  - :opt_name: menu_inherited_lines_at_top
737
772
  :env_var: MDE_MENU_INHERITED_LINES_AT_TOP
@@ -742,7 +777,7 @@
742
777
  - :opt_name: menu_inherited_lines_color
743
778
  :env_var: MDE_MENU_INHERITED_LINES_COLOR
744
779
  :description: Color of inherited lines in menu
745
- :default: fg_rgbh_94_00_D3
780
+ :default: fg_rgbh_b3_9a_d8
746
781
  :procname: val_as_str
747
782
  - :opt_name: menu_inherited_lines_edit_always
748
783
  :env_var: MDE_INHERITED_LINES_EDIT_ALWAYS
@@ -763,7 +798,7 @@
763
798
  - :opt_name: menu_link_color
764
799
  :env_var: MDE_MENU_LINK_COLOR
765
800
  :description: Color of menu link
766
- :default: fg_rgbh_e0_e0_20
801
+ :default: fg_rgbh_90_e0_90
767
802
  :procname: val_as_str
768
803
  - :opt_name: menu_link_format
769
804
  :env_var: MDE_MENU_LINK_FORMAT
@@ -779,7 +814,7 @@
779
814
  - :opt_name: menu_load_color
780
815
  :env_var: MDE_MENU_LOAD_COLOR
781
816
  :description: Color of Load link
782
- :default: fg_rgbh_e0_e0_20
817
+ :default: fg_rgbh_87_ce_eb
783
818
  :procname: val_as_str
784
819
  - :opt_name: menu_note_color
785
820
  :env_var: MDE_MENU_NOTE_COLOR
@@ -839,12 +874,12 @@
839
874
  - :opt_name: menu_opts_color
840
875
  :env_var: MDE_MENU_OPTS_COLOR
841
876
  :description: Color of menu opts
842
- :default: fg_rgbh_ff_00_ff
877
+ :default: fg_rgbh_d8_b3_ff
843
878
  :procname: val_as_str
844
879
  - :opt_name: menu_opts_set_color
845
880
  :env_var: MDE_MENU_OPTS_SET_COLOR
846
881
  :description: Color of menu opts
847
- :default: fg_rgbh_7f_00_ff
882
+ :default: fg_rgbh_c0_9a_ff
848
883
  :procname: val_as_str
849
884
  - :opt_name: menu_opts_set_format
850
885
  :env_var: MDE_MENU_OPTS_SET_FORMAT
@@ -865,17 +900,12 @@
865
900
  - :opt_name: menu_save_color
866
901
  :env_var: MDE_MENU_SAVE_COLOR
867
902
  :description: Color of Save link
868
- :default: fg_rgbh_ff_ff_20
869
- :procname: val_as_str
870
- - :opt_name: menu_table_rows_match
871
- :env_var: MDE_MENU_TABLE_ROWS_MATCH
872
- :description: Pattern for table rows
873
- :default: "^(?<indent>[ \\t]*)(?<line>(?<text>\\|.*?)(?<trailing>[ \\t]*))$"
903
+ :default: fg_rgbh_90_e0_90
874
904
  :procname: val_as_str
875
905
  - :opt_name: menu_task_color
876
906
  :env_var: MDE_MENU_TASK_COLOR
877
907
  :description: Color of menu task
878
- :default: fg_rgbh_ff_ff_ff
908
+ :default: fg_rgbh_40_40_40
879
909
  :procname: val_as_str
880
910
  - :opt_name: menu_task_format
881
911
  :env_var: MDE_MENU_TASK_FORMAT
@@ -894,9 +924,34 @@
894
924
  :procname: val_as_str
895
925
  - :opt_name: menu_ux_color
896
926
  :env_var: MDE_MENU_UX_COLOR
897
- :description: Color of menu ux
927
+ :description: Default color of menu ux
898
928
  :default: fg_rgbh_df_c0_df
899
929
  :procname: val_as_str
930
+ - :opt_name: menu_ux_color_allow
931
+ :env_var: MDE_MENU_UX_COLOR_ALLOW
932
+ :description: Color of menu ux when it is allow
933
+ :default: fg_rgbh_90_e0_90
934
+ :procname: val_as_str
935
+ - :opt_name: menu_ux_color_echo
936
+ :env_var: MDE_MENU_UX_COLOR_ECHO
937
+ :description: Color of menu ux when it is echo
938
+ :default: fg_rgbh_87_ce_eb
939
+ :procname: val_as_str
940
+ - :opt_name: menu_ux_color_edit
941
+ :env_var: MDE_MENU_UX_COLOR_EDIT
942
+ :description: Color of menu ux when it is edit
943
+ :default: fg_rgbh_ff_b3_66
944
+ :procname: val_as_str
945
+ - :opt_name: menu_ux_color_exec
946
+ :env_var: MDE_MENU_UX_COLOR_EXEC
947
+ :description: Color of menu ux when it is exec
948
+ :default: fg_rgbh_ff_6b_6b
949
+ :procname: val_as_str
950
+ - :opt_name: menu_ux_color_readonly
951
+ :env_var: MDE_MENU_UX_COLOR_READONLY
952
+ :description: Color of menu ux when it is read-only
953
+ :default: fg_rgbh_c0_c0_c0
954
+ :procname: val_as_str
900
955
  - :opt_name: menu_ux_row_format
901
956
  :env_var: MDE_MENU_UX_ROW_FORMAT
902
957
  :description: Format for UX row
@@ -905,12 +960,12 @@
905
960
  - :opt_name: menu_vars_color
906
961
  :env_var: MDE_MENU_VARS_COLOR
907
962
  :description: Color of menu vars
908
- :default: fg_rgbh_ff_a0_ff
963
+ :default: fg_rgbh_d8_b3_ff
909
964
  :procname: val_as_str
910
965
  - :opt_name: menu_vars_set_color
911
966
  :env_var: MDE_MENU_VARS_SET_COLOR
912
967
  :description: Color of menu vars
913
- :default: fg_rgbh_00_ff_ff
968
+ :default: fg_rgbh_a0_e6_e6
914
969
  :procname: val_as_str
915
970
  - :opt_name: menu_vars_set_format
916
971
  :env_var: MDE_MENU_VARS_SET_FORMAT
@@ -1000,12 +1055,12 @@
1000
1055
  - :opt_name: output_execution_label_name_color
1001
1056
  :env_var: MDE_OUTPUT_EXECUTION_LABEL_NAME_COLOR
1002
1057
  :description: Color of output_execution_label_name
1003
- :default: fg_rgbh_00_ff_00
1058
+ :default: fg_rgbh_70_c0_70
1004
1059
  :procname: val_as_str
1005
1060
  - :opt_name: output_execution_label_value_color
1006
1061
  :env_var: MDE_OUTPUT_EXECUTION_LABEL_VALUE_COLOR
1007
1062
  :description: Color of output_execution_label_value
1008
- :default: fg_rgbh_00_ff_00
1063
+ :default: fg_rgbh_90_e0_90
1009
1064
  :procname: val_as_str
1010
1065
  - :opt_name: output_execution_report
1011
1066
  :env_var: MDE_OUTPUT_EXECUTION_REPORT
@@ -1082,7 +1137,7 @@
1082
1137
  - :opt_name: prompt_color_after_script_execution
1083
1138
  :env_var: MDE_PROMPT_COLOR_AFTER_SCRIPT_EXECUTION
1084
1139
  :description: Color of prompt after script execution
1085
- :default: fg_rgbh_00_ff_00
1140
+ :default: fg_rgbh_70_c0_70
1086
1141
  :procname: val_as_str
1087
1142
  - :opt_name: prompt_debounce
1088
1143
  :env_var: MDE_PROMPT_DEBOUNCE
@@ -1164,13 +1219,6 @@
1164
1219
 
1165
1220
  Choose a file:
1166
1221
  :procname: val_as_str
1167
- - :opt_name: prompt_select_output
1168
- :env_var: MDE_PROMPT_SELECT_OUTPUT
1169
- :default: |2-
1170
-
1171
- Choose a file:
1172
- :description: Prompt to select a saved file
1173
- :procname: val_as_str
1174
1222
  - :opt_name: prompt_ux_enter_a_value
1175
1223
  :env_var: MDE_PROMPT_UX_ENTER_A_VALUE
1176
1224
  :description: Prompt to enter a value for UX blocks
@@ -1223,6 +1271,11 @@
1223
1271
  - :opt_name: pwd
1224
1272
  :long_name: pwd
1225
1273
  :description: Print the gem's home directory
1274
+ - :opt_name: required_lines_with_source_comments
1275
+ :env_var: MDE_REQUIRED_LINES_WITH_SOURCE_COMMENTS
1276
+ :description: Add comments about source to blocks of required lines
1277
+ :default: false
1278
+ :procname: val_as_bool
1226
1279
  - :opt_name: run_last_script
1227
1280
  :long_name: run-last-script
1228
1281
  :description: Run most recently saved script
@@ -1311,10 +1364,15 @@
1311
1364
  :description: Screen width for document and interface. 0 to use the actual dimension.
1312
1365
  :default: 0
1313
1366
  :procname: val_as_int
1367
+ - :opt_name: script_comment_block_name_format
1368
+ :env_var: MDE_SCRIPT_COMMENT_BLOCK_NAME_FORMAT
1369
+ :description: format for block name in script comments
1370
+ :default: "%{block} %{time}"
1371
+ :procname: val_as_str
1314
1372
  - :opt_name: script_execution_frame_color
1315
1373
  :env_var: MDE_SCRIPT_EXECUTION_FRAME_COLOR
1316
1374
  :description: script_execution_frame_color
1317
- :default: fg_rgbh_00_ff_7f
1375
+ :default: fg_rgbh_80_d0_a0
1318
1376
  :procname: val_as_str
1319
1377
  - :opt_name: script_execution_head
1320
1378
  :env_var: MDE_SCRIPT_EXECUTION_HEAD
@@ -1331,7 +1389,7 @@
1331
1389
  - :opt_name: script_preview_frame_color
1332
1390
  :env_var: MDE_OUTPUT_DIVIDER_COLOR
1333
1391
  :description: Color of output divider
1334
- :default: fg_rgbh_7f_ff_00
1392
+ :default: fg_rgbh_a0_d0_80
1335
1393
  :procname: val_as_str
1336
1394
  - :opt_name: script_preview_head
1337
1395
  :env_var: MDE_SCRIPT_PREVIEW_HEAD
@@ -1440,10 +1498,36 @@
1440
1498
  :default:
1441
1499
  - fg_bg_rgbh_cf_cf_cf_14_18_1c
1442
1500
  - fg_bg_rgbh_df_df_df_24_24_24
1501
+ - :opt_name: table_row_multi_line_delimiter
1502
+ :env_var: MDE_TABLE_ROW_MULTI_LINE_DELIMITER
1503
+ :description: Multi-line-table delimiter
1504
+ :default: "|"
1505
+ :procname: val_as_str
1506
+ - :opt_name: table_row_multi_line_match
1507
+ :env_var: MDE_TABLE_ROW_MULTI_LINE_MATCH
1508
+ :description: Pattern for multi-line-table rows
1509
+ :default: "^(?<indent>[ \\t]*)(?<line>(?<text>\\|.*?)(?<trailing>[ \\t]*))$"
1510
+ :procname: val_as_str
1511
+ - :opt_name: table_row_single_line_delimiter
1512
+ :env_var: MDE_TABLE_ROW_SINGLE_LINE_DELIMITER
1513
+ :description: Single-line-table delimiter
1514
+ :default: "!"
1515
+ :procname: val_as_str
1516
+ - :opt_name: table_row_single_line_match
1517
+ :env_var: MDE_TABLE_ROW_SINGLE_LINE_MATCH
1518
+ :description: Pattern for single-line-table rows
1519
+ :default: "^(?<indent>[ \\t]*)(?<line>(?<text>!.*?)(?<trailing>[ \\t]*))$"
1520
+ :procname: val_as_str
1443
1521
  - :opt_name: table_separator_line_color
1444
1522
  :env_var: MDE_TABLE_SEPARATOR_LINE_COLOR
1445
1523
  :description: Color for table separator line
1446
1524
  :default: fg_bg_rgbh_df_df_00_14_18_1c
1525
+ - :opt_name: tables_into_columns
1526
+ :env_var: MDE_TABLES_INTO_COLUMNS
1527
+ :description: Format tables as columns
1528
+ :arg_name: BOOL
1529
+ :default: true
1530
+ :procname: val_as_bool
1447
1531
  - :opt_name: user_must_approve
1448
1532
  :long_name: user-must-approve
1449
1533
  :short_name: q
@@ -1486,7 +1570,7 @@
1486
1570
  - :opt_name: warning_color
1487
1571
  :env_var: MDE_WARNING_COLOR
1488
1572
  :description: Color of warning message
1489
- :default: fg_rgbh_ff_7f_00
1573
+ :default: fg_rgbh_ff_b3_66
1490
1574
  :procname: val_as_str
1491
1575
  - :opt_name: warning_format
1492
1576
  :env_var: MDE_WARNING_FORMAT
data/lib/string_util.rb CHANGED
@@ -29,3 +29,83 @@ class String
29
29
  end
30
30
  end
31
31
  end
32
+
33
+ # String.delete_even_chars / String.delete_even_chars!
34
+ #
35
+ # Class methods that remove the 2nd, 4th, 6th, ... characters from a string.
36
+ #
37
+ # Behavior
38
+ # - Operates on Unicode grapheme clusters via /\X/ to avoid splitting emoji
39
+ # and combining sequences—“user-visible characters” are treated as units.
40
+ # - .delete_even_chars(str) returns a new string consisting of the 1st, 3rd,
41
+ # 5th, ... clusters from +str+.
42
+ # - .delete_even_chars!(str) modifies +str+ in place using #replace and
43
+ # returns it (raises FrozenError if +str+ is frozen).
44
+ #
45
+ # Examples
46
+ # String.delete_even_chars("abcdef") # => "ace"
47
+ # String.delete_even_chars("áb̂c̆") # keeps 1st, 3rd, ... clusters intact
48
+ # s = "👨‍👩‍👧‍👦🙂x"; String.delete_even_chars!(s) # modifies s
49
+ #
50
+ class String
51
+ def delete_even_chars
52
+ clusters = scan(/\X/)
53
+ return dup if clusters.length <= 1
54
+
55
+ clusters.each_with_index
56
+ .select { |_, i| i.even? } # keep 1st, 3rd, 5th... (0-based even)
57
+ .map(&:first)
58
+ .join
59
+ end
60
+
61
+ def delete_even_chars!
62
+ replace(delete_even_chars)
63
+ end
64
+ end
65
+
66
+ # String#sort_chars / String#sort_chars!
67
+ #
68
+ # Adds methods to order a string's user-visible characters (Unicode grapheme
69
+ # clusters) and return the joined result.
70
+ #
71
+ # Behavior
72
+ # - Sorts by Ruby’s default ordering of the grapheme cluster strings.
73
+ # - Preserves emoji and combining sequences by splitting on /\X/.
74
+ # - Optional case-insensitive key and reverse ordering.
75
+ # - Optional custom comparator block; if given, it takes precedence.
76
+ #
77
+ # API
78
+ # String#sort_chars(reverse: false, casefold: false) { |a, b| ... } -> String
79
+ # String#sort_chars!(reverse: false, casefold: false) { |a, b| ... } -> self
80
+ #
81
+ # Examples
82
+ # "cba".sort_chars #=> "abc"
83
+ # "Baß".sort_chars(casefold: true) #=> "aBß"
84
+ # "👩‍💻🚀a".sort_chars #=> "a👩‍💻🚀" (clusters kept intact)
85
+ # "bca".sort_chars { |a,b| b <=> a } #=> "cba" (custom comparator)
86
+ #
87
+ # Notes
88
+ # - For locale-aware collation, integrate a collator and use the block form.
89
+ #
90
+ class String
91
+ def sort_chars(reverse: false, casefold: false, &block)
92
+ clusters = scan(/\X/)
93
+ return self if clusters.length <= 1
94
+
95
+ sorted =
96
+ if block
97
+ clusters.sort(&block)
98
+ elsif casefold
99
+ clusters.sort_by(&:downcase)
100
+ else
101
+ clusters.sort
102
+ end
103
+
104
+ sorted.reverse! if reverse
105
+ sorted.join
106
+ end
107
+
108
+ def sort_chars!(reverse: false, casefold: false, &block)
109
+ replace(sort_chars(reverse: reverse, casefold: casefold, &block))
110
+ end
111
+ end