markdown_exec 1.3.3.4 → 1.3.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +159 -0
- data/Gemfile.lock +1 -1
- data/bin/tab_completion.sh +2 -2
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/markdown_exec.rb +17 -20
- data/lib/menu.yml +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c3c3615fdab637a5df4f5616d9c07f277e499f1f8de3a5fa70dda72ae2cb0b3
|
4
|
+
data.tar.gz: b7cb1a2abfeaf114f25aac530d316aa181ca1464af5426e5b1f0b5aaa3538320
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bf8576d03115f6d769e961091d5a33bfc65fafdca8f2f282895230836670fb741a34a94beac49dc1008faa6ea293b3f882721b56f69fcbb697e4c011143ab7a
|
7
|
+
data.tar.gz: a53fecba24f39b4e5234164e4eada14a95b8c078111d50572c9094f5171671f3d79efc20065caaf67a1b7bce2f774c9cb52bb5c1bbbf8855678d317a3561bbef
|
data/CHANGELOG.md
CHANGED
@@ -106,6 +106,165 @@
|
|
106
106
|
|
107
107
|
- [! ] option to use most recent named block if dupiclate, currently appends same-name blocks but lists twice in menu
|
108
108
|
|
109
|
+
- [! ] improve error when imported file is not found
|
110
|
+
|
111
|
+
- [ ] decorations for import block
|
112
|
+
prefix line(s)
|
113
|
+
inline replacements
|
114
|
+
suffix line(s)
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
##
|
118
|
+
# Replace substrings in an input string based on a regular expression pattern
|
119
|
+
# with named capture groups. The replacements are formatted using a provided
|
120
|
+
# format string. Additional context can be provided to supplement or override
|
121
|
+
# the named captures in the format string.
|
122
|
+
#
|
123
|
+
# @param input_str [String] The input string to process.
|
124
|
+
# @param regex [Regexp] The regular expression pattern with named capture groups.
|
125
|
+
# @param format_str [String] The format string for sprintf.
|
126
|
+
# @param context [Hash] Additional context to supplement or override named captures.
|
127
|
+
#
|
128
|
+
# @return [String] The processed string after replacements.
|
129
|
+
#
|
130
|
+
# def gsub_format(input_str, regex, format_str, context: {})
|
131
|
+
# input_str.gsub(regex) do
|
132
|
+
# captures_hash = $~.names.each_with_object({}) do |name, hash|
|
133
|
+
# hash[name.to_sym] = $~[name]
|
134
|
+
# end
|
135
|
+
|
136
|
+
# ### add import file name, line number, line, to captures_hash, chain
|
137
|
+
# # $~ (MatchData) - MatchData object created from the match; thread-local and frame-local. - English - $LAST_MATCH_INFO.
|
138
|
+
# # $& (Matched Substring) - The matched string. - English - $MATCH.
|
139
|
+
# # $` (Pre-Match Substring) - The string to the left of the match. - English - $PREMATCH.
|
140
|
+
# # $' (Post-Match Substring) - The string to the right of the match. - English - $POSTMATCH.
|
141
|
+
# # $+ (Last Matched Group) - The last group matched. - English - $LAST_PAREN_MATCH.
|
142
|
+
|
143
|
+
# sprintf(format_str, context.merge(captures_hash))
|
144
|
+
# end
|
145
|
+
# end
|
146
|
+
|
147
|
+
class Regexp
|
148
|
+
def gsub_format(input_str, format_str, context: {})
|
149
|
+
input_str.gsub(self) do
|
150
|
+
captures_hash = $~.names.each_with_object({}) do |name, hash|
|
151
|
+
hash[name.to_sym] = $~[name]
|
152
|
+
end
|
153
|
+
|
154
|
+
# ### add import file name, line number, line, to captures_hash, chain
|
155
|
+
# # $~ (MatchData) - MatchData object created from the match; thread-local and frame-local. - English - $LAST_MATCH_INFO.
|
156
|
+
# # $& (Matched Substring) - The matched string. - English - $MATCH.
|
157
|
+
# # $` (Pre-Match Substring) - The string to the left of the match. - English - $PREMATCH.
|
158
|
+
# # $' (Post-Match Substring) - The string to the right of the match. - English - $POSTMATCH.
|
159
|
+
# # $+ (Last Matched Group) - The last group matched. - English - $LAST_PAREN_MATCH.
|
160
|
+
|
161
|
+
# # Add file name, line number, line to captures_hash
|
162
|
+
# captures_hash[:file_name] = $~.pre_match.split("\n").last
|
163
|
+
# captures_hash[:line_number] = $~.pre_match.count("\n") + 1
|
164
|
+
# captures_hash[:line] = $&
|
165
|
+
|
166
|
+
sprintf(format_str, context.merge(captures_hash))
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
# # Example usage:
|
172
|
+
# str = "123 example"
|
173
|
+
# re = /(?<foo>\d+) (?<bar>\w+)/
|
174
|
+
# fmt = "%<foo>d : %<bar>s"
|
175
|
+
# new_str = gsub_format(str, re, fmt)
|
176
|
+
# puts new_str # Outputs: 123 : example
|
177
|
+
|
178
|
+
require 'minitest/autorun'
|
179
|
+
require_relative 'path_to_your_file' # Make sure to replace this with the path to the file containing the function
|
180
|
+
|
181
|
+
class ReplaceWithFormatTest < Minitest::Test
|
182
|
+
def test_basic_replacement
|
183
|
+
input_str = "123 example"
|
184
|
+
re = /(?<foo>\d+) (?<bar>\w+)/
|
185
|
+
fmt = "%<foo>d : %<bar>s"
|
186
|
+
|
187
|
+
result = gsub_format(input_str, re, fmt)
|
188
|
+
|
189
|
+
assert_equal "123 : example", result
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_no_match
|
193
|
+
input_str = "This is a test."
|
194
|
+
re = /(?<foo>\d+) (?<bar>\w+)/
|
195
|
+
fmt = "%<foo>d : %<bar>s"
|
196
|
+
|
197
|
+
result = gsub_format(input_str, re, fmt)
|
198
|
+
|
199
|
+
assert_equal "This is a test.", result
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_multiple_matches
|
203
|
+
input_str = "123 example, 456 test"
|
204
|
+
re = /(?<foo>\d+) (?<bar>\w+)/
|
205
|
+
fmt = "[%<foo>d %<bar>s]"
|
206
|
+
|
207
|
+
result = gsub_format(input_str, re, fmt)
|
208
|
+
|
209
|
+
assert_equal "[123 example], [456 test]", result
|
210
|
+
end
|
211
|
+
|
212
|
+
def test_different_named_captures
|
213
|
+
input_str = "Jane is 25 years old."
|
214
|
+
re = /(?<name>\w+) is (?<age>\d+)/
|
215
|
+
fmt = "%<name>s's age is %<age>d"
|
216
|
+
|
217
|
+
result = gsub_format(input_str, re, fmt)
|
218
|
+
|
219
|
+
assert_equal "Jane's age is 25", result
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_with_context
|
223
|
+
input_str = "Jane is 25 years old."
|
224
|
+
re = /(?<name>\w+) is (?<age>\d+)/
|
225
|
+
fmt = "%<name>s's age is %<age>d and she lives in %<city>s"
|
226
|
+
|
227
|
+
result = gsub_format(input_str, re, fmt, context: { city: "New York" })
|
228
|
+
|
229
|
+
assert_equal "Jane's age is 25 and she lives in New York", result
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
require 'minitest/autorun'
|
234
|
+
require_relative 'path_to_your_file' # Ensure this path is correct
|
235
|
+
|
236
|
+
class RegexpGsubFormatTest < Minitest::Test
|
237
|
+
def test_basic_replacement
|
238
|
+
input_str = "123 example"
|
239
|
+
re = /(?<foo>\d+) (?<bar>\w+)/
|
240
|
+
fmt = "%<foo>d : %<bar>s"
|
241
|
+
|
242
|
+
result = re.gsub_format(input_str, fmt)
|
243
|
+
|
244
|
+
assert_equal "123 : example", result
|
245
|
+
end
|
246
|
+
|
247
|
+
# ... [other tests remain mostly unchanged, just updating the method call]
|
248
|
+
|
249
|
+
def test_with_context
|
250
|
+
input_str = "Jane is 25 years old."
|
251
|
+
re = /(?<name>\w+) is (?<age>\d+)/
|
252
|
+
fmt = "%<name>s's age is %<age>d and she lives in %<city>s"
|
253
|
+
|
254
|
+
result = re.gsub_format(input_str, fmt, context: { city: "New York" })
|
255
|
+
|
256
|
+
assert_equal "Jane's age is 25 and she lives in New York", result
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
```
|
261
|
+
|
262
|
+
## [1.3.5] - 2023-10-05
|
263
|
+
|
264
|
+
### Changed
|
265
|
+
|
266
|
+
- Fix display of menu dividers.
|
267
|
+
|
109
268
|
## [1.3.3] - 2023-10-03
|
110
269
|
|
111
270
|
### Added
|
data/Gemfile.lock
CHANGED
data/bin/tab_completion.sh
CHANGED
@@ -13,7 +13,7 @@ __filedirs_all()
|
|
13
13
|
}
|
14
14
|
|
15
15
|
_mde_echo_version() {
|
16
|
-
echo "1.3.3.
|
16
|
+
echo "1.3.3.5"
|
17
17
|
}
|
18
18
|
|
19
19
|
_mde() {
|
@@ -138,4 +138,4 @@ _mde() {
|
|
138
138
|
|
139
139
|
complete -o filenames -o nospace -F _mde mde
|
140
140
|
# _mde_echo_version
|
141
|
-
# echo "Updated: 2023-10-
|
141
|
+
# echo "Updated: 2023-10-05 14:21:31 UTC"
|
data/lib/markdown_exec.rb
CHANGED
@@ -260,7 +260,6 @@ module MarkdownExec
|
|
260
260
|
else
|
261
261
|
true
|
262
262
|
end.tap_inspect
|
263
|
-
# binding.pry
|
264
263
|
rescue StandardError => err
|
265
264
|
warn("ERROR ** Filter::fcb_select?(); #{err.inspect}")
|
266
265
|
raise err
|
@@ -358,7 +357,7 @@ module MarkdownExec
|
|
358
357
|
selrows = @table.select do |fcb_title_groups|
|
359
358
|
Filter.fcb_select? options, fcb_title_groups
|
360
359
|
end
|
361
|
-
|
360
|
+
|
362
361
|
### hide rows correctly
|
363
362
|
|
364
363
|
if opts[:hide_blocks_by_name]
|
@@ -663,10 +662,7 @@ module MarkdownExec
|
|
663
662
|
end
|
664
663
|
|
665
664
|
def cfile
|
666
|
-
# puts @options.inspect
|
667
|
-
# binding.pry
|
668
665
|
@cfile ||= CachedNestedFileReader.new(import_pattern: @options.fetch(:import_pattern))
|
669
|
-
# @cfile ||= CachedNestedFileReader.new(import_pattern: /^ *#insert (.+)$/)
|
670
666
|
end
|
671
667
|
|
672
668
|
# :reek:DuplicateMethodCall
|
@@ -945,7 +941,7 @@ module MarkdownExec
|
|
945
941
|
blocks.push FCB.new({
|
946
942
|
# name: '',
|
947
943
|
chrome: true,
|
948
|
-
|
944
|
+
name: format(
|
949
945
|
opts[:menu_divider_format],
|
950
946
|
opts[:menu_initial_divider]
|
951
947
|
).send(opts[:menu_divider_color].to_sym),
|
@@ -954,7 +950,6 @@ module MarkdownExec
|
|
954
950
|
end
|
955
951
|
|
956
952
|
iter_blocks_in_file(opts) do |btype, fcb|
|
957
|
-
# binding.pry
|
958
953
|
case btype
|
959
954
|
when :filter
|
960
955
|
## return type of blocks to select
|
@@ -964,14 +959,12 @@ module MarkdownExec
|
|
964
959
|
when :line
|
965
960
|
## convert line to block
|
966
961
|
#
|
967
|
-
# binding.pry
|
968
962
|
if opts[:menu_divider_match].present? &&
|
969
963
|
(mbody = fcb.body[0].match opts[:menu_divider_match])
|
970
|
-
# binding.pry
|
971
964
|
blocks.push FCB.new(
|
972
965
|
{ chrome: true,
|
973
966
|
disabled: '',
|
974
|
-
|
967
|
+
name: format(opts[:menu_divider_format],
|
975
968
|
mbody[:name]).send(opts[:menu_divider_color].to_sym) }
|
976
969
|
)
|
977
970
|
elsif opts[:menu_task_match].present? &&
|
@@ -979,7 +972,7 @@ module MarkdownExec
|
|
979
972
|
blocks.push FCB.new(
|
980
973
|
{ chrome: true,
|
981
974
|
disabled: '',
|
982
|
-
|
975
|
+
name: format(opts[:menu_task_format],
|
983
976
|
mbody[:name]).send(opts[:menu_task_color].to_sym) }
|
984
977
|
)
|
985
978
|
else
|
@@ -996,7 +989,7 @@ module MarkdownExec
|
|
996
989
|
blocks.push FCB.new(
|
997
990
|
{ chrome: true,
|
998
991
|
disabled: '',
|
999
|
-
|
992
|
+
name: format(opts[:menu_divider_format],
|
1000
993
|
opts[:menu_final_divider])
|
1001
994
|
.send(opts[:menu_divider_color].to_sym) }
|
1002
995
|
)
|
@@ -1278,18 +1271,24 @@ module MarkdownExec
|
|
1278
1271
|
}
|
1279
1272
|
end
|
1280
1273
|
|
1274
|
+
## insert exit option at head or tail
|
1275
|
+
#
|
1276
|
+
def prompt_menu_add_exit(_prompt_text, items, exit_option, _opts = {})
|
1277
|
+
if @options[:menu_exit_at_top]
|
1278
|
+
(@options[:menu_with_exit] ? [exit_option] : []) + items
|
1279
|
+
else
|
1280
|
+
items + (@options[:menu_with_exit] ? [exit_option] : [])
|
1281
|
+
end
|
1282
|
+
end
|
1283
|
+
|
1281
1284
|
## tty prompt to select
|
1282
1285
|
# insert exit option at head or tail
|
1283
1286
|
# return selected option or nil
|
1284
1287
|
#
|
1285
1288
|
def prompt_with_quit(prompt_text, items, opts = {})
|
1286
1289
|
exit_option = '* Exit'
|
1287
|
-
|
1288
|
-
|
1289
|
-
else
|
1290
|
-
items + (@options[:menu_with_exit] ? [exit_option] : [])
|
1291
|
-
end
|
1292
|
-
sel = @prompt.select(prompt_text, all_items, opts.merge(filter: true))
|
1290
|
+
sel = @prompt.select(prompt_text, prompt_menu_add_exit(prompt_text, items, exit_option, opts),
|
1291
|
+
opts.merge(filter: true))
|
1293
1292
|
sel == exit_option ? nil : sel
|
1294
1293
|
end
|
1295
1294
|
|
@@ -1421,8 +1420,6 @@ module MarkdownExec
|
|
1421
1420
|
end.compact
|
1422
1421
|
return nil if bm.count.zero?
|
1423
1422
|
|
1424
|
-
# binding.pry
|
1425
|
-
|
1426
1423
|
sel = prompt_with_quit pt, bm,
|
1427
1424
|
per_page: opts[:select_page_height]
|
1428
1425
|
return nil if sel.nil?
|
data/lib/menu.yml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown_exec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.3.
|
4
|
+
version: 1.3.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fareed Stevenson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clipboard
|