term-ansicolor 1.9.0 → 1.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/term_colortab +1 -1
- data/examples/example.rb +1 -1
- data/lib/term/ansicolor/attribute/color256.rb +38 -36
- data/lib/term/ansicolor/attribute/color8.rb +16 -16
- data/lib/term/ansicolor/attribute/intense_color8.rb +32 -34
- data/lib/term/ansicolor/attribute/text.rb +18 -15
- data/lib/term/ansicolor/attribute/underline.rb +34 -0
- data/lib/term/ansicolor/attribute.rb +28 -28
- data/lib/term/ansicolor/version.rb +1 -1
- data/lib/term/ansicolor.rb +26 -41
- data/term-ansicolor.gemspec +7 -6
- data/tests/ansicolor_test.rb +45 -2
- data/tests/attribute_test.rb +9 -9
- data/tests/hsl_triple_test.rb +1 -1
- metadata +19 -4
- data/.tool-versions +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 768db698164c4d6226839c11932c868d2a6e93e2c6d6db03e5fbee3422b8ecf7
|
4
|
+
data.tar.gz: 025abdbb49d4c589a00e70c7f467612d24748cc7b43db3901ca7b9bde909e906
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea842c5808c77941ba10f1599cda75bd8a32c07317c126298b4000b7340111f83a0dc6c7b79862d8e708860f5b4e0f2ede10e82d7a7e678fb9cf3f7122473266
|
7
|
+
data.tar.gz: 2edff8a89a38ad47f54f9110923ae2a809e9196f8222d9da6ba82513bdd650eff66623baeacfb075cccc03e7b21728c1a3a58a6d759aceb61336f271a6a15add
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.10.1
|
data/bin/term_colortab
CHANGED
data/examples/example.rb
CHANGED
@@ -76,7 +76,7 @@ print "clear".clear, "reset".reset, "bold".bold, "dark".dark,
|
|
76
76
|
|
77
77
|
symbols = Term::ANSIColor::attributes
|
78
78
|
print red { bold { "All supported attributes = " } },
|
79
|
-
symbols.map { |s| __send__(s, s.inspect) } *
|
79
|
+
symbols.map { |s| __send__(s, s.inspect) } * ",\n", "\n\n"
|
80
80
|
|
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"
|
@@ -2,65 +2,67 @@ module Term
|
|
2
2
|
module ANSIColor
|
3
3
|
class Attribute
|
4
4
|
class Color256
|
5
|
-
Attribute.set :color0, 0, :
|
6
|
-
Attribute.set :color1, 1, :
|
7
|
-
Attribute.set :color2, 2, :
|
8
|
-
Attribute.set :color3, 3, :
|
9
|
-
Attribute.set :color4, 4, :
|
10
|
-
Attribute.set :color5, 5, :
|
11
|
-
Attribute.set :color6, 6, :
|
12
|
-
Attribute.set :color7, 7, :
|
5
|
+
Attribute.set :color0, 0, html: '#000000'
|
6
|
+
Attribute.set :color1, 1, html: '#800000'
|
7
|
+
Attribute.set :color2, 2, html: '#008000'
|
8
|
+
Attribute.set :color3, 3, html: '#808000'
|
9
|
+
Attribute.set :color4, 4, html: '#000080'
|
10
|
+
Attribute.set :color5, 5, html: '#800080'
|
11
|
+
Attribute.set :color6, 6, html: '#008080'
|
12
|
+
Attribute.set :color7, 7, html: '#c0c0c0'
|
13
13
|
|
14
|
-
Attribute.set :color8, 8, :
|
15
|
-
Attribute.set :color9, 9, :
|
16
|
-
Attribute.set :color10, 10, :
|
17
|
-
Attribute.set :color11, 11, :
|
18
|
-
Attribute.set :color12, 12, :
|
19
|
-
Attribute.set :color13, 13, :
|
20
|
-
Attribute.set :color14, 14, :
|
21
|
-
Attribute.set :color15, 15, :
|
14
|
+
Attribute.set :color8, 8, html: '#808080'
|
15
|
+
Attribute.set :color9, 9, html: '#ff0000'
|
16
|
+
Attribute.set :color10, 10, html: '#00ff00'
|
17
|
+
Attribute.set :color11, 11, html: '#ffff00'
|
18
|
+
Attribute.set :color12, 12, html: '#0000ff'
|
19
|
+
Attribute.set :color13, 13, html: '#ff00ff'
|
20
|
+
Attribute.set :color14, 14, html: '#00ffff'
|
21
|
+
Attribute.set :color15, 15, html: '#ffffff'
|
22
22
|
|
23
23
|
steps = [ 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff ]
|
24
24
|
|
25
25
|
for i in 16..231
|
26
26
|
red, green, blue = (i - 16).to_s(6).rjust(3, '0').each_char.map { |c| steps[c.to_i] }
|
27
|
-
Attribute.set "color#{i}", i, :
|
27
|
+
Attribute.set "color#{i}", i, red: red, green: green, blue: blue
|
28
28
|
end
|
29
29
|
|
30
30
|
grey = 8
|
31
31
|
for i in 232..255
|
32
|
-
Attribute.set "color#{i}", i, :
|
32
|
+
Attribute.set "color#{i}", i, red: grey, green: grey, blue: grey
|
33
33
|
grey += 10
|
34
34
|
end
|
35
35
|
|
36
|
-
Attribute.set :on_color0, 0, :
|
37
|
-
Attribute.set :on_color1, 1, :
|
38
|
-
Attribute.set :on_color2, 2, :
|
39
|
-
Attribute.set :on_color3, 3, :
|
40
|
-
Attribute.set :on_color4, 4, :
|
41
|
-
Attribute.set :on_color5, 5, :
|
42
|
-
Attribute.set :on_color6, 6, :
|
43
|
-
Attribute.set :on_color7, 7, :
|
36
|
+
Attribute.set :on_color0, 0, html: '#000000', background: true
|
37
|
+
Attribute.set :on_color1, 1, html: '#800000', background: true
|
38
|
+
Attribute.set :on_color2, 2, html: '#808000', background: true
|
39
|
+
Attribute.set :on_color3, 3, html: '#808000', background: true
|
40
|
+
Attribute.set :on_color4, 4, html: '#000080', background: true
|
41
|
+
Attribute.set :on_color5, 5, html: '#800080', background: true
|
42
|
+
Attribute.set :on_color6, 6, html: '#008080', background: true
|
43
|
+
Attribute.set :on_color7, 7, html: '#c0c0c0'
|
44
44
|
|
45
|
-
Attribute.set :on_color8, 8, :
|
46
|
-
Attribute.set :on_color9, 9, :
|
47
|
-
Attribute.set :on_color10, 10, :
|
48
|
-
Attribute.set :on_color11, 11, :
|
49
|
-
Attribute.set :on_color12, 12, :
|
50
|
-
Attribute.set :on_color13, 13, :
|
51
|
-
Attribute.set :on_color14, 14, :
|
52
|
-
Attribute.set :on_color15, 15, :
|
45
|
+
Attribute.set :on_color8, 8, html: '#808080', background: true
|
46
|
+
Attribute.set :on_color9, 9, html: '#ff0000', background: true
|
47
|
+
Attribute.set :on_color10, 10, html: '#00ff00', background: true
|
48
|
+
Attribute.set :on_color11, 11, html: '#ffff00', background: true
|
49
|
+
Attribute.set :on_color12, 12, html: '#0000ff', background: true
|
50
|
+
Attribute.set :on_color13, 13, html: '#ff00ff', background: true
|
51
|
+
Attribute.set :on_color14, 14, html: '#00ffff', background: true
|
52
|
+
Attribute.set :on_color15, 15, html: '#ffffff', background: true
|
53
53
|
|
54
54
|
steps = [ 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff ]
|
55
55
|
|
56
56
|
for i in 16..231
|
57
57
|
red, green, blue = (i - 16).to_s(6).rjust(3, '0').each_char.map { |c| steps[c.to_i] }
|
58
|
-
Attribute.set "on_color#{i}", i,
|
58
|
+
Attribute.set "on_color#{i}", i,
|
59
|
+
red: red, green: green, blue: blue, background: true
|
59
60
|
end
|
60
61
|
|
61
62
|
grey = 8
|
62
63
|
for i in 232..255
|
63
|
-
Attribute.set "on_color#{i}", i,
|
64
|
+
Attribute.set "on_color#{i}", i,
|
65
|
+
red: grey, green: grey, blue: grey, background: true
|
64
66
|
grey += 10
|
65
67
|
end
|
66
68
|
end
|
@@ -2,23 +2,23 @@ module Term
|
|
2
2
|
module ANSIColor
|
3
3
|
class Attribute
|
4
4
|
class Color8
|
5
|
-
Attribute.set :black, 30
|
6
|
-
Attribute.set :red, 31
|
7
|
-
Attribute.set :green, 32
|
8
|
-
Attribute.set :yellow, 33
|
9
|
-
Attribute.set :blue, 34
|
10
|
-
Attribute.set :magenta, 35
|
11
|
-
Attribute.set :cyan, 36
|
12
|
-
Attribute.set :white, 37
|
5
|
+
Attribute.set :black, 30, direct: '#000000'
|
6
|
+
Attribute.set :red, 31, direct: '#800000'
|
7
|
+
Attribute.set :green, 32, direct: '#008000'
|
8
|
+
Attribute.set :yellow, 33, direct: '#808000'
|
9
|
+
Attribute.set :blue, 34, direct: '#000080'
|
10
|
+
Attribute.set :magenta, 35, direct: '#800080'
|
11
|
+
Attribute.set :cyan, 36, direct: '#008080'
|
12
|
+
Attribute.set :white, 37, direct: '#c0c0c0'
|
13
13
|
|
14
|
-
Attribute.set :on_black, 40
|
15
|
-
Attribute.set :on_red, 41
|
16
|
-
Attribute.set :on_green, 42
|
17
|
-
Attribute.set :on_yellow, 43
|
18
|
-
Attribute.set :on_blue, 44
|
19
|
-
Attribute.set :on_magenta, 45
|
20
|
-
Attribute.set :on_cyan, 46
|
21
|
-
Attribute.set :on_white, 47
|
14
|
+
Attribute.set :on_black, 40, direct: '#000000'
|
15
|
+
Attribute.set :on_red, 41, direct: '#800000'
|
16
|
+
Attribute.set :on_green, 42, direct: '#008000'
|
17
|
+
Attribute.set :on_yellow, 43, direct: '#808000'
|
18
|
+
Attribute.set :on_blue, 44, direct: '#000080'
|
19
|
+
Attribute.set :on_magenta, 45, direct: '#800080'
|
20
|
+
Attribute.set :on_cyan, 46, direct: '#008080'
|
21
|
+
Attribute.set :on_white, 47, direct: '#808080'
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -2,41 +2,39 @@ module Term
|
|
2
2
|
module ANSIColor
|
3
3
|
class Attribute
|
4
4
|
class IntenseColor8
|
5
|
-
|
6
|
-
Attribute.set :
|
7
|
-
Attribute.set :
|
8
|
-
Attribute.set :
|
9
|
-
Attribute.set :
|
10
|
-
Attribute.set :
|
11
|
-
Attribute.set :
|
12
|
-
Attribute.set :
|
13
|
-
Attribute.set :
|
14
|
-
Attribute.set :
|
15
|
-
Attribute.set :
|
16
|
-
Attribute.set :
|
17
|
-
Attribute.set :
|
18
|
-
Attribute.set :
|
19
|
-
Attribute.set :
|
20
|
-
Attribute.set :
|
21
|
-
Attribute.set :bright_white, 97
|
5
|
+
Attribute.set :intense_black, 90, direct: '#808080'
|
6
|
+
Attribute.set :bright_black, 90, direct: '#808080'
|
7
|
+
Attribute.set :intense_red, 91, direct: '#ff0000'
|
8
|
+
Attribute.set :bright_red, 91, direct: '#ff0000'
|
9
|
+
Attribute.set :intense_green, 92, direct: '#00ff00'
|
10
|
+
Attribute.set :bright_green, 92, direct: '#00ff00'
|
11
|
+
Attribute.set :intense_yellow, 93, direct: '#ffff00'
|
12
|
+
Attribute.set :bright_yellow, 93, direct: '#ffff00'
|
13
|
+
Attribute.set :intense_blue, 94, direct: '#0000ff'
|
14
|
+
Attribute.set :bright_blue, 94, direct: '#0000ff'
|
15
|
+
Attribute.set :intense_magenta, 95, direct: '#ff00ff'
|
16
|
+
Attribute.set :bright_magenta, 95, direct: '#ff00ff'
|
17
|
+
Attribute.set :intense_cyan, 96, direct: '#00ffff'
|
18
|
+
Attribute.set :bright_cyan, 96, direct: '#00ffff'
|
19
|
+
Attribute.set :intense_white, 97, direct: '#ffffff'
|
20
|
+
Attribute.set :bright_white, 97, direct: '#ffffff'
|
22
21
|
|
23
|
-
|
24
|
-
Attribute.set :
|
25
|
-
Attribute.set :
|
26
|
-
Attribute.set :
|
27
|
-
Attribute.set :
|
28
|
-
Attribute.set :
|
29
|
-
Attribute.set :
|
30
|
-
Attribute.set :
|
31
|
-
Attribute.set :
|
32
|
-
Attribute.set :
|
33
|
-
Attribute.set :
|
34
|
-
Attribute.set :
|
35
|
-
Attribute.set :
|
36
|
-
Attribute.set :
|
37
|
-
Attribute.set :
|
38
|
-
Attribute.set :
|
39
|
-
Attribute.set :on_bright_white, 107
|
22
|
+
Attribute.set :on_intense_black, 100, direct: '#808080'
|
23
|
+
Attribute.set :on_bright_black, 100, direct: '#808080'
|
24
|
+
Attribute.set :on_intense_red, 101, direct: '#ff0000'
|
25
|
+
Attribute.set :on_bright_red, 101, direct: '#ff0000'
|
26
|
+
Attribute.set :on_intense_green, 102, direct: '#00ff00'
|
27
|
+
Attribute.set :on_bright_green, 102, direct: '#00ff00'
|
28
|
+
Attribute.set :on_intense_yellow, 103, direct: '#ffff00'
|
29
|
+
Attribute.set :on_bright_yellow, 103, direct: '#ffff00'
|
30
|
+
Attribute.set :on_intense_blue, 104, direct: '#0000ff'
|
31
|
+
Attribute.set :on_bright_blue, 104, direct: '#0000ff'
|
32
|
+
Attribute.set :on_intense_magenta, 105, direct: '#ff00ff'
|
33
|
+
Attribute.set :on_bright_magenta, 105, direct: '#ff00ff'
|
34
|
+
Attribute.set :on_intense_cyan, 106, direct: '#00ffff'
|
35
|
+
Attribute.set :on_bright_cyan, 106, direct: '#00ffff'
|
36
|
+
Attribute.set :on_intense_white, 107, direct: '#ffffff'
|
37
|
+
Attribute.set :on_bright_white, 107, direct: '#ffffff'
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
@@ -1,22 +1,25 @@
|
|
1
|
+
require 'term/ansicolor/attribute/underline'
|
2
|
+
|
1
3
|
module Term
|
2
4
|
module ANSIColor
|
3
5
|
class Attribute
|
4
6
|
class Text
|
5
|
-
Attribute.set :clear,
|
6
|
-
Attribute.set :reset,
|
7
|
-
Attribute.set :bold,
|
8
|
-
Attribute.set :dark,
|
9
|
-
Attribute.set :faint,
|
10
|
-
Attribute.set :italic,
|
11
|
-
Attribute.set :
|
12
|
-
Attribute.set :
|
13
|
-
Attribute.set :
|
14
|
-
Attribute.set :
|
15
|
-
Attribute.set :
|
16
|
-
Attribute.set :
|
17
|
-
Attribute.set :
|
18
|
-
Attribute.set :
|
19
|
-
|
7
|
+
Attribute.set :clear, 0 # String#clear already used in String
|
8
|
+
Attribute.set :reset, 0 # synonym for :clear
|
9
|
+
Attribute.set :bold, 1
|
10
|
+
Attribute.set :dark, 2
|
11
|
+
Attribute.set :faint, 2
|
12
|
+
Attribute.set :italic, 3 # not widely implemented
|
13
|
+
Attribute.set :blink, 5
|
14
|
+
Attribute.set :rapid_blink, 6 # not widely implemented
|
15
|
+
Attribute.set :reverse, 7 # String#reverse already used in String
|
16
|
+
Attribute.set :negative, 7 # synonym for :reverse
|
17
|
+
Attribute.set :concealed, 8
|
18
|
+
Attribute.set :conceal, 8 # synonym for :concealed
|
19
|
+
Attribute.set :strikethrough, 9 # not widely implemented
|
20
|
+
Attribute.set :overline, 53
|
21
|
+
|
22
|
+
include Term::ANSIColor::Attribute::Underline
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Term
|
2
|
+
module ANSIColor
|
3
|
+
class Attribute
|
4
|
+
module Underline
|
5
|
+
Attribute.set :underline, 4, skip_definition: true
|
6
|
+
Attribute.set :underscore, 4, skip_definition: true # synonym for :underline
|
7
|
+
|
8
|
+
def underline(string = nil, color: nil, type: nil, &block)
|
9
|
+
code = {
|
10
|
+
nil => 4,
|
11
|
+
default: '4:1',
|
12
|
+
double: '4:2',
|
13
|
+
curly: '4:3',
|
14
|
+
dotted: '4:4',
|
15
|
+
dashed: '4:5',
|
16
|
+
}.fetch(type) { raise ArgumentError, "invalid line type" }
|
17
|
+
if color
|
18
|
+
a = Term::ANSIColor::Attribute[color]
|
19
|
+
color_code =
|
20
|
+
if a.true_color? || a.rgb_color? || a.direct?
|
21
|
+
color_code = "\e[58;2;#{a.rgb.to_a * ?;}"
|
22
|
+
else
|
23
|
+
raise ArgumentError, "invalid color #{a.name.inspect}"
|
24
|
+
end
|
25
|
+
code = "#{code}m#{color_code}"
|
26
|
+
end
|
27
|
+
apply_code(code, string, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
alias underscore underline
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -3,31 +3,21 @@ module Term
|
|
3
3
|
class Attribute
|
4
4
|
@__store__ = {}
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.attributes(&block)
|
18
|
-
@__order__.map { |name| @__store__[name] }
|
19
|
-
end
|
20
|
-
else
|
21
|
-
def self.set(name, code, options = {})
|
22
|
-
name = name.to_sym
|
23
|
-
result = @__store__[name] = new(name, code, options)
|
24
|
-
@rgb_colors = nil
|
25
|
-
result
|
6
|
+
def self.set(name, code, **options)
|
7
|
+
name = name.to_sym
|
8
|
+
result = @__store__[name] = new(name, code, options)
|
9
|
+
unless options[:skip_definition]
|
10
|
+
::Term::ANSIColor.class_eval do
|
11
|
+
define_method(name) do |string = nil, &block|
|
12
|
+
apply_attribute(name, string, &block)
|
13
|
+
end
|
14
|
+
end
|
26
15
|
end
|
16
|
+
result
|
17
|
+
end
|
27
18
|
|
28
|
-
|
29
|
-
|
30
|
-
end
|
19
|
+
def self.attributes(&block)
|
20
|
+
@__store__.each_value(&block)
|
31
21
|
end
|
32
22
|
|
33
23
|
def self.[](name, true_coloring: false)
|
@@ -60,7 +50,7 @@ module Term
|
|
60
50
|
end
|
61
51
|
|
62
52
|
def self.rgb_colors(options = {}, &block)
|
63
|
-
colors =
|
53
|
+
colors = attributes.select(&:rgb_color?)
|
64
54
|
if options.key?(:gray) && !options[:gray]
|
65
55
|
colors = colors.reject(&:gray?)
|
66
56
|
end
|
@@ -95,14 +85,18 @@ module Term
|
|
95
85
|
|
96
86
|
def initialize(name, code, options = {})
|
97
87
|
@name = name.to_sym
|
98
|
-
@background =
|
88
|
+
@background = !!options[:background]
|
99
89
|
@code = code.to_s
|
90
|
+
@true_color = false
|
100
91
|
if rgb = options[:true_color]
|
101
92
|
@true_color = true
|
102
93
|
@rgb = rgb
|
94
|
+
elsif rgb = options[:direct]
|
95
|
+
@direct = true
|
96
|
+
@rgb = RGBTriple.from_html(rgb)
|
103
97
|
elsif html = options[:html]
|
104
98
|
@rgb = RGBTriple.from_html(html)
|
105
|
-
elsif
|
99
|
+
elsif options.slice(:red, :green, :blue).size == 3
|
106
100
|
@rgb = RGBTriple.from_hash(options)
|
107
101
|
else
|
108
102
|
@rgb = nil # prevent instance variable not initialized warnings
|
@@ -116,25 +110,31 @@ module Term
|
|
116
110
|
background? ? "48;2;#{@rgb.to_a * ?;}" : "38;2;#{@rgb.to_a * ?;}"
|
117
111
|
elsif rgb_color?
|
118
112
|
background? ? "48;5;#{@code}" : "38;5;#{@code}"
|
113
|
+
elsif direct?
|
114
|
+
background? ? (@code.to_i + 10).to_s : @code
|
119
115
|
else
|
120
116
|
@code
|
121
117
|
end
|
122
118
|
end
|
123
119
|
|
124
120
|
def apply(string = nil, &block)
|
125
|
-
::Term::ANSIColor.
|
121
|
+
::Term::ANSIColor.apply_attribute(self, string, &block)
|
126
122
|
end
|
127
123
|
|
128
124
|
def background?
|
129
125
|
!!@background
|
130
126
|
end
|
131
127
|
|
128
|
+
def direct?
|
129
|
+
!!@direct
|
130
|
+
end
|
131
|
+
|
132
132
|
attr_writer :background
|
133
133
|
|
134
134
|
attr_reader :rgb
|
135
135
|
|
136
136
|
def rgb_color?
|
137
|
-
!!@rgb && !@true_color
|
137
|
+
!!@rgb && !@true_color && !@direct
|
138
138
|
end
|
139
139
|
|
140
140
|
def true_color?
|
data/lib/term/ansicolor.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'tins/xt/full'
|
2
|
+
require 'mize'
|
2
3
|
|
3
4
|
module Term
|
4
5
|
|
@@ -18,23 +19,7 @@ module Term
|
|
18
19
|
include Term::ANSIColor::Movement
|
19
20
|
require 'term/ansicolor/hyperlink'
|
20
21
|
include Term::ANSIColor::Hyperlink
|
21
|
-
|
22
|
-
# :stopdoc:
|
23
|
-
ATTRIBUTE_NAMES = Attribute.named_attributes.map(&:name)
|
24
|
-
# :startdoc:
|
25
|
-
|
26
|
-
# Returns true if Term::ANSIColor supports the +feature+.
|
27
|
-
#
|
28
|
-
# The feature :clear, that is mixing the clear color attribute into String,
|
29
|
-
# is only supported on ruby implementations, that do *not* already
|
30
|
-
# implement the String#clear method. It's better to use the reset color
|
31
|
-
# attribute instead.
|
32
|
-
def support?(feature)
|
33
|
-
case feature
|
34
|
-
when :clear
|
35
|
-
!String.instance_methods(false).map(&:to_sym).include?(:clear)
|
36
|
-
end
|
37
|
-
end
|
22
|
+
include Term::ANSIColor::Attribute::Underline
|
38
23
|
|
39
24
|
# Returns true, if the coloring function of this module
|
40
25
|
# is switched on, false otherwise.
|
@@ -64,22 +49,9 @@ module Term
|
|
64
49
|
end
|
65
50
|
self.true_coloring = false
|
66
51
|
|
67
|
-
def self.create_color_method(color_name, color_value)
|
68
|
-
module_eval <<-EOT
|
69
|
-
def #{color_name}(string = nil, &block)
|
70
|
-
color(:#{color_name}, string, &block)
|
71
|
-
end
|
72
|
-
EOT
|
73
|
-
self
|
74
|
-
end
|
75
|
-
|
76
|
-
for attribute in Attribute.named_attributes
|
77
|
-
create_color_method(attribute.name, attribute.code)
|
78
|
-
end
|
79
|
-
|
80
52
|
# Regular expression that is used to scan for ANSI-Attributes while
|
81
53
|
# uncoloring strings.
|
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/
|
54
|
+
COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9]|[34]8;(5;\d{1,3}|2;\d{1,3}(;\d{1,3}){2})|4:\d|53)?m/
|
83
55
|
|
84
56
|
# Returns an uncolored version of the string, that is all ANSI-Attributes
|
85
57
|
# are stripped from the string.
|
@@ -97,13 +69,9 @@ module Term
|
|
97
69
|
|
98
70
|
alias uncolored uncolor
|
99
71
|
|
100
|
-
|
101
|
-
# color +name+. If string isn't a string only the escape sequence to switch
|
102
|
-
# on the color +name+ is returned.
|
103
|
-
def color(name, string = nil, &block)
|
104
|
-
attribute = Attribute[name] or raise ArgumentError, "unknown attribute #{name.inspect}"
|
72
|
+
def apply_code(code, string = nil, &block)
|
105
73
|
result = ''
|
106
|
-
result << "\e[#{
|
74
|
+
result << "\e[#{code}m" if Term::ANSIColor.coloring?
|
107
75
|
if block_given?
|
108
76
|
result << yield.to_s
|
109
77
|
elsif string.respond_to?(:to_str)
|
@@ -117,17 +85,34 @@ module Term
|
|
117
85
|
result.extend(Term::ANSIColor)
|
118
86
|
end
|
119
87
|
|
88
|
+
def apply_attribute(name, string = nil, &block)
|
89
|
+
attribute = Attribute[name] or
|
90
|
+
raise ArgumentError, "unknown attribute #{name.inspect}"
|
91
|
+
apply_code(attribute.code, string, &block)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Return +string+ or the result string of the given +block+ colored with
|
95
|
+
# color +name+. If string isn't a string only the escape sequence to switch
|
96
|
+
# on the color +name+ is returned.
|
97
|
+
def color(name, string = nil, &block)
|
98
|
+
apply_attribute(name, string, &block)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Return +string+ or the result string of the given +block+ with a
|
102
|
+
# background colored with color +name+. If string isn't a string only the
|
103
|
+
# escape sequence to switch on the color +name+ is returned.
|
120
104
|
def on_color(name, string = nil, &block)
|
121
|
-
attribute = Attribute[name] or
|
105
|
+
attribute = Attribute[name] or
|
106
|
+
raise ArgumentError, "unknown attribute #{name.inspect}"
|
122
107
|
attribute = attribute.dup
|
123
108
|
attribute.background = true
|
124
|
-
|
109
|
+
apply_attribute(attribute, string, &block)
|
125
110
|
end
|
126
111
|
|
127
112
|
class << self
|
128
113
|
# Returns an array of all Term::ANSIColor attributes as symbols.
|
129
|
-
def term_ansicolor_attributes
|
130
|
-
::Term::ANSIColor::
|
114
|
+
memoize method: def term_ansicolor_attributes
|
115
|
+
::Term::ANSIColor::Attribute.attributes.map(&:name)
|
131
116
|
end
|
132
117
|
|
133
118
|
alias attributes term_ansicolor_attributes
|
data/term-ansicolor.gemspec
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: term-ansicolor 1.
|
2
|
+
# stub: term-ansicolor 1.10.1 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.10.1".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-06-
|
11
|
+
s.date = "2024-06-21"
|
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
|
-
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, ".
|
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/attribute/underline.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, ".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/attribute/underline.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]
|
20
|
-
s.rubygems_version = "3.5.
|
20
|
+
s.rubygems_version = "3.5.11".freeze
|
21
21
|
s.summary = "Ruby library that colors strings using ANSI escape sequences".freeze
|
22
22
|
s.test_files = ["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]
|
23
23
|
|
@@ -28,4 +28,5 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency(%q<test-unit>.freeze, [">= 0".freeze])
|
29
29
|
s.add_development_dependency(%q<utils>.freeze, [">= 0".freeze])
|
30
30
|
s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.0".freeze])
|
31
|
+
s.add_runtime_dependency(%q<mize>.freeze, [">= 0".freeze])
|
31
32
|
end
|
data/tests/ansicolor_test.rb
CHANGED
@@ -103,9 +103,22 @@ class ANSIColorTest < Test::Unit::TestCase
|
|
103
103
|
|
104
104
|
def test_attributes
|
105
105
|
foo = 'foo'
|
106
|
-
|
106
|
+
attributes = %i[
|
107
|
+
clear reset bold dark faint italic underline underscore
|
108
|
+
blink rapid_blink reverse negative concealed conceal strikethrough black
|
109
|
+
red green yellow blue magenta cyan white on_black on_red on_green on_yellow
|
110
|
+
on_blue on_magenta on_cyan on_white intense_black bright_black intense_red
|
111
|
+
bright_red intense_green bright_green intense_yellow bright_yellow
|
112
|
+
intense_blue bright_blue intense_magenta bright_magenta intense_cyan
|
113
|
+
bright_cyan intense_white bright_white on_intense_black on_bright_black
|
114
|
+
on_intense_red on_bright_red on_intense_green on_bright_green
|
115
|
+
on_intense_yellow on_bright_yellow on_intense_blue on_bright_blue
|
116
|
+
on_intense_magenta on_bright_magenta on_intense_cyan on_bright_cyan
|
117
|
+
on_intense_white on_bright_white
|
118
|
+
]
|
119
|
+
for a in attributes
|
107
120
|
# skip :clear and :reverse b/c Ruby implements them on string
|
108
|
-
if a != :clear && a != :reverse
|
121
|
+
if a != :clear && a != :reverse
|
109
122
|
refute_equal foo, foo_colored = foo.__send__(a)
|
110
123
|
assert_equal foo, foo_colored.uncolor
|
111
124
|
end
|
@@ -121,6 +134,36 @@ class ANSIColorTest < Test::Unit::TestCase
|
|
121
134
|
assert_equal Term::ANSIColor.attributes, 'foo'.attributes
|
122
135
|
end
|
123
136
|
|
137
|
+
def test_underline
|
138
|
+
foo = 'foo'
|
139
|
+
assert_equal "\e[4mfoo\e[0m", Term::ANSIColor.underline { foo }
|
140
|
+
assert_equal "\e[4m\e[58;2;255;135;95mfoo\e[0m", Term::ANSIColor.underline(color: '#ff8040') { foo }
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_underline_double
|
144
|
+
foo = 'foo'
|
145
|
+
assert_equal "\e[4:2mfoo\e[0m", Term::ANSIColor.underline(type: :double) { foo }
|
146
|
+
assert_equal "\e[4:2m\e[58;2;255;135;95mfoo\e[0m", Term::ANSIColor.underline(type: :double, color: '#ff8040') { foo }
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_underline_curly
|
150
|
+
foo = 'foo'
|
151
|
+
assert_equal "\e[4:3mfoo\e[0m", Term::ANSIColor.underline(type: :curly) { foo }
|
152
|
+
assert_equal "\e[4:3m\e[58;2;255;135;95mfoo\e[0m", Term::ANSIColor.underline(type: :curly, color: '#ff8040') { foo }
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_underline_dotted
|
156
|
+
foo = 'foo'
|
157
|
+
assert_equal "\e[4:4mfoo\e[0m", Term::ANSIColor.underline(type: :dotted) { foo }
|
158
|
+
assert_equal "\e[4:4m\e[58;2;255;135;95mfoo\e[0m", Term::ANSIColor.underline(type: :dotted, color: '#ff8040') { foo }
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_underline_dashed
|
162
|
+
foo = 'foo'
|
163
|
+
assert_equal "\e[4:5mfoo\e[0m", Term::ANSIColor.underline(type: :dashed) { foo }
|
164
|
+
assert_equal "\e[4:5m\e[58;2;255;135;95mfoo\e[0m", Term::ANSIColor.underline(type: :dashed, color: '#ff8040') { foo }
|
165
|
+
end
|
166
|
+
|
124
167
|
def test_move_to
|
125
168
|
string_23_23 = "\e[23;23Hred"
|
126
169
|
assert_equal string_23_23, string.move_to(23, 23)
|
data/tests/attribute_test.rb
CHANGED
@@ -32,7 +32,7 @@ class AttributeTest < Test::Unit::TestCase
|
|
32
32
|
assert_in_delta 250.954, Attribute.get(:color0).distance_to(color), 1e-3
|
33
33
|
color = Attribute.nearest_rgb_color('#0f0')
|
34
34
|
assert_in_delta 255, Attribute.get(:color0).distance_to(color,
|
35
|
-
:
|
35
|
+
metric: RGBColorMetrics::Euclidean), 1e-3
|
36
36
|
assert_equal 1 / 0.0, Attribute.get(:color0).distance_to(nil)
|
37
37
|
end
|
38
38
|
|
@@ -40,14 +40,14 @@ class AttributeTest < Test::Unit::TestCase
|
|
40
40
|
assert_equal Attribute.get(:color0).rgb, Attribute.nearest_rgb_color('#000').rgb
|
41
41
|
assert_equal Attribute.get(:color15).rgb, Attribute.nearest_rgb_color('#ffffff').rgb
|
42
42
|
assert_equal :color248, Attribute.nearest_rgb_color('#aaa').name
|
43
|
-
assert_equal :color109, Attribute.nearest_rgb_color('#aaa', :
|
43
|
+
assert_equal :color109, Attribute.nearest_rgb_color('#aaa', gray: false).name
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_nearest_rgb_on_color
|
47
47
|
assert_equal Attribute.get(:on_color0).rgb, Attribute.nearest_rgb_on_color('#000').rgb
|
48
48
|
assert_equal Attribute.get(:on_color15).rgb, Attribute.nearest_rgb_on_color('#ffffff').rgb
|
49
49
|
assert_equal :on_color248, Attribute.nearest_rgb_on_color('#aaa').name
|
50
|
-
assert_equal :on_color109, Attribute.nearest_rgb_on_color('#aaa', :
|
50
|
+
assert_equal :on_color109, Attribute.nearest_rgb_on_color('#aaa', gray: false).name
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_apply
|
@@ -59,13 +59,13 @@ class AttributeTest < Test::Unit::TestCase
|
|
59
59
|
def test_gradient
|
60
60
|
g0 = Attribute[:blink].gradient_to Attribute['#30ffaa']
|
61
61
|
assert_equal [], g0
|
62
|
-
g1 = Attribute['#30ffaa'].gradient_to(Attribute['#ff507f'], :
|
62
|
+
g1 = Attribute['#30ffaa'].gradient_to(Attribute['#ff507f'], steps: 9)
|
63
63
|
assert_equal [ :color49, :color49, :color43, :color79, :color108,
|
64
64
|
:color247, :color138, :color168, :color204 ], g1.map(&:name)
|
65
65
|
g2 = Attribute['#30ffaa'].gradient_to(
|
66
66
|
Attribute['#ff507f'],
|
67
|
-
:
|
68
|
-
:
|
67
|
+
steps: 9,
|
68
|
+
metric: RGBColorMetrics::Euclidean
|
69
69
|
)
|
70
70
|
assert_equal [ :color49, :color43, :color79, :color73, :color108,
|
71
71
|
:color247, :color138, :color168, :color204 ], g2.map(&:name)
|
@@ -93,7 +93,7 @@ class AttributeTest < Test::Unit::TestCase
|
|
93
93
|
assert_equal [], g0
|
94
94
|
g1 = Attribute['#30ffaa'].gradient_to(
|
95
95
|
Attribute['#ff507f'],
|
96
|
-
:
|
96
|
+
steps: 9,
|
97
97
|
true_coloring: true
|
98
98
|
)
|
99
99
|
assert_equal %w[
|
@@ -101,9 +101,9 @@ class AttributeTest < Test::Unit::TestCase
|
|
101
101
|
], g1.map { _1.rgb.html }
|
102
102
|
g2 = Attribute['#30ffaa'].gradient_to(
|
103
103
|
Attribute['#ff507f'],
|
104
|
-
:
|
104
|
+
steps: 9,
|
105
105
|
true_coloring: true,
|
106
|
-
:
|
106
|
+
metric: RGBColorMetrics::Euclidean
|
107
107
|
)
|
108
108
|
assert_equal %w[
|
109
109
|
#00ffaf #1febaa #3ed7a5 #5dc3a0 #7caf9b #9b9b96 #ba8791 #d9738c #ff5f87
|
data/tests/hsl_triple_test.rb
CHANGED
@@ -13,7 +13,7 @@ class HSLTripleTest < Test::Unit::TestCase
|
|
13
13
|
|
14
14
|
def test_hsl_cast
|
15
15
|
assert_equal '#85e085', HSLTriple[ @pastel_green_hsl ].html
|
16
|
-
assert_equal '#85e085', HSLTriple[ :
|
16
|
+
assert_equal '#85e085', HSLTriple[ hue: 120, saturation: 59.4, lightness: 70 ].html
|
17
17
|
assert_equal '#11ddff', HSLTriple[ '#1df' ].html
|
18
18
|
assert_equal '#8000ff', HSLTriple[ 'rgb(128,0,255)' ].html
|
19
19
|
assert_equal '#85e085', HSLTriple[ 'hsl(120.0,59.4%,70.0%)' ].html
|
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.10.1
|
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-06-
|
11
|
+
date: 2024-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mize
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: This library uses ANSI escape sequences to control the attributes of
|
84
98
|
terminal output
|
85
99
|
email: flori@ping.de
|
@@ -99,6 +113,7 @@ extra_rdoc_files:
|
|
99
113
|
- lib/term/ansicolor/attribute/color8.rb
|
100
114
|
- lib/term/ansicolor/attribute/intense_color8.rb
|
101
115
|
- lib/term/ansicolor/attribute/text.rb
|
116
|
+
- lib/term/ansicolor/attribute/underline.rb
|
102
117
|
- lib/term/ansicolor/hsl_triple.rb
|
103
118
|
- lib/term/ansicolor/hyperlink.rb
|
104
119
|
- lib/term/ansicolor/movement.rb
|
@@ -109,7 +124,6 @@ extra_rdoc_files:
|
|
109
124
|
files:
|
110
125
|
- ".all_images.yml"
|
111
126
|
- ".gitignore"
|
112
|
-
- ".tool-versions"
|
113
127
|
- ".utilsrc"
|
114
128
|
- CHANGES
|
115
129
|
- COPYING
|
@@ -134,6 +148,7 @@ files:
|
|
134
148
|
- lib/term/ansicolor/attribute/color8.rb
|
135
149
|
- lib/term/ansicolor/attribute/intense_color8.rb
|
136
150
|
- lib/term/ansicolor/attribute/text.rb
|
151
|
+
- lib/term/ansicolor/attribute/underline.rb
|
137
152
|
- lib/term/ansicolor/hsl_triple.rb
|
138
153
|
- lib/term/ansicolor/hyperlink.rb
|
139
154
|
- lib/term/ansicolor/movement.rb
|
@@ -173,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
188
|
- !ruby/object:Gem::Version
|
174
189
|
version: '0'
|
175
190
|
requirements: []
|
176
|
-
rubygems_version: 3.5.
|
191
|
+
rubygems_version: 3.5.11
|
177
192
|
signing_key:
|
178
193
|
specification_version: 4
|
179
194
|
summary: Ruby library that colors strings using ANSI escape sequences
|
data/.tool-versions
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ruby 3.3.0
|