markdown_exec 1.8.2 → 1.8.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84609b91b353913fe01e7f2b0a2134af9eaf9ec09ba79bc8edfcfd94f87b11d6
4
- data.tar.gz: 4a73cba2c97774245c39376cd310e59d31e8d3230a9c1307d623576b21061afa
3
+ metadata.gz: 4e802d2af4a779aad7091b20ab189a4c324f15f53643880758b7aac76549ba49
4
+ data.tar.gz: 2d6f910706bd10232f8bb87313364f671d3871e06382d57dd6248f07c4e497f2
5
5
  SHA512:
6
- metadata.gz: 734f4e6b036b5dc100b41beddd9a51faa86cbb3b4813d6e83488ae351d513f7d0a84c3ea0746fc9f96ab55bb30f61d1b2df6c5b8696af0fc95c6e6291e4a093c
7
- data.tar.gz: 0c869ee545f85cd0b514aed9f479071d6c9b4641f1b39fac35489aa1261d26d3e55c2ea424e7edc0634c1662f79a624cd3f477bbe07d7df3c3acfb91ae1b7a6e
6
+ metadata.gz: c0e4b6ff95bccd281e078eb934d3660c52c28530ae12694c81030b3254de468b24d1d93e2e4d68b4d1163be68de029750930f3de0c3034154b05afde6ac9b42a
7
+ data.tar.gz: 85e260930e3d097e7028ae16cfeb7905fa702accd1fe2bb5b27fdb817d301be10259069be7c7e99f4af5258efbc7be5867d82834cee68bdc8d4e6485592f821e
data/.pryrc CHANGED
@@ -1,3 +1,4 @@
1
+ binding.pry
1
2
  if defined?(PryByebug)
2
3
  Pry.config.pager = false
3
4
  Pry.commands.alias_command 'c', 'continue'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.8.5] - 2023-12-22
4
+
5
+ ### Added
6
+
7
+ - "eval" key for link block type to compute lines to append to the inherited state.
8
+ - Options for dumping data associated with the menu or state.
9
+ - Debug and irb gems.
10
+
11
+ ## [1.8.4] - 2023-12-15
12
+
13
+ ### Added
14
+
15
+ - Options to dump blocks when processed.
16
+
17
+ ### Changed
18
+
19
+ - Refactor code generation for and after Link blocks
20
+
3
21
  ## [1.8.2] - 2023-12-12
4
22
 
5
23
  ### Changed
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.2)
4
+ markdown_exec (1.8.5)
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
- if true
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
@@ -13,7 +13,7 @@ __filedirs_all()
13
13
  }
14
14
 
15
15
  _mde_echo_version() {
16
- echo "1.8.2"
16
+ echo "1.8.5"
17
17
  }
18
18
 
19
19
  _mde() {
@@ -36,6 +36,16 @@ _mde() {
36
36
 
37
37
  -d) COMPREPLY="0"; return 0 ;;
38
38
 
39
+ --dump-dump-delegate-object) COMPREPLY="0"; return 0 ;;
40
+
41
+ --dump-blocks-in-file) COMPREPLY="0"; return 0 ;;
42
+
43
+ --dump-dump-inherited-lines) COMPREPLY="0"; return 0 ;;
44
+
45
+ --dump-menu-blocks) COMPREPLY="0"; return 0 ;;
46
+
47
+ --dump-selected-block) COMPREPLY="0"; return 0 ;;
48
+
39
49
  --filename) COMPREPLY="."; return 0 ;;
40
50
 
41
51
  -f) COMPREPLY="."; return 0 ;;
@@ -82,7 +92,7 @@ _mde() {
82
92
  # present matching option names
83
93
  #
84
94
  if [[ ${cur} == -* ]] ; then
85
- opts=("--block-name" "--config" "--debug" "--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")
95
+ 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" "--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")
86
96
  COMPREPLY=( $(compgen -W "$(printf "'%s' " "${opts[@]}")" -- "${cur}") )
87
97
 
88
98
  return 0
@@ -105,6 +115,16 @@ _mde() {
105
115
 
106
116
  -d) COMPREPLY=".BOOL."; return 0 ;;
107
117
 
118
+ --dump-dump-delegate-object) COMPREPLY=".BOOL."; return 0 ;;
119
+
120
+ --dump-blocks-in-file) COMPREPLY=".BOOL."; return 0 ;;
121
+
122
+ --dump-dump-inherited-lines) COMPREPLY=".BOOL."; return 0 ;;
123
+
124
+ --dump-menu-blocks) COMPREPLY=".BOOL."; return 0 ;;
125
+
126
+ --dump-selected-block) COMPREPLY=".BOOL."; return 0 ;;
127
+
108
128
  --filename) COMPREPLY=".RELATIVE_PATH."; return 0 ;;
109
129
 
110
130
  -f) COMPREPLY=".RELATIVE_PATH."; return 0 ;;
@@ -154,4 +174,4 @@ _mde() {
154
174
 
155
175
  complete -o filenames -o nospace -F _mde mde
156
176
  # _mde_echo_version
157
- # echo "Updated: 2023-12-12 16:37:57 UTC"
177
+ # echo "Updated: 2023-12-22 22:55:35 UTC"
@@ -0,0 +1,33 @@
1
+ Demonstrate setting a variable interactively for use in generated scripts.
2
+
3
+ ```opts :(document_options)
4
+ pause_after_script_execution: false
5
+ user_must_approve: false
6
+ ```
7
+
8
+ ::: Set VARIABLE to "A"
9
+
10
+ ```link :set_to_A +(set_to_A)
11
+ block: display_variable
12
+ ```
13
+
14
+ ```bash :(set_to_A)
15
+ VARIABLE=A
16
+ ```
17
+
18
+ ::: Set VARIABLE to "B"
19
+
20
+ ```link :set_to_B +(set_to_B)
21
+ block: display_variable
22
+ ```
23
+
24
+ ```bash :(set_to_B)
25
+ VARIABLE=B
26
+ ```
27
+
28
+ ::: Display value of VARIABLE
29
+
30
+ ```bash :display_variable
31
+ source bin/colorize_env_vars.sh
32
+ colorize_env_vars '' VARIABLE
33
+ ```
data/examples/linked1.md CHANGED
@@ -12,10 +12,10 @@ colorize_env_vars 'vars for page3' PAGE3_VAR_VIA_INHERIT page3_var_via_environme
12
12
  ```
13
13
 
14
14
  ```bash :(vars2)
15
- PAGE2_VAR_VIA_INHERIT=for_page2_from_page1_via_inherited_code_file
15
+ PAGE2_VAR_VIA_INHERIT=for_page2_from_page1_via_inherited_code_blocks
16
16
  ```
17
17
 
18
- ```link :(linked2)
18
+ ```link :(linked2) +(vars2)
19
19
  file: examples/linked2.md
20
20
  ```
21
21
 
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=for_page3_from_page2_via_inherited_code_file
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_import_vars +(vars3)
data/examples/opts.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```opts :opts1
6
6
  menu_divider_color: yellow
7
- menu_note_match:
7
+ menu_note_match: "^ *(?<line>.+?) *$"
8
8
  menu_task_color: fg_rgb_255_63_255
9
9
  ```
10
10
 
@@ -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.
data/lib/constants.rb CHANGED
@@ -14,7 +14,7 @@ class LoadFile
14
14
  Reuse = false
15
15
  end
16
16
 
17
- LoadFileNextBlock = Struct.new(:load_file, :next_block)
17
+ LoadFileLinkState = Struct.new(:load_file, :link_state)
18
18
 
19
19
  class MenuControl
20
20
  Fresh = false
@@ -5,6 +5,30 @@
5
5
 
6
6
  require 'find'
7
7
 
8
+ def format_and_highlight_hash(
9
+ data,
10
+ highlight_color_sym: :exception_color_detail,
11
+ plain_color_sym: :menu_chrome_color,
12
+ label: 'Data:',
13
+ highlight: [],
14
+ line_prefix: ' ',
15
+ line_postfix: '',
16
+ key_has_value: ': '
17
+ )
18
+ formatted_deps = data&.map do |key, value|
19
+ color_sym = highlight.include?(key) ? highlight_color_sym : plain_color_sym
20
+ dkey = string_send_color(key, color_sym)
21
+
22
+ "#{line_prefix}#{dkey}#{key_has_value}" \
23
+ "#{string_send_color(value,
24
+ highlight.include?(value) ? highlight_color_sym : plain_color_sym)}: " \
25
+ "#{formatted_sub_items}#{line_postfix}"
26
+ end
27
+
28
+ "#{line_prefix}#{string_send_color(label,
29
+ highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
30
+ end
31
+
8
32
  # Formats and highlights a list of dependencies. Dependencies are presented with indentation,
9
33
  # and specific items can be highlighted in a specified color, while others are shown in a plain color.
10
34
  #
@@ -47,6 +71,24 @@ def format_and_highlight_dependencies(
47
71
  end
48
72
  # warn menu_blocks.to_yaml.sub(/^(?:---\n)?/, "MenuBlocks:\n")
49
73
 
74
+ def format_and_highlight_lines(
75
+ lines,
76
+ highlight_color_sym: :exception_color_detail,
77
+ plain_color_sym: :menu_chrome_color,
78
+ label: 'Dependencies:',
79
+ highlight: [],
80
+ line_prefix: ' ',
81
+ line_postfix: ''
82
+ )
83
+ formatted_deps = lines&.map do |item|
84
+ "#{line_prefix}- #{string_send_color(dep_name,
85
+ highlight.include?(dep_name) ? highlight_color_sym : plain_color_sym)}: #{item}#{line_postfix}"
86
+ end || []
87
+
88
+ "#{line_prefix}#{string_send_color(label,
89
+ highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
90
+ end
91
+
50
92
  IndexedLine = Struct.new(:index, :line) do
51
93
  def to_s
52
94
  line
@@ -77,7 +119,6 @@ class DirectorySearcher
77
119
  match_dirs = []
78
120
  @paths.each do |path|
79
121
  Find.find(path) do |p|
80
- # p 'search_in_directory_names', p
81
122
  # Find.prune unless @include_subdirectories || path == p
82
123
  match_dirs << p if File.directory?(p) && p.match?(@pattern)
83
124
  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
- if name.present? && options[:block_name]
65
- if name =~ /#{options[:block_name]}/
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