mdless 2.1.3 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6889fdd8408bf2d11ef61f18261c57f50cd806f41595acba1d5dd17e439c95b8
4
- data.tar.gz: 92ba0555ae5ddd4092a60d5dfdb9c5c7e2a5d6f7914eb4c140bbb1bbc84959fc
3
+ metadata.gz: 127a5e5dccfd208faa3f32410b58949ca30929791f985324bb886c65eac0706f
4
+ data.tar.gz: 50a44aa8436e851e75be92f6ec53b96d39625309283d7f550e92831a1da90ed1
5
5
  SHA512:
6
- metadata.gz: 323b2d8fae576af6fb4fee090d21aef0897f5f3024c6928c648f95944f51395b44e53bef1aa46462094dd61326d29e3f17a173455cb6351616e82c35c377110c
7
- data.tar.gz: 3601996987a8f4fdb7c4fcc685474ee5895ea4252274acb6c0e2caa5aa766f926ba2e66b694a6ad7fe4f865da69f3f1f919800ad82c15573580a0088a6fce234
6
+ metadata.gz: 5f24dc6c4eec6d0f685f15dc43ab7d4b34b323591860ec03c08ff74a3aa7cf7add47278456fcb64ebfba5b6e8509871fb0950e6b2eb23fddfad2a2d4677f4905
7
+ data.tar.gz: 2fe9751c87edccb87f67f378dff33893d46e22ce56469b0b2074de8795deba021aaf0485ce68e4705412d7c2ba4c7277625168b6514ecf867b09a3c3f10064d0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ 2.1.4
2
+ : In addition to color names, you can now use 3 or 6-digit hex codes, prefix with "bg" or "on_" to affect background color
3
+ : Better highlighting of h1/h2 when header contains a link
4
+ : List items with multiple paragraphs incorrectly highlighted
5
+
1
6
  2.1.3
2
7
  : Respect :width setting in config
3
8
 
data/README.md CHANGED
@@ -17,18 +17,29 @@ I often use iTerm2 in visor mode, so `qlmanage -p` is annoying. I still wanted a
17
17
  - Normalize spacing and link formatting
18
18
  - Display footnotes after each paragraph
19
19
  - Inline image display (local, optionally remote) (with compatible tools like imgcat or chafa)
