mdless 2.0.8 → 2.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -0
- data/lib/mdless/colors.rb +113 -0
- data/lib/mdless/console.rb +179 -101
- data/lib/mdless/converter.rb +1 -1
- data/lib/mdless/string.rb +12 -0
- data/lib/mdless/theme.rb +16 -2
- data/lib/mdless/version.rb +3 -1
- data/lib/mdless.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a8bb0bc65cda56264422a8f0fc98ed7c8d75f67d6604791fe157d111223d358
|
4
|
+
data.tar.gz: 25fa19dec8c2c34bccaa00b3fccf542c13384e12498cda7f1b529f703a7b8399
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65664be5ef8893f3f2c1e377633bdb69c3780e2a957c2f555e50add0e059242a966663bb0faaf609d6a9015d4ec49aba18c849bcdee58bc62e2ab7cd251505e2
|
7
|
+
data.tar.gz: 6b784620a50a0c182a49244640bf278e7ab19a6e3e840d8bc1c83eb308709f5fcb0979120157b8671101b0135cbec6a1bf52ec3cd42d765ae08aed8a940cab45
|
data/README.md
CHANGED
@@ -94,6 +94,21 @@ Font and color settings are set using a string of color names and modifiers. A t
|
|
94
94
|
|
95
95
|
Some extra (non-color) settings are available for certain keys, e.g. `pad_char` to define the right padding character used on level 1 and 2 headlines. Note that you can change the [Pygments](http://pygments.org/) theme used for syntax highlighting with the code_block.pygments_theme setting. For a list of available styles (assuming you have Pygments installed), use `pygmentize -L styles`.
|
96
96
|
|
97
|
+
The display of characters around emphasis and code spans can be configured. By default, the surrounding character for bold is `**`, italic is `_`, and code span is \`. You can leave these keys empty to not display characters at all. For triple-emphasized text, the text will be surrounded by italic and bold characters, in that order.
|
98
|
+
|
99
|
+
```yaml
|
100
|
+
emphasis:
|
101
|
+
bold: b
|
102
|
+
bold_character: "**"
|
103
|
+
italic: u i
|
104
|
+
italic_character: ""
|
105
|
+
bold-italic: b u i
|
106
|
+
code_span:
|
107
|
+
marker: b white
|
108
|
+
color: b white on_intense_black
|
109
|
+
character: ""
|
110
|
+
```
|
111
|
+
|
97
112
|
*Note:* the ANSI escape codes are reset every time the color changes, so, for example, if you have a key that defines underlines for the url in a link, the underline will automatically be removed when it gets to a bracket. This also means that if you define a background color, you'll need to define it again on all the keys that it should affect.
|
98
113
|
|
99
114
|
Base colors:
|
data/lib/mdless/colors.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module CLIMarkdown
|
2
2
|
module Colors
|
3
|
+
ESCAPE_REGEX = /(?<=\[)(?:(?:(?:[349]|10)[0-9]|[0-9])?;?)+(?=m)/.freeze
|
3
4
|
|
4
5
|
COLORS = {
|
5
6
|
:reset => 0, # synonym for :clear
|
@@ -57,6 +58,118 @@ module CLIMarkdown
|
|
57
58
|
self.gsub(/\e\[[\d;]+m/,'')
|
58
59
|
end
|
59
60
|
|
61
|
+
# Get the calculated ANSI color at the end of the
|
62
|
+
# string
|
63
|
+
#
|
64
|
+
# @return ANSI escape sequence to match color
|
65
|
+
#
|
66
|
+
def last_color_code
|
67
|
+
m = scan(ESCAPE_REGEX)
|
68
|
+
|
69
|
+
em = ['0']
|
70
|
+
fg = nil
|
71
|
+
bg = nil
|
72
|
+
rgbf = nil
|
73
|
+
rgbb = nil
|
74
|
+
|
75
|
+
m.each do |c|
|
76
|
+
case c
|
77
|
+
when '0'
|
78
|
+
em = ['0']
|
79
|
+
fg, bg, rgbf, rgbb = nil
|
80
|
+
when /^[34]8/
|
81
|
+
case c
|
82
|
+
when /^3/
|
83
|
+
fg = nil
|
84
|
+
rgbf = c
|
85
|
+
when /^4/
|
86
|
+
bg = nil
|
87
|
+
rgbb = c
|
88
|
+
end
|
89
|
+
else
|
90
|
+
c.split(/;/).each do |i|
|
91
|
+
x = i.to_i
|
92
|
+
if x <= 9
|
93
|
+
em << x
|
94
|
+
elsif x >= 30 && x <= 39
|
95
|
+
rgbf = nil
|
96
|
+
fg = x
|
97
|
+
elsif x >= 40 && x <= 49
|
98
|
+
rgbb = nil
|
99
|
+
bg = x
|
100
|
+
elsif x >= 90 && x <= 97
|
101
|
+
rgbf = nil
|
102
|
+
fg = x
|
103
|
+
elsif x >= 100 && x <= 107
|
104
|
+
rgbb = nil
|
105
|
+
bg = x
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
escape = "\e[#{em.join(';')}m"
|
112
|
+
escape += "\e[#{rgbb}m" if rgbb
|
113
|
+
escape += "\e[#{rgbf}m" if rgbf
|
114
|
+
escape + "\e[#{[fg, bg].delete_if(&:nil?).join(';')}m"
|
115
|
+
end
|
116
|
+
|
117
|
+
# Get the calculated ANSI color at the end of the
|
118
|
+
# string
|
119
|
+
#
|
120
|
+
# @return ANSI escape sequence to match color
|
121
|
+
#
|
122
|
+
def last_color_code
|
123
|
+
m = scan(ESCAPE_REGEX)
|
124
|
+
|
125
|
+
em = ['0']
|
126
|
+
fg = nil
|
127
|
+
bg = nil
|
128
|
+
rgbf = nil
|
129
|
+
rgbb = nil
|
130
|
+
|
131
|
+
m.each do |c|
|
132
|
+
case c
|
133
|
+
when '0'
|
134
|
+
em = ['0']
|
135
|
+
fg, bg, rgbf, rgbb = nil
|
136
|
+
when /^[34]8/
|
137
|
+
case c
|
138
|
+
when /^3/
|
139
|
+
fg = nil
|
140
|
+
rgbf = c
|
141
|
+
when /^4/
|
142
|
+
bg = nil
|
143
|
+
rgbb = c
|
144
|
+
end
|
145
|
+
else
|
146
|
+
c.split(/;/).each do |i|
|
147
|
+
x = i.to_i
|
148
|
+
if x <= 9
|
149
|
+
em << x
|
150
|
+
elsif x >= 30 && x <= 39
|
151
|
+
rgbf = nil
|
152
|
+
fg = x
|
153
|
+
elsif x >= 40 && x <= 49
|
154
|
+
rgbb = nil
|
155
|
+
bg = x
|
156
|
+
elsif x >= 90 && x <= 97
|
157
|
+
rgbf = nil
|
158
|
+
fg = x
|
159
|
+
elsif x >= 100 && x <= 107
|
160
|
+
rgbb = nil
|
161
|
+
bg = x
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
escape = "\e[#{em.join(';')}m"
|
168
|
+
escape += "\e[#{rgbb}m" if rgbb
|
169
|
+
escape += "\e[#{rgbf}m" if rgbf
|
170
|
+
escape + "\e[#{[fg, bg].delete_if(&:nil?).join(';')}m"
|
171
|
+
end
|
172
|
+
|
60
173
|
def blackout(bgcolor)
|
61
174
|
key = bgcolor.to_sym
|
62
175
|
bg = COLORS.key?(key) ? COLORS[key] : 40
|
data/lib/mdless/console.rb
CHANGED
@@ -7,11 +7,21 @@ module Redcarpet
|
|
7
7
|
|
8
8
|
@@listitemid = 0
|
9
9
|
@@listid = 0
|
10
|
+
@@elementid = 0
|
10
11
|
@@footnotes = []
|
11
12
|
@@headers = []
|
12
13
|
@@links = []
|
13
14
|
@@footer_links = []
|
14
15
|
|
16
|
+
def pre_element
|
17
|
+
@@elementid += 1
|
18
|
+
"<<pre#{@@elementid}>>"
|
19
|
+
end
|
20
|
+
|
21
|
+
def post_element
|
22
|
+
"<<post#{@@elementid}>>"
|
23
|
+
end
|
24
|
+
|
15
25
|
def xc
|
16
26
|
x + color('text')
|
17
27
|
end
|
@@ -268,42 +278,72 @@ module Redcarpet
|
|
268
278
|
|
269
279
|
def autolink(link, _)
|
270
280
|
[
|
281
|
+
pre_element,
|
271
282
|
color('link brackets'),
|
272
283
|
'<',
|
273
284
|
color('link url'),
|
274
285
|
link,
|
275
286
|
color('link brackets'),
|
276
287
|
'>',
|
277
|
-
xc
|
288
|
+
xc,
|
289
|
+
post_element
|
278
290
|
].join('')
|
279
291
|
end
|
280
292
|
|
281
293
|
def codespan(code)
|
282
294
|
[
|
295
|
+
pre_element,
|
283
296
|
color('code_span marker'),
|
284
|
-
'
|
297
|
+
@theme['code_span']['character'],
|
285
298
|
color('code_span color'),
|
286
299
|
code,
|
287
300
|
color('code_span marker'),
|
288
|
-
'
|
289
|
-
xc
|
301
|
+
@theme['code_span']['character'],
|
302
|
+
xc,
|
303
|
+
post_element
|
290
304
|
].join('')
|
291
305
|
end
|
292
306
|
|
293
307
|
def double_emphasis(text)
|
294
|
-
|
308
|
+
[
|
309
|
+
pre_element,
|
310
|
+
color('emphasis bold'),
|
311
|
+
@theme['emphasis']['bold_character'],
|
312
|
+
text,
|
313
|
+
@theme['emphasis']['bold_character'],
|
314
|
+
xc,
|
315
|
+
post_element
|
316
|
+
].join
|
295
317
|
end
|
296
318
|
|
297
319
|
def emphasis(text)
|
298
|
-
|
320
|
+
[
|
321
|
+
pre_element,
|
322
|
+
color('emphasis italic'),
|
323
|
+
@theme['emphasis']['italic_character'],
|
324
|
+
text,
|
325
|
+
@theme['emphasis']['italic_character'],
|
326
|
+
xc,
|
327
|
+
post_element
|
328
|
+
].join
|
299
329
|
end
|
300
330
|
|
301
331
|
def triple_emphasis(text)
|
302
|
-
|
332
|
+
[
|
333
|
+
pre_element,
|
334
|
+
color('emphasis bold-italic'),
|
335
|
+
@theme['emphasis']['italic_character'],
|
336
|
+
@theme['emphasis']['bold_character'],
|
337
|
+
text,
|
338
|
+
@theme['emphasis']['bold_character'],
|
339
|
+
@theme['emphasis']['italic_character'],
|
340
|
+
xc,
|
341
|
+
post_element
|
342
|
+
].join
|
303
343
|
end
|
304
344
|
|
305
345
|
def highlight(text)
|
306
|
-
"#{color('highlight')}#{text}#{xc}"
|
346
|
+
"#{pre_element}#{color('highlight')}#{text}#{xc}#{post_element}"
|
307
347
|
end
|
308
348
|
|
309
349
|
def color_image_tag(link, title, alt_text)
|
@@ -321,80 +361,12 @@ module Redcarpet
|
|
321
361
|
title.nil? ? '' : %( "#{title}"),
|
322
362
|
color('image brackets'),
|
323
363
|
')',
|
324
|
-
xc
|
364
|
+
xc,
|
325
365
|
].join
|
326
366
|
end
|
327
367
|
|
328
368
|
def image(link, title, alt_text)
|
329
|
-
|
330
|
-
if exec_available('imgcat')
|
331
|
-
@log.info('Using imgcat for image rendering')
|
332
|
-
elsif exec_available('chafa')
|
333
|
-
@log.info('Using chafa for image rendering')
|
334
|
-
end
|
335
|
-
img_path = link
|
336
|
-
if img_path =~ /^http/ && @options[:remote_images]
|
337
|
-
if exec_available('imgcat')
|
338
|
-
@log.info('Using imgcat for image rendering')
|
339
|
-
begin
|
340
|
-
res, s = Open3.capture2(%(curl -sS "#{img_path}" 2> /dev/null | imgcat))
|
341
|
-
|
342
|
-
if s.success?
|
343
|
-
pre = !alt_text.nil? ? " #{c(%i[d blue])}[#{alt_text.strip}]\n" : ''
|
344
|
-
post = !title.nil? ? "\n #{c(%i[b blue])}-- #{title} --" : ''
|
345
|
-
result = pre + res + post
|
346
|
-
end
|
347
|
-
rescue StandardError => e
|
348
|
-
@log.error(e)
|
349
|
-
end
|
350
|
-
elsif exec_available('chafa')
|
351
|
-
@log.info('Using chafa for image rendering')
|
352
|
-
term = ''
|
353
|
-
term = ENV['TERM_PROGRAM'] =~ /iterm/i ? '-f iterm' : term
|
354
|
-
term = ENV['TERM_PROGRAM'] =~ /kitty/i ? '-f kitty' : term
|
355
|
-
FileUtils.rm_r '.mdless_tmp', force: true if File.directory?('.mdless_tmp')
|
356
|
-
Dir.mkdir('.mdless_tmp')
|
357
|
-
Dir.chdir('.mdless_tmp')
|
358
|
-
`curl -SsO #{img_path} 2> /dev/null`
|
359
|
-
tmp_img = File.basename(img_path)
|
360
|
-
img = `chafa #{term} "#{tmp_img}"`
|
361
|
-
pre = alt_text ? " #{c(%i[d blue])}[#{alt_text.strip}]\n" : ''
|
362
|
-
post = title ? "\n #{c(%i[b blue])}-- #{tail} --" : ''
|
363
|
-
result = pre + img + post
|
364
|
-
Dir.chdir('..')
|
365
|
-
FileUtils.rm_r '.mdless_tmp', force: true
|
366
|
-
else
|
367
|
-
@log.warn('No viewer for remote images')
|
368
|
-
end
|
369
|
-
else
|
370
|
-
if img_path =~ %r{^[~/]}
|
371
|
-
img_path = File.expand_path(img_path)
|
372
|
-
elsif @file
|
373
|
-
base = File.expand_path(File.dirname(@file))
|
374
|
-
img_path = File.join(base, img_path)
|
375
|
-
end
|
376
|
-
if File.exist?(img_path)
|
377
|
-
pre = !alt_text.nil? ? " #{c(%i[d blue])}[#{alt_text.strip}]\n" : ''
|
378
|
-
post = !title.nil? ? "\n #{c(%i[b blue])}-- #{title} --" : ''
|
379
|
-
if exec_available('imgcat')
|
380
|
-
img = `imgcat -p "#{img_path}"`
|
381
|
-
@log.info("Rendering image with `imgcat -p #{img_path}`")
|
382
|
-
elsif exec_available('chafa')
|
383
|
-
term = ''
|
384
|
-
term = ENV['TERM_PROGRAM'] =~ /iterm/i ? '-f iterm' : term
|
385
|
-
term = ENV['TERM_PROGRAM'] =~ /kitty/i ? '-f kitty' : term
|
386
|
-
@log.info("Rendering image with `chafa #{term} #{img_path}`")
|
387
|
-
img = `chafa #{term} "#{img_path}"`
|
388
|
-
end
|
389
|
-
result = pre + img + post
|
390
|
-
end
|
391
|
-
end
|
392
|
-
end
|
393
|
-
if result.nil?
|
394
|
-
color_image_tag(link, title, alt_text)
|
395
|
-
else
|
396
|
-
result + xc
|
397
|
-
end
|
369
|
+
"<<img>>#{link}||#{title}||#{alt_text}<</img>>"
|
398
370
|
end
|
399
371
|
|
400
372
|
def linebreak
|
@@ -403,6 +375,7 @@ module Redcarpet
|
|
403
375
|
|
404
376
|
def color_link(link, title, content)
|
405
377
|
[
|
378
|
+
pre_element,
|
406
379
|
color('link brackets'),
|
407
380
|
'[',
|
408
381
|
color('link text'),
|
@@ -414,12 +387,14 @@ module Redcarpet
|
|
414
387
|
title.nil? ? '' : %( "#{title}"),
|
415
388
|
color('link brackets'),
|
416
389
|
')',
|
417
|
-
xc
|
390
|
+
xc,
|
391
|
+
post_element
|
418
392
|
].join
|
419
393
|
end
|
420
394
|
|
421
395
|
def color_link_reference(link, idx, content)
|
422
396
|
[
|
397
|
+
pre_element,
|
423
398
|
color('link brackets'),
|
424
399
|
'[',
|
425
400
|
color('link text'),
|
@@ -430,7 +405,8 @@ module Redcarpet
|
|
430
405
|
idx,
|
431
406
|
color('link brackets'),
|
432
407
|
']',
|
433
|
-
xc
|
408
|
+
xc,
|
409
|
+
post_element
|
434
410
|
].join
|
435
411
|
end
|
436
412
|
|
@@ -463,19 +439,19 @@ module Redcarpet
|
|
463
439
|
end
|
464
440
|
|
465
441
|
def color_tags(html)
|
466
|
-
html.gsub(%r{(<\S+(
|
442
|
+
html.gsub(%r{(<\S+( [^>]+)?>)}, "#{color('html brackets')}\\1#{xc}")
|
467
443
|
end
|
468
444
|
|
469
445
|
def raw_html(raw_html)
|
470
|
-
"#{color('html color')}#{color_tags(raw_html)}#{xc}"
|
446
|
+
"#{pre_element}#{color('html color')}#{color_tags(raw_html)}#{xc}#{post_element}"
|
471
447
|
end
|
472
448
|
|
473
449
|
def strikethrough(text)
|
474
|
-
"#{color('strikethrough')}#{text}#{xc}"
|
450
|
+
"#{pre_element}#{color('strikethrough')}#{text}#{xc}#{post_element}"
|
475
451
|
end
|
476
452
|
|
477
453
|
def superscript(text)
|
478
|
-
"#{color('super')}^#{text}#{xc}"
|
454
|
+
"#{pre_element}#{color('super')}^#{text}#{xc}#{post_element}"
|
479
455
|
end
|
480
456
|
|
481
457
|
def footnotes(text)
|
@@ -513,9 +489,11 @@ module Redcarpet
|
|
513
489
|
|
514
490
|
def footnote_ref(text)
|
515
491
|
[
|
492
|
+
pre_element,
|
516
493
|
color('footnote title'),
|
517
494
|
"[^#{text}]",
|
518
|
-
xc
|
495
|
+
xc,
|
496
|
+
post_element
|
519
497
|
].join('')
|
520
498
|
end
|
521
499
|
|
@@ -722,7 +700,117 @@ module Redcarpet
|
|
722
700
|
end
|
723
701
|
end
|
724
702
|
|
703
|
+
def fix_colors(input)
|
704
|
+
input.gsub(/<<pre(?<id>\d+)>>(?<content>.*?)<<post\k<id>>>/m) do
|
705
|
+
m = Regexp.last_match
|
706
|
+
pre = m.pre_match
|
707
|
+
last_color = pre.last_color_code
|
708
|
+
"#{fix_colors(m['content'])}#{last_color}"
|
709
|
+
end.gsub(/<<(pre|post)\d+>>/, '')
|
710
|
+
end
|
711
|
+
|
712
|
+
def render_images(input)
|
713
|
+
input.gsub(%r{<<img>>(.*?)<</img>>}) do
|
714
|
+
link, title, alt_text = Regexp.last_match(1).split(/\|\|/)
|
715
|
+
|
716
|
+
if (exec_available('imgcat') || exec_available('chafa')) && @options[:local_images]
|
717
|
+
if exec_available('imgcat')
|
718
|
+
@log.info('Using imgcat for image rendering')
|
719
|
+
elsif exec_available('chafa')
|
720
|
+
@log.info('Using chafa for image rendering')
|
721
|
+
end
|
722
|
+
img_path = link
|
723
|
+
if img_path =~ /^http/ && @options[:remote_images]
|
724
|
+
if exec_available('imgcat')
|
725
|
+
@log.info('Using imgcat for image rendering')
|
726
|
+
begin
|
727
|
+
res, s = Open3.capture2(%(curl -sS "#{img_path}" 2> /dev/null | imgcat))
|
728
|
+
|
729
|
+
if s.success?
|
730
|
+
pre = !alt_text.nil? ? " #{c(%i[d blue])}[#{alt_text.strip}]\n" : ''
|
731
|
+
post = !title.nil? ? "\n #{c(%i[b blue])}-- #{title} --" : ''
|
732
|
+
result = pre + res + post
|
733
|
+
end
|
734
|
+
rescue StandardError => e
|
735
|
+
@log.error(e)
|
736
|
+
end
|
737
|
+
elsif exec_available('chafa')
|
738
|
+
@log.info('Using chafa for image rendering')
|
739
|
+
term = '-f sixels'
|
740
|
+
term = ENV['TERMINAL_PROGRAM'] =~ /iterm/i ? '-f iterm' : term
|
741
|
+
term = ENV['TERMINAL_PROGRAM'] =~ /kitty/i ? '-f kitty' : term
|
742
|
+
FileUtils.rm_r '.mdless_tmp', force: true if File.directory?('.mdless_tmp')
|
743
|
+
Dir.mkdir('.mdless_tmp')
|
744
|
+
Dir.chdir('.mdless_tmp')
|
745
|
+
`curl -SsO #{img_path} 2> /dev/null`
|
746
|
+
tmp_img = File.basename(img_path)
|
747
|
+
img = `chafa #{term} "#{tmp_img}"`
|
748
|
+
pre = alt_text ? " #{c(%i[d blue])}[#{alt_text.strip}]\n" : ''
|
749
|
+
post = title ? "\n #{c(%i[b blue])}-- #{tail} --" : ''
|
750
|
+
result = pre + img + post
|
751
|
+
Dir.chdir('..')
|
752
|
+
FileUtils.rm_r '.mdless_tmp', force: true
|
753
|
+
else
|
754
|
+
@log.warn('No viewer for remote images')
|
755
|
+
end
|
756
|
+
else
|
757
|
+
if img_path =~ %r{^[~/]}
|
758
|
+
img_path = File.expand_path(img_path)
|
759
|
+
elsif @file
|
760
|
+
base = File.expand_path(File.dirname(@file))
|
761
|
+
img_path = File.join(base, img_path)
|
762
|
+
end
|
763
|
+
if File.exist?(img_path)
|
764
|
+
pre = !alt_text.nil? ? " #{c(%i[d blue])}[#{alt_text.strip}]\n" : ''
|
765
|
+
post = !title.nil? ? "\n #{c(%i[b blue])}-- #{title} --" : ''
|
766
|
+
if exec_available('imgcat')
|
767
|
+
img = `imgcat "#{img_path}"`
|
768
|
+
elsif exec_available('chafa')
|
769
|
+
term = '-f sixels'
|
770
|
+
term = ENV['TERMINAL_PROGRAM'] =~ /iterm/i ? '-f iterm' : term
|
771
|
+
term = ENV['TERMINAL_PROGRAM'] =~ /kitty/i ? '-f kitty' : term
|
772
|
+
img = `chafa #{term} "#{img_path}"`
|
773
|
+
end
|
774
|
+
result = pre + img + post
|
775
|
+
end
|
776
|
+
end
|
777
|
+
end
|
778
|
+
if result.nil?
|
779
|
+
color_image_tag(link, title, alt_text)
|
780
|
+
else
|
781
|
+
"#{pre_element}#{result}#{xc}#{post_element}"
|
782
|
+
end
|
783
|
+
end
|
784
|
+
end
|
785
|
+
|
786
|
+
def fix_equations(input)
|
787
|
+
input.gsub(/((\\\\\[|\$\$)(.*?)(\\\\\]|\$\$)|(\\\\\(|\$)(.*?)(\\\\\)|\$))/) do
|
788
|
+
m = Regexp.last_match
|
789
|
+
if m[2]
|
790
|
+
brackets = [m[2], m[4]]
|
791
|
+
equat = m[3]
|
792
|
+
else
|
793
|
+
brackets = [m[5], m[7]]
|
794
|
+
equat = m[6]
|
795
|
+
end
|
796
|
+
[
|
797
|
+
pre_element,
|
798
|
+
color('math brackets'),
|
799
|
+
brackets[0],
|
800
|
+
xc,
|
801
|
+
color('math equation'),
|
802
|
+
equat,
|
803
|
+
color('math brackets'),
|
804
|
+
brackets[1],
|
805
|
+
xc,
|
806
|
+
post_element
|
807
|
+
].join
|
808
|
+
end
|
809
|
+
end
|
810
|
+
|
725
811
|
def postprocess(input)
|
812
|
+
input.scrub!
|
813
|
+
|
726
814
|
if @options[:inline_footnotes]
|
727
815
|
input = insert_footnotes(input)
|
728
816
|
else
|
@@ -736,25 +824,15 @@ module Redcarpet
|
|
736
824
|
# escaped characters
|
737
825
|
input.gsub!(/\\(\S)/, '\1')
|
738
826
|
# equations
|
739
|
-
input
|
740
|
-
m = Regexp.last_match
|
741
|
-
if m[2]
|
742
|
-
brackets = [m[2], m[4]]
|
743
|
-
equat = m[3]
|
744
|
-
else
|
745
|
-
brackets = [m[5], m[7]]
|
746
|
-
equat = m[6]
|
747
|
-
end
|
748
|
-
"#{c(%i[b black])}#{brackets[0]}#{xc}#{c(%i[b blue])}#{equat}#{c(%i[b black])}#{brackets[1]}" + xc
|
749
|
-
end
|
827
|
+
input = fix_equations(input)
|
750
828
|
# misc html
|
751
|
-
input.gsub!(%r{<br */?>}, "\n")
|
829
|
+
input.gsub!(%r{<br */?>}, "#{pre_element}\n#{post_element}")
|
752
830
|
# format links
|
753
|
-
if @options[:links] == :reference || @options[:links] == :paragraph
|
754
|
-
input = reference_links(input)
|
755
|
-
end
|
831
|
+
input = reference_links(input) if @options[:links] == :reference || @options[:links] == :paragraph
|
756
832
|
# lists
|
757
|
-
fix_lists(input, 0)
|
833
|
+
input = fix_lists(input, 0)
|
834
|
+
input = render_images(input) if @options[:local_images]
|
835
|
+
fix_colors(input)
|
758
836
|
end
|
759
837
|
end
|
760
838
|
end
|
data/lib/mdless/converter.rb
CHANGED
data/lib/mdless/theme.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module CLIMarkdown
|
2
2
|
module Theme
|
3
|
-
|
4
3
|
THEME_DEFAULTS = {
|
5
4
|
'metadata' => {
|
6
5
|
'border' => 'd blue on_black',
|
@@ -9,9 +8,12 @@ module CLIMarkdown
|
|
9
8
|
},
|
10
9
|
'emphasis' => {
|
11
10
|
'bold' => 'b',
|
11
|
+
'bold_character' => '**',
|
12
12
|
'italic' => 'u i',
|
13
|
+
'italic_character' => '_',
|
13
14
|
'bold-italic' => 'b u i'
|
14
15
|
},
|
16
|
+
'highlight' => 'b black on_yellow',
|
15
17
|
'h1' => {
|
16
18
|
'color' => 'b intense_black on_white',
|
17
19
|
'pad' => 'd black on_white',
|
@@ -58,7 +60,8 @@ module CLIMarkdown
|
|
58
60
|
},
|
59
61
|
'code_span' => {
|
60
62
|
'marker' => 'b white',
|
61
|
-
'color' => 'b white on_intense_black'
|
63
|
+
'color' => 'b white on_intense_black',
|
64
|
+
'character' => '`'
|
62
65
|
},
|
63
66
|
'code_block' => {
|
64
67
|
'marker' => 'intense_black',
|
@@ -69,6 +72,13 @@ module CLIMarkdown
|
|
69
72
|
'eol' => 'intense_black on_black',
|
70
73
|
'pygments_theme' => 'monokai'
|
71
74
|
},
|
75
|
+
'blockquote' => {
|
76
|
+
'marker' => {
|
77
|
+
'character' => '>',
|
78
|
+
'color' => 'yellow'
|
79
|
+
},
|
80
|
+
'color' => 'b white'
|
81
|
+
},
|
72
82
|
'dd' => {
|
73
83
|
'term' => 'black on_white',
|
74
84
|
'marker' => 'd red',
|
@@ -88,6 +98,10 @@ module CLIMarkdown
|
|
88
98
|
'brackets' => 'd yellow on_black',
|
89
99
|
'color' => 'yellow on_black'
|
90
100
|
},
|
101
|
+
'math' => {
|
102
|
+
'brackets' => 'b black',
|
103
|
+
'equation' => 'b blue'
|
104
|
+
},
|
91
105
|
'super' => 'b green',
|
92
106
|
'text' => 'white'
|
93
107
|
}
|
data/lib/mdless/version.rb
CHANGED
data/lib/mdless.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/mdless/console.rb
|
83
83
|
- lib/mdless/converter.rb
|
84
84
|
- lib/mdless/hash.rb
|
85
|
+
- lib/mdless/string.rb
|
85
86
|
- lib/mdless/tables.rb
|
86
87
|
- lib/mdless/theme.rb
|
87
88
|
- lib/mdless/version.rb
|
@@ -112,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
113
|
- !ruby/object:Gem::Version
|
113
114
|
version: '0'
|
114
115
|
requirements: []
|
115
|
-
rubygems_version: 3.2.
|
116
|
+
rubygems_version: 3.2.15
|
116
117
|
signing_key:
|
117
118
|
specification_version: 4
|
118
119
|
summary: A pager like less, but for Markdown files
|