markdown_exec 2.1.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/examples/indent.md CHANGED
@@ -1,4 +1,42 @@
1
- This document demonstrates content is indented to match the source.
1
+ # This document demonstrates the indentation of blocks and text
2
+
3
+ Indentation is either leading spaces or tabs.
4
+ Tabs are interpreted as 4 spaces.
5
+
6
+ ## Related MDE options
7
+ fenced_start_and_end_regex | Matches the start and end of a fenced code block
8
+ fenced_start_extended_regex | Match the start of a fenced block
9
+ heading1_match | MDE_HEADING1_MATCH
10
+ heading2_match | MDE_HEADING2_MATCH
11
+ heading3_match | MDE_HEADING3_MATCH
12
+ menu_divider_match | Pattern for topics/dividers in block selection menu
13
+ menu_note_match | Pattern for notes in block selection menu
14
+ menu_task_match | Pattern for tasks
15
+
16
+ ::: Flush divider, text, block, and comment
17
+ Text
18
+ ```bash
19
+ echo 'This is a very long string to force line wrapping in the interface.'
20
+ # comment indented 1 space
21
+ ```
22
+ / Comment
23
+
24
+ ::: Indented (2 spaces) text, block, and comment
25
+ Text
26
+ ```bash
27
+ echo 'This is a very long string to force line wrapping in the interface.'
28
+ # comment indented 1 space
29
+ ```
30
+ / Comment
31
+
32
+ ::: Indented (1 tab) text, block, and comment
33
+ Text
34
+ ```bash
35
+ echo 'This is a very long string to force line wrapping in the interface.'
36
+ # comment indented 1 space
37
+ ```
38
+ / Comment
39
+
2
40
 
3
41
  This is a concise guide for using Bash commands to find and list recent files in a Linux system. The commands are safe to use and can help you quickly locate recently modified or accessed files.
4
42
 
@@ -45,24 +83,27 @@ These commands provide a basic way to manage and track file modifications and ac
45
83
 
46
84
  ```link :Link1
47
85
  ```
48
-
86
+ ::: Indented (4 spaces) Link block
49
87
  ```link :Link2
50
88
  ```
51
89
 
52
90
  ```opts :Opts1
53
91
  ```
54
92
 
93
+ ::: Indented (4 spaces) Opts block
55
94
  ```opts :Opts2
56
95
  ```
57
96
 
58
97
  ```port :Port1
59
98
  ```
60
99
 
100
+ ::: Indented (4 spaces) Port block
61
101
  ```port :Port2
62
102
  ```
63
103
 
64
104
  ```vars :Vars1
65
105
  ```
66
106
 
107
+ ::: Indented (4 spaces) Vars block
67
108
  ```vars :Vars2
68
109
  ```
