ex_aequo 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ex_aequo/color/ansi.rb +4 -2
- data/lib/ex_aequo/color/ansi256.rb +4 -2
- data/lib/ex_aequo/color/colorizer.rb +60 -6
- data/lib/ex_aequo/color/modifiers.rb +27 -0
- data/lib/ex_aequo/color/rgb.rb +7 -5
- data/lib/ex_aequo/color/web.rb +165 -0
- data/lib/ex_aequo/color.rb +10 -6
- data/lib/ex_aequo/kernel/access.rb +15 -0
- data/lib/ex_aequo/kernel/fn.rb +9 -0
- data/lib/ex_aequo/kernel.rb +4 -0
- data/lib/ex_aequo/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 394e714f95ecbb3b54b5a264ce5be367d235fcebe7513b89d48d0491de236312
|
4
|
+
data.tar.gz: 177328fccfa5fbfd1911944ac5d6a65ccf7a7315589930d91beb764e413b2c4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c929dc3f52e077403241a32d114e36f76629f62c0da14d4927b03b6845bdfba0e3a1240d5a0b4285b048e2971a5898af675b86a80c5830fb35fc404a52d343ce
|
7
|
+
data.tar.gz: 2c2966155b1b3ddb5ca671105568248b8e1e1f6e1ebc205d4d91dc3582343969ecf1ca9bd56f2f7906f322011ab376047b699afea2c9925f1bedd399a32f7061
|
data/lib/ex_aequo/color/ansi.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'modifiers'
|
3
4
|
module ExAequo
|
4
5
|
module Color
|
5
6
|
module Ansi
|
6
7
|
extend self
|
8
|
+
include ExAequo::Color::Modifiers
|
7
9
|
|
8
10
|
AnsiColorEscape = {
|
9
11
|
black: 30,
|
@@ -16,12 +18,12 @@ module ExAequo
|
|
16
18
|
white: 37
|
17
19
|
}.freeze
|
18
20
|
|
19
|
-
def ansi(name)
|
21
|
+
def ansi(name, bold: false, dim: false, italic: false, underline: false)
|
20
22
|
case AnsiColorEscape.fetch(name.to_s.downcase.to_sym, nil)
|
21
23
|
in nil
|
22
24
|
raise IllegalColor, "#{name} is not one of the 8 legal basic ansi color names: #{_legal_ansi_color_names}"
|
23
25
|
in value
|
24
|
-
"\e[#{value}m"
|
26
|
+
"\e[#{value}#{postfix_modifiers(bold:, dim:, italic:, underline:)}m"
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'modifiers'
|
3
4
|
module ExAequo
|
4
5
|
module Color
|
5
6
|
module Ansi256
|
6
7
|
extend self
|
8
|
+
include ExAequo::Color::Modifiers
|
7
9
|
|
8
|
-
def ansi256(color)
|
10
|
+
def ansi256(color, bold: false, dim: false, italic: false, underline: false)
|
9
11
|
case color
|
10
12
|
in 1..256
|
11
|
-
"\e[38;5;#{color}m"
|
13
|
+
"\e[38;5;#{color}#{postfix_modifiers(bold:, dim:, italic:, underline:)}m"
|
12
14
|
else
|
13
15
|
raise IllegalColor, "#{color.inspect} is not a color number between 1 and 256"
|
14
16
|
end
|
@@ -5,17 +5,71 @@ module ExAequo
|
|
5
5
|
module Colorizer
|
6
6
|
extend self
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
ColorMethodKeywords = {
|
9
|
+
ansi: nil,
|
10
|
+
ansi256: nil,
|
11
|
+
rgb: nil,
|
12
|
+
web: nil
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
StyleKeywords = {
|
16
|
+
bold: nil,
|
17
|
+
dim: nil,
|
18
|
+
italic: nil,
|
19
|
+
underline: nil
|
20
|
+
}.freeze
|
21
|
+
|
22
|
+
ColorizeKeywords = ColorMethodKeywords.merge(StyleKeywords).merge(reset: true)
|
23
|
+
|
24
|
+
def colorize(text, **kwds)
|
25
|
+
kwds = ColorizeKeywords.merge(kwds)
|
26
|
+
_check_args!(kwds)
|
12
27
|
|
13
28
|
[
|
14
|
-
|
29
|
+
_color_code(**kwds),
|
15
30
|
text,
|
16
|
-
reset
|
31
|
+
_maybe_reset(kwds[:reset])
|
17
32
|
].join
|
18
33
|
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def _check_args!(kwds)
|
38
|
+
spurious = kwds.keys - ColorizeKeywords.keys
|
39
|
+
raise ArgumentError, "illegal keywords #{spurious}, allowed: #{ColorizeKeywords.keys}" unless spurious.empty?
|
40
|
+
|
41
|
+
_check_rgb_args!(kwds)
|
42
|
+
end
|
43
|
+
|
44
|
+
def _check_rgb_args!(kwds)
|
45
|
+
unless kwds.values_at(*ColorMethodKeywords.keys).compact.size == 1
|
46
|
+
raise ArgumentError, 'need to specify exactly one of the following keyword arguments: :ansi, :ansi256, :rgb, :web'
|
47
|
+
end
|
48
|
+
|
49
|
+
if kwds[:rgb] && Access.any_key?(kwds, :bold, :dim)
|
50
|
+
raise(
|
51
|
+
ArgumentError,
|
52
|
+
'specifying bold and/or dim with rgb does not make sense'
|
53
|
+
)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def _color_code(**kwds)
|
58
|
+
kwds => {ansi:, ansi256:, rgb:, web:, italic:, underline:}
|
59
|
+
if rgb
|
60
|
+
ExAequo::Color.rgb(*Array(rgb), italic:, underline:)
|
61
|
+
elsif web
|
62
|
+
ExAequo::Color.rgb(*ExAequo::Color::Web.to_rgb(web), italic:, underline:)
|
63
|
+
elsif ansi
|
64
|
+
ExAequo::Color.ansi(ansi, **kwds.slice(*StyleKeywords.keys))
|
65
|
+
else
|
66
|
+
ExAequo::Color.ansi256(ansi256, **kwds.slice(*StyleKeywords.keys))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def _maybe_reset(reset)
|
71
|
+
reset ? ExAequo::Color.reset : nil
|
72
|
+
end
|
19
73
|
end
|
20
74
|
end
|
21
75
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ExAequo
|
4
|
+
module Color
|
5
|
+
module Modifiers extend self
|
6
|
+
ModifierValues = {
|
7
|
+
bold: 1,
|
8
|
+
dim: 2,
|
9
|
+
italic: 3,
|
10
|
+
underline: 4
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
def postfix_modifiers(bold: nil, dim: nil, italic: nil, underline: nil)
|
14
|
+
[
|
15
|
+
bold ? :bold : nil,
|
16
|
+
dim ? :dim : nil,
|
17
|
+
italic ? :italic : nil,
|
18
|
+
underline ? :underline : nil
|
19
|
+
].compact
|
20
|
+
.map(&Access.hash_by_key(ModifierValues))
|
21
|
+
.map(&Fn.prefix_string(';'))
|
22
|
+
.join
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
# SPDX-License-Identifier: Apache-2.0
|
data/lib/ex_aequo/color/rgb.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'modifiers'
|
3
4
|
module ExAequo
|
4
5
|
module Color
|
5
6
|
module Rgb
|
6
7
|
extend self
|
7
8
|
|
8
|
-
def rgb(red, green = nil, blue = nil)
|
9
|
+
def rgb(red, green = nil, blue = nil, **kwds)
|
9
10
|
if green && blue
|
10
|
-
_rgb(red, green, blue)
|
11
|
+
_rgb(red, green, blue, **kwds)
|
11
12
|
else
|
12
13
|
raise ArgumentError, 'takes 1 or 3 parameters, given two' if green
|
13
14
|
|
14
|
-
_rgb(*_hex_to_triple(red))
|
15
|
+
_rgb(*_hex_to_triple(red), **kwds)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -47,10 +48,11 @@ module ExAequo
|
|
47
48
|
raise IllegalColor, "#{hex} is not a legal rgb hex string"
|
48
49
|
end
|
49
50
|
|
50
|
-
def _rgb(red, green, blue)
|
51
|
+
def _rgb(red, green, blue, italic: false, underline: false)
|
51
52
|
case _check_rgb(red, green, blue)
|
52
53
|
in :ok
|
53
|
-
|
54
|
+
modifier = ExAequo::Color::Modifiers.postfix_modifiers(italic:, underline:)
|
55
|
+
"\e[38;2;#{red};#{green};#{blue}#{modifier}m"
|
54
56
|
in message
|
55
57
|
raise IllegalColor, message
|
56
58
|
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ExAequo
|
4
|
+
module Color
|
5
|
+
module Web
|
6
|
+
extend self
|
7
|
+
|
8
|
+
WebColorNames = {
|
9
|
+
'aliceblue' => [240, 248, 255],
|
10
|
+
'antiquewhite' => [250, 235, 215],
|
11
|
+
'aqua' => [0, 255, 255],
|
12
|
+
'aquamarine' => [127, 255, 212],
|
13
|
+
'azure' => [240, 255, 255],
|
14
|
+
'beige' => [245, 245, 220],
|
15
|
+
'bisque' => [255, 228, 196],
|
16
|
+
'black' => [0, 0, 0],
|
17
|
+
'blanchedalmond' => [255, 235, 205],
|
18
|
+
'blue' => [0, 0, 255],
|
19
|
+
'blueviolet' => [138, 43, 226],
|
20
|
+
'brown' => [165, 42, 42],
|
21
|
+
'burlywood' => [222, 184, 135],
|
22
|
+
'cadetblue' => [95, 158, 160],
|
23
|
+
'chartreuse' => [127, 255, 0],
|
24
|
+
'chocolate' => [210, 105, 30],
|
25
|
+
'coral' => [255, 127, 80],
|
26
|
+
'cornflowerblue' => [100, 149, 237],
|
27
|
+
'cornsilk' => [255, 248, 220],
|
28
|
+
'crimson' => [220, 20, 60],
|
29
|
+
'cyan' => [0, 255, 255],
|
30
|
+
'darkblue' => [0, 0, 139],
|
31
|
+
'darkcyan' => [0, 139, 139],
|
32
|
+
'darkgoldenrod' => [184, 134, 11],
|
33
|
+
'darkgray' => [169, 169, 169],
|
34
|
+
'darkgreen' => [0, 100, 0],
|
35
|
+
'darkgrey' => [169, 169, 169],
|
36
|
+
'darkkhaki' => [189, 183, 107],
|
37
|
+
'darkmagenta' => [139, 0, 139],
|
38
|
+
'darkolivegreen' => [85, 107, 47],
|
39
|
+
'darkorange' => [255, 140, 0],
|
40
|
+
'darkorchid' => [153, 50, 204],
|
41
|
+
'darkred' => [139, 0, 0],
|
42
|
+
'darksalmon' => [233, 150, 122],
|
43
|
+
'darkseagreen' => [143, 188, 143],
|
44
|
+
'darkslateblue' => [72, 61, 139],
|
45
|
+
'darkslategray' => [47, 79, 79],
|
46
|
+
'darkslategrey' => [47, 79, 79],
|
47
|
+
'darkturquoise' => [0, 206, 209],
|
48
|
+
'darkviolet' => [148, 0, 211],
|
49
|
+
'deeppink' => [255, 20, 147],
|
50
|
+
'deepskyblue' => [0, 191, 255],
|
51
|
+
'dimgray' => [105, 105, 105],
|
52
|
+
'dimgrey' => [105, 105, 105],
|
53
|
+
'dodgerblue' => [30, 144, 255],
|
54
|
+
'firebrick' => [178, 34, 34],
|
55
|
+
'floralwhite' => [255, 250, 240],
|
56
|
+
'forestgreen' => [34, 139, 34],
|
57
|
+
'fuchsia' => [255, 0, 255],
|
58
|
+
'gainsboro' => [220, 220, 220],
|
59
|
+
'ghostwhite' => [248, 248, 255],
|
60
|
+
'gold' => [255, 215, 0],
|
61
|
+
'goldenrod' => [218, 165, 32],
|
62
|
+
'gray' => [128, 128, 128],
|
63
|
+
'green' => [0, 128, 0],
|
64
|
+
'greenyellow' => [173, 255, 47],
|
65
|
+
'grey' => [128, 128, 128],
|
66
|
+
'honeydew' => [240, 255, 240],
|
67
|
+
'hotpink' => [255, 105, 180],
|
68
|
+
'indianred' => [205, 92, 92],
|
69
|
+
'indigo' => [75, 0, 130],
|
70
|
+
'ivory' => [255, 255, 240],
|
71
|
+
'khaki' => [240, 230, 140],
|
72
|
+
'lavender' => [230, 230, 250],
|
73
|
+
'lavenderblush' => [255, 240, 245],
|
74
|
+
'lawngreen' => [124, 252, 0],
|
75
|
+
'lemonchiffon' => [255, 250, 205],
|
76
|
+
'lightblue' => [173, 216, 230],
|
77
|
+
'lightcoral' => [240, 128, 128],
|
78
|
+
'lightcyan' => [224, 255, 255],
|
79
|
+
'lightgoldenrodyellow' => [250, 250, 210],
|
80
|
+
'lightgray' => [211, 211, 211],
|
81
|
+
'lightgreen' => [144, 238, 144],
|
82
|
+
'lightgrey' => [211, 211, 211],
|
83
|
+
'lightpink' => [255, 182, 193],
|
84
|
+
'lightsalmon' => [255, 160, 122],
|
85
|
+
'lightseagreen' => [32, 178, 170],
|
86
|
+
'lightskyblue' => [135, 206, 250],
|
87
|
+
'lightslategray' => [119, 136, 153],
|
88
|
+
'lightslategrey' => [119, 136, 153],
|
89
|
+
'lightsteelblue' => [176, 196, 222],
|
90
|
+
'lightyellow' => [255, 255, 224],
|
91
|
+
'lime' => [0, 255, 0],
|
92
|
+
'limegreen' => [50, 205, 50],
|
93
|
+
'linen' => [250, 240, 230],
|
94
|
+
'magenta' => [255, 0, 255],
|
95
|
+
'maroon' => [128, 0, 0],
|
96
|
+
'mediumaquamarine' => [102, 205, 170],
|
97
|
+
'mediumblue' => [0, 0, 205],
|
98
|
+
'mediumorchid' => [186, 85, 211],
|
99
|
+
'mediumpurple' => [147, 112, 219],
|
100
|
+
'mediumseagreen' => [60, 179, 113],
|
101
|
+
'mediumslateblue' => [123, 104, 238],
|
102
|
+
'mediumspringgreen' => [0, 250, 154],
|
103
|
+
'mediumturquoise' => [72, 209, 204],
|
104
|
+
'mediumvioletred' => [199, 21, 133],
|
105
|
+
'midnightblue' => [25, 25, 112],
|
106
|
+
'mintcream' => [245, 255, 250],
|
107
|
+
'mistyrose' => [255, 228, 225],
|
108
|
+
'moccasin' => [255, 228, 181],
|
109
|
+
'navajowhite' => [255, 222, 173],
|
110
|
+
'navy' => [0, 0, 128],
|
111
|
+
'oldlace' => [253, 245, 230],
|
112
|
+
'olive' => [128, 128, 0],
|
113
|
+
'olivedrab' => [107, 142, 35],
|
114
|
+
'orange' => [255, 165, 0],
|
115
|
+
'orangered' => [255, 69, 0],
|
116
|
+
'orchid' => [218, 112, 214],
|
117
|
+
'palegoldenrod' => [238, 232, 170],
|
118
|
+
'palegreen' => [152, 251, 152],
|
119
|
+
'paleturquoise' => [175, 238, 238],
|
120
|
+
'palevioletred' => [219, 112, 147],
|
121
|
+
'papayawhip' => [255, 239, 213],
|
122
|
+
'peachpuff' => [255, 218, 185],
|
123
|
+
'peru' => [205, 133, 63],
|
124
|
+
'pink' => [255, 192, 203],
|
125
|
+
'plum' => [221, 160, 221],
|
126
|
+
'powderblue' => [176, 224, 230],
|
127
|
+
'purple' => [128, 0, 128],
|
128
|
+
'red' => [255, 0, 0],
|
129
|
+
'rosybrown' => [188, 143, 143],
|
130
|
+
'royalblue' => [65, 105, 225],
|
131
|
+
'saddlebrown' => [139, 69, 19],
|
132
|
+
'salmon' => [250, 128, 114],
|
133
|
+
'sandybrown' => [244, 164, 96],
|
134
|
+
'seagreen' => [46, 139, 87],
|
135
|
+
'seashell' => [255, 245, 238],
|
136
|
+
'sienna' => [160, 82, 45],
|
137
|
+
'silver' => [192, 192, 192],
|
138
|
+
'skyblue' => [135, 206, 235],
|
139
|
+
'slateblue' => [106, 90, 205],
|
140
|
+
'slategray' => [112, 128, 144],
|
141
|
+
'slategrey' => [112, 128, 144],
|
142
|
+
'snow' => [255, 250, 250],
|
143
|
+
'springgreen' => [0, 255, 127],
|
144
|
+
'steelblue' => [70, 130, 180],
|
145
|
+
'tan' => [210, 180, 140],
|
146
|
+
'teal' => [0, 128, 128],
|
147
|
+
'thistle' => [216, 191, 216],
|
148
|
+
'tomato' => [255, 99, 71],
|
149
|
+
'transparent' => [0, 0, 0],
|
150
|
+
'turquoise' => [64, 224, 208],
|
151
|
+
'violet' => [238, 130, 238],
|
152
|
+
'wheat' => [245, 222, 179],
|
153
|
+
'white' => [255, 255, 255],
|
154
|
+
'whitesmoke' => [245, 245, 245],
|
155
|
+
'yellow' => [255, 255, 0],
|
156
|
+
'yellowgreen' => [154, 205, 50],
|
157
|
+
'rebeccapurple' => [102, 51, 153]
|
158
|
+
}.freeze
|
159
|
+
def to_rgb(color)
|
160
|
+
WebColorNames.fetch(color.to_s.downcase) { raise ArgumentError, "unsupported web color: #{color}" }
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
# SPDX-License-Identifier: Apache-2.0
|
data/lib/ex_aequo/color.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'kernel/access'
|
4
|
+
require_relative 'kernel/fn'
|
5
|
+
|
3
6
|
require_relative 'color/ansi'
|
4
7
|
require_relative 'color/ansi256'
|
5
8
|
require_relative 'color/rgb'
|
9
|
+
require_relative 'color/web'
|
6
10
|
|
7
11
|
require_relative 'color/colorizer'
|
8
12
|
|
@@ -12,12 +16,12 @@ module ExAequo
|
|
12
16
|
|
13
17
|
class IllegalColor < RuntimeError; end
|
14
18
|
|
15
|
-
def ansi(color)
|
16
|
-
ExAequo::Color::Ansi.ansi(color)
|
19
|
+
def ansi(color, **kwds)
|
20
|
+
ExAequo::Color::Ansi.ansi(color, **kwds)
|
17
21
|
end
|
18
22
|
|
19
|
-
def ansi256(color)
|
20
|
-
ExAequo::Color::Ansi256.ansi256(color)
|
23
|
+
def ansi256(color, **kwds)
|
24
|
+
ExAequo::Color::Ansi256.ansi256(color, **kwds)
|
21
25
|
end
|
22
26
|
|
23
27
|
def colorize(text, **params)
|
@@ -32,8 +36,8 @@ module ExAequo
|
|
32
36
|
"\e[0m"
|
33
37
|
end
|
34
38
|
|
35
|
-
def rgb(*args)
|
36
|
-
ExAequo::Color::Rgb.rgb(*args)
|
39
|
+
def rgb(*args, **kwds)
|
40
|
+
ExAequo::Color::Rgb.rgb(*args, **kwds)
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Access
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def any_key?(hash, *keys)
|
7
|
+
keys.flatten.reduce(false) { |_, key| return true if hash[key] }
|
8
|
+
false
|
9
|
+
end
|
10
|
+
|
11
|
+
def hash_by_key(hash)
|
12
|
+
->(key) { hash[key] }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
# SPDX-License-Identifier: Apache-2.0
|
data/lib/ex_aequo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ex_aequo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Dober
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Some tools
|
14
14
|
|
@@ -25,7 +25,12 @@ files:
|
|
25
25
|
- lib/ex_aequo/color/ansi.rb
|
26
26
|
- lib/ex_aequo/color/ansi256.rb
|
27
27
|
- lib/ex_aequo/color/colorizer.rb
|
28
|
+
- lib/ex_aequo/color/modifiers.rb
|
28
29
|
- lib/ex_aequo/color/rgb.rb
|
30
|
+
- lib/ex_aequo/color/web.rb
|
31
|
+
- lib/ex_aequo/kernel.rb
|
32
|
+
- lib/ex_aequo/kernel/access.rb
|
33
|
+
- lib/ex_aequo/kernel/fn.rb
|
29
34
|
- lib/ex_aequo/version.rb
|
30
35
|
homepage: https://gitlab.com/robert_dober/rb_ex_aequo
|
31
36
|
licenses:
|