20
- - Syntax highlighting when [Pygments](http://pygments.org/) is installed
20
+ - Syntax highlighting of code blocks when [Pygments](http://pygments.org/) is installed
21
21
  - List headlines in document
22
22
  - Display single section of the document based on headlines
23
+ - Configurable Markdown options
23
24
  - Customizable colors
24
25
  - Add iTerm marks for h1-3 navigation when pager is disabled
26
+ - TaskPaper syntax detection and highlighting
25
27
 
26
28
  ## Installation
27
29
 
30
+ ### Gem install
31
+
28
32
  gem install mdless
29
33
 
30
34
  If you run into errors, try `gem install --user-install mdless`, or `sudo gem install mdless` (in that order).
31
35
 
36
+ ### Homebrew
37
+
38
+ mdless is also available via Homebrew (directly).
39
+
40
+ brew install mdless
41
+
42
+
32
43
  ### Dependencies
33
44
 
34
45
  To render images, you need `imgcat` or `chafa` installed (`brew install chafa`).
@@ -132,6 +143,8 @@ h1:
132
143
 
133
144
  Font and color settings are set using a string of color names and modifiers. A typical string looks like `b red on_white`, which would give you a bold red font on a white background. In the YAML settings file there's no need for quotes, just put the string following the colon for the setting.
134
145
 
146
+ You can also use 3 or 6-digit hex codes in place of color names. These can be prefixed with `bg` or `on_` to affect background colors, e.g. `bgFF0ACC`. The codes are case-insensitive and can be combined with emphasis modifiers like `b` or `u`.
147
+
135
148
  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`.
136
149
 
137
150
  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.
@@ -199,6 +212,8 @@ mdless --taskpaper=auto -@ "${FILE_PATH}" && exit 5
199
212
  ;;
200
213
  ```
201
214
 
215
+ Thanks to Ralf Hülsmann for contributing!
216
+
202
217
  ### Gather
203
218
 
204
219
  [Gather](https://brettterpstra.com/projects/gather-cli/) is a tool for converting web pages to Markdown. You can use it with mdless to create a Lynx-style web browser:
data/lib/mdless/colors.rb CHANGED
@@ -70,7 +70,7 @@ module CLIMarkdown
70
70
  def last_color_code
71
71
  m = scan(ESCAPE_REGEX)
72
72
 
73
- em = ['0']
73
+ em = []
74
74
  fg = nil
75
75
  bg = nil
76
76
  rgbf = nil
@@ -81,15 +81,12 @@ module CLIMarkdown
81
81
  when '0'
82
82
  em = ['0']
83
83
  fg, bg, rgbf, rgbb = nil
84
- when /^[34]8/
85
- case c
86
- when /^3/
87
- fg = nil
88
- rgbf = c
89
- when /^4/
90
- bg = nil
91
- rgbb = c
92
- end
84
+ when /;38;/
85
+ fg = nil
86
+ rgbf = c
87
+ when /;48;/
88
+ bg = nil
89
+ rgbb = c
93
90
  else
94
91
  c.split(/;/).each do |i|
95
92
  x = i.to_i
@@ -144,9 +141,9 @@ module CLIMarkdown
144
141
 
145
142
  line += self.match(/^\s*/)[0].gsub(/\t/,' ')
146
143
  input = self.dup # .gsub(/(\w-)(\w)/,'\1 \2')
147
- input.gsub!(/\[.*?\]\(.*?\)/) do |link|
148
- link.gsub(/ /, "\u00A0")
149
- end
144
+ # input.gsub!(/\[.*?\]\(.*?\)/) do |link|
145
+ # link.gsub(/ /, "\u00A0")
146
+ # end
150
147
  input.split(/\s+/).each do |word|
151
148
  last_ansi = line.scan(/\e\[[\d;]+m/)[-1] || ''
152
149
  if visible_width + word.size_clean >= width
@@ -170,14 +167,15 @@ module CLIMarkdown
170
167
  def c(args)
171
168
  out = []
172
169
 
173
- args.each {|arg|
174
- if COLORS.key? arg
170
+ args.each do |arg|
171
+ if arg.to_s =~ /^([bf]g|on_)?([a-f0-9]{3}|[a-f0-9]{6})$/i
172
+ out.concat(rgb(arg.to_s))
173
+ elsif COLORS.key? arg
175
174
  out << COLORS[arg]
176
175
  end
177
- }
178
-
179
- if out.size > 0
180
- "\e[#{out.sort.join(';')}m"
176
+ end
177
+ if !out.empty?
178
+ "\e[#{out.join(';')}m"
181
179
  else
182
180
  ''
183
181
  end
@@ -185,6 +183,20 @@ module CLIMarkdown
185
183
 
186
184
  private
187
185
 
186
+ def rgb(hex)
187
+ is_bg = hex.match(/^(bg|on_)/) ? true : false
188
+ hex_string = hex.sub(/^(bg|on_)?(.{3}|.{6})/, '\2')
189
+ hex_string.gsub!(/(.)/, '\1\1') if hex_string.length == 3
190
+
191
+ parts = hex_string.match(/(?<r>..)(?<g>..)(?<b>..)/)
192
+ t = []
193
+ %w[r g b].each do |e|
194
+ t << parts[e].hex
195
+ end
196
+
197
+ [is_bg ? 48 : 38, 2].concat(t)
198
+ end
199
+
188
200
  def xc(foreground=:x)
189
201
  c([foreground])
190
202
  end
@@ -142,6 +142,7 @@ module Redcarpet
142
142
  def color(key)
143
143
  val = nil
144
144
  keys = key.split(/[ ,>]/)
145
+
145
146
  if MDLess.theme.key?(keys[0])
146
147
  val = MDLess.theme[keys.shift]
147
148
  else
@@ -192,17 +193,21 @@ module Redcarpet
192
193
  pad = ''
193
194
  ansi = ''
194
195
  text.clean_header_ids!
196
+ uncolored = text.uncolor.gsub(/<<(pre|post)\d+>>/, '')
197
+ uncolored.sub!(/\[(.*?)\]\(.*?\)/, '[\1][xxx]') if MDLess.options[:links] != :inline
198
+
199
+ text_length = uncolored.length
195
200
  case header_level
196
201
  when 1
197
202
  ansi = color('h1 color')
198
203
  pad = color('h1 pad')
199
204
  char = MDLess.theme['h1']['pad_char'] || '='
200
- pad += text.length + 2 > MDLess.cols ? char * text.length : char * (MDLess.cols - (text.length + 1))
205
+ pad += text_length + 2 > MDLess.cols ? char * text_length : char * (MDLess.cols - (text_length + 1))
201
206
  when 2
202
207
  ansi = color('h2 color')
203
208
  pad = color('h2 pad')
204
209
  char = MDLess.theme['h2']['pad_char'] || '-'
205
- pad += text.length + 2 > MDLess.cols ? char * text.length : char * (MDLess.cols - (text.length + 1))
210
+ pad += text_length + 2 > MDLess.cols ? char * text_length : char * (MDLess.cols - (text_length + 1))
206
211
  when 3
207
212
  ansi = color('h3 color')
208
213
  when 4
@@ -236,6 +241,10 @@ module Redcarpet
236
241
  end
237
242
  end
238
243
 
244
+ def uncolor_grafs(text)
245
+ text.gsub(/#{Regexp.escape(color('text'))}/, color('list color'))
246
+ end
247
+
239
248
  @table_cols = nil
240
249
 
241
250
  def table_header_row
@@ -294,7 +303,7 @@ module Redcarpet
294
303
  end
295
304
 
296
305
  def codespan(code)
297
- [
306
+ out = [
298
307
  pre_element,
299
308
  color('code_span marker'),
300
309
  MDLess.theme['code_span']['character'],
@@ -304,7 +313,7 @@ module Redcarpet
304
313
  MDLess.theme['code_span']['character'],
305
314
  xc,
306
315
  post_element
307
- ].join('')
316
+ ].join
308
317
  end
309
318
 
310
319
  def double_emphasis(text)
@@ -617,7 +626,7 @@ module Redcarpet
617
626
  end
618
627
 
619
628
  content = m['content'] =~/<<listitem/ ? fix_items(m['content'], indent, levels) : m['content']
620
- color_list_item(' ' * indent, content, m['type'].to_sym, levels[indent])
629
+ color_list_item(' ' * indent, uncolor_grafs(content), m['type'].to_sym, levels[indent])
621
630
  end
622
631
  end
623
632
 
@@ -822,8 +831,9 @@ module Redcarpet
822
831
  def fix_colors(input)
823
832
  input.gsub(/<<pre(?<id>\d+)>>(?<content>.*?)<<post\k<id>>>/m) do
824
833
  m = Regexp.last_match
825
- pre = m.pre_match
834
+ pre = m.pre_match.gsub(/<<pre(?<id>\d+)>>.*?<<post\k<id>>>/m, '')
826
835
  last_color = pre.last_color_code
836
+
827
837
  "#{fix_colors(m['content'])}#{last_color}"
828
838
  end.gsub(/<<(pre|post)\d+>>/, '')
829
839
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CLIMarkdown
4
- VERSION = '2.1.3'
4
+ VERSION = '2.1.4'
5
5
  end
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.3
4
+ version: 2.1.4
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-11-28 00:00:00.000000000 Z
11
+ date: 2023-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redcarpet