@@ -0,0 +1,5 @@
1
+ ## Demonstrate failing due to a missing block
2
+ A missing block triggers an error.
3
+ ```link
4
+ block: (a_missing_block)
5
+ ```
@@ -0,0 +1,59 @@
1
+ ::: Load file into inherited lines
2
+ Load (do not evaluate) and append to inherited lines.
3
+ ```link :load1
4
+ load: examples/load1.sh
5
+ ```
6
+ Load, evaluate, and append output to inherited lines.
7
+ ```link :load2_eval
8
+ load: examples/load2.sh
9
+ eval: true
10
+ ```
11
+
12
+ ::: Load file into inherited lines and switch document
13
+ Load (do not evaluate) and append to inherited lines and switch document.
14
+ ```link :load_from_file_link_and_show
15
+ block: show_vars
16
+ file: examples/linked_show.md
17
+ load: examples/load1.sh
18
+ ```
19
+
20
+ ::: Save and Load
21
+ Save inherited lines to a file.
22
+ ```link :save1
23
+ save: tmp/save1.sh
24
+ ```
25
+ Load inherited lines from a file.
26
+ Subsequently, run the `display_variables` block.
27
+ ```link :load_saved
28
+ load: tmp/save1.sh
29
+ block: display_variables
30
+ ```
31
+ Display variables ALPHA, var1, var2
32
+ ```bash :display_variables
33
+ source bin/colorize_env_vars.sh
34
+ colorize_env_vars '' ALPHA var1 var2
35
+ ```
36
+
37
+ ::: Load file matching glob pattern into inherited lines
38
+ Load (do not evaluate) and append to inherited lines.
39
+ ```link :load_glob_load1*
40
+ load: examples/load1*.sh
41
+ ```
42
+ ```link :load_glob_load*
43
+ load: examples/load*.sh
44
+ ```
45
+ ```link :load_glob_fail
46
+ load: examples/fail*
47
+ ```
48
+ ```link :load_glob_with_format
49
+ load: "%{home}/examples/load*.sh"
50
+ ```
51
+ ```link :save_glob_load*
52
+ save: examples/*.sh
53
+ ```
54
+ ```link :save_glob_*
55
+ save: examples/*.sh
56
+ ```
57
+ ```link :load_glob_*
58
+ load: examples/*.sh
59
+ ```
@@ -0,0 +1,56 @@
1
+ # Demonstrate link blocks set variables
2
+ ```opts :(document_options)
3
+ execute_in_own_window: false
4
+ menu_with_inherited_lines: true
5
+ output_execution_report: false
6
+ output_execution_summary: false
7
+ pause_after_script_execution: true
8
+ ```
9
+
10
+ ## Demonstrate a link block that sets a variable
11
+ ::: Click below to trigger. If it prints "VARIABLE1: 1", the Link block was processed.
12
+ The hidden block "(print-VARIABLE1)" is required below. It prints variable "VARIABLE1".
13
+ ```bash :(print-VARIABLE1)
14
+ source bin/colorize_env_vars.sh
15
+ colorize_env_vars '' VARIABLE1
16
+ ```
17
+ The block sets VARIABLE1 and requires hidden block "(print-VARIABLE1)".
18
+ For each environment variable in `vars`, append an inherited line that assigns the variable the specified value.
19
+ ```link
20
+ block: (print-VARIABLE1)
21
+ vars:
22
+ VARIABLE1: 1
23
+ ```
24
+
25
+ ## Demonstrate a link block that requires a shell block that sets a variable
26
+ This block "[bash_set_to_3]" is required below. It sets the variable "ALPHA".
27
+ ```bash :[bash_set_to_3]
28
+ ALPHA=3
29
+ ```
30
+ ::: Click below to trigger. If it prints "ALPHA: 3", the Link block was processed.
31
+ These blocks require the *code* of the named shell block.
32
+ ```link +[bash_set_to_3]
33
+ block: "(display_variable_ALPHA)"
34
+ ```
35
+ ```link +[bash_set_to_3]
36
+ next_block: "(display_variable_ALPHA)"
37
+ ```
38
+
39
+ This block "[bash_set_to_4]" is required below. It prints a command that sets the variable "ALPHA".
40
+ ```bash :[bash_set_to_4]
41
+ echo "ALPHA=4"
42
+ ```
43
+ ::: Click below to trigger. If it prints "ALPHA: 4", the Link block was processed.
44
+ These blocks require the *output* of the execution of the code in the named shell block.
45
+ ```link +[bash_set_to_4]
46
+ eval: true
47
+ block: "(display_variable_ALPHA)"
48
+ ```
49
+ ```link +[bash_set_to_4]
50
+ eval: true
51
+ next_block: "(display_variable_ALPHA)"
52
+ ```
53
+ ```bash :(display_variable_ALPHA)
54
+ source bin/colorize_env_vars.sh
55
+ colorize_env_vars '' ALPHA
56
+ ```
data/examples/linked.md CHANGED
@@ -6,38 +6,6 @@ pause_after_script_execution: false
6
6
  user_must_approve: false
7
7
  ```
8
8
 
9
- ```link :missing_block
10
- block: (display_variable)
11
- eval: true
12
- ```
13
- Block name with all chars.
14
- / !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
15
- / ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
16
- ```link :!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
17
- file: examples/linked2.md
18
- block: show_vars
19
- vars:
20
- page2_var_via_environment: for_page2_from_page1_via_current_environment
21
- ```
22
- ```link :¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
23
- file: examples/linked2.md
24
- block: show_vars
25
- vars:
26
- page2_var_via_environment: for_page2_from_page1_via_current_environment
27
- ```
28
- Block with no title is displayed correctly in a single line (for a Bash comment).
29
- ```link
30
- file: examples/linked2.md
31
- block: show_vars
32
- vars:
33
- page2_var_via_environment: for_page2_from_page1_via_current_environment
34
- ```
35
- Spaces in variable value are unchanged.
36
- ```link :link_with_vars_with_spaces
37
- vars:
38
- test: "1 2 3"
39
- ```
40
-
41
9
  ::: Set variable ALPHA in a Vars block
42
10
  For each environment variable named in block,
43
11
  append an inherited line that assigns the variable the specified value.
@@ -45,16 +13,6 @@ For each environment variable named in block,
45
13
  ALPHA: 1
46
14
  ```
