markdown_exec 2.0.5 → 2.0.7
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/.rubocop.yml +17 -2
- data/CHANGELOG.md +48 -0
- data/Gemfile.lock +1 -1
- data/bin/tab_completion.sh +15 -31
- data/examples/block_names.md +23 -0
- data/examples/interrupt.md +9 -0
- data/examples/line-wrapping.md +17 -0
- data/examples/linked.md +8 -0
- data/examples/linked_show.md +7 -0
- data/examples/load_code.md +10 -0
- data/examples/nickname.md +46 -9
- data/examples/pause-after-execution.md +9 -0
- data/lib/color_scheme.rb +65 -0
- data/lib/colorize.rb +25 -0
- data/lib/constants.rb +19 -19
- data/lib/fcb.rb +15 -0
- data/lib/find_files.rb +35 -39
- data/lib/hash_delegator.rb +1239 -761
- data/lib/input_sequencer.rb +11 -4
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/markdown_exec.rb +16 -6
- data/lib/mdoc.rb +9 -14
- data/lib/menu.src.yml +106 -24
- data/lib/menu.yml +93 -25
- data/lib/saved_assets.rb +4 -3
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af8a53f03e48c890798b520b84bd0357ccef4f31d93b97cc7cc8b4b72ca1a035
|
4
|
+
data.tar.gz: cd5983d2ff18ee8e2a29da6bea364c03bdaf6a43871d45b16483a8996d129894
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47e4e75e5a4e473ab9e9726cb7774aec95eb4a26d1d48035e3f6a69df0162c6b004fa625f5ae9f3c973bb25f732c9e938c0008dd07abb759f3211258d943fcc8
|
7
|
+
data.tar.gz: 306fc1218c64d57b1ca82191060298f87f9ae996e43f278cd72144fa3b839e3e4e4b8d3168f34c2fca4bd1ba9fa8ca1ab0a42659980d115b2d3293edc5e75238
|
data/.rubocop.yml
CHANGED
@@ -15,8 +15,8 @@ Layout/LineContinuationLeadingSpace:
|
|
15
15
|
|
16
16
|
Layout/LineLength: # 2024-01-21 temp disable
|
17
17
|
Enabled: false
|
18
|
-
Max: 96
|
19
|
-
Max: 120
|
18
|
+
# Max: 96
|
19
|
+
# Max: 120
|
20
20
|
|
21
21
|
Lint/Debugger:
|
22
22
|
Enabled: false
|
@@ -24,6 +24,9 @@ Lint/Debugger:
|
|
24
24
|
Lint/SafeNavigationChain:
|
25
25
|
Enabled: false
|
26
26
|
|
27
|
+
Lint/UnusedMethodArgument:
|
28
|
+
Enabled: false
|
29
|
+
|
27
30
|
Metrics/AbcSize:
|
28
31
|
Enabled: false
|
29
32
|
|
@@ -45,6 +48,9 @@ Metrics/CyclomaticComplexity:
|
|
45
48
|
Metrics/MethodLength:
|
46
49
|
Enabled: false
|
47
50
|
|
51
|
+
Metrics/ParameterLists:
|
52
|
+
Enabled: false
|
53
|
+
|
48
54
|
Metrics/PerceivedComplexity:
|
49
55
|
Enabled: false
|
50
56
|
|
@@ -54,9 +60,15 @@ Minitest/MultipleAssertions:
|
|
54
60
|
Naming/RescuedExceptionsVariableName:
|
55
61
|
PreferredName: err
|
56
62
|
|
63
|
+
Security/Eval:
|
64
|
+
Enabled: false
|
65
|
+
|
57
66
|
Security/YAMLLoad:
|
58
67
|
Enabled: false
|
59
68
|
|
69
|
+
Style/ClassVars:
|
70
|
+
Enabled: false
|
71
|
+
|
60
72
|
Style/CommentedKeyword:
|
61
73
|
Enabled: false
|
62
74
|
|
@@ -87,6 +99,9 @@ Style/MultilineBlockChain:
|
|
87
99
|
Style/OpenStructUse:
|
88
100
|
Enabled: false
|
89
101
|
|
102
|
+
Style/OptionalBooleanParameter:
|
103
|
+
Enabled: false
|
104
|
+
|
90
105
|
Style/PerlBackrefs: # Prefer ::Regexp.last_match.post_match over $'.
|
91
106
|
Enabled: false
|
92
107
|
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,53 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [2.0.7] - 2024-06-04
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Color names that set foreground and background color.
|
8
|
+
Similar to the existing foreground-only color names.
|
9
|
+
The background colors follow the foreground color values in the name.
|
10
|
+
Two names, to accept values as decimal and hex.
|
11
|
+
- Example document for line wrapping.
|
12
|
+
- Menu entry to execute shell commands.
|
13
|
+
- Option to control menu entry for shell commands.
|
14
|
+
- Recognition of nicknames in command line processing.
|
15
|
+
- Trap user interrupting executing scripts.
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
|
19
|
+
- Do not decorate indentations.
|
20
|
+
- Line-wrap and center headings.
|
21
|
+
Headings are now centered, the text is case-folded and the color
|
22
|
+
(foreground and background) is according to the level.
|
23
|
+
Centering is based on the console width detected.
|
24
|
+
- Line-wrap normal document text and format headings.
|
25
|
+
- Parse lines into indentation, text, and trailing whitespace.
|
26
|
+
- Update nicknames example to exercise hidden blocks from the command line.
|
27
|
+
- The optional prompt to exit after execution is now more frequent.
|
28
|
+
- Set characters used in saved file names
|
29
|
+
|
30
|
+
## [2.0.6] - 2024-05-28
|
31
|
+
|
32
|
+
### Added
|
33
|
+
|
34
|
+
- Color-coding to folder names in the menu following a keyword search.
|
35
|
+
Implement color-coding for folder names. Each folder name is assigned a color based on the folder name to highlight repetitive folder structures.
|
36
|
+
|
37
|
+
- Load-code option to read one or more files into inherited lines.
|
38
|
+
|
39
|
+
- Automatic Load, Edit, Save, and View menu entries to manage inherited lines.
|
40
|
+
The value of `document_saved_lines_glob` is displayed above the menu items, if any.
|
41
|
+
The Load menu item appears when one or more files match the glob.
|
42
|
+
The Edit menu item appears when one or more lines have been inherited.
|
43
|
+
The Save menu item appears when one or more lines have been inherited.
|
44
|
+
The View menu item appears when one or more lines have been inherited.
|
45
|
+
|
46
|
+
### Changed
|
47
|
+
|
48
|
+
- Fix block name processing for blocks with no name.
|
49
|
+
Demo in examples/block_names.md loads content of examples/load1.sh.
|
50
|
+
|
3
51
|
## [2.0.5] - 2024-04-24
|
4
52
|
|
5
53
|
### Changed
|
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 "2.0.
|
16
|
+
echo "2.0.7"
|
17
17
|
}
|
18
18
|
|
19
19
|
_mde() {
|
@@ -36,15 +36,15 @@ _mde() {
|
|
36
36
|
|
37
37
|
-d) COMPREPLY="0"; return 0 ;;
|
38
38
|
|
39
|
-
--dump-
|
39
|
+
--dump-delegate-object) COMPREPLY="0"; return 0 ;;
|
40
40
|
|
41
41
|
--dump-blocks-in-file) COMPREPLY="0"; return 0 ;;
|
42
42
|
|
43
|
-
--dump-
|
43
|
+
--dump-inherited-block_names) COMPREPLY="0"; return 0 ;;
|
44
44
|
|
45
|
-
--dump-
|
45
|
+
--dump-inherited-dependencies) COMPREPLY="0"; return 0 ;;
|
46
46
|
|
47
|
-
--dump-
|
47
|
+
--dump-inherited-lines) COMPREPLY="0"; return 0 ;;
|
48
48
|
|
49
49
|
--dump-menu-blocks) COMPREPLY="0"; return 0 ;;
|
50
50
|
|
@@ -66,12 +66,12 @@ _mde() {
|
|
66
66
|
|
67
67
|
--list-count) COMPREPLY="32"; return 0 ;;
|
68
68
|
|
69
|
+
--load-code) COMPREPLY="''"; return 0 ;;
|
70
|
+
|
69
71
|
--open) COMPREPLY="''"; return 0 ;;
|
70
72
|
|
71
73
|
-o) COMPREPLY="''"; return 0 ;;
|
72
74
|
|
73
|
-
--output-execution-summary) COMPREPLY="0"; return 0 ;;
|
74
|
-
|
75
75
|
--output-script) COMPREPLY="0"; return 0 ;;
|
76
76
|
|
77
77
|
--output-stdout) COMPREPLY="1"; return 0 ;;
|
@@ -80,14 +80,6 @@ _mde() {
|
|
80
80
|
|
81
81
|
-p) COMPREPLY="."; return 0 ;;
|
82
82
|
|
83
|
-
--save-executed-script) COMPREPLY="0"; return 0 ;;
|
84
|
-
|
85
|
-
--save-execution-output) COMPREPLY="0"; return 0 ;;
|
86
|
-
|
87
|
-
--saved-script-folder) COMPREPLY="logs"; return 0 ;;
|
88
|
-
|
89
|
-
--saved-stdout-folder) COMPREPLY="logs"; return 0 ;;
|
90
|
-
|
91
83
|
--user-must-approve) COMPREPLY="0"; return 0 ;;
|
92
84
|
|
93
85
|
-q) COMPREPLY="0"; return 0 ;;
|
@@ -102,7 +94,7 @@ _mde() {
|
|
102
94
|
# present matching option names
|
103
95
|
#
|
104
96
|
if [[ ${cur} == -* ]] ; then
|
105
|
-
opts=("--block-name" "--config" "--debug" "--dump-
|
97
|
+
opts=("--block-name" "--config" "--debug" "--dump-delegate-object" "--dump-blocks-in-file" "--dump-inherited-block_names" "--dump-inherited-dependencies" "--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" "--load-code" "--open" "--output-script" "--output-stdout" "--path" "--pwd" "--run-last-script" "--select-recent-output" "--select-recent-script" "--tab-completions" "--user-must-approve" "--version" "--display-level")
|
106
98
|
COMPREPLY=( $(compgen -W "$(printf "'%s' " "${opts[@]}")" -- "${cur}") )
|
107
99
|
|
108
100
|
return 0
|
@@ -125,15 +117,15 @@ _mde() {
|
|
125
117
|
|
126
118
|
-d) COMPREPLY=".BOOL."; return 0 ;;
|
127
119
|
|
128
|
-
--dump-
|
120
|
+
--dump-delegate-object) COMPREPLY=".BOOL."; return 0 ;;
|
129
121
|
|
130
122
|
--dump-blocks-in-file) COMPREPLY=".BOOL."; return 0 ;;
|
131
123
|
|
132
|
-
--dump-
|
124
|
+
--dump-inherited-block_names) COMPREPLY=".BOOL."; return 0 ;;
|
133
125
|
|
134
|
-
--dump-
|
126
|
+
--dump-inherited-dependencies) COMPREPLY=".BOOL."; return 0 ;;
|
135
127
|
|
136
|
-
--dump-
|
128
|
+
--dump-inherited-lines) COMPREPLY=".BOOL."; return 0 ;;
|
137
129
|
|
138
130
|
--dump-menu-blocks) COMPREPLY=".BOOL."; return 0 ;;
|
139
131
|
|
@@ -155,12 +147,12 @@ _mde() {
|
|
155
147
|
|
156
148
|
--list-count) COMPREPLY=".INT.1-."; return 0 ;;
|
157
149
|
|
150
|
+
--load-code) COMPREPLY=".PATH."; return 0 ;;
|
151
|
+
|
158
152
|
--open) COMPREPLY=".OPEN."; return 0 ;;
|
159
153
|
|
160
154
|
-o) COMPREPLY=".OPEN."; return 0 ;;
|
161
155
|
|
162
|
-
--output-execution-summary) COMPREPLY=".BOOL."; return 0 ;;
|
163
|
-
|
164
156
|
--output-script) COMPREPLY=".BOOL."; return 0 ;;
|
165
157
|
|
166
158
|
--output-stdout) COMPREPLY=".BOOL."; return 0 ;;
|
@@ -169,14 +161,6 @@ _mde() {
|
|
169
161
|
|
170
162
|
-p) COMPREPLY=".RELATIVE_PATH."; return 0 ;;
|
171
163
|
|
172
|
-
--save-executed-script) COMPREPLY=".BOOL."; return 0 ;;
|
173
|
-
|
174
|
-
--save-execution-output) COMPREPLY=".BOOL."; return 0 ;;
|
175
|
-
|
176
|
-
--saved-script-folder) COMPREPLY=".RELATIVE_PATH."; return 0 ;;
|
177
|
-
|
178
|
-
--saved-stdout-folder) COMPREPLY=".RELATIVE_PATH."; return 0 ;;
|
179
|
-
|
180
164
|
--user-must-approve) COMPREPLY=".BOOL."; return 0 ;;
|
181
165
|
|
182
166
|
-q) COMPREPLY=".BOOL."; return 0 ;;
|
@@ -194,4 +178,4 @@ _mde() {
|
|
194
178
|
|
195
179
|
complete -o filenames -o nospace -F _mde mde
|
196
180
|
# _mde_echo_version
|
197
|
-
# echo "Updated: 2024-
|
181
|
+
# echo "Updated: 2024-06-05 03:00:42 UTC"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Demonstrate display of block names and requiring blocks.
|
2
|
+
|
3
|
+
This block is listed by its name `A`.
|
4
|
+
It requires block `[C]`.
|
5
|
+
Executing it outputs `1`, `3`.
|
6
|
+
```bash :A +[C]
|
7
|
+
echo "1"
|
8
|
+
```
|
9
|
+
|
10
|
+
This block is listed according to its content `echo "2"`.
|
11
|
+
It requires blocks `A`, `[C]`.
|
12
|
+
Executing it outputs `1`, `2`, `3`.
|
13
|
+
It cannot be addressed/required.
|
14
|
+
```bash +A
|
15
|
+
echo "2"
|
16
|
+
```
|
17
|
+
|
18
|
+
This block is listed according to its content `echo "3"` and addressed by its nick name `[C]`.
|
19
|
+
It requires no blocks.
|
20
|
+
Executing it outputs `3`.
|
21
|
+
```bash :[C]
|
22
|
+
echo "3"
|
23
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Demo wrapping long lines
|
2
|
+
|
3
|
+
MDE detects the screen's dimensions: height (lines) and width (characters)
|
4
|
+
|
5
|
+
If `select_page_height` is positive, the height of the MDE menu is fixed. Otherwise, the height is derived from the screen's height.
|
6
|
+
|
7
|
+
Normal document text is displayed as disabled menu lines. The width of these lines is limited according to the screen's width.
|
8
|
+
|
9
|
+
::: Test Indented Lines
|
10
|
+
|
11
|
+
Indented with two spaces, this line should wrap in an aesthetically pleasing way. Indented with two spaces, this line should wrap in an aesthetically pleasing way.
|
12
|
+
|
13
|
+
Indented with a tab, this line should wrap in an aesthetically pleasing way. Indented with a tab, this line should wrap in an aesthetically pleasing way.
|
14
|
+
|
15
|
+
# Heading 1 - UPPER lower Mixed - Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega
|
16
|
+
## Heading 2 - UPPER lower Mixed - Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega
|
17
|
+
### Heading 3 - UPPER lower Mixed - Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega
|
data/examples/linked.md
CHANGED
@@ -92,6 +92,14 @@ load: examples/load2.sh
|
|
92
92
|
eval: true
|
93
93
|
```
|
94
94
|
|
95
|
+
::: Load file into inherited lines and switch document
|
96
|
+
Load (do not evaluate) and append to inherited lines and switch document.
|
97
|
+
```link :load_from_file_link_and_show
|
98
|
+
block: show_vars
|
99
|
+
file: examples/linked_show.md
|
100
|
+
load: examples/load1.sh
|
101
|
+
```
|
102
|
+
|
95
103
|
::: Save and Load
|
96
104
|
Save inherited lines to a file.
|
97
105
|
```link :save1
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Demonstrate loading inherited code via the command line.
|
2
|
+
|
3
|
+
Run this command to display the inherited code.
|
4
|
+
`mde --load-code examples/load1.sh examples/load_code.md display_variables`
|
5
|
+
|
6
|
+
```bash :display_variables
|
7
|
+
source bin/colorize_env_vars.sh
|
8
|
+
echo The current value of environment variables:
|
9
|
+
colorize_env_vars '' var1 var2
|
10
|
+
```
|
data/examples/nickname.md
CHANGED
@@ -1,26 +1,63 @@
|
|
1
1
|
# Demo block nicknames
|
2
2
|
|
3
3
|
```opts :(document_options)
|
4
|
-
|
4
|
+
pause_after_script_execution: true
|
5
5
|
```
|
6
6
|
|
7
|
+
## Blocks with no name
|
7
8
|
::: This block has no name.
|
8
9
|
::: The code block is displayed.
|
9
10
|
|
10
11
|
```bash
|
11
|
-
echo
|
12
|
+
echo This block has no name.
|
12
13
|
```
|
13
14
|
|
14
|
-
|
15
|
-
::: The code
|
16
|
-
::: The
|
15
|
+
## Blocks with nicknames
|
16
|
+
::: The code block is displayed.
|
17
|
+
::: The nickname can be used to require the block.
|
17
18
|
|
18
19
|
```bash :[A]
|
19
|
-
echo
|
20
|
+
echo 'This block has a nickname: [A].'
|
21
|
+
echo The full block is displayed in the menu.
|
20
22
|
```
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
+
### Nicknames in documents
|
25
|
+
::: Execute this block that requires the block above by its nickname.
|
24
26
|
```bash :[B] +[A]
|
25
|
-
echo
|
27
|
+
echo 'This block has a nickname: [B].'
|
28
|
+
echo 'This block requires block [A].'
|
29
|
+
```
|
30
|
+
|
31
|
+
### Nicknames from the command line
|
32
|
+
Block `[A]` is called from the command line.
|
33
|
+
```bash
|
34
|
+
mde examples/nickname.md '[A]'
|
35
|
+
```
|
36
|
+
|
37
|
+
## Blocks with hidden names
|
38
|
+
### There is a hidden block here.
|
39
|
+
::: This block has a hidden name: (C).
|
40
|
+
::: This block does not appear in the menu.
|
41
|
+
::: This block requires the block above by its nickname.
|
42
|
+
```bash :(C) +[A]
|
43
|
+
echo 'This block has a hidden name: (C).'
|
44
|
+
echo This block is hidden from the menu.
|
45
|
+
echo 'This block requires block [A].'
|
46
|
+
```
|
47
|
+
|
48
|
+
### Hidden names from the command line
|
49
|
+
Block `(C)` is called from the command line.
|
50
|
+
```bash
|
51
|
+
mde examples/nickname.md '(C)'
|
52
|
+
```
|
53
|
+
|
54
|
+
### Block without a name
|
55
|
+
::: This block does not have a name.
|
56
|
+
::: It requires hidden block (D).
|
57
|
+
```bash +(D)
|
58
|
+
echo "Block without a name"
|
59
|
+
```
|
60
|
+
::: This block has a hidden name: (D).
|
61
|
+
```bash :(D)
|
62
|
+
echo "Block D"
|
26
63
|
```
|
data/lib/color_scheme.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# encoding=utf-8
|
4
|
+
|
5
|
+
# A class that represents a color scheme based on configurable parameters
|
6
|
+
# that determine how the RGB values are calculated for a given string segment.
|
7
|
+
class ColorScheme
|
8
|
+
attr_accessor :base_red, :multiplier_red, :modulus_red,
|
9
|
+
:base_green, :multiplier_green, :modulus_green,
|
10
|
+
:base_blue, :multiplier_blue, :modulus_blue
|
11
|
+
|
12
|
+
# Initializes a new ColorScheme object with base values, multipliers, and moduli
|
13
|
+
# for the red, green, and blue components of an RGB color.
|
14
|
+
# @param [Integer] base_red Base red component value.
|
15
|
+
# @param [Integer] multiplier_red Multiplier for red component based on string hash.
|
16
|
+
# @param [Integer] modulus_red Modulus for calculating red component.
|
17
|
+
# @param [Integer] base_green Base green component value.
|
18
|
+
# @param [Integer] multiplier_green Multiplier for green component based on string hash.
|
19
|
+
# @param [Integer] modulus_green Modulus for calculating green component.
|
20
|
+
# @param [Integer] base_blue Base blue component value.
|
21
|
+
# @param [Integer] multiplier_blue Multiplier for blue component based on string hash.
|
22
|
+
# @param [Integer] modulus_blue Modulus for calculating blue component.
|
23
|
+
def initialize(base_red, multiplier_red, modulus_red,
|
24
|
+
base_green, multiplier_green, modulus_green,
|
25
|
+
base_blue, multiplier_blue, modulus_blue)
|
26
|
+
@base_red = base_red
|
27
|
+
@multiplier_red = multiplier_red
|
28
|
+
@modulus_red = modulus_red
|
29
|
+
@base_green = base_green
|
30
|
+
@multiplier_green = multiplier_green
|
31
|
+
@modulus_green = modulus_green
|
32
|
+
@base_blue = base_blue
|
33
|
+
@multiplier_blue = multiplier_blue
|
34
|
+
@modulus_blue = modulus_blue
|
35
|
+
end
|
36
|
+
|
37
|
+
# Calculates and returns the ANSI escape code for coloring a string segment
|
38
|
+
# based on its hash value.
|
39
|
+
# @param [String] segment The string segment to color.
|
40
|
+
# @return [String] ANSI escape code string with RGB color formatting.
|
41
|
+
def color_for(segment)
|
42
|
+
hash_value = segment.each_byte.reduce(0, :+)
|
43
|
+
red = @base_red + (@multiplier_red * (hash_value % @modulus_red))
|
44
|
+
green = @base_green + (@multiplier_green * (hash_value % @modulus_green))
|
45
|
+
blue = @base_blue + (@multiplier_blue * (hash_value % @modulus_blue))
|
46
|
+
"\e[38;2;#{red};#{green};#{blue}m#{segment}\e[0m"
|
47
|
+
end
|
48
|
+
|
49
|
+
# Applies color codes to each segment of a filesystem path, differentiating the
|
50
|
+
# final segment from others using a distinct color scheme.
|
51
|
+
# @param [String] path The filesystem path to colorize.
|
52
|
+
# @return [String] The colorized path.
|
53
|
+
def self.colorize_path(path)
|
54
|
+
segments = path.split('/')
|
55
|
+
segments.map.with_index do |segment, index|
|
56
|
+
color_scheme = if index == segments.size - 1
|
57
|
+
ColorScheme.new(192, 0, 1, 192, 0, 1, 192, 0, 1)
|
58
|
+
else
|
59
|
+
ColorScheme.new(32, 1, 192, 32, 1, 192, 255, 0, 1)
|
60
|
+
end
|
61
|
+
|
62
|
+
color_scheme.color_for(segment)
|
63
|
+
end.join('/')
|
64
|
+
end
|
65
|
+
end
|
data/lib/colorize.rb
CHANGED
@@ -13,6 +13,11 @@ class String
|
|
13
13
|
# @return [String] The formatted string.
|
14
14
|
def method_missing(method_name, *args, &block)
|
15
15
|
case method_name.to_s
|
16
|
+
when /^fg_bg_rgb_/
|
17
|
+
bytes = $'.split('_')
|
18
|
+
fg_bg_rgb_color(bytes[0..2].join(';'), bytes[3..5].join(';'))
|
19
|
+
when /^fg_bg_rgbh_/
|
20
|
+
hex_to_fg_bg_rgb($')
|
16
21
|
when /^fg_rgb_/
|
17
22
|
fg_rgb_color($'.gsub('_', ';'))
|
18
23
|
when /^fg_rgbh_/
|
@@ -29,6 +34,14 @@ class String
|
|
29
34
|
"\033[#{self}\033[0m"
|
30
35
|
end
|
31
36
|
|
37
|
+
# Applies a 24-bit RGB foreground color to the string.
|
38
|
+
#
|
39
|
+
# @param rgb [String] The RGB color, expressed as a string like "1;2;3".
|
40
|
+
# @return [String] The string with the applied RGB foreground color.
|
41
|
+
def fg_bg_rgb_color(fg_rgb, bg_rgb)
|
42
|
+
"38;2;#{fg_rgb}m\033[48;2;#{bg_rgb}m#{self}".ansi_control_sequence
|
43
|
+
end
|
44
|
+
|
32
45
|
# Applies a 24-bit RGB foreground color to the string.
|
33
46
|
#
|
34
47
|
# @param rgb [String] The RGB color, expressed as a string like "1;2;3".
|
@@ -37,6 +50,18 @@ class String
|
|
37
50
|
"38;2;#{rgb}m#{self}".ansi_control_sequence
|
38
51
|
end
|
39
52
|
|
53
|
+
# Converts hex color codes to RGB and applies them to the string.
|
54
|
+
#
|
55
|
+
# @param hex_str [String] The RGB color, expressed as a hex string like "FF00FF".
|
56
|
+
# @return [String] The string with the applied RGB foreground color.
|
57
|
+
def hex_to_fg_bg_rgb(hex_str)
|
58
|
+
values = hex_str.split('_').map { |hex| hex.to_i(16).to_s }
|
59
|
+
fg_bg_rgb_color(
|
60
|
+
values[0..2].join(';'),
|
61
|
+
values[3..5].join(';')
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
40
65
|
# Converts hex color codes to RGB and applies them to the string.
|
41
66
|
#
|
42
67
|
# @param hex_str [String] The RGB color, expressed as a hex string like "FF00FF".
|
data/lib/constants.rb
CHANGED
@@ -6,9 +6,9 @@
|
|
6
6
|
require_relative 'block_types'
|
7
7
|
|
8
8
|
class ExecutionStreams
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
STD_ERR = :stderr
|
10
|
+
STD_IN = :stdin
|
11
|
+
STD_OUT = :stdout
|
12
12
|
end
|
13
13
|
|
14
14
|
IndexedLine = Struct.new(:index, :line) do
|
@@ -18,29 +18,24 @@ IndexedLine = Struct.new(:index, :line) do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
class LinkKeys
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
21
|
+
BLOCK = 'block'
|
22
|
+
EVAL = 'eval'
|
23
|
+
EXEC = 'exec'
|
24
|
+
FILE = 'file'
|
25
|
+
LOAD = 'load'
|
26
|
+
NEXT_BLOCK = 'next_block'
|
27
|
+
RETURN = 'return'
|
28
|
+
SAVE = 'save'
|
29
|
+
VARS = 'vars'
|
30
30
|
end
|
31
31
|
|
32
32
|
class LoadFile
|
33
|
-
|
34
|
-
|
33
|
+
LOAD = true
|
34
|
+
REUSE = false
|
35
35
|
end
|
36
36
|
|
37
37
|
LoadFileLinkState = Struct.new(:load_file, :link_state)
|
38
38
|
|
39
|
-
class MenuControl
|
40
|
-
Fresh = false
|
41
|
-
Repeat = true
|
42
|
-
end
|
43
|
-
|
44
39
|
class MenuOptions
|
45
40
|
YES = 1
|
46
41
|
NO = 2
|
@@ -51,7 +46,12 @@ end
|
|
51
46
|
class MenuState
|
52
47
|
BACK = :back
|
53
48
|
CONTINUE = :continue
|
49
|
+
EDIT = :edit
|
54
50
|
EXIT = :exit
|
51
|
+
LOAD = :load
|
52
|
+
SAVE = :save
|
53
|
+
SHELL = :shell
|
54
|
+
VIEW = :view
|
55
55
|
end
|
56
56
|
|
57
57
|
# a struct to hold the data for a single line
|
data/lib/fcb.rb
CHANGED
@@ -3,6 +3,21 @@
|
|
3
3
|
|
4
4
|
# encoding=utf-8
|
5
5
|
|
6
|
+
class Hash
|
7
|
+
# block name in commands and documents
|
8
|
+
def pub_name
|
9
|
+
fetch(:nickname, nil) || fetch(:oname, nil)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
# require 'ostruct'
|
13
|
+
|
14
|
+
# class BlkS < OpenStruct
|
15
|
+
# # Method to fetch the value associated with the attribute :nickname or :oname
|
16
|
+
# def pub_name
|
17
|
+
# self.nickname || self.oname
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
6
21
|
module MarkdownExec
|
7
22
|
class Error < StandardError; end
|
8
23
|
|