markdown_exec 1.8.4 → 1.8.6
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.
- checksums.yaml +4 -4
- data/.pryrc +1 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile +2 -3
- data/Gemfile.lock +17 -6
- data/bin/bmde +1 -103
- data/bin/tab_completion.sh +15 -3
- data/examples/linked.md +52 -0
- data/examples/linked1.md +11 -1
- data/examples/linked2.md +5 -1
- data/examples/opts.md +23 -3
- data/lib/ansi_formatter.rb +0 -41
- data/lib/cached_nested_file_reader.rb +1 -7
- data/lib/constants.rb +17 -0
- data/lib/directory_searcher.rb +41 -5
- data/lib/filter.rb +2 -21
- data/lib/hash_delegator.rb +300 -177
- data/lib/link_history.rb +5 -2
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/markdown_exec.rb +20 -9
- data/lib/menu.src.yml +39 -12
- data/lib/menu.yml +37 -13
- data/lib/regexp_replacer.rb +58 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44e42ccdbdf5eed7e6ee36add8a5dcdcfe62d6cd3fb6fd531daf960c6ce7c9b7
|
4
|
+
data.tar.gz: 753076d46e44f5d17698be53a0421212d8f2c804368f9737591dc92a7d5457d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d952fcfafed40a5e3949783760aec570448de48293fdae536b5386b95d8080d2c9c41f0149861686d2fd4985a59ebea6794e7953d7b4dc1185340d790e68a2
|
7
|
+
data.tar.gz: 9db0c523154e32c3094046084594564c9114fbd2519f6ff5d9a8fcc5feb0d31b76dc3ccd1d6c4e2625507b81b4f70f9b6fdf31e250d132a5fdf2fa54d3cb8c77
|
data/.pryrc
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [1.8.6] - 2023-12-25
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Default path for find command
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- Refactor command-line processing
|
12
|
+
|
13
|
+
## [1.8.5] - 2023-12-22
|
14
|
+
|
15
|
+
### Added
|
16
|
+
|
17
|
+
- "eval" key for link block type to compute lines to append to the inherited state.
|
18
|
+
- Options for dumping data associated with the menu or state.
|
19
|
+
- Debug and irb gems.
|
20
|
+
|
3
21
|
## [1.8.4] - 2023-12-15
|
4
22
|
|
5
23
|
### Added
|
data/Gemfile
CHANGED
@@ -7,7 +7,9 @@ source 'https://rubygems.org'
|
|
7
7
|
|
8
8
|
gemspec
|
9
9
|
gem 'clipboard'
|
10
|
+
gem 'debug'
|
10
11
|
gem 'erb'
|
12
|
+
gem 'irb', '>= 1.8.0'
|
11
13
|
gem 'mocha', require: false
|
12
14
|
gem 'minitest', require: false
|
13
15
|
gem 'pry-nav'
|
@@ -22,7 +24,4 @@ gem 'rubocop-rake', require: false
|
|
22
24
|
gem 'rubocop-rspec', require: false
|
23
25
|
gem 'shellwords'
|
24
26
|
gem 'uri'
|
25
|
-
|
26
|
-
gem 'visual_call_graph'
|
27
|
-
|
28
27
|
gem 'yaml', '~> 0.2.1'
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
markdown_exec (1.8.
|
4
|
+
markdown_exec (1.8.6)
|
5
5
|
clipboard (~> 1.3.6)
|
6
6
|
open3 (~> 0.1.1)
|
7
7
|
optparse (~> 0.1.1)
|
@@ -39,6 +39,9 @@ GEM
|
|
39
39
|
coderay (1.1.3)
|
40
40
|
concurrent-ruby (1.2.2)
|
41
41
|
crass (1.0.6)
|
42
|
+
debug (1.9.0)
|
43
|
+
irb (~> 1.10)
|
44
|
+
reline (>= 0.3.8)
|
42
45
|
debug_inspector (1.1.0)
|
43
46
|
diff-lcs (1.5.0)
|
44
47
|
erb (4.0.3)
|
@@ -46,6 +49,10 @@ GEM
|
|
46
49
|
erubi (1.12.0)
|
47
50
|
i18n (1.14.1)
|
48
51
|
concurrent-ruby (~> 1.0)
|
52
|
+
io-console (0.7.1)
|
53
|
+
irb (1.10.1)
|
54
|
+
rdoc
|
55
|
+
reline (>= 0.3.8)
|
49
56
|
json (2.6.3)
|
50
57
|
kwalify (0.7.2)
|
51
58
|
language_server-protocol (3.17.0.3)
|
@@ -74,6 +81,8 @@ GEM
|
|
74
81
|
pry-stack_explorer (0.6.1)
|
75
82
|
binding_of_caller (~> 1.0)
|
76
83
|
pry (~> 0.13)
|
84
|
+
psych (5.1.1.1)
|
85
|
+
stringio
|
77
86
|
racc (1.7.1)
|
78
87
|
rack (2.2.8)
|
79
88
|
rack-test (2.1.0)
|
@@ -94,11 +103,15 @@ GEM
|
|
94
103
|
zeitwerk (~> 2.5)
|
95
104
|
rainbow (3.1.1)
|
96
105
|
rake (13.0.6)
|
106
|
+
rdoc (6.6.2)
|
107
|
+
psych (>= 4.0.0)
|
97
108
|
reek (6.1.4)
|
98
109
|
kwalify (~> 0.7.0)
|
99
110
|
parser (~> 3.2.0)
|
100
111
|
rainbow (>= 2.0, < 4.0)
|
101
112
|
regexp_parser (2.8.1)
|
113
|
+
reline (0.4.1)
|
114
|
+
io-console (~> 0.5)
|
102
115
|
rexml (3.2.6)
|
103
116
|
rspec (3.12.0)
|
104
117
|
rspec-core (~> 3.12.0)
|
@@ -139,11 +152,10 @@ GEM
|
|
139
152
|
rubocop (~> 1.33)
|
140
153
|
rubocop-capybara (~> 2.17)
|
141
154
|
rubocop-factory_bot (~> 2.22)
|
142
|
-
ruby-graphviz (1.2.5)
|
143
|
-
rexml
|
144
155
|
ruby-progressbar (1.13.0)
|
145
156
|
ruby2_keywords (0.0.5)
|
146
157
|
shellwords (0.1.0)
|
158
|
+
stringio (3.1.0)
|
147
159
|
thor (1.2.2)
|
148
160
|
tty-color (0.6.0)
|
149
161
|
tty-cursor (0.7.1)
|
@@ -159,8 +171,6 @@ GEM
|
|
159
171
|
concurrent-ruby (~> 1.0)
|
160
172
|
unicode-display_width (2.5.0)
|
161
173
|
uri (0.12.2)
|
162
|
-
visual_call_graph (0.4.0)
|
163
|
-
ruby-graphviz (~> 1.2, >= 1.2.0)
|
164
174
|
wisper (2.0.1)
|
165
175
|
yaml (0.2.1)
|
166
176
|
zeitwerk (2.6.12)
|
@@ -170,7 +180,9 @@ PLATFORMS
|
|
170
180
|
|
171
181
|
DEPENDENCIES
|
172
182
|
clipboard
|
183
|
+
debug
|
173
184
|
erb
|
185
|
+
irb (>= 1.8.0)
|
174
186
|
markdown_exec!
|
175
187
|
minitest
|
176
188
|
mocha
|
@@ -186,7 +198,6 @@ DEPENDENCIES
|
|
186
198
|
rubocop-rspec
|
187
199
|
shellwords
|
188
200
|
uri
|
189
|
-
visual_call_graph
|
190
201
|
yaml (~> 0.2.1)
|
191
202
|
|
192
203
|
BUNDLED WITH
|
data/bin/bmde
CHANGED
@@ -8,106 +8,4 @@ Bundler.require(:default)
|
|
8
8
|
|
9
9
|
require_relative '../lib/markdown_exec'
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
MarkdownExec::MarkParse.new.run
|
14
|
-
else
|
15
|
-
|
16
|
-
def trace_event_properties(tp)
|
17
|
-
# TracePoint.new(:call, :return, :c_call, :c_return, :raise) do |tp|
|
18
|
-
# puts "Event information:"
|
19
|
-
# puts "Event type: #{tp.event}"
|
20
|
-
# puts "File: #{tp.path}"
|
21
|
-
# puts "Line: #{tp.lineno}"
|
22
|
-
# puts "Defined class: #{tp.defined_class}"
|
23
|
-
# puts "Method ID: #{tp.method_id}"
|
24
|
-
# puts "Class method ID: #{tp.defined_class} #{tp.method_id}"
|
25
|
-
# puts "Binding: #{tp.binding.inspect}"
|
26
|
-
# puts "Return value: #{tp.return_value.inspect}" if [:return, :c_return].include?(tp.event)
|
27
|
-
puts "Raised exception: #{tp.raised_exception.inspect}" if tp.event == :raise
|
28
|
-
# puts "---------------------------------"
|
29
|
-
# binding.pry
|
30
|
-
# print format("\n%-20.20s %-20.20s % 5.5d %20s %s", tp.method_id, tp.defined_class, tp.lineno, tp.path.split('/').last, caller[1].split('/').last)
|
31
|
-
|
32
|
-
# print format("\n%-20.20s %-30.30s %s", tp.method_id, tp.defined_class, caller[1].split('/').last.split(':', 3)[0..1].join(':'))
|
33
|
-
# print __LINE__, '.'
|
34
|
-
return if %i[method_missing present?].include?(tp.method_id)
|
35
|
-
return unless %r(/markdown_exec/lib/) =~ caller[1]
|
36
|
-
|
37
|
-
if [:return, :c_return].include?(tp.event)
|
38
|
-
print format("%1.1s %-20.20s %s\n", tp.event, tp.method_id, tp.return_value)
|
39
|
-
else
|
40
|
-
print format("%1.1s %-20.20s %-30.30s %20s\n", tp.event, tp.method_id, tp.defined_class, $~.post_match)
|
41
|
-
end
|
42
|
-
# end.enable
|
43
|
-
end
|
44
|
-
|
45
|
-
def start_trace(events = [:call])
|
46
|
-
trace = TracePoint.new(*events) do |tp|
|
47
|
-
trace_event_properties(tp)
|
48
|
-
end
|
49
|
-
|
50
|
-
trace.enable
|
51
|
-
yield
|
52
|
-
trace.disable
|
53
|
-
end
|
54
|
-
|
55
|
-
start_trace([:call, :return]) { MarkdownExec::MarkParse.new.run }
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
=begin
|
62
|
-
|
63
|
-
To filter what is traced, you can pass any of the following as events:
|
64
|
-
|
65
|
-
:line
|
66
|
-
execute an expression or statement on a new line
|
67
|
-
|
68
|
-
:class
|
69
|
-
start a class or module definition
|
70
|
-
|
71
|
-
:end
|
72
|
-
finish a class or module definition
|
73
|
-
|
74
|
-
:call
|
75
|
-
call a Ruby method
|
76
|
-
|
77
|
-
:return
|
78
|
-
return from a Ruby method
|
79
|
-
|
80
|
-
:c_call
|
81
|
-
call a C-language routine
|
82
|
-
|
83
|
-
:c_return
|
84
|
-
return from a C-language routine
|
85
|
-
|
86
|
-
:raise
|
87
|
-
raise an exception
|
88
|
-
|
89
|
-
:b_call
|
90
|
-
event hook at block entry
|
91
|
-
|
92
|
-
:b_return
|
93
|
-
event hook at block ending
|
94
|
-
|
95
|
-
:a_call
|
96
|
-
event hook at all calls (call, b_call, and c_call)
|
97
|
-
|
98
|
-
:a_return
|
99
|
-
event hook at all returns (return, b_return, and c_return)
|
100
|
-
|
101
|
-
:thread_begin
|
102
|
-
event hook at thread beginning
|
103
|
-
|
104
|
-
:thread_end
|
105
|
-
event hook at thread ending
|
106
|
-
|
107
|
-
:fiber_switch
|
108
|
-
event hook at fiber switch
|
109
|
-
|
110
|
-
:script_compiled
|
111
|
-
new Ruby code compiled (with eval, load or require)
|
112
|
-
|
113
|
-
=end
|
11
|
+
MarkdownExec::MarkParse.new.run
|
data/bin/tab_completion.sh
CHANGED
@@ -13,7 +13,7 @@ __filedirs_all()
|
|
13
13
|
}
|
14
14
|
|
15
15
|
_mde_echo_version() {
|
16
|
-
echo "1.8.
|
16
|
+
echo "1.8.6"
|
17
17
|
}
|
18
18
|
|
19
19
|
_mde() {
|
@@ -36,8 +36,12 @@ _mde() {
|
|
36
36
|
|
37
37
|
-d) COMPREPLY="0"; return 0 ;;
|
38
38
|
|
39
|
+
--dump-dump-delegate-object) COMPREPLY="0"; return 0 ;;
|
40
|
+
|
39
41
|
--dump-blocks-in-file) COMPREPLY="0"; return 0 ;;
|
40
42
|
|
43
|
+
--dump-dump-inherited-lines) COMPREPLY="0"; return 0 ;;
|
44
|
+
|
41
45
|
--dump-menu-blocks) COMPREPLY="0"; return 0 ;;
|
42
46
|
|
43
47
|
--dump-selected-block) COMPREPLY="0"; return 0 ;;
|
@@ -50,6 +54,8 @@ _mde() {
|
|
50
54
|
|
51
55
|
-?) COMPREPLY="''"; return 0 ;;
|
52
56
|
|
57
|
+
--find-path) COMPREPLY="''"; return 0 ;;
|
58
|
+
|
53
59
|
--how) COMPREPLY="''"; return 0 ;;
|
54
60
|
|
55
61
|
-?) COMPREPLY="''"; return 0 ;;
|
@@ -88,7 +94,7 @@ _mde() {
|
|
88
94
|
# present matching option names
|
89
95
|
#
|
90
96
|
if [[ ${cur} == -* ]] ; then
|
91
|
-
opts=("--block-name" "--config" "--debug" "--dump-blocks-in-file" "--dump-menu-blocks" "--dump-selected-block" "--exit" "--filename" "--find" "--help" "--how" "--list-blocks" "--list-count" "--list-default-env" "--list-default-yaml" "--list-docs" "--list-recent-output" "--list-recent-scripts" "--output-execution-summary" "--output-script" "--output-stdout" "--path" "--pwd" "--run-last-script" "--save-executed-script" "--save-execution-output" "--saved-script-folder" "--saved-stdout-folder" "--select-recent-output" "--select-recent-script" "--tab-completions" "--user-must-approve" "--version" "--display-level")
|
97
|
+
opts=("--block-name" "--config" "--debug" "--dump-dump-delegate-object" "--dump-blocks-in-file" "--dump-dump-inherited-lines" "--dump-menu-blocks" "--dump-selected-block" "--exit" "--filename" "--find" "--find-path" "--help" "--how" "--list-blocks" "--list-count" "--list-default-env" "--list-default-yaml" "--list-docs" "--list-recent-output" "--list-recent-scripts" "--output-execution-summary" "--output-script" "--output-stdout" "--path" "--pwd" "--run-last-script" "--save-executed-script" "--save-execution-output" "--saved-script-folder" "--saved-stdout-folder" "--select-recent-output" "--select-recent-script" "--tab-completions" "--user-must-approve" "--version" "--display-level")
|
92
98
|
COMPREPLY=( $(compgen -W "$(printf "'%s' " "${opts[@]}")" -- "${cur}") )
|
93
99
|
|
94
100
|
return 0
|
@@ -111,8 +117,12 @@ _mde() {
|
|
111
117
|
|
112
118
|
-d) COMPREPLY=".BOOL."; return 0 ;;
|
113
119
|
|
120
|
+
--dump-dump-delegate-object) COMPREPLY=".BOOL."; return 0 ;;
|
121
|
+
|
114
122
|
--dump-blocks-in-file) COMPREPLY=".BOOL."; return 0 ;;
|
115
123
|
|
124
|
+
--dump-dump-inherited-lines) COMPREPLY=".BOOL."; return 0 ;;
|
125
|
+
|
116
126
|
--dump-menu-blocks) COMPREPLY=".BOOL."; return 0 ;;
|
117
127
|
|
118
128
|
--dump-selected-block) COMPREPLY=".BOOL."; return 0 ;;
|
@@ -125,6 +135,8 @@ _mde() {
|
|
125
135
|
|
126
136
|
-?) COMPREPLY=".FIND."; return 0 ;;
|
127
137
|
|
138
|
+
--find-path) COMPREPLY=".FIND_PATH."; return 0 ;;
|
139
|
+
|
128
140
|
--how) COMPREPLY=".HOW."; return 0 ;;
|
129
141
|
|
130
142
|
-?) COMPREPLY=".HOW."; return 0 ;;
|
@@ -166,4 +178,4 @@ _mde() {
|
|
166
178
|
|
167
179
|
complete -o filenames -o nospace -F _mde mde
|
168
180
|
# _mde_echo_version
|
169
|
-
# echo "Updated: 2023-12-
|
181
|
+
# echo "Updated: 2023-12-26 00:07:49 UTC"
|
data/examples/linked.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
Demonstrate setting a variable interactively for use in generated scripts.
|
2
|
+
|
3
|
+
```opts :(document_options)
|
4
|
+
dump_inherited_lines: true
|
5
|
+
pause_after_script_execution: false
|
6
|
+
user_must_approve: false
|
7
|
+
```
|
8
|
+
|
9
|
+
::: Set VARIABLE to "A"
|
10
|
+
|
11
|
+
```link :set_to_A +(set_to_A)
|
12
|
+
block: display_variable
|
13
|
+
```
|
14
|
+
|
15
|
+
```bash :(set_to_A)
|
16
|
+
VARIABLE=A
|
17
|
+
```
|
18
|
+
|
19
|
+
```link :set_to_A_eval +(set_to_A_eval)
|
20
|
+
block: display_variable
|
21
|
+
eval: true
|
22
|
+
```
|
23
|
+
|
24
|
+
```bash :(set_to_A_eval)
|
25
|
+
echo VARIABLE=A
|
26
|
+
```
|
27
|
+
|
28
|
+
::: Set VARIABLE to "B"
|
29
|
+
|
30
|
+
```link :set_to_B +(set_to_B)
|
31
|
+
block: display_variable
|
32
|
+
```
|
33
|
+
|
34
|
+
```bash :(set_to_B)
|
35
|
+
VARIABLE=B
|
36
|
+
```
|
37
|
+
|
38
|
+
```link :set_to_B_eval +(set_to_B_eval)
|
39
|
+
block: display_variable
|
40
|
+
eval: true
|
41
|
+
```
|
42
|
+
|
43
|
+
```bash :(set_to_B_eval)
|
44
|
+
echo VARIABLE=B
|
45
|
+
```
|
46
|
+
|
47
|
+
::: Display value of VARIABLE
|
48
|
+
|
49
|
+
```bash :display_variable
|
50
|
+
source bin/colorize_env_vars.sh
|
51
|
+
colorize_env_vars '' VARIABLE
|
52
|
+
```
|
data/examples/linked1.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Demo document linking
|
2
2
|
|
3
|
+
```opts :(document_options)
|
4
|
+
dump_inherited_lines: true
|
5
|
+
pause_after_script_execution: false
|
6
|
+
user_must_approve: false
|
7
|
+
```
|
8
|
+
|
3
9
|
::: * This is document 1 *
|
4
10
|
::: This document links to a matching document to demonstrate navigation between documents.
|
5
11
|
|
@@ -12,7 +18,11 @@ colorize_env_vars 'vars for page3' PAGE3_VAR_VIA_INHERIT page3_var_via_environme
|
|
12
18
|
```
|
13
19
|
|
14
20
|
```bash :(vars2)
|
15
|
-
PAGE2_VAR_VIA_INHERIT=
|
21
|
+
PAGE2_VAR_VIA_INHERIT=for_page2_from_page1_via_inherited_code_blocks
|
22
|
+
```
|
23
|
+
|
24
|
+
```link :linked2 +(vars2)
|
25
|
+
file: examples/linked2.md
|
16
26
|
```
|
17
27
|
|
18
28
|
```link :(linked2) +(vars2)
|
data/examples/linked2.md
CHANGED
@@ -17,7 +17,11 @@ colorize_env_vars 'vars for page3' PAGE3_VAR_VIA_INHERIT page3_var_via_environme
|
|
17
17
|
::: 3. executes block "show_vars" to display the imported PAGE3_VAR_VIA_INHERIT.
|
18
18
|
|
19
19
|
```bash :(vars3)
|
20
|
-
PAGE3_VAR_VIA_INHERIT=
|
20
|
+
PAGE3_VAR_VIA_INHERIT=for_page3_from_page2_via_inherited_code_blocks
|
21
|
+
```
|
22
|
+
|
23
|
+
```link :linked3 +(vars3)
|
24
|
+
file: examples/linked3.md
|
21
25
|
```
|
22
26
|
|
23
27
|
```link :(linked3) +(vars3)
|
data/examples/opts.md
CHANGED
@@ -2,13 +2,15 @@
|
|
2
2
|
|
3
3
|
::: These Opts blocks set the color of a couple of menu options to demonstrate the live update of options.
|
4
4
|
|
5
|
-
```opts
|
5
|
+
```opts
|
6
|
+
# color scheme 1
|
6
7
|
menu_divider_color: yellow
|
7
|
-
menu_note_match:
|
8
|
+
menu_note_match: "^ *(?<line>.+?) *$"
|
8
9
|
menu_task_color: fg_rgb_255_63_255
|
9
10
|
```
|
10
11
|
|
11
|
-
```opts
|
12
|
+
```opts
|
13
|
+
# color scheme 2
|
12
14
|
menu_divider_color: red
|
13
15
|
menu_note_color: yellow
|
14
16
|
menu_note_match: "^\\+ +(?<line>.+?) *$"
|
@@ -27,3 +29,21 @@ note 1
|
|
27
29
|
note 2 ends with /
|
28
30
|
/ note 3 starts with /
|
29
31
|
note 4
|
32
|
+
|
33
|
+
::: These options toggle the dump of debug information.
|
34
|
+
|
35
|
+
```opts
|
36
|
+
dump_blocks_in_file: true # Dump BlocksInFile (stage 1)
|
37
|
+
dump_delegate_object: true # Dump @delegate_object
|
38
|
+
dump_inherited_lines: true # Dump inherited lines
|
39
|
+
dump_menu_blocks: true # Dump MenuBlocks (stage 2)
|
40
|
+
dump_selected_block: true # Dump selected block
|
41
|
+
```
|
42
|
+
|
43
|
+
```opts
|
44
|
+
dump_blocks_in_file: false # Dump BlocksInFile (stage 1)
|
45
|
+
dump_delegate_object: false # Dump @delegate_object
|
46
|
+
dump_inherited_lines: false # Dump inherited lines
|
47
|
+
dump_menu_blocks: false # Dump MenuBlocks (stage 2)
|
48
|
+
dump_selected_block: false # Dump selected block
|
49
|
+
```
|
data/lib/ansi_formatter.rb
CHANGED
@@ -28,47 +28,6 @@ class AnsiFormatter
|
|
28
28
|
# "#{line_prefix}#{string_send_color(label, highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
|
29
29
|
end
|
30
30
|
|
31
|
-
# Formats and highlights a list of data. data are presented with indentation,
|
32
|
-
# and specific items can be highlighted in a specified color, while others are shown in a plain color.
|
33
|
-
#
|
34
|
-
# @param data [Hash] A hash of data, where each key is a dependency name,
|
35
|
-
# and its value is an array of sub-items.
|
36
|
-
# @param highlight_color_sym [Symbol] The color method to apply to highlighted items.
|
37
|
-
# Default is :exception_color_detail.
|
38
|
-
# @param plain_color_sym [Symbol] The color method for non-highlighted items.
|
39
|
-
# Default is :menu_chrome_color.
|
40
|
-
# @param label [String] The label to prefix the list of data with.
|
41
|
-
# Default is 'data:'.
|
42
|
-
# @param highlight [Array] An array of items to highlight. Each item in this array will be
|
43
|
-
# formatted with the specified highlight color.
|
44
|
-
# @param line_prefix [String] Prefix for each line. Default is ' '.
|
45
|
-
# @param line_postfix [String] Postfix for each line. Default is ''.
|
46
|
-
# @param detail_sep [String] Separator for items in the sub-list. Default is ' '.
|
47
|
-
# @return [String] A formatted string representation of the data with highlighted items.
|
48
|
-
def format_and_highlight_hash(
|
49
|
-
data,
|
50
|
-
highlight_color_sym: :exception_color_detail,
|
51
|
-
plain_color_sym: :menu_chrome_color,
|
52
|
-
label: 'Data:',
|
53
|
-
highlight: [],
|
54
|
-
line_prefix: ' ',
|
55
|
-
line_postfix: '',
|
56
|
-
detail_sep: ' '
|
57
|
-
)
|
58
|
-
formatted_deps = data&.map do |dep_name, sub_items|
|
59
|
-
formatted_sub_items = sub_items.map do |item|
|
60
|
-
color_sym = highlight.include?(item) ? highlight_color_sym : plain_color_sym
|
61
|
-
string_send_color(item, color_sym)
|
62
|
-
end.join(detail_sep)
|
63
|
-
|
64
|
-
"#{line_prefix}- #{string_send_color(dep_name,
|
65
|
-
highlight.include?(dep_name) ? highlight_color_sym : plain_color_sym)}: #{formatted_sub_items}#{line_postfix}"
|
66
|
-
end || []
|
67
|
-
|
68
|
-
"#{line_prefix}#{string_send_color(label,
|
69
|
-
highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
|
70
|
-
end
|
71
|
-
|
72
31
|
# Function to scan a string and process its segments based on multiple substrings
|
73
32
|
# @param str [String] The string to scan.
|
74
33
|
# @param substrings [Array<String>] The substrings to match in the string.
|
@@ -6,15 +6,9 @@
|
|
6
6
|
# version 2023-10-03
|
7
7
|
|
8
8
|
require 'fileutils'
|
9
|
+
require_relative 'constants'
|
9
10
|
require_relative 'exceptions'
|
10
11
|
|
11
|
-
# a struct to hold the data for a single line
|
12
|
-
NestedLine = Struct.new(:text, :depth) do
|
13
|
-
def to_s
|
14
|
-
text
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
12
|
##
|
19
13
|
# The CachedNestedFileReader class provides functionality to read file lines with the ability
|
20
14
|
# to process '#import filename' directives. When such a directive is encountered in a file,
|
data/lib/constants.rb
CHANGED
@@ -3,12 +3,20 @@
|
|
3
3
|
|
4
4
|
# encoding=utf-8
|
5
5
|
|
6
|
+
require_relative 'block_types'
|
7
|
+
|
6
8
|
class ExecutionStreams
|
7
9
|
StdErr = :stderr
|
8
10
|
StdIn = :stdin
|
9
11
|
StdOut = :stdout
|
10
12
|
end
|
11
13
|
|
14
|
+
IndexedLine = Struct.new(:index, :line) do
|
15
|
+
def to_s
|
16
|
+
line
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
12
20
|
class LoadFile
|
13
21
|
Load = true
|
14
22
|
Reuse = false
|
@@ -34,6 +42,13 @@ class MenuState
|
|
34
42
|
EXIT = :exit
|
35
43
|
end
|
36
44
|
|
45
|
+
# a struct to hold the data for a single line
|
46
|
+
NestedLine = Struct.new(:text, :depth) do
|
47
|
+
def to_s
|
48
|
+
text
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
37
52
|
# selected block and subsequent menu state
|
38
53
|
#
|
39
54
|
SelectedBlockMenuState = Struct.new(:block, :state)
|
@@ -44,3 +59,5 @@ SHELL_COLOR_OPTIONS = {
|
|
44
59
|
BlockType::OPTS => :menu_opts_color,
|
45
60
|
BlockType::VARS => :menu_vars_color
|
46
61
|
}.freeze
|
62
|
+
|
63
|
+
### Struct.new(:state, :block)
|
data/lib/directory_searcher.rb
CHANGED
@@ -4,6 +4,31 @@
|
|
4
4
|
# encoding=utf-8
|
5
5
|
|
6
6
|
require 'find'
|
7
|
+
require_relative 'constants'
|
8
|
+
|
9
|
+
def format_and_highlight_hash(
|
10
|
+
data,
|
11
|
+
highlight_color_sym: :exception_color_detail,
|
12
|
+
plain_color_sym: :menu_chrome_color,
|
13
|
+
label: 'Data:',
|
14
|
+
highlight: [],
|
15
|
+
line_prefix: ' ',
|
16
|
+
line_postfix: '',
|
17
|
+
key_has_value: ': '
|
18
|
+
)
|
19
|
+
formatted_deps = data&.map do |key, value|
|
20
|
+
color_sym = highlight.include?(key) ? highlight_color_sym : plain_color_sym
|
21
|
+
dkey = string_send_color(key, color_sym)
|
22
|
+
|
23
|
+
"#{line_prefix}#{dkey}#{key_has_value}" \
|
24
|
+
"#{string_send_color(value,
|
25
|
+
highlight.include?(value) ? highlight_color_sym : plain_color_sym)}: " \
|
26
|
+
"#{formatted_sub_items}#{line_postfix}"
|
27
|
+
end
|
28
|
+
|
29
|
+
"#{line_prefix}#{string_send_color(label,
|
30
|
+
highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
|
31
|
+
end
|
7
32
|
|
8
33
|
# Formats and highlights a list of dependencies. Dependencies are presented with indentation,
|
9
34
|
# and specific items can be highlighted in a specified color, while others are shown in a plain color.
|
@@ -47,10 +72,22 @@ def format_and_highlight_dependencies(
|
|
47
72
|
end
|
48
73
|
# warn menu_blocks.to_yaml.sub(/^(?:---\n)?/, "MenuBlocks:\n")
|
49
74
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
75
|
+
def format_and_highlight_lines(
|
76
|
+
lines,
|
77
|
+
highlight_color_sym: :exception_color_detail,
|
78
|
+
plain_color_sym: :menu_chrome_color,
|
79
|
+
label: 'Dependencies:',
|
80
|
+
highlight: [],
|
81
|
+
line_prefix: ' ',
|
82
|
+
line_postfix: ''
|
83
|
+
)
|
84
|
+
formatted_deps = lines&.map do |item|
|
85
|
+
"#{line_prefix}- #{string_send_color(dep_name,
|
86
|
+
highlight.include?(dep_name) ? highlight_color_sym : plain_color_sym)}: #{item}#{line_postfix}"
|
87
|
+
end || []
|
88
|
+
|
89
|
+
"#{line_prefix}#{string_send_color(label,
|
90
|
+
highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
|
54
91
|
end
|
55
92
|
|
56
93
|
# Class DirectorySearcher
|
@@ -77,7 +114,6 @@ class DirectorySearcher
|
|
77
114
|
match_dirs = []
|
78
115
|
@paths.each do |path|
|
79
116
|
Find.find(path) do |p|
|
80
|
-
# p 'search_in_directory_names', p
|
81
117
|
# Find.prune unless @include_subdirectories || path == p
|
82
118
|
match_dirs << p if File.directory?(p) && p.match?(@pattern)
|
83
119
|
end
|
data/lib/filter.rb
CHANGED
@@ -61,15 +61,8 @@ module MarkdownExec
|
|
61
61
|
# @param name [String] The name of the fenced code block.
|
62
62
|
#
|
63
63
|
def self.apply_name_filters(options, filters, name)
|
64
|
-
|
65
|
-
|
66
|
-
filters[:name_select] = true
|
67
|
-
filters[:name_exclude] = false
|
68
|
-
else
|
69
|
-
filters[:name_exclude] = true
|
70
|
-
filters[:name_select] = false
|
71
|
-
end
|
72
|
-
end
|
64
|
+
filters[:name_select] = true
|
65
|
+
filters[:name_exclude] = false
|
73
66
|
|
74
67
|
if name.present? && filters[:name_select].nil? && options[:select_by_name_regex].present?
|
75
68
|
filters[:name_select] =
|
@@ -239,12 +232,6 @@ if $PROGRAM_NAME == __FILE__
|
|
239
232
|
assert Filter.fcb_select?(@options, @fcb)
|
240
233
|
end
|
241
234
|
|
242
|
-
def test_name_exclude_condition
|
243
|
-
@options[:block_name] = 'test'
|
244
|
-
@fcb[:oname] = 'sample'
|
245
|
-
refute Filter.fcb_select?(@options, @fcb)
|
246
|
-
end
|
247
|
-
|
248
235
|
def test_shell_exclude_condition
|
249
236
|
@options[:exclude_by_shell_regex] = 'exclude_this'
|
250
237
|
@fcb[:shell] = 'exclude_this_shell'
|
@@ -269,12 +256,6 @@ if $PROGRAM_NAME == __FILE__
|
|
269
256
|
assert Filter.fcb_select?(@options, @fcb)
|
270
257
|
end
|
271
258
|
|
272
|
-
def test_bash_only_condition_false
|
273
|
-
@options[:bash_only] = true
|
274
|
-
@fcb[:shell] = 'zsh'
|
275
|
-
refute Filter.fcb_select?(@options, @fcb)
|
276
|
-
end
|
277
|
-
|
278
259
|
def test_default_case
|
279
260
|
assert Filter.fcb_select?(@options, @fcb)
|
280
261
|
end
|