47
15
 
48
- ::: Set variable ALPHA in a Link block
49
- For each environment variable in `vars`,
50
- append an inherited line that assigns the variable the specified value.
51
- Subsequently, run the `display_variable_ALPHA` block.
52
- ```link :[set_ALPHA_to_2_via_link_block_and_display]
53
- block: display_variable_ALPHA
54
- vars:
55
- ALPHA: 2
56
- ```
57
-
58
16
  Make the code in the required block `(bash_set_to_3)` into inherited lines.
59
17
  Subsequently, run the `display_variable_ALPHA` block.
60
18
  ```bash :(bash_set_to_3)
@@ -82,42 +40,6 @@ echo The current value of environment variable ALPHA is now:
82
40
  colorize_env_vars '' ALPHA
83
41
  ```
84
42
 
85
- ::: Load file into inherited lines
86
- Load (do not evaluate) and append to inherited lines.
87
- ```link :load1
88
- load: examples/load1.sh
89
- ```
90
- Load, evaluate, and append output to inherited lines.
91
- ```link :load2_eval
92
- load: examples/load2.sh
93
- eval: true
94
- ```
95
-
96
- ::: Load file into inherited lines and switch document
97
- Load (do not evaluate) and append to inherited lines and switch document.
98
- ```link :load_from_file_link_and_show
99
- block: show_vars
100
- file: examples/linked_show.md
101
- load: examples/load1.sh
102
- ```
103
-
104
- ::: Save and Load
105
- Save inherited lines to a file.
106
- ```link :save1
107
- save: tmp/save1.sh
108
- ```
109
- Load inherited lines from a file.
110
- Subsequently, run the `display_variables` block.
111
- ```link :load_saved
112
- load: tmp/save1.sh
113
- block: display_variables
114
- ```
115
- Display variables ALPHA, var1, var2
116
- ```bash :display_variables
117
- source bin/colorize_env_vars.sh
118
- colorize_env_vars '' ALPHA var1 var2
119
- ```
120
-
121
43
  Execute a script requiring input from the user.
122
44
  Save the output setting TIMESTAMP into inherited lines.
123
45
  Subsequently, run the `display_TIMESTAMP` block.
@@ -141,26 +63,9 @@ source bin/colorize_env_vars.sh
141
63
  colorize_env_vars '' TIMESTAMP
