ansi256 0.4.0 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf28c245bf8d2c7a888e05572ea1270a590bd2c0a906e37171099388ff4eb3a3
4
- data.tar.gz: 1e5e1531cd270090d5ccaf931774f4d0cc54afbe2f0e1ba2d298829f5c5de651
3
+ metadata.gz: 6e0c06de0d942deeb5906752ed223248b699408b93a2bba463bbb848d6b06aea
4
+ data.tar.gz: a7ea18e9b3902806d43fe46e7b388c8d0152e4e0e365bdb552ad35d11064b12a
5
5
  SHA512:
6
- metadata.gz: a4209529d49b0ce7ef7acdbfd7072264840c276502281bef42944fe07609828ca02de4b3542d4fafc68f0cfaeb7ef17ddfef24db5fcdcd5e2b12f13caf1723f6
7
- data.tar.gz: 59462bdc1e6c8072957674d8fcf7548a0eb20c76cf7021f82a6bffdb93befd7012704991f9190cac4b7587bd27eb1b9b62142a7246d9176cd0e07c1ac5a16686
6
+ metadata.gz: 8d10be011d96e91b58ccfef63608a466052dfaca7bd25e05ee1c6b83cabc6deaeeefc1e0de4e9f99b19267714f0b88a04b42bac031fe4c5937fc39b9c078c043
7
+ data.tar.gz: b15f5eab61b1f5be118a69bd9cdbd5972a7ea0adc13a51e462665aaf282c71b4967d917d6ebbc8b17c7e6eb97ecbdae76e2a1d7349ef014330177926ff4829b6
data/lib/ansi256/code.rb CHANGED
@@ -1,28 +1,30 @@
1
1
  module Ansi256
2
2
  CODE = {
3
- :reset => 0,
4
- :bold => 1,
5
- :dim => 2,
6
- :italic => 3,
7
- :underline => 4,
3
+ reset: 0,
4
+ bold: 1,
5
+ dim: 2,
6
+ italic: 3,
7
+ underline: 4,
8
+ inverse: 7,
9
+ strikethrough: 9,
8
10
 
9
- :black => 30,
10
- :red => 31,
11
- :green => 32,
12
- :yellow => 33,
13
- :blue => 34,
14
- :magenta => 35,
15
- :cyan => 36,
16
- :white => 37,
11
+ black: 30,
12
+ red: 31,
13
+ green: 32,
14
+ yellow: 33,
15
+ blue: 34,
16
+ magenta: 35,
17
+ cyan: 36,
18
+ white: 37,
17
19
 
18
- :on_black => 40,
19
- :on_red => 41,
20
- :on_green => 42,
21
- :on_yellow => 43,
22
- :on_blue => 44,
23
- :on_magenta => 45,
24
- :on_cyan => 46,
25
- :on_white => 47,
20
+ on_black: 40,
21
+ on_red: 41,
22
+ on_green: 42,
23
+ on_yellow: 43,
24
+ on_blue: 44,
25
+ on_magenta: 45,
26
+ on_cyan: 46,
27
+ on_white: 47
26
28
  }.freeze
27
29
 
28
30
  NAMED_COLORS = Set[
data/lib/ansi256/mixin.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ansi256
2
4
  class << self
3
5
  def enabled= bool
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ansi256
2
- VERSION = "0.4.0"
4
+ VERSION = '0.5.0'
3
5
  end
data/lib/ansi256.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
  require 'ansi256/version'
3
5
  require 'ansi256/code'
@@ -5,7 +7,7 @@ require 'ansi256/mixin'
5
7
 
6
8
  module Ansi256
7
9
  class << self
8
- def fg code, str = nil
10
+ def fg(code, str = nil)
9
11
  if str
10
12
  wrap str, Ansi256.fg(code)
11
13
  elsif NAMED_COLORS.include?(code)
@@ -19,7 +21,7 @@ module Ansi256
19
21
  end
20
22
  end
21
23
 
22
- def bg code, str = nil
24
+ def bg(code, str = nil)
23
25
  if str
24
26
  wrap str, Ansi256.bg(code)
25
27
  elsif NAMED_COLORS.include?(code)
@@ -43,16 +45,17 @@ module Ansi256
43
45
  end
44
46
  end
45
47
 
46
- def plain str
48
+ def plain(str)
47
49
  str.gsub(PATTERN, '')
48
50
  end
49
51
 
50
- private
51
- PATTERN = /\e\[[0-9;]+m/.freeze
52
- MULTI_PATTERN = /(?:\e\[[0-9;]+m)+/.freeze
52
+ private
53
+
54
+ PATTERN = /\e\[[0-9;]+m/
55
+ MULTI_PATTERN = /(?:\e\[[0-9;]+m)+/
53
56
  EMPTY_TRIPLE = [nil, nil, Set.new].freeze
54
57
 
55
- def ansify prev, curr
58
+ def ansify(prev, curr)
56
59
  nums = []
57
60
  nums << curr[0] if prev[0] != curr[0]
58
61
  nums << curr[1] if prev[1] != curr[1]
@@ -60,10 +63,11 @@ module Ansi256
60
63
  "\e[#{nums.compact.join ';'}m"
61
64
  end
62
65
 
63
- def ansicode_for_rgb rgb
66
+ def ansicode_for_rgb(rgb)
64
67
  return unless rgb.is_a?(String) &&
65
68
  rgb =~ /^#?([0-9a-f]+)$/i
66
- rgb = $1
69
+
70
+ rgb = ::Regexp.last_match(1)
67
71
 
68
72
  case rgb.length
69
73
  when 2
@@ -81,16 +85,16 @@ module Ansi256
81
85
  r * 36 + g * 6 + b + 16
82
86
  end
83
87
 
84
- def wrap str, color
88
+ def wrap(str, color)
85
89
  current = [nil, nil, Set.new]
86
90
 
87
- (color + str.gsub(PATTERN) { |m|
91
+ (color + str.gsub(PATTERN) do |m|
88
92
  if m =~ /\e\[[^m]*\b0m/
89
93
  m + color
90
94
  else
91
95
  m
92
96
  end
93
- } << reset).gsub(MULTI_PATTERN) { |ansi|
97
+ end << reset).gsub(MULTI_PATTERN) do |ansi|
94
98
  prev = current.dup
95
99
  prev[2] = prev[2].dup
96
100
  codes = ansi.scan(/\d+/).map(&:to_i)
@@ -128,7 +132,7 @@ module Ansi256
128
132
  ''
129
133
  end + ansify(prev, current)
130
134
  end
131
- }
135
+ end
132
136
  end
133
137
  end
134
138
  end
data/test/test_ansi256.rb CHANGED
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $VERBOSE = true
2
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
3
5
  require 'ansi256'
4
6
  require 'minitest/autorun'
5
7
 
6
8
  class TestAnsi256 < Minitest::Test
7
- def cfmt col
9
+ def cfmt(col)
8
10
  col.to_s.rjust(5).fg(232).bg(col)
9
11
  end
10
12
 
@@ -28,40 +30,40 @@ class TestAnsi256 < Minitest::Test
28
30
 
29
31
  def test_nesting_hello_world
30
32
  # Nesting
31
- puts world = "World".bg(226).fg(232).underline
33
+ puts world = 'World'.bg(226).fg(232).underline
32
34
  puts hello = "Hello #{world} !".fg(230).bg(75)
33
35
  puts say_hello_world = "Say '#{hello}'".fg(30)
34
36
  puts say_hello_world.plain.fg(27)
35
37
  end
36
38
 
37
39
  def test_nesting_hello_world2
38
- puts world = "World".bg(226).blue.underline
40
+ puts world = 'World'.bg(226).blue.underline
39
41
  puts hello = "Hello #{world} Hello".white.bold
40
42
  puts say_hello_world = "Say '#{hello}'".fg(30).underline
41
43
  puts say_hello_world.plain.fg(27)
42
44
  end
43
45
 
44
46
  def test_nesting_hello_world3
45
- puts world = "World".blue.underline
47
+ puts world = 'World'.blue.underline
46
48
  puts hello = "Hello #{world} Hello".blue.bold
47
49
  puts say_hello_world = "Say '#{hello}'".fg(30).underline
48
50
  puts say_hello_world.plain.fg(27)
49
51
  end
50
52
 
51
53
  def test_named_colors
52
- s = "Colorize me"
53
- puts [ s.black, s.black.bold, s.white.bold.on_black ].join ' '
54
- puts [ s.red, s.red.bold, s.white.bold.on_red ].join ' '
55
- puts [ s.green, s.green.bold, s.white.bold.on_green ].join ' '
56
- puts [ s.yellow, s.yellow.bold, s.white.bold.on_yellow ].join ' '
57
- puts [ s.blue, s.blue.bold, s.white.bold.on_blue ].join ' '
58
- puts [ s.magenta, s.magenta.bold, s.white.bold.on_magenta ].join ' '
59
- puts [ s.cyan, s.cyan.bold, s.white.bold.on_cyan ].join ' '
60
- puts [ s.white, s.white.bold, s.white.bold.on_white ].join ' '
54
+ s = 'Colorize me'
55
+ puts [s.black, s.black.bold, s.white.bold.on_black].join ' '
56
+ puts [s.red, s.red.bold, s.white.bold.on_red].join ' '
57
+ puts [s.green, s.green.bold, s.white.bold.on_green].join ' '
58
+ puts [s.yellow, s.yellow.bold, s.white.bold.on_yellow].join ' '
59
+ puts [s.blue, s.blue.bold, s.white.bold.on_blue].join ' '
60
+ puts [s.magenta, s.magenta.bold, s.white.bold.on_magenta].join ' '
61
+ puts [s.cyan, s.cyan.bold, s.white.bold.on_cyan].join ' '
62
+ puts [s.white, s.white.bold, s.white.bold.on_white].join ' '
61
63
  end
62
64
 
63
65
  def test_named_color_code_with_fg_bg
64
- puts "Colorize me".fg(:green).bg(:red).bold.underline
66
+ puts 'Colorize me'.fg(:green).bg(:red).bold.underline
65
67
  end
66
68
 
67
69
  def test_just_code
@@ -70,6 +72,8 @@ class TestAnsi256 < Minitest::Test
70
72
  assert_equal "\e[2m", Ansi256.dim
71
73
  assert_equal "\e[3m", Ansi256.italic
72
74
  assert_equal "\e[4m", Ansi256.underline
75
+ assert_equal "\e[7m", Ansi256.inverse
76
+ assert_equal "\e[9m", Ansi256.strikethrough
73
77
 
74
78
  assert_equal "\e[30m", Ansi256.black
75
79
  assert_equal "\e[31m", Ansi256.red
@@ -130,50 +134,50 @@ class TestAnsi256 < Minitest::Test
130
134
 
131
135
  assert_equal "\e[38;5;100mHello\e[38;5;200m world\e[0m", "#{'Hello'.fg(100)} world".fg(200)
132
136
  assert_equal "\e[38;5;200;4mWow \e[38;5;100mhello\e[38;5;200m world\e[0m",
133
- "Wow #{'hello'.fg(100)} world".fg(200).underline
137
+ "Wow #{'hello'.fg(100)} world".fg(200).underline
134
138
  assert_equal "\e[38;5;200mWow \e[38;5;100;4mhello\e[0m\e[38;5;200m world\e[0m",
135
- "Wow #{'hello'.fg(100).underline} world".fg(200)
139
+ "Wow #{'hello'.fg(100).underline} world".fg(200)
136
140
  assert_equal "\e[38;5;200mWow \e[38;5;100;48;5;50;4mhello\e[0m\e[38;5;200m world\e[0m",
137
- "Wow #{'hello'.fg(100).underline.bg(50)} world".fg(200)
141
+ "Wow #{'hello'.fg(100).underline.bg(50)} world".fg(200)
138
142
  assert_equal "\e[38;5;200;48;5;250mWow \e[38;5;100;48;5;50;4mhello\e[0m\e[38;5;200;48;5;250m world\e[0m",
139
- "Wow #{'hello'.fg(100).underline.bg(50)} world".fg(200).bg(250)
140
- assert_equal "Wow hello world",
141
- "Wow #{'hello'.fg(100).underline.bg(50)} world".fg(200).bg(250).plain
143
+ "Wow #{'hello'.fg(100).underline.bg(50)} world".fg(200).bg(250)
144
+ assert_equal 'Wow hello world',
145
+ "Wow #{'hello'.fg(100).underline.bg(50)} world".fg(200).bg(250).plain
142
146
 
143
147
  assert_equal "\e[32;48;5;200;1mWow \e[38;5;100;44;1;4mhello\e[0m\e[32;48;5;200;1m world\e[0m",
144
- "Wow #{'hello'.fg(100).underline.on_blue} world".green.bold.bg(200)
148
+ "Wow #{'hello'.fg(100).underline.on_blue} world".green.bold.bg(200)
145
149
  end
146
150
 
147
151
  def test_rgb
148
152
  {
149
- '00' => 16,
153
+ '00' => 16,
150
154
  '000000' => 16,
151
- '111' => 16,
152
- '11' => 232,
155
+ '111' => 16,
156
+ '11' => 232,
153
157
  '101010' => 16,
154
- '1a' => 233,
158
+ '1a' => 233,
155
159
  '1a1a1a' => 16,
156
- '20' => 234,
157
- '22' => 234,
160
+ '20' => 234,
161
+ '22' => 234,
158
162
  '202020' => 16,
159
163
  '222222' => 16,
160
164
  '222222' => 16,
161
- 'ff' => 255,
165
+ 'ff' => 255,
162
166
  'ffffff' => 231,
163
167
  'FFFFFF' => 231,
164
- 'ff0' => 226,
168
+ 'ff0' => 226,
165
169
  'ffff00' => 226,
166
170
  'ff0000' => 196,
167
171
  '00ff00' => 46,
168
172
  '0000ff' => 21,
169
173
  'ff9900' => 214,
170
174
  '00ffff' => 51,
171
- '0ff' => 51,
175
+ '0ff' => 51
172
176
  }.each do |rgb, ansi|
173
177
  assert_equal ansi, Ansi256.fg(rgb).scan(/[0-9]+/).last.to_i
174
178
  assert_equal ansi, Ansi256.bg(rgb).scan(/[0-9]+/).last.to_i
175
179
  end
176
- [:bg, :fg].each do |m|
180
+ %i[bg fg].each do |m|
177
181
  (0..255).each do |r|
178
182
  color = r.to_s(16).rjust(2, '0') * 3
179
183
  print Ansi256.send(m, color, color + ' ')
@@ -191,27 +195,27 @@ class TestAnsi256 < Minitest::Test
191
195
  end
192
196
  end
193
197
  end
194
- puts "RGB Color".fg('ff9900').bg('003366')
195
- puts "RGB Color".fg('f90').bg('#036')
196
- puts "RGB Color".fg('#ff9900').bg('#003366')
197
- puts "RGB Color (Monochrome)".fg('ef').bg('3a')
198
+ puts 'RGB Color'.fg('ff9900').bg('003366')
199
+ puts 'RGB Color'.fg('f90').bg('#036')
200
+ puts 'RGB Color'.fg('#ff9900').bg('#003366')
201
+ puts 'RGB Color (Monochrome)'.fg('ef').bg('3a')
198
202
  end
199
203
 
200
204
  def test_enabled
201
205
  2.times do
202
- [:fg, :bg].each do |m|
206
+ %i[fg bg].each do |m|
203
207
  assert Ansi256.enabled?
204
- hello = "hello".send(m, 'f90')
208
+ hello = 'hello'.send(m, 'f90')
205
209
  assert_equal 'hello', hello.plain
206
210
 
207
211
  Ansi256.enabled = false
208
212
  assert !Ansi256.enabled?
209
- assert hello.length > "hello".send(m, 'f90').length
213
+ assert hello.length > 'hello'.send(m, 'f90').length
210
214
  assert_equal 'hello', hello.plain
211
215
 
212
216
  Ansi256.enabled = true
213
217
  assert Ansi256.enabled?
214
- assert_equal hello, "hello".send(m, 'f90')
218
+ assert_equal hello, 'hello'.send(m, 'f90')
215
219
  end
216
220
  end
217
221
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansi256
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Junegunn Choi
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-26 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bundler
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  requirements: []
92
- rubygems_version: 3.6.2
92
+ rubygems_version: 3.6.9
93
93
  specification_version: 4
94
94
  summary: Colorize text using 256-color ANSI codes
95
95
  test_files: