mdless 1.0.21 → 1.0.22
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/lib/mdless/colors.rb +9 -10
- data/lib/mdless/converter.rb +103 -94
- 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: ea19ef57c9cdd3b8800a854cc342e518c3c5acca0a2bfd6806f30970686e37e7
|
4
|
+
data.tar.gz: aaf0111e1b7777c06ddb149032985665184f92c6a34e4d5d6e7a5abecf691289
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11e08991457fd1c94698666be37e40e38c59753b4437e94c01a45a0215d9fbf7fea00c6bedbbb5408451f8ea8402897dcf81d6a8f757950669c2c85f1371ba48
|
7
|
+
data.tar.gz: 997cbd5836733b2740ae15d344764c6e303d41d77ec760392a9bad6ccdc08f8aaa2457601f0385449964826d423e9f26036c5d843946e50a94ecb922f5ce4e3b
|
data/lib/mdless/colors.rb
CHANGED
@@ -71,7 +71,7 @@ module CLIMarkdown
|
|
71
71
|
self.uncolor.size
|
72
72
|
end
|
73
73
|
|
74
|
-
def wrap(width=78)
|
74
|
+
def wrap(width=78,foreground=:x)
|
75
75
|
|
76
76
|
if self.uncolor =~ /(^([%~] |\s*>)| +[=\-]{5,})/
|
77
77
|
return self
|
@@ -87,7 +87,7 @@ module CLIMarkdown
|
|
87
87
|
input.split(/\s+/).each do |word|
|
88
88
|
last_ansi = line.scan(/\e\[[\d;]+m/)[-1] || ''
|
89
89
|
if visible_width + word.size_clean >= width
|
90
|
-
lines << line + xc
|
90
|
+
lines << line + xc(foreground)
|
91
91
|
visible_width = word.size_clean
|
92
92
|
line = last_ansi + word
|
93
93
|
elsif line.empty?
|
@@ -98,18 +98,11 @@ module CLIMarkdown
|
|
98
98
|
line << " " << last_ansi + word
|
99
99
|
end
|
100
100
|
end
|
101
|
-
lines << line + self.match(/\s*$/)[0] + xc if line
|
101
|
+
lines << line + self.match(/\s*$/)[0] + xc(foreground) if line
|
102
102
|
return lines.join("\n") # .gsub(/\- (\S)/,'-\1')
|
103
103
|
end
|
104
104
|
|
105
|
-
def xc(count=0)
|
106
|
-
c([:x,:white])
|
107
|
-
end
|
108
|
-
|
109
105
|
def c(args)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
106
|
out = []
|
114
107
|
|
115
108
|
args.each {|arg|
|
@@ -124,6 +117,12 @@ module CLIMarkdown
|
|
124
117
|
''
|
125
118
|
end
|
126
119
|
end
|
120
|
+
|
121
|
+
private
|
122
|
+
|
123
|
+
def xc(foreground=:x)
|
124
|
+
c([foreground])
|
125
|
+
end
|
127
126
|
end
|
128
127
|
end
|
129
128
|
|
data/lib/mdless/converter.rb
CHANGED
@@ -169,7 +169,7 @@ module CLIMarkdown
|
|
169
169
|
if @theme.key?(keys[0])
|
170
170
|
val = @theme[keys.shift]
|
171
171
|
else
|
172
|
-
@log.error("Invalid theme key: #{key}")
|
172
|
+
@log.error("Invalid theme key: #{key}") unless keys[0] =~ /^text/
|
173
173
|
return c([:reset])
|
174
174
|
end
|
175
175
|
keys.each {|k|
|
@@ -360,7 +360,7 @@ module CLIMarkdown
|
|
360
360
|
end
|
361
361
|
end
|
362
362
|
|
363
|
-
def find_color(line,nullable=false)
|
363
|
+
def find_color(line, nullable = false)
|
364
364
|
return line if line.nil?
|
365
365
|
colors = line.scan(/\e\[[\d;]+m/)
|
366
366
|
if colors && colors.size > 0
|
@@ -473,13 +473,14 @@ module CLIMarkdown
|
|
473
473
|
color('code_block border'),
|
474
474
|
'--[ ',
|
475
475
|
color('code_block title'),
|
476
|
-
leader,
|
476
|
+
leader.chomp,
|
477
477
|
color('code_block border'),
|
478
478
|
' ]',
|
479
|
-
'-'*(@cols-new_indent-leader.size
|
479
|
+
'-'*(@cols-new_indent-leader.size-2),
|
480
480
|
xc,
|
481
481
|
"\n",
|
482
|
-
hilite,
|
482
|
+
hilite.chomp,
|
483
|
+
"\n",
|
483
484
|
" "*(new_indent),
|
484
485
|
color('code_block border'),
|
485
486
|
'-'*(@cols-new_indent),
|
@@ -581,6 +582,44 @@ module CLIMarkdown
|
|
581
582
|
# match = Regexp.last_match
|
582
583
|
# "#" * (match[1].length - h_adjust)
|
583
584
|
# end
|
585
|
+
#
|
586
|
+
# Headlines
|
587
|
+
@headers.each {|h|
|
588
|
+
input.sub!(/^#{Regexp.escape(h[2])}/m) do |m|
|
589
|
+
pad = ''
|
590
|
+
ansi = ''
|
591
|
+
case h[0].length
|
592
|
+
when 1
|
593
|
+
ansi = color('h1 color')
|
594
|
+
pad = color('h1 pad')
|
595
|
+
char = @theme['h1']['pad_char'] || "="
|
596
|
+
pad += h[1].length + 2 > @cols ? char*h[1].length : char*(@cols - (h[1].length + 1))
|
597
|
+
when 2
|
598
|
+
ansi = color('h2 color')
|
599
|
+
pad = color('h2 pad')
|
600
|
+
char = @theme['h2']['pad_char'] || "-"
|
601
|
+
pad += h[1].length + 2 > @cols ? char*h[1].length : char*(@cols - (h[1].length + 1))
|
602
|
+
when 3
|
603
|
+
ansi = color('h3 color')
|
604
|
+
when 4
|
605
|
+
ansi = color('h4 color')
|
606
|
+
when 5
|
607
|
+
ansi = color('h5 color')
|
608
|
+
else
|
609
|
+
ansi = color('h6 color')
|
610
|
+
end
|
611
|
+
|
612
|
+
# If we're in iTerm and not paginating, add
|
613
|
+
# iTerm Marks for navigation on h1-3
|
614
|
+
if h[0].length < 4 &&
|
615
|
+
ENV['TERM_PROGRAM'] =~ /^iterm/i &&
|
616
|
+
@options[:pager] == false
|
617
|
+
ansi = "\e]1337;SetMark\a" + ansi
|
618
|
+
end
|
619
|
+
|
620
|
+
"\n#{xc}#{ansi}#{h[1]} #{pad}#{xc}\n"
|
621
|
+
end
|
622
|
+
}
|
584
623
|
|
585
624
|
# code block parsing
|
586
625
|
input.gsub!(/(?i-m)(^[ \t]*[`~]{3,})([\s\S]*?)\n([\s\S]*?)\1/m) do
|
@@ -637,11 +676,41 @@ module CLIMarkdown
|
|
637
676
|
# previous_indent = indent
|
638
677
|
# end
|
639
678
|
else
|
679
|
+
# list items
|
680
|
+
# TODO: Fix ordered list numbering, pad numbers based on total number of list items
|
681
|
+
line.gsub!(/^(\s*)([*\-+]|\d+\.) /) do |m|
|
682
|
+
match = Regexp.last_match
|
683
|
+
last = find_color(match.pre_match)
|
684
|
+
mcolor = match[2] =~ /^\d+\./ ? 'list number' : 'list bullet'
|
685
|
+
indent = match[1] || ''
|
686
|
+
[
|
687
|
+
indent,
|
688
|
+
color(mcolor),
|
689
|
+
match[2], " ",
|
690
|
+
color('list color')
|
691
|
+
].join
|
692
|
+
end
|
693
|
+
|
694
|
+
# definition lists
|
695
|
+
line.gsub!(/^(:\s*)(.*?)/) do |m|
|
696
|
+
match = Regexp.last_match
|
697
|
+
[
|
698
|
+
color('dd marker'),
|
699
|
+
match[1],
|
700
|
+
" ",
|
701
|
+
color('dd color'),
|
702
|
+
match[2],
|
703
|
+
xc
|
704
|
+
].join
|
705
|
+
end
|
706
|
+
|
640
707
|
# place footnotes under paragraphs that reference them
|
641
708
|
if line =~ /\[(?:\e\[[\d;]+m)*\^(?:\e\[[\d;]+m)*(\S+)(?:\e\[[\d;]+m)*\]/
|
642
|
-
|
709
|
+
match = Regexp.last_match
|
710
|
+
key = match[1].uncolor
|
643
711
|
if @footnotes.key? key
|
644
|
-
line
|
712
|
+
line = "#{xc}#{line}"
|
713
|
+
line += "\n\n#{color('footnote brackets')}[#{color('footnote caret')}^#{color('footnote title')}#{key}#{color('footnote brackets')}]: #{color('footnote note')}#{@footnotes[key]}#{xc}"
|
645
714
|
@footnotes.delete(key)
|
646
715
|
end
|
647
716
|
end
|
@@ -655,7 +724,7 @@ module CLIMarkdown
|
|
655
724
|
counter -= 1
|
656
725
|
find_color(lines[counter])
|
657
726
|
end
|
658
|
-
"#{
|
727
|
+
"#{color('footnote brackets')}[#{color('footnote caret')}^#{color('footnote title')}#{match[1]}#{color('footnote brackets')}]" + (last ? last : xc)
|
659
728
|
end
|
660
729
|
|
661
730
|
# blockquotes
|
@@ -671,7 +740,6 @@ module CLIMarkdown
|
|
671
740
|
end
|
672
741
|
|
673
742
|
# make reference links inline
|
674
|
-
|
675
743
|
line.gsub!(/(?<![\e*])\[(\b.*?\b)?\]\[(\b.+?\b)?\]/) do |m|
|
676
744
|
match = Regexp.last_match
|
677
745
|
title = match[2] || ''
|
@@ -695,23 +763,6 @@ module CLIMarkdown
|
|
695
763
|
color_link(match.pre_match, match[1], match[2])
|
696
764
|
end
|
697
765
|
|
698
|
-
|
699
|
-
|
700
|
-
# inline code
|
701
|
-
line.gsub!(/`(.*?)`/) do |m|
|
702
|
-
match = Regexp.last_match
|
703
|
-
last = find_color(match.pre_match, true)
|
704
|
-
[
|
705
|
-
color('code_span marker'),
|
706
|
-
'`',
|
707
|
-
color('code_span color'),
|
708
|
-
match[1],
|
709
|
-
color('code_span marker'),
|
710
|
-
'`',
|
711
|
-
last ? last : xc
|
712
|
-
].join
|
713
|
-
end
|
714
|
-
|
715
766
|
# horizontal rules
|
716
767
|
line.gsub!(/^ {,3}([\-*] ?){3,}$/) do |m|
|
717
768
|
color('hr color') + '_'*@cols + xc
|
@@ -746,7 +797,7 @@ module CLIMarkdown
|
|
746
797
|
end
|
747
798
|
|
748
799
|
# equations
|
749
|
-
line.gsub!(/((\\\\\[)(.*?)(\\\\\])|(\\\\\()(.*?)(\\\\\)))/) do |m|
|
800
|
+
line.gsub!(/((\\\\\[|\$\$)(.*?)(\\\\\]|\$\$)|(\\\\\(|\$)(.*?)(\\\\\)|\$))/) do |m|
|
750
801
|
match = Regexp.last_match
|
751
802
|
last = find_color(match.pre_match)
|
752
803
|
if match[2]
|
@@ -759,34 +810,6 @@ module CLIMarkdown
|
|
759
810
|
"#{c(%i[b black])}#{brackets[0]}#{xc}#{c(%i[b blue])}#{equat}#{c(%i[b black])}#{brackets[1]}" + (last ? last : xc)
|
760
811
|
end
|
761
812
|
|
762
|
-
# list items
|
763
|
-
# TODO: Fix ordered list numbering, pad numbers based on total number of list items
|
764
|
-
line.gsub!(/^(\s*)([*\-+]|\d+\.) /) do |m|
|
765
|
-
match = Regexp.last_match
|
766
|
-
last = find_color(match.pre_match)
|
767
|
-
mcolor = match[2] =~ /^\d+\./ ? 'list number' : 'list bullet'
|
768
|
-
indent = match[1] || ''
|
769
|
-
[
|
770
|
-
indent,
|
771
|
-
color(mcolor),
|
772
|
-
match[2], " ",
|
773
|
-
color('list color')
|
774
|
-
].join
|
775
|
-
end
|
776
|
-
|
777
|
-
# definition lists
|
778
|
-
line.gsub!(/^(:\s*)(.*?)/) do |m|
|
779
|
-
match = Regexp.last_match
|
780
|
-
[
|
781
|
-
color('dd marker'),
|
782
|
-
match[1],
|
783
|
-
" ",
|
784
|
-
color('dd color'),
|
785
|
-
match[2],
|
786
|
-
xc
|
787
|
-
].join
|
788
|
-
end
|
789
|
-
|
790
813
|
# misc html
|
791
814
|
line.gsub!(/<br\/?>/, "\n")
|
792
815
|
line.gsub!(/(?i-m)((<\/?)(\w+[\s\S]*?)(>))/) do |tag|
|
@@ -802,51 +825,33 @@ module CLIMarkdown
|
|
802
825
|
last ? last : xc
|
803
826
|
].join
|
804
827
|
end
|
828
|
+
|
829
|
+
# inline code spans
|
830
|
+
line.gsub!(/`(.*?)`/) do |m|
|
831
|
+
match = Regexp.last_match
|
832
|
+
last = find_color(match.pre_match, true)
|
833
|
+
[
|
834
|
+
color('code_span marker'),
|
835
|
+
'`',
|
836
|
+
color('code_span color'),
|
837
|
+
match[1],
|
838
|
+
color('code_span marker'),
|
839
|
+
'`',
|
840
|
+
last ? last : xc
|
841
|
+
].join
|
842
|
+
end
|
805
843
|
end
|
806
844
|
|
845
|
+
## Should force a foreground color but doesn't...
|
846
|
+
# unless line =~ /^\s*\e\[[\d;]+m/
|
847
|
+
# line.sub!(/^(\s*)/, "\\1#{color('text')}")
|
848
|
+
# end
|
849
|
+
|
807
850
|
line
|
808
851
|
end
|
809
852
|
|
810
853
|
input = lines.join("\n")
|
811
854
|
|
812
|
-
# Headlines
|
813
|
-
@headers.each {|h|
|
814
|
-
input.sub!(/^#{Regexp.escape(h[2])}/m) do |m|
|
815
|
-
pad = ''
|
816
|
-
ansi = ''
|
817
|
-
case h[0].length
|
818
|
-
when 1
|
819
|
-
ansi = color('h1 color')
|
820
|
-
pad = color('h1 pad')
|
821
|
-
char = @theme['h1']['pad_char'] || "="
|
822
|
-
pad += h[1].length + 2 > @cols ? char*h[1].length : char*(@cols - (h[1].length + 1))
|
823
|
-
when 2
|
824
|
-
ansi = color('h2 color')
|
825
|
-
pad = color('h2 pad')
|
826
|
-
char = @theme['h2']['pad_char'] || "-"
|
827
|
-
pad += h[1].length + 2 > @cols ? char*h[1].length : char*(@cols - (h[1].length + 1))
|
828
|
-
when 3
|
829
|
-
ansi = color('h3 color')
|
830
|
-
when 4
|
831
|
-
ansi = color('h4 color')
|
832
|
-
when 5
|
833
|
-
ansi = color('h5 color')
|
834
|
-
else
|
835
|
-
ansi = color('h6 color')
|
836
|
-
end
|
837
|
-
|
838
|
-
# If we're in iTerm and not paginating, add
|
839
|
-
# iTerm Marks for navigation on h1-3
|
840
|
-
if h[0].length < 4 &&
|
841
|
-
ENV['TERM_PROGRAM'] =~ /^iterm/i &&
|
842
|
-
@options[:pager] == false
|
843
|
-
ansi = "\e]1337;SetMark\a" + ansi
|
844
|
-
end
|
845
|
-
|
846
|
-
"\n#{xc}#{ansi}#{h[1]} #{pad}#{xc}\n"
|
847
|
-
end
|
848
|
-
}
|
849
|
-
|
850
855
|
# images
|
851
856
|
input.gsub!(/^(.*?)!\[(.*)?\]\((.*?\.(?:png|gif|jpg))( +.*)?\)/) do |m|
|
852
857
|
match = Regexp.last_match
|
@@ -985,7 +990,7 @@ module CLIMarkdown
|
|
985
990
|
|
986
991
|
def printout
|
987
992
|
out = @output.rstrip.split(/\n/).map {|p|
|
988
|
-
p.wrap(@cols)
|
993
|
+
p.wrap(@cols, color('text'))
|
989
994
|
}.join("\n")
|
990
995
|
|
991
996
|
|
@@ -1048,5 +1053,9 @@ module CLIMarkdown
|
|
1048
1053
|
|
1049
1054
|
[pg, args]
|
1050
1055
|
end
|
1056
|
+
|
1057
|
+
def xc
|
1058
|
+
color('text')
|
1059
|
+
end
|
1051
1060
|
end
|
1052
1061
|
end
|
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: 1.0.
|
4
|
+
version: 1.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|