142
64
  ```
143
65
 
144
- ::: Load file matching glob pattern into inherited lines
145
- Load (do not evaluate) and append to inherited lines.
146
- ```link :load_glob_load1*
147
- load: examples/load1*.sh
148
- ```
149
- ```link :load_glob_load*
150
- load: examples/load*.sh
151
- ```
152
- ```link :load_glob_fail
153
- load: examples/fail*
154
- ```
155
- ```link :load_glob_with_format
156
- load: "%{home}/examples/load*.sh"
157
- ```
158
- ```link :save_glob_load*
159
- save: examples/*.sh
160
- ```
161
- ```link :save_glob_*
162
- save: examples/*.sh
163
- ```
164
- ```link :load_glob_*
165
- load: examples/*.sh
166
- ```
66
+ ## Values
67
+ Spaces in variable value are unchanged.
68
+ ```link :link_with_vars_with_spaces
69
+ vars:
70
+ test: "1 2 3"
71
+ ```
@@ -0,0 +1,28 @@
1
+ # Demonstrate requiring blocks
2
+ ```opts :(document_options) +(custom) +[custom]
3
+ menu_divider_color: red # color to indicate failure
4
+ ```
5
+ ```opts :(custom)
6
+ menu_divider_color: green # color to indicate success
7
+ ```
8
+ ## Automatic documents options
9
+ ::: If this text is green, the required Opts block was processed; if this text is red, the required Opts block was NOT processed hidden, name: "(custom)"
10
+
11
+ ## Click this named block to test
12
+ ::: Click below to trigger. If this text starts with "+++", the required Opts block was processed; name: "custom"
13
+ ```opts :custom
14
+ menu_divider_format: "+++ %{line}" # format to indicate success
15
+ ```
16
+
17
+ ## Click this nicknamed block to test
18
+ ::: Click below to trigger. If this text starts with "!!!", the Opts block was processed; name: "[custom]"
19
+ This block has a nickname "[custom]". It is executable.
20
+ ```opts :[custom]
21
+ menu_divider_format: "!!! %{line}" # format to indicate success
22
+ ```
23
+
24
+ ## Click this unnamed block to test
25
+ ::: Click below to trigger. If this text starts with "@@@", the required Opts block was processed; unnamed
26
+ ```opts
27
+ menu_divider_format: "@@@ %{line}" # format to indicate success
28
+ ```
@@ -1,12 +1,11 @@
1
1
  # Demo variable porting
2
2
 
3
- ::: This block requires the Port block and displays the value.
4
- ::: The Port block contributes the variable VAULT to the generated script.
5
-
6
- ```bash :show +(vault)
7
- : ${VAULT:=This variable has not been set.}
8
- source bin/colorize_env_vars.sh
9
- colorize_env_vars '' VAULT
3
+ ```opts :(document_options)
4
+ dump_inherited_lines: true
5
+ execute_in_own_window: false
6
+ output_execution_report: false
7
+ output_execution_summary: false
8
+ pause_after_script_execution: true
10
9
  ```
11
10
 
12
11
  ::: Set the VAULT value in memory.
@@ -16,8 +15,18 @@ colorize_env_vars '' VAULT
16
15
  VAULT: This variable was set by the "set" block.
17
16
  ```
18
17
 
19
- ::: There is an invisible Port block that saves current/live environment variable values into the generated script.
18
+ ::: This is a Port block that saves current/live environment variable values into the generated script.
20
19
 
21
- ```port :(vault)
20
+ ```port :[vault]
22
21
  VAULT
22
+ VAULT2
23
+ ```
24
+
25
+ ::: This block requires the Port block and displays the value.
26
+ ::: The Port block contributes the variable VAULT to the generated script.
27
+
28
+ ```bash :show +[vault]
29
+ : ${VAULT:=This variable has not been set.}
30
+ source bin/colorize_env_vars.sh
31
+ colorize_env_vars '' VAULT
23
32
  ```
data/examples/save.md CHANGED
@@ -1,7 +1,79 @@
1
- ```opts :(document_options)
2
- execute_in_own_window: false
3
- save_execution_output: true
1
+ # Demonstrate custom file names
2
+ ```opts :(document_options) +[custom]
3
+ pause_after_script_execution: true # for interactive demos
4
+ save_executed_script: true # demonstrate saved scripts
5
+ save_execution_output: true # demonstrate saved output
4
6
  ```
5
- ```bash :test
7
+
8
+ ## Related MDE options
9
+ save_executed_script | Whether to save an executed script
10
+ save_execution_output | Save standard output of the executed script
11
+ saved_asset_format | Format for script and log file names
12
+ saved_asset_match | Regexp for script and log file names
13
+ saved_history_format | Format for each row displayed in history
14
+
15
+ ### Add "DOMAIN" shell expansion. Include a wildcard as default to allow for matching when undefined.
16
+ ::: Default
17
+ ```opts
18
+ saved_asset_format: "%{prefix}%{join}%{time}%{join}%{filename}%{join}%{mark}%{join}%{blockname}%{join}%{exts}"
19
+ ```
20
+ ::: Custom
21
+ ```opts :[custom]
22
+ # Add "DOMAIN" shell expansion. Include a wildcard as default to allow for matching when undefined.
23
+ saved_asset_format: "%{prefix}%{join}${DOMAIN:-*}%{join}%{time}%{join}%{filename}%{join}%{mark}%{join}%{blockname}%{join}%{exts}"
24
+ ```
25
+ ### Add "domain" capture group
26
+ ::: Default
27
+ ```opts
28
+ saved_asset_match: "^(?<prefix>.+)(?<join>_)(?<time>[0-9\\-]+)\\g'join'(?<filename>.+)\\g'join'(?<mark>~)\\g'join'(?<blockname>.+)\\g'join'(?<exts>\\..+)$"
29
+ ```
30
+ ::: Custom
31
+ ```opts :[custom]
32
+ # Add "domain" capture group
33
+ saved_asset_match: "^(?<prefix>.+)(?<join>_)(?<domain>.*)\\g'join'(?<time>[0-9\\-]+)\\g'join'(?<filename>.+)\\g'join'(?<mark>~)\\g'join'(?<blockname>.+)\\g'join'(?<exts>\\..+)$"
34
+ ```
35
+ ### Add "domain" to history display
36
+ ::: Default
37
+ ```opts
38
+ saved_history_format: "%{time} %{blockname} %{exts}"
39
+ ```
40
+ ::: Custom
41
+ ```opts :[custom]
42
+ # Add "domain" to history display
43
+ saved_history_format: "%{domain} %{time} %{blockname} %{exts}"
44
+ ```
45
+
46
+ ## Append to Inherited Lines
47
+ ::: Load the DOMAIN variable.
48
+ 1. Set DOMAIN to "site.local"
49
+ ```vars
50
+ DOMAIN: site.local
51
+ ```
52
+
53
+ 2. Set DOMAIN to "site.remote"
54
+ ```vars
55
+ DOMAIN: site.remote
56
+ ```
57
+
58
+ - Notice how the history changes according to the current DOMAIN.
59
+
60
+ ## Saved files
61
+ ::: Run this command to generate files for the script and the output of the execution.
62
+ ```bash :test +(test2)
6
63
  echo "$(date -u)"
7
64
  ```
65
+ ```bash :(test2)
66
+ echo "$(date -u)"
67
+ ```
68
+ - Notice how the saved files increase by 2 with every execution.
69
+ ::: Test block with no name
70
+ ```bash
71
+ sleep 1
72
+ echo $(date -u)
73
+ sleep 2
74
+ echo $(date -u)
75
+ sleep 3
76
+ echo $(date -u)
77
+ sleep 4
78
+ echo $(date -u)
79
+ ```
@@ -0,0 +1,38 @@
1
+ ```opts :(document_options)
2
+ execute_in_own_window: false
3
+ output_execution_report: false
4
+ output_execution_summary: false
5
+ pause_after_script_execution: true
6
+ ```
7
+ The hidden block "(defaults)" sets the environment variable VAULT to "default" if it is unset.
8
+ ```bash :(defaults)
9
+ : ${VAULT:=default}
10
+ ```
11
+
12
+ ::: Click below to trigger. If it prints "VAULT: default", the shell block was processed.
13
+ The named block prints the environment variable VAULT. It requires hidden block "(defaults)" before printing.
14
+ ```bash :show_vars +(defaults)
15
+ source bin/colorize_env_vars.sh
16
+ colorize_env_vars '' VAULT
17
+ ```
18
+
19
+ The block sets the environment variable VAULT to "11".
20
+ When clicked, it adds the variable to the inherited code. It does not output.
21
+ ```vars :[set_vault_11]
22
+ VAULT: 11
23
+ ```
24
+
25
+ # DOES NOT WORK 2024-07-20
26
+ ## This does not evaluate the shell block.
27
+ ::: Click below to trigger. If it prints "VAULT: 22", the shell block was processed.
28
+ The block sets the environment variable VAULT to "22". It requires block "show_vars". Notice block "show_vars" is called after the variable is set.
29
+ ```vars :[set_with_show] +show_vars
30
+ VAULT: 22
31
+ ```
32
+
33
+ ## This outputs the value before the variable is set.
34
+ The named block prints the environment variable VAULT. It requires block "set".
35
+ ```bash :show_with_set +[set_vault_11]
36
+ source bin/colorize_env_vars.sh
37
+ colorize_env_vars '' VAULT
38
+ ```
data/lib/colorize.rb CHANGED
@@ -101,4 +101,17 @@ class String
101
101
  def red; fg_rgbh_FF_00_00; end
102
102
  def violet; fg_rgbh_94_00_D3; end
103
103
  def yellow; fg_rgbh_FF_FF_00; end
104
+
105
+ # graphics modes
106
+ def bold; "\033[1m#{self}\033[22m"; end
107
+ def bold_italic; "\033[1m\033[3m#{self}\033[22m\033[23m"; end
108
+ def bold_underline; "\033[1m\033[4m#{self}\033[22m\033[24m"; end
109
+ def dim; "\033[2m#{self}\033[22m"; end
110
+ def italic; "\033[3m#{self}\033[23m"; end
111
+ def underline; "\033[4m#{self}\033[24m"; end
112
+ def underline_italic; "\033[4m\033[3m#{self}\033[23m\033[24m"; end
113
+ def blinking; "\033[5m#{self}\033[25m"; end
114
+ def inverse; "\033[7m#{self}\033[27m"; end
115
+ def hidden; "\033[8m#{self}\033[28m"; end
116
+ def strikethrough; "\033[9m#{self}\033[29m"; end
104
117
  end
data/lib/constants.rb CHANGED
@@ -64,7 +64,7 @@ end
64
64
 
65
65
  # selected block and subsequent menu state
66
66
  #
67
- SelectedBlockMenuState = Struct.new(:block, :state)
67
+ SelectedBlockMenuState = Struct.new(:block, :source, :state)
68
68
 
69
69
  SHELL_COLOR_OPTIONS = {
70
70
  BlockType::BASH => :menu_bash_color,