term-ansicolor 1.8.0 → 1.9.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/.gitignore +1 -0
- data/.utilsrc +26 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/term_colortab +26 -0
- data/bin/term_display +5 -3
- data/bin/term_mandel +11 -13
- data/bin/term_snow +13 -13
- data/examples/example.rb +28 -0
- data/lib/term/ansicolor/attribute.rb +59 -19
- data/lib/term/ansicolor/ppm_reader.rb +9 -4
- data/lib/term/ansicolor/version.rb +1 -1
- data/lib/term/ansicolor.rb +23 -6
- data/term-ansicolor.gemspec +4 -4
- data/tests/ansicolor_test.rb +16 -0
- data/tests/attribute_test.rb +39 -0
- data/tests/hyperlink_test.rb +5 -1
- data/tests/ppm_reader_test.rb +8 -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: f94f19feae65e9ff5aa9c4f79126eca941c7f824b2aa6fcb62dad77a2ef7e6d7
|
4
|
+
data.tar.gz: 0a94fdc003d7876d96b10e77170987786fccfa6013da118376c6b8ccf92fd876
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e5742e8fb06c4cbfcdd065619cc0b0a4af060f0708facb67190833e7a5f1d95a51fc0844e2e532d9d67332d2e419944c144116f9c82b363f1c4b387deb6dc3e
|
7
|
+
data.tar.gz: 8114385cec7788c819cfd1b70ebb8934afd4c7fd7bf68f85f5986869c840f7992e96c426c80b3debd864309211d3ad02c736a696be38b78fed6d8eff4777bd5b
|
data/.gitignore
CHANGED
data/.utilsrc
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# vim: set ft=ruby:
|
2
|
+
|
3
|
+
search do
|
4
|
+
prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|pkg)\z/
|
5
|
+
skip_files /(\A\.|\.sw[pon]\z|\.(log|fnm|jpg|jpeg|png|pdf|svg)\z|tags|~\z)/i
|
6
|
+
end
|
7
|
+
|
8
|
+
discover do
|
9
|
+
prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|pkg)\z/
|
10
|
+
skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
|
11
|
+
binary false
|
12
|
+
end
|
13
|
+
|
14
|
+
strip_spaces do
|
15
|
+
prune_dirs /\A(\..*|CVS|pkg)\z/
|
16
|
+
skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
|
17
|
+
end
|
18
|
+
|
19
|
+
probe do
|
20
|
+
test_framework :"test-unit"
|
21
|
+
end
|
22
|
+
|
23
|
+
ssh_tunnel do
|
24
|
+
terminal_multiplexer :tmux
|
25
|
+
end
|
26
|
+
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ GemHadar do
|
|
15
15
|
|
16
16
|
test_dir 'tests'
|
17
17
|
ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage',
|
18
|
-
'tags', '.bundle', '.byebug_history'
|
18
|
+
'tags', '.bundle', '.byebug_history', 'errors.lst'
|
19
19
|
|
20
20
|
readme 'README.md'
|
21
21
|
executables.merge Dir['bin/*'].map { |x| File.basename(x) }
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.9.0
|
data/bin/term_colortab
CHANGED
@@ -15,6 +15,32 @@ def print_color(c)
|
|
15
15
|
print ("%3u #{color.rgb.html} " % c).on_color(color.name).color(text.name)
|
16
16
|
end
|
17
17
|
|
18
|
+
if Term::ANSIColor.true_coloring = ENV['COLORTERM'] =~ /\A(truecolor|24bit)\z/
|
19
|
+
|
20
|
+
puts "True colors".bold, ""
|
21
|
+
step = 36
|
22
|
+
(0..255).step(step) do |g|
|
23
|
+
(0..255).step(step) do |r|
|
24
|
+
(0..255).step(step) do |b|
|
25
|
+
print Term::ANSIColor.on_color(Term::ANSIColor::RGBTriple.new(r, g, b)) { ' ' }
|
26
|
+
end
|
27
|
+
print ' '
|
28
|
+
end
|
29
|
+
puts
|
30
|
+
end
|
31
|
+
|
32
|
+
puts
|
33
|
+
(0..255).step(4) do |g|
|
34
|
+
print Term::ANSIColor.on_color(Term::ANSIColor::RGBTriple.new(g, g, g)) { ' ' }
|
35
|
+
end
|
36
|
+
puts
|
37
|
+
puts
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
Term::ANSIColor.true_coloring = false
|
42
|
+
|
43
|
+
puts "256 colors".bold, ""
|
18
44
|
for c in 0..3
|
19
45
|
print_color c
|
20
46
|
end
|
data/bin/term_display
CHANGED
@@ -65,13 +65,14 @@ Options are
|
|
65
65
|
-a ASPECT x:y aspect, defaults to 2.2
|
66
66
|
-C COLS number of columns for rendering with aspect, defaults to max
|
67
67
|
-R ROWS number of rows for rendering with aspect, defaults to max - 1
|
68
|
+
-t use true colors
|
68
69
|
-h this help
|
69
70
|
|
70
71
|
EOT
|
71
72
|
exit rc
|
72
73
|
end
|
73
74
|
|
74
|
-
opts = go 'hm:g:s:a:C:R:'
|
75
|
+
opts = go 'hm:g:s:a:C:R:t'
|
75
76
|
opts['h'] and usage
|
76
77
|
filename = ARGV.shift or usage 1
|
77
78
|
metric = Term::ANSIColor::RGBColorMetrics.metric(opts['m'] || 'CIELab')
|
@@ -84,8 +85,9 @@ opts['R'] ||= [ Tins::Terminal.rows - 1, 0 ].max
|
|
84
85
|
file = provide_ppm_file(filename, opts)
|
85
86
|
ppm = Term::ANSIColor::PPMReader.new(
|
86
87
|
file,
|
87
|
-
:metric
|
88
|
-
:gray
|
88
|
+
metric: metric,
|
89
|
+
gray: gray,
|
90
|
+
true_coloring: opts[?t]
|
89
91
|
)
|
90
92
|
|
91
93
|
puts ppm
|
data/bin/term_mandel
CHANGED
@@ -15,16 +15,12 @@ def draw_set(rx, ry)
|
|
15
15
|
sx = (rx.end - rx.begin).abs / @width
|
16
16
|
sy = (ry.end - ry.begin).abs / @height
|
17
17
|
|
18
|
-
ac
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
ac::Attribute[ color_random ].gradient_to(ac::Attribute[ color_random ], :steps => 16) +
|
25
|
-
ac::Attribute[ color_random ].gradient_to(ac::Attribute[ color_random ], :steps => 16) +
|
26
|
-
ac::Attribute[ color_random ].gradient_to(ac::Attribute[ color_random ], :steps => 16) +
|
27
|
-
ac::Attribute[ color_random ].gradient_to(ac::Attribute['#000'], :steps => 16)
|
18
|
+
ac = Term::ANSIColor
|
19
|
+
steps = 16
|
20
|
+
color = (5.times.map { color_random } + [ 0, 0, 0 ]).map { ac::Attribute[_1] }
|
21
|
+
color = color[1..-1].inject(color[0,1]) { |c, x|
|
22
|
+
c + c.last.gradient_to(x, steps:)
|
23
|
+
}
|
28
24
|
iters = color.size - 2
|
29
25
|
|
30
26
|
text = ''
|
@@ -44,9 +40,11 @@ def draw_set(rx, ry)
|
|
44
40
|
puts text
|
45
41
|
end
|
46
42
|
|
47
|
-
opts = go 'x:y
|
43
|
+
opts = go 'x:y'
|
48
44
|
|
49
|
-
|
50
|
-
|
45
|
+
Term::ANSIColor.true_coloring = ENV['COLORTERM'] =~ /\A(truecolor|24bit)\z/
|
46
|
+
|
47
|
+
rx = opts[?x].full? { |r| Range.new(*(r.split('..', 2).map(&:to_f))) } || (-2.0..1.0)
|
48
|
+
ry = opts[?y].full? { |r| Range.new(*(r.split('..', 2).map(&:to_f))) } || (-1.0..1.0)
|
51
49
|
|
52
50
|
draw_set rx, ry
|
data/bin/term_snow
CHANGED
@@ -9,23 +9,23 @@ class SnowFlake
|
|
9
9
|
extend Term::ANSIColor
|
10
10
|
|
11
11
|
def initialize(x, y, shape: %w[ ❄ ❅ ❆ • • · · . . ])
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
@x, @y, @shape = x, y, Array(shape).sample
|
13
|
+
@shape.size != 1 and raise ArgumentError, "#@shape needs to be a character"
|
14
|
+
end
|
15
15
|
|
16
|
-
|
16
|
+
attr_accessor :x
|
17
17
|
|
18
|
-
|
18
|
+
attr_accessor :y
|
19
19
|
|
20
|
-
|
20
|
+
attr_accessor :shape
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
def to_s
|
23
|
+
move_to(y, x) { white on_black @shape }
|
24
|
+
end
|
25
25
|
end
|
26
26
|
|
27
|
-
opts
|
28
|
-
new_snowflakes
|
27
|
+
opts = go 'n:s:'
|
28
|
+
new_snowflakes = (opts[?n] || 3).to_i
|
29
29
|
sleep_duration = (opts[?s] || 0.2).to_f
|
30
30
|
|
31
31
|
flakes = []
|
@@ -51,7 +51,7 @@ loop do
|
|
51
51
|
sf.x = SnowFlake.terminal_columns
|
52
52
|
end
|
53
53
|
else
|
54
|
-
sf.x
|
54
|
+
sf.x += 1
|
55
55
|
if sf.x > SnowFlake.terminal_columns
|
56
56
|
sf.x = 1
|
57
57
|
end
|
@@ -64,7 +64,7 @@ loop do
|
|
64
64
|
flakes << SnowFlake.new(rand(1..SnowFlake.terminal_columns), 1)
|
65
65
|
end
|
66
66
|
|
67
|
-
print
|
67
|
+
print(*flakes)
|
68
68
|
|
69
69
|
sleep sleep_duration
|
70
70
|
rescue Interrupt
|
data/examples/example.rb
CHANGED
@@ -81,6 +81,34 @@ print red { bold { "All supported attributes = " } },
|
|
81
81
|
print "Send symbols to strings:".send(:red).send(:bold), "\n"
|
82
82
|
print symbols[12, 8].map { |c| c.to_s.send(c) } * '', "\n\n"
|
83
83
|
|
84
|
+
print red { bold { "Use true colors if supported" } }, "\n"
|
85
|
+
|
86
|
+
colors = Term::ANSIColor::Attribute['#ff0000'].gradient_to(
|
87
|
+
Term::ANSIColor::Attribute['#ffff00'],
|
88
|
+
true_coloring: true,
|
89
|
+
step: 16
|
90
|
+
)
|
91
|
+
colors += Term::ANSIColor::Attribute[colors.last].gradient_to(
|
92
|
+
Term::ANSIColor::Attribute['#00ff00'],
|
93
|
+
true_coloring: true,
|
94
|
+
step: 16
|
95
|
+
)
|
96
|
+
colors += Term::ANSIColor::Attribute[colors.last].gradient_to(
|
97
|
+
Term::ANSIColor::Attribute['#00ffff'],
|
98
|
+
true_coloring: true,
|
99
|
+
step: 16
|
100
|
+
)
|
101
|
+
colors += Term::ANSIColor::Attribute[colors.last].gradient_to(
|
102
|
+
Term::ANSIColor::Attribute['#0000ff'],
|
103
|
+
true_coloring: true,
|
104
|
+
step: 16
|
105
|
+
)
|
106
|
+
|
107
|
+
chars = %w[ ⣾ ⣽ ⣻ ⢿ ⡿ ⣟ ⣯ ⣷ ]
|
108
|
+
colors.each_with_index { |c, i| print c.apply { chars[i % chars.size] } }
|
109
|
+
puts
|
110
|
+
puts
|
111
|
+
|
84
112
|
print red { bold { "Make strings monochromatic again:" } }, "\n"
|
85
113
|
print [
|
86
114
|
"red".red,
|
@@ -30,15 +30,28 @@ module Term
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def self.[](name)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
def self.[](name, true_coloring: false)
|
34
|
+
true_coloring ||= Term::ANSIColor.true_coloring?
|
35
|
+
if true_coloring
|
36
|
+
case
|
37
|
+
when self === name then name
|
38
|
+
when Array === name then true_color name
|
39
|
+
when name.respond_to?(:to_rgb_triple) then true_color(name.to_rgb_triple.to_a)
|
40
|
+
when name.to_s =~ /\A(on_)?(\d+)\z/ then get "#$1color#$2"
|
41
|
+
when name.to_s =~ /\A#([0-9a-f]{3}){1,2}\z/i then true_color name
|
42
|
+
when name.to_s =~ /\Aon_#([0-9a-f]{3}){1,2}\z/i then on_true_color name
|
43
|
+
else get name
|
44
|
+
end
|
45
|
+
else
|
46
|
+
case
|
47
|
+
when self === name then name
|
48
|
+
when Array === name then nearest_rgb_color name
|
49
|
+
when name.respond_to?(:to_rgb_triple) then nearest_rgb_color(name.to_rgb_triple.to_a)
|
50
|
+
when name.to_s =~ /\A(on_)?(\d+)\z/ then get "#$1color#$2"
|
51
|
+
when name.to_s =~ /\A#([0-9a-f]{3}){1,2}\z/i then nearest_rgb_color name
|
52
|
+
when name.to_s =~ /\Aon_#([0-9a-f]{3}){1,2}\z/i then nearest_rgb_on_color name
|
53
|
+
else get name
|
54
|
+
end
|
42
55
|
end
|
43
56
|
end
|
44
57
|
|
@@ -70,10 +83,24 @@ module Term
|
|
70
83
|
colors.select(&:background?).min_by { |c| c.distance_to(rgb, options) }
|
71
84
|
end
|
72
85
|
|
86
|
+
def self.true_color(color, options = {})
|
87
|
+
rgb = RGBTriple[color]
|
88
|
+
new(:true, "", { true_color: rgb, background: false })
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.on_true_color(color, options = {})
|
92
|
+
rgb = RGBTriple[color]
|
93
|
+
new(:on_true, "", { true_color: rgb, background: true })
|
94
|
+
end
|
95
|
+
|
73
96
|
def initialize(name, code, options = {})
|
74
|
-
@name
|
75
|
-
@
|
76
|
-
|
97
|
+
@name = name.to_sym
|
98
|
+
@background = @name.start_with?('on_')
|
99
|
+
@code = code.to_s
|
100
|
+
if rgb = options[:true_color]
|
101
|
+
@true_color = true
|
102
|
+
@rgb = rgb
|
103
|
+
elsif html = options[:html]
|
77
104
|
@rgb = RGBTriple.from_html(html)
|
78
105
|
elsif !options.empty?
|
79
106
|
@rgb = RGBTriple.from_hash(options)
|
@@ -85,7 +112,9 @@ module Term
|
|
85
112
|
attr_reader :name
|
86
113
|
|
87
114
|
def code
|
88
|
-
if
|
115
|
+
if true_color?
|
116
|
+
background? ? "48;2;#{@rgb.to_a * ?;}" : "38;2;#{@rgb.to_a * ?;}"
|
117
|
+
elsif rgb_color?
|
89
118
|
background? ? "48;5;#{@code}" : "38;5;#{@code}"
|
90
119
|
else
|
91
120
|
@code
|
@@ -97,13 +126,19 @@ module Term
|
|
97
126
|
end
|
98
127
|
|
99
128
|
def background?
|
100
|
-
|
129
|
+
!!@background
|
101
130
|
end
|
102
131
|
|
132
|
+
attr_writer :background
|
133
|
+
|
103
134
|
attr_reader :rgb
|
104
135
|
|
105
136
|
def rgb_color?
|
106
|
-
!!@rgb
|
137
|
+
!!@rgb && !@true_color
|
138
|
+
end
|
139
|
+
|
140
|
+
def true_color?
|
141
|
+
!!(@rgb && @true_color)
|
107
142
|
end
|
108
143
|
|
109
144
|
def gray?
|
@@ -127,11 +162,16 @@ module Term
|
|
127
162
|
|
128
163
|
def gradient_to(other, options = {})
|
129
164
|
if our_rgb = to_rgb_triple and
|
130
|
-
|
131
|
-
|
132
|
-
|
165
|
+
other.respond_to?(:to_rgb_triple) and
|
166
|
+
other_rgb = other.to_rgb_triple
|
167
|
+
then
|
168
|
+
true_coloring = options[:true_coloring] || Term::ANSIColor.true_coloring?
|
133
169
|
our_rgb.gradient_to(other_rgb, options).map do |rgb_triple|
|
134
|
-
|
170
|
+
if true_coloring
|
171
|
+
self.class.true_color(rgb_triple, options)
|
172
|
+
else
|
173
|
+
self.class.nearest_rgb_color(rgb_triple, options)
|
174
|
+
end
|
135
175
|
end
|
136
176
|
else
|
137
177
|
[]
|
@@ -4,9 +4,10 @@ module Term
|
|
4
4
|
include Term::ANSIColor
|
5
5
|
|
6
6
|
def initialize(io, options = {})
|
7
|
-
@io
|
8
|
-
@options
|
9
|
-
@buffer
|
7
|
+
@io = io
|
8
|
+
@options = options
|
9
|
+
@buffer = ''
|
10
|
+
@true_coloring = options[:true_coloring]
|
10
11
|
end
|
11
12
|
|
12
13
|
def reset_io
|
@@ -34,7 +35,11 @@ module Term
|
|
34
35
|
last_pixel = nil
|
35
36
|
for pixel in row
|
36
37
|
if pixel != last_pixel
|
37
|
-
color =
|
38
|
+
color = if @true_coloring
|
39
|
+
Attribute.true_color(pixel, @options)
|
40
|
+
else
|
41
|
+
Attribute.nearest_rgb_color(pixel, @options)
|
42
|
+
end
|
38
43
|
result << on_color(color)
|
39
44
|
last_pixel = pixel
|
40
45
|
end
|
data/lib/term/ansicolor.rb
CHANGED
@@ -35,6 +35,7 @@ module Term
|
|
35
35
|
!String.instance_methods(false).map(&:to_sym).include?(:clear)
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
38
39
|
# Returns true, if the coloring function of this module
|
39
40
|
# is switched on, false otherwise.
|
40
41
|
def self.coloring?
|
@@ -43,12 +44,26 @@ module Term
|
|
43
44
|
|
44
45
|
# Turns the coloring on or off globally, so you can easily do
|
45
46
|
# this for example:
|
46
|
-
#
|
47
|
+
# Term::ANSIColor::coloring = STDOUT.isatty
|
47
48
|
def self.coloring=(val)
|
48
|
-
@coloring = val
|
49
|
+
@coloring = !!val
|
49
50
|
end
|
50
51
|
self.coloring = true
|
51
52
|
|
53
|
+
# Returns true, if the tue coloring mode of this module is switched on,
|
54
|
+
# false otherwise.
|
55
|
+
def self.true_coloring?
|
56
|
+
@true_coloring
|
57
|
+
end
|
58
|
+
|
59
|
+
# Turns the true coloring mode on or off globally, that will display 24-bit
|
60
|
+
# colors if your terminal supports it:
|
61
|
+
# Term::ANSIColor::true_coloring = ENV['COLORTERM'] =~ /\A(truecolor|24bit)\z/
|
62
|
+
def self.true_coloring=(val)
|
63
|
+
@true_coloring = !!val
|
64
|
+
end
|
65
|
+
self.true_coloring = false
|
66
|
+
|
52
67
|
def self.create_color_method(color_name, color_value)
|
53
68
|
module_eval <<-EOT
|
54
69
|
def #{color_name}(string = nil, &block)
|
@@ -64,10 +79,10 @@ module Term
|
|
64
79
|
|
65
80
|
# Regular expression that is used to scan for ANSI-Attributes while
|
66
81
|
# uncoloring strings.
|
67
|
-
COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9]|[34]8;5;\d{1,3})?m/
|
82
|
+
COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9]|[34]8;(5;\d{1,3}|2;\d{1,3}(;\d{1,3}){2}))?m/
|
68
83
|
|
69
|
-
# Returns an uncolored version of the string, that is all
|
70
|
-
#
|
84
|
+
# Returns an uncolored version of the string, that is all ANSI-Attributes
|
85
|
+
# are stripped from the string.
|
71
86
|
def uncolor(string = nil) # :yields:
|
72
87
|
if block_given?
|
73
88
|
yield.to_str.gsub(COLORED_REGEXP, '')
|
@@ -104,7 +119,9 @@ module Term
|
|
104
119
|
|
105
120
|
def on_color(name, string = nil, &block)
|
106
121
|
attribute = Attribute[name] or raise ArgumentError, "unknown attribute #{name.inspect}"
|
107
|
-
|
122
|
+
attribute = attribute.dup
|
123
|
+
attribute.background = true
|
124
|
+
color(attribute, string, &block)
|
108
125
|
end
|
109
126
|
|
110
127
|
class << self
|
data/term-ansicolor.gemspec
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: term-ansicolor 1.
|
2
|
+
# stub: term-ansicolor 1.9.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "term-ansicolor".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.9.0".freeze
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "2024-
|
11
|
+
s.date = "2024-06-18"
|
12
12
|
s.description = "This library uses ANSI escape sequences to control the attributes of terminal output".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.executables = ["term_cdiff".freeze, "term_colortab".freeze, "term_decolor".freeze, "term_display".freeze, "term_mandel".freeze, "term_snow".freeze]
|
15
15
|
s.extra_rdoc_files = ["README.md".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze]
|
16
|
-
s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".tool-versions".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/term_cdiff".freeze, "bin/term_colortab".freeze, "bin/term_decolor".freeze, "bin/term_display".freeze, "bin/term_mandel".freeze, "bin/term_snow".freeze, "examples/example.rb".freeze, "examples/lambda-red-plain.ppm".freeze, "examples/lambda-red.png".freeze, "examples/lambda-red.ppm".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/.keep".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze, "term-ansicolor.gemspec".freeze, "tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
|
16
|
+
s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".tool-versions".freeze, ".utilsrc".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/term_cdiff".freeze, "bin/term_colortab".freeze, "bin/term_decolor".freeze, "bin/term_display".freeze, "bin/term_mandel".freeze, "bin/term_snow".freeze, "examples/example.rb".freeze, "examples/lambda-red-plain.ppm".freeze, "examples/lambda-red.png".freeze, "examples/lambda-red.ppm".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/.keep".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze, "term-ansicolor.gemspec".freeze, "tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
|
17
17
|
s.homepage = "https://github.com/flori/term-ansicolor".freeze
|
18
18
|
s.licenses = ["Apache-2.0".freeze]
|
19
19
|
s.rdoc_options = ["--title".freeze, "Term-ansicolor - Ruby library that colors strings using ANSI escape sequences".freeze, "--main".freeze, "README.md".freeze]
|
data/tests/ansicolor_test.rb
CHANGED
@@ -157,4 +157,20 @@ class ANSIColorTest < Test::Unit::TestCase
|
|
157
157
|
string = Color.red(string)
|
158
158
|
assert_kind_of Term::ANSIColor, 'new'
|
159
159
|
end
|
160
|
+
|
161
|
+
def test_coloring
|
162
|
+
assert Term::ANSIColor.coloring?
|
163
|
+
Term::ANSIColor.coloring = false
|
164
|
+
assert_false Term::ANSIColor.coloring?
|
165
|
+
ensure
|
166
|
+
Term::ANSIColor.coloring = true
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_true_coloring
|
170
|
+
assert_false Term::ANSIColor.true_coloring?
|
171
|
+
Term::ANSIColor.true_coloring = true
|
172
|
+
assert Term::ANSIColor.true_coloring?
|
173
|
+
ensure
|
174
|
+
Term::ANSIColor.true_coloring = false
|
175
|
+
end
|
160
176
|
end
|
data/tests/attribute_test.rb
CHANGED
@@ -70,4 +70,43 @@ class AttributeTest < Test::Unit::TestCase
|
|
70
70
|
assert_equal [ :color49, :color43, :color79, :color73, :color108,
|
71
71
|
:color247, :color138, :color168, :color204 ], g2.map(&:name)
|
72
72
|
end
|
73
|
+
|
74
|
+
def test_true_color
|
75
|
+
pinkish = Attribute['#f050a0', true_coloring: true]
|
76
|
+
assert_equal [ 240, 80, 160 ], pinkish.to_rgb_triple.to_a
|
77
|
+
on_pinkish = Attribute['on_#f050a0', true_coloring: true]
|
78
|
+
assert_equal [ 240, 80, 160 ], on_pinkish.to_rgb_triple.to_a
|
79
|
+
red = Attribute['9', true_coloring: true]
|
80
|
+
assert_equal [ 255, 0, 0 ], red.to_rgb_triple.to_a
|
81
|
+
red = Attribute['red', true_coloring: true]
|
82
|
+
assert_equal :red, red.name
|
83
|
+
pinkish_pinkish = Attribute[pinkish, true_coloring: true]
|
84
|
+
assert_equal pinkish, pinkish_pinkish
|
85
|
+
pinkish_pinkish = Attribute[pinkish.to_rgb_triple, true_coloring: true]
|
86
|
+
assert_equal pinkish.to_rgb_triple, pinkish_pinkish.to_rgb_triple
|
87
|
+
pinkish_pinkish = Attribute[pinkish.to_rgb_triple.to_a, true_coloring: true]
|
88
|
+
assert_equal pinkish.to_rgb_triple, pinkish_pinkish.to_rgb_triple
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_true_color_gradient
|
92
|
+
g0 = Attribute[:blink].gradient_to Attribute['#30ffaa']
|
93
|
+
assert_equal [], g0
|
94
|
+
g1 = Attribute['#30ffaa'].gradient_to(
|
95
|
+
Attribute['#ff507f'],
|
96
|
+
:steps => 9,
|
97
|
+
true_coloring: true
|
98
|
+
)
|
99
|
+
assert_equal %w[
|
100
|
+
#00ffaf #1febaa #3ed7a5 #5dc3a0 #7caf9b #9b9b96 #ba8791 #d9738c #ff5f87
|
101
|
+
], g1.map { _1.rgb.html }
|
102
|
+
g2 = Attribute['#30ffaa'].gradient_to(
|
103
|
+
Attribute['#ff507f'],
|
104
|
+
:steps => 9,
|
105
|
+
true_coloring: true,
|
106
|
+
:metric => RGBColorMetrics::Euclidean
|
107
|
+
)
|
108
|
+
assert_equal %w[
|
109
|
+
#00ffaf #1febaa #3ed7a5 #5dc3a0 #7caf9b #9b9b96 #ba8791 #d9738c #ff5f87
|
110
|
+
], g2.map { _1.rgb.html }
|
111
|
+
end
|
73
112
|
end
|
data/tests/hyperlink_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
1
3
|
class HyperlinkTest < Test::Unit::TestCase
|
2
4
|
include Term::ANSIColor
|
3
5
|
|
@@ -49,6 +51,8 @@ class HyperlinkTest < Test::Unit::TestCase
|
|
49
51
|
end
|
50
52
|
|
51
53
|
def test_with_stringy_self
|
52
|
-
|
54
|
+
string = 'foo'
|
55
|
+
string.extend Term::ANSIColor
|
56
|
+
assert_equal "\e]8;;#@link\e\\foo\e]8;;\e\\", string.hyperlink(@link)
|
53
57
|
end
|
54
58
|
end
|
data/tests/ppm_reader_test.rb
CHANGED
@@ -28,6 +28,14 @@ class PPMReaderTest < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
def test_rendering_ppm_with_true_colors
|
32
|
+
File.open(example_path('lambda-red.ppm')) do |ppm6|
|
33
|
+
ppm_reader = PPMReader.new(ppm6, :true_coloring => true)
|
34
|
+
assert_equal '5faa2b046cc3e030f86588e472683834',
|
35
|
+
Digest::MD5.hexdigest(ppm_reader.to_s)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
31
39
|
def test_to_a
|
32
40
|
File.open(example_path('lambda-red.ppm')) do |ppm6|
|
33
41
|
ppm_reader = PPMReader.new(ppm6, :gray => false)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: term-ansicolor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- ".all_images.yml"
|
111
111
|
- ".gitignore"
|
112
112
|
- ".tool-versions"
|
113
|
+
- ".utilsrc"
|
113
114
|
- CHANGES
|
114
115
|
- COPYING
|
115
116
|
- Gemfile
|