mdless 2.1.7 → 2.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/mdless/colors.rb +13 -11
- data/lib/mdless/console.rb +6 -6
- data/lib/mdless/converter.rb +19 -1
- data/lib/mdless/hash.rb +5 -4
- data/lib/mdless/string.rb +1 -1
- data/lib/mdless/theme.rb +8 -2
- data/lib/mdless/version.rb +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: 7b6335a8f0eb1e43af37924810a1e8e6b94f5b2da35b745824f3ce735536777d
|
4
|
+
data.tar.gz: 54643d669cfef096d92405e4b1ed2a216c749a67c3fb2f03dc32ad91e7a5f98a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a3d3fc7ee471da0cd3b882deba060a19728492a2493c06cca461029ce7d664940e8e0f602a324c71ede7d8e0b617365e7375cb4702cd7b19a91d440fda32a24
|
7
|
+
data.tar.gz: be3fc65aca571dcc96af250f8bc0faf0e5c8be3a7ed1a2b30229fd5fd501e6087a8990bcc43f5d8f60b21599167833f55381a759a54e7765a3be4db729e16de4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
2.1.9
|
2
|
+
: Code block prefix configurable, can be left empty to make more copyable code blocks
|
3
|
+
: Remove empty lines from block quotes
|
4
|
+
: Infinite loop when calculating ANSI emphasis
|
5
|
+
: Don't accept colors or semicolons inside of @tag names
|
6
|
+
|
7
|
+
2.1.8
|
8
|
+
: --update-theme option to add any missing keys to your theme file
|
9
|
+
: Strip ul_char of any spaces before inserting
|
10
|
+
|
1
11
|
2.1.7
|
2
12
|
: Dedup and remove empty escape codes before output
|
3
13
|
: Tables losing column alignment
|
data/lib/mdless/colors.rb
CHANGED
@@ -92,6 +92,7 @@ module CLIMarkdown
|
|
92
92
|
bg = nil
|
93
93
|
rgbb = c
|
94
94
|
else
|
95
|
+
em = []
|
95
96
|
c.split(/;/).each do |i|
|
96
97
|
x = i.to_i
|
97
98
|
if x <= 9
|
@@ -113,10 +114,13 @@ module CLIMarkdown
|
|
113
114
|
end
|
114
115
|
end
|
115
116
|
|
116
|
-
escape =
|
117
|
+
escape = ''
|
118
|
+
escape += "\e[#{em.join(';')}m" unless em.empty?
|
117
119
|
escape += "\e[#{rgbb}m" if rgbb
|
118
120
|
escape += "\e[#{rgbf}m" if rgbf
|
119
|
-
|
121
|
+
fg_bg = [fg, bg].delete_if(&:nil?).join(';')
|
122
|
+
escape += "\e[#{fg_bg}m" unless fg_bg.empty?
|
123
|
+
escape
|
120
124
|
end
|
121
125
|
|
122
126
|
def blackout(bgcolor)
|
@@ -133,25 +137,23 @@ module CLIMarkdown
|
|
133
137
|
self.uncolor.size
|
134
138
|
end
|
135
139
|
|
136
|
-
def wrap(width=78,foreground=:x)
|
137
|
-
if
|
138
|
-
return self
|
139
|
-
end
|
140
|
+
def wrap(width=78, foreground=:x)
|
141
|
+
return self if uncolor =~ /(^([%~] |\s*>)| +[=-]{5,})/
|
140
142
|
|
141
143
|
visible_width = 0
|
142
144
|
lines = []
|
143
145
|
line = ''
|
144
146
|
last_ansi = ''
|
145
147
|
|
146
|
-
line +=
|
147
|
-
input =
|
148
|
+
line += match(/^\s*/)[0].gsub(/\t/, ' ')
|
149
|
+
input = dup # .gsub(/(\w-)(\w)/,'\1 \2')
|
148
150
|
# input.gsub!(/\[.*?\]\(.*?\)/) do |link|
|
149
151
|
# link.gsub(/ /, "\u00A0")
|
150
152
|
# end
|
151
153
|
input.split(/\s+/).each do |word|
|
152
|
-
last_ansi = line.
|
154
|
+
last_ansi = line.last_color_code
|
153
155
|
if visible_width + word.size_clean >= width
|
154
|
-
lines << line + xc
|
156
|
+
lines << line + xc
|
155
157
|
visible_width = word.size_clean
|
156
158
|
line = last_ansi + word
|
157
159
|
elsif line.empty?
|
@@ -162,7 +164,7 @@ module CLIMarkdown
|
|
162
164
|
line << ' ' << last_ansi + word
|
163
165
|
end
|
164
166
|
end
|
165
|
-
lines << line + match(/\s*$/)[0] + xc
|
167
|
+
lines << line + match(/\s*$/)[0] + xc if line
|
166
168
|
lines.map!.with_index do |l, i|
|
167
169
|
(i.positive? ? l[i - 1].last_color_code : '') + l
|
168
170
|
end
|
data/lib/mdless/console.rb
CHANGED
@@ -97,8 +97,8 @@ module Redcarpet
|
|
97
97
|
hilite = xc + hilite.split(/\n/).map do |l|
|
98
98
|
[
|
99
99
|
color('code_block marker'),
|
100
|
-
'
|
101
|
-
"#{color('code_block bg')}#{l.
|
100
|
+
MDLess.theme['code_block']['character'],
|
101
|
+
"#{color('code_block bg')}#{l.rstrip}#{xc}"
|
102
102
|
].join
|
103
103
|
end.join("\n").blackout(MDLess.theme['code_block']['bg']) + "#{xc}\n"
|
104
104
|
end
|
@@ -110,7 +110,7 @@ module Redcarpet
|
|
110
110
|
hilite = code_block.split(/\n/).map do |line|
|
111
111
|
[
|
112
112
|
color('code_block marker'),
|
113
|
-
'
|
113
|
+
MDLess.theme['code_block']['character'],
|
114
114
|
color('code_block color'),
|
115
115
|
line,
|
116
116
|
xc
|
@@ -172,7 +172,7 @@ module Redcarpet
|
|
172
172
|
|
173
173
|
def block_quote(quote)
|
174
174
|
ret = "\n\n"
|
175
|
-
quote.wrap(MDLess.cols, color('blockquote color')).split(/\n/).each do |line|
|
175
|
+
quote.strip.wrap(MDLess.cols, color('blockquote color')).split(/\n/).each do |line|
|
176
176
|
ret += [
|
177
177
|
color('blockquote marker color'),
|
178
178
|
MDLess.theme['blockquote']['marker']['character'],
|
@@ -555,7 +555,7 @@ module Redcarpet
|
|
555
555
|
[
|
556
556
|
indent,
|
557
557
|
color('list bullet'),
|
558
|
-
MDLess.theme['list']['ul_char'],
|
558
|
+
MDLess.theme['list']['ul_char'].strip,
|
559
559
|
' ',
|
560
560
|
color('list color'),
|
561
561
|
indent_lines(content, indent).strip,
|
@@ -941,7 +941,7 @@ module Redcarpet
|
|
941
941
|
def highlight_tags(input)
|
942
942
|
tag_color = color('at_tags tag')
|
943
943
|
value_color = color('at_tags value')
|
944
|
-
input.gsub(/(?<pre>\s|m)(?<tag>@[^ \]
|
944
|
+
input.gsub(/(?<pre>\s|m)(?<tag>@[^ \]:;.?!,("'\n]+)(?:(?<lparen>\()(?<value>.*?)(?<rparen>\)))?/) do
|
945
945
|
m = Regexp.last_match
|
946
946
|
last_color = m.pre_match.last_color_code
|
947
947
|
[
|
data/lib/mdless/converter.rb
CHANGED
@@ -146,6 +146,7 @@ module CLIMarkdown
|
|
146
146
|
theme = File.expand_path("~/.config/mdless/#{theme}.theme")
|
147
147
|
File.open(theme, 'w') { |f| f.puts(YAML.dump(MDLess.theme)) } unless File.exist?(theme)
|
148
148
|
`#{ENV['EDITOR']} '#{theme}'`
|
149
|
+
Process.exit 0
|
149
150
|
end
|
150
151
|
|
151
152
|
default(:inline_footnotes, false)
|
@@ -212,10 +213,15 @@ module CLIMarkdown
|
|
212
213
|
end
|
213
214
|
|
214
215
|
default(:update_config, false)
|
215
|
-
opts.on('--update_config', 'Update the configuration file with new keys and current command line options') do
|
216
|
+
opts.on('--update-config', '--update_config', 'Update the configuration file with new keys and current command line options') do
|
216
217
|
MDLess.options[:update_config] = true
|
217
218
|
end
|
218
219
|
|
220
|
+
default(:update_theme, false)
|
221
|
+
opts.on('--update-theme', 'Update the current theme file with all available keys') do
|
222
|
+
MDLess.options[:update_theme] = true
|
223
|
+
end
|
224
|
+
|
219
225
|
default(:wiki_links, false)
|
220
226
|
opts.on('--[no-]wiki-links', 'Highlight [[wiki links]]') do |opt|
|
221
227
|
MDLess.options[:wiki_links] = opt
|
@@ -229,6 +235,17 @@ module CLIMarkdown
|
|
229
235
|
exit 1
|
230
236
|
end
|
231
237
|
|
238
|
+
if MDLess.options[:update_theme]
|
239
|
+
FileUtils.mkdir_p(File.dirname(config))
|
240
|
+
|
241
|
+
theme = MDLess.options[:theme] =~ /default/ ? 'mdless' : MDLess.options[:theme]
|
242
|
+
theme = File.join(File.dirname(config), "#{theme}.theme")
|
243
|
+
contents = YAML.dump(MDLess.theme)
|
244
|
+
|
245
|
+
File.open(theme, 'w') { |f| f.puts contents }
|
246
|
+
Process.exit 0
|
247
|
+
end
|
248
|
+
|
232
249
|
if !File.exist?(config) || MDLess.options[:update_config]
|
233
250
|
FileUtils.mkdir_p(File.dirname(config))
|
234
251
|
File.open(config, 'w') do |f|
|
@@ -236,6 +253,7 @@ module CLIMarkdown
|
|
236
253
|
opts.delete(:list)
|
237
254
|
opts.delete(:section)
|
238
255
|
opts.delete(:update_config)
|
256
|
+
opts.delete(:update_theme)
|
239
257
|
opts = opts.keys.map(&:to_s).sort.map { |k| [k.to_sym, opts[k.to_sym]] }.to_h
|
240
258
|
f.puts YAML.dump(opts)
|
241
259
|
warn "Config file saved to #{config}"
|
data/lib/mdless/hash.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
module CLIMarkdown
|
2
|
+
# Hash helpers
|
2
3
|
class ::Hash
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
def deep_merge(second)
|
5
|
+
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
|
6
|
+
self.merge(second ? second.to_h : second, &merger)
|
7
|
+
end
|
7
8
|
end
|
8
9
|
end
|
data/lib/mdless/string.rb
CHANGED
@@ -107,7 +107,7 @@ class ::String
|
|
107
107
|
log = MDLess.log
|
108
108
|
tag_color = color('at_tags tag')
|
109
109
|
value_color = color('at_tags value')
|
110
|
-
gsub(/(?<pre>\s|m)(?<tag>@[^ \]
|
110
|
+
gsub(/(?<pre>\s|m)(?<tag>@[^ \]:;.?!,("'\n]+)(?:(?<lparen>\()(?<value>.*?)(?<rparen>\)))?(?=[ ;!,.?]|$)/) do
|
111
111
|
m = Regexp.last_match
|
112
112
|
last_color = m.pre_match.last_color_code
|
113
113
|
[
|
data/lib/mdless/theme.rb
CHANGED
@@ -66,6 +66,7 @@ module CLIMarkdown
|
|
66
66
|
},
|
67
67
|
'code_block' => {
|
68
68
|
'marker' => 'intense_black',
|
69
|
+
'character' => '>',
|
69
70
|
'bg' => 'on_black',
|
70
71
|
'color' => 'white on_black',
|
71
72
|
'border' => 'blue',
|
@@ -118,16 +119,21 @@ module CLIMarkdown
|
|
118
119
|
}
|
119
120
|
|
120
121
|
def load_theme_file(theme_file)
|
121
|
-
|
122
|
+
raise "Theme #{theme_file} doesn't exist" unless File.exist?(theme_file)
|
123
|
+
|
122
124
|
begin
|
125
|
+
theme_contents = IO.read(theme_file)
|
126
|
+
new_theme = YAML.load(theme_contents)
|
123
127
|
theme = THEME_DEFAULTS.deep_merge(new_theme)
|
124
128
|
# # write merged theme back in case there are new keys since
|
125
129
|
# # last updated
|
126
130
|
# File.open(theme_file,'w') {|f|
|
127
131
|
# f.puts theme.to_yaml
|
128
132
|
# }
|
129
|
-
rescue StandardError
|
133
|
+
rescue StandardError => e
|
130
134
|
@log.warn('Error merging user theme')
|
135
|
+
warn e
|
136
|
+
warn e.backtrace
|
131
137
|
theme = THEME_DEFAULTS
|
132
138
|
if File.basename(theme_file) =~ /mdless\.theme/
|
133
139
|
FileUtils.rm(theme_file)
|
data/lib/mdless/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redcarpet
|