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 +4 -4
- data/lib/ansi256/code.rb +23 -21
- data/lib/ansi256/mixin.rb +2 -0
- data/lib/ansi256/version.rb +3 -1
- data/lib/ansi256.rb +17 -13
- data/test/test_ansi256.rb +44 -40
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6e0c06de0d942deeb5906752ed223248b699408b93a2bba463bbb848d6b06aea
|
|
4
|
+
data.tar.gz: a7ea18e9b3902806d43fe46e7b388c8d0152e4e0e365bdb552ad35d11064b12a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
:
|
|
4
|
-
:
|
|
5
|
-
:
|
|
6
|
-
:
|
|
7
|
-
:
|
|
3
|
+
reset: 0,
|
|
4
|
+
bold: 1,
|
|
5
|
+
dim: 2,
|
|
6
|
+
italic: 3,
|
|
7
|
+
underline: 4,
|
|
8
|
+
inverse: 7,
|
|
9
|
+
strikethrough: 9,
|
|
8
10
|
|
|
9
|
-
:
|
|
10
|
-
:
|
|
11
|
-
:
|
|
12
|
-
:
|
|
13
|
-
:
|
|
14
|
-
:
|
|
15
|
-
:
|
|
16
|
-
:
|
|
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
|
-
:
|
|
19
|
-
:
|
|
20
|
-
:
|
|
21
|
-
:
|
|
22
|
-
:
|
|
23
|
-
:
|
|
24
|
-
:
|
|
25
|
-
:
|
|
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
data/lib/ansi256/version.rb
CHANGED
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
|
|
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
|
|
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
|
|
48
|
+
def plain(str)
|
|
47
49
|
str.gsub(PATTERN, '')
|
|
48
50
|
end
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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
|
|
66
|
+
def ansicode_for_rgb(rgb)
|
|
64
67
|
return unless rgb.is_a?(String) &&
|
|
65
68
|
rgb =~ /^#?([0-9a-f]+)$/i
|
|
66
|
-
|
|
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
|
|
88
|
+
def wrap(str, color)
|
|
85
89
|
current = [nil, nil, Set.new]
|
|
86
90
|
|
|
87
|
-
(color + str.gsub(PATTERN)
|
|
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
|
-
|
|
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('
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
53
|
-
puts [
|
|
54
|
-
puts [
|
|
55
|
-
puts [
|
|
56
|
-
puts [
|
|
57
|
-
puts [
|
|
58
|
-
puts [
|
|
59
|
-
puts [
|
|
60
|
-
puts [
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
140
|
-
assert_equal
|
|
141
|
-
|
|
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
|
-
|
|
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'
|
|
153
|
+
'00' => 16,
|
|
150
154
|
'000000' => 16,
|
|
151
|
-
'111'
|
|
152
|
-
'11'
|
|
155
|
+
'111' => 16,
|
|
156
|
+
'11' => 232,
|
|
153
157
|
'101010' => 16,
|
|
154
|
-
'1a'
|
|
158
|
+
'1a' => 233,
|
|
155
159
|
'1a1a1a' => 16,
|
|
156
|
-
'20'
|
|
157
|
-
'22'
|
|
160
|
+
'20' => 234,
|
|
161
|
+
'22' => 234,
|
|
158
162
|
'202020' => 16,
|
|
159
163
|
'222222' => 16,
|
|
160
164
|
'222222' => 16,
|
|
161
|
-
'ff'
|
|
165
|
+
'ff' => 255,
|
|
162
166
|
'ffffff' => 231,
|
|
163
167
|
'FFFFFF' => 231,
|
|
164
|
-
'ff0'
|
|
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'
|
|
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
|
-
[
|
|
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
|
|
195
|
-
puts
|
|
196
|
-
puts
|
|
197
|
-
puts
|
|
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
|
-
[
|
|
206
|
+
%i[fg bg].each do |m|
|
|
203
207
|
assert Ansi256.enabled?
|
|
204
|
-
hello =
|
|
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 >
|
|
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,
|
|
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
|
+
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:
|
|
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.
|
|
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:
|