red-colors 0.1.0 → 0.3.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/README.md +3 -0
- data/data/colormaps/cividis.json +258 -0
- data/data/colormaps/coolwarm.json +107 -0
- data/data/colormaps/crest.json +258 -0
- data/data/colormaps/flare.json +258 -0
- data/data/colormaps/gist_earth.json +49 -0
- data/data/colormaps/gist_ncar.json +55 -0
- data/data/colormaps/icefire.json +258 -0
- data/data/colormaps/inferno.json +258 -0
- data/data/colormaps/magma.json +258 -0
- data/data/colormaps/mako.json +258 -0
- data/data/colormaps/nipy_spectral.json +71 -0
- data/data/colormaps/pink.json +200 -0
- data/data/colormaps/plasma.json +258 -0
- data/data/colormaps/rocket.json +258 -0
- data/data/colormaps/turbo.json +258 -0
- data/data/colormaps/twilight.json +512 -0
- data/data/colormaps/viridis.json +258 -0
- data/data/colormaps/vlag.json +258 -0
- data/lib/colors.rb +17 -5
- data/lib/colors/abstract_color.rb +4 -0
- data/lib/colors/colormap.rb +143 -0
- data/lib/colors/colormap_data.rb +44 -0
- data/lib/colors/colormap_data/matplotlib_builtin.rb +990 -0
- data/lib/colors/colormap_data/seaborn_builtin.rb +10 -0
- data/lib/colors/colormap_registry.rb +62 -0
- data/lib/colors/convert.rb +269 -0
- data/lib/colors/helper.rb +2 -1
- data/lib/colors/husl.rb +7 -100
- data/lib/colors/linear_segmented_colormap.rb +137 -0
- data/lib/colors/listed_colormap.rb +45 -0
- data/lib/colors/named_colors.rb +10 -20
- data/lib/colors/rgb.rb +20 -10
- data/lib/colors/rgba.rb +14 -8
- data/lib/colors/utils.rb +18 -0
- data/lib/colors/version.rb +1 -1
- data/lib/colors/xterm256.rb +56 -0
- data/lib/colors/xyy.rb +48 -0
- data/lib/colors/xyz.rb +2 -55
- data/red-colors.gemspec +3 -1
- data/test/test-husl.rb +45 -53
- data/test/test-linear-segmented-colormap.rb +138 -0
- data/test/test-listed-colormap.rb +134 -0
- data/test/test-rgb.rb +76 -1
- data/test/test-xterm256.rb +76 -0
- data/test/test-xyz.rb +1 -1
- metadata +50 -15
data/test/test-rgb.rb
CHANGED
@@ -234,7 +234,7 @@ class ColorsRGBTest < Test::Unit::TestCase
|
|
234
234
|
Colors::RGB.new(0x33, 0x33, 0x33).to_hex_string)
|
235
235
|
end
|
236
236
|
|
237
|
-
test("to_rgb") do
|
237
|
+
test("#to_rgb") do
|
238
238
|
black = Colors::RGB.new(0, 0, 0)
|
239
239
|
assert_same(black, black.to_rgb)
|
240
240
|
end
|
@@ -291,4 +291,79 @@ class ColorsRGBTest < Test::Unit::TestCase
|
|
291
291
|
assert_equal(Colors::HSL.new(0r, 0r, 1r),
|
292
292
|
Colors::RGB.new(1r, 1r, 1r).to_hsl)
|
293
293
|
end
|
294
|
+
|
295
|
+
data(
|
296
|
+
"red" => { rgb: "#ff0000", husl: [ 12.16, 1.0, 0.532] },
|
297
|
+
"yellow" => { rgb: "#ffff00", husl: [ 85.90, 1.0, 0.971] },
|
298
|
+
"green" => { rgb: "#00ff00", husl: [127.72, 1.0, 0.877] },
|
299
|
+
"cyan" => { rgb: "#00ffff", husl: [192.20, 1.0, 0.911] },
|
300
|
+
"blue" => { rgb: "#0000ff", husl: [265.87, 1.0, 0.323] },
|
301
|
+
"magenta" => { rgb: "#ff00ff", husl: [307.71, 1.0, 0.603] }
|
302
|
+
)
|
303
|
+
def test_to_husl(data)
|
304
|
+
husl_components, hex_string = data.values_at(:husl, :rgb)
|
305
|
+
husl = Colors::HUSL.new(*husl_components)
|
306
|
+
rgb = Colors::RGB.parse(hex_string)
|
307
|
+
assert_near(husl, rgb.to_husl, 0.03)
|
308
|
+
end
|
309
|
+
|
310
|
+
data do
|
311
|
+
data_set = {}
|
312
|
+
# colors 16-231 are a 6x6x6 color cube
|
313
|
+
(0...6).each do |r|
|
314
|
+
(0...6).each do |g|
|
315
|
+
(0...6).each do |b|
|
316
|
+
code = 6*(6*r + g) + b + 16
|
317
|
+
red = (r > 0) ? 40*r + 55 : r
|
318
|
+
green = (g > 0) ? 40*g + 55 : g
|
319
|
+
blue = (b > 0) ? 40*b + 55 : b
|
320
|
+
label = "Color #{code} is rgb(#{red}, #{green}, #{blue})"
|
321
|
+
data_set[label] = [code, Colors::RGB.new(red, green, blue)]
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
# colors 232-256 are grayscale colors
|
326
|
+
(0...24).each do |y|
|
327
|
+
code = 232 + y
|
328
|
+
level = 10*y + 8
|
329
|
+
label = "Color #{code} is gray(#{level})"
|
330
|
+
data_set[label] = [code, Colors::RGB.new(level, level, level)]
|
331
|
+
end
|
332
|
+
# Some colors to check cloest color finder
|
333
|
+
[
|
334
|
+
[ 0, 0, 8, 16 ],
|
335
|
+
[ 0, 8, 0, 16 ],
|
336
|
+
[ 11, 0, 0, 16 ],
|
337
|
+
[ 0, 0, 12, 232 ],
|
338
|
+
[ 0, 12, 0, 232 ],
|
339
|
+
[ 12, 0, 0, 232 ],
|
340
|
+
|
341
|
+
[ 0, 0, 75, 17 ],
|
342
|
+
[ 0, 75, 0, 22 ],
|
343
|
+
[ 75, 0, 0, 52 ],
|
344
|
+
|
345
|
+
[ 0, 128, 128, 30 ],
|
346
|
+
[ 102, 102, 102, 241 ],
|
347
|
+
[ 103, 103, 103, 242 ],
|
348
|
+
[ 208, 238, 238, 254 ],
|
349
|
+
[ 208, 208, 238, 189 ],
|
350
|
+
|
351
|
+
# TODO: Reconsider the following cases
|
352
|
+
[ 0, 0, 55, 233 ],
|
353
|
+
[ 0, 55, 0, 233 ],
|
354
|
+
[ 55, 0, 0, 233 ],
|
355
|
+
[ 0, 0, 74, 234 ],
|
356
|
+
[ 0, 74, 0, 234 ],
|
357
|
+
[ 74, 0, 0, 234 ],
|
358
|
+
].each do |r, g, b, code|
|
359
|
+
label = "rgb(#{r}, #{g}, #{b}) is color #{code}"
|
360
|
+
data_set[label] = [code, Colors::RGB.new(r, g, b)]
|
361
|
+
end
|
362
|
+
data_set
|
363
|
+
end
|
364
|
+
def test_to_xterm256
|
365
|
+
code, rgb = data
|
366
|
+
assert_equal(Colors::Xterm256.new(code),
|
367
|
+
rgb.to_xterm256)
|
368
|
+
end
|
294
369
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
class ColorsXterm256Test < Test::Unit::TestCase
|
2
|
+
include TestHelper
|
3
|
+
|
4
|
+
sub_test_case(".new") do
|
5
|
+
sub_test_case("with color code") do
|
6
|
+
test("the regular case") do
|
7
|
+
codes = [16, 255]
|
8
|
+
colors = codes.map {|i| Colors::Xterm256.new(i) }
|
9
|
+
assert_equal(codes,
|
10
|
+
colors.map(&:code))
|
11
|
+
end
|
12
|
+
|
13
|
+
data do
|
14
|
+
(0..15).map { |code|
|
15
|
+
["ANSI color #{code}", code]
|
16
|
+
}.to_h
|
17
|
+
end
|
18
|
+
def test_ansi_color_code(code)
|
19
|
+
assert_raise(ArgumentError) do
|
20
|
+
Colors::Xterm256.new(code)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
test("the negative argument") do
|
25
|
+
assert_raise(ArgumentError) do
|
26
|
+
Colors::Xterm256.new(-1)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
test("too large argument") do
|
31
|
+
assert_raise(ArgumentError) do
|
32
|
+
Colors::Xterm256.new(256)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
test("==") do
|
39
|
+
assert { Colors::Xterm256.new(16) == Colors::Xterm256.new(16) }
|
40
|
+
assert { Colors::Xterm256.new(132) == Colors::Xterm256.new(132) }
|
41
|
+
end
|
42
|
+
|
43
|
+
test("!=") do
|
44
|
+
assert { Colors::Xterm256.new(16) != Colors::Xterm256.new(17) }
|
45
|
+
end
|
46
|
+
|
47
|
+
data do
|
48
|
+
data_set = {}
|
49
|
+
# colors 16-231 are a 6x6x6 color cube
|
50
|
+
(0...6).each do |r|
|
51
|
+
(0...6).each do |g|
|
52
|
+
(0...6).each do |b|
|
53
|
+
code = 6*(6*r + g) + b + 16
|
54
|
+
red = (r > 0) ? 40*r + 55 : r
|
55
|
+
green = (g > 0) ? 40*g + 55 : g
|
56
|
+
blue = (b > 0) ? 40*b + 55 : b
|
57
|
+
label = "Color #{code} is rgb(#{red}, #{green}, #{blue})"
|
58
|
+
data_set[label] = [code, Colors::RGB.new(red, green, blue)]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
# colors 232-256 are grayscale colors
|
63
|
+
(0...24).each do |y|
|
64
|
+
code = 232 + y
|
65
|
+
level = 10*y + 8
|
66
|
+
label = "Color #{code} is gray(#{level})"
|
67
|
+
data_set[label] = [code, Colors::RGB.new(level, level, level)]
|
68
|
+
end
|
69
|
+
data_set
|
70
|
+
end
|
71
|
+
def test_to_rgb(data)
|
72
|
+
code, rgb = data
|
73
|
+
assert_equal(rgb,
|
74
|
+
Colors::Xterm256.new(code).to_rgb)
|
75
|
+
end
|
76
|
+
end
|
data/test/test-xyz.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class ColorsXYZTest < Test::Unit::TestCase
|
2
2
|
sub_test_case("#luv_components") do
|
3
3
|
test("on ITU-R BT.709 D65 white point") do
|
4
|
-
l, u, v = Colors::
|
4
|
+
l, u, v = Colors::RGB.new(0r, 0r, 0r).to_xyz.luv_components(Colors::WHITE_POINT_D65)
|
5
5
|
assert_in_delta(0, l)
|
6
6
|
assert_in_delta(0, u)
|
7
7
|
assert_in_delta(0, v)
|
metadata
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: red-colors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenta Murata
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: matrix
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: test-unit
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: yard
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: kramdown
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -106,18 +106,47 @@ files:
|
|
106
106
|
- LICENSE.txt
|
107
107
|
- README.md
|
108
108
|
- Rakefile
|
109
|
+
- data/colormaps/cividis.json
|
110
|
+
- data/colormaps/coolwarm.json
|
111
|
+
- data/colormaps/crest.json
|
112
|
+
- data/colormaps/flare.json
|
113
|
+
- data/colormaps/gist_earth.json
|
114
|
+
- data/colormaps/gist_ncar.json
|
115
|
+
- data/colormaps/icefire.json
|
116
|
+
- data/colormaps/inferno.json
|
117
|
+
- data/colormaps/magma.json
|
118
|
+
- data/colormaps/mako.json
|
119
|
+
- data/colormaps/nipy_spectral.json
|
120
|
+
- data/colormaps/pink.json
|
121
|
+
- data/colormaps/plasma.json
|
122
|
+
- data/colormaps/rocket.json
|
123
|
+
- data/colormaps/turbo.json
|
124
|
+
- data/colormaps/twilight.json
|
125
|
+
- data/colormaps/viridis.json
|
126
|
+
- data/colormaps/vlag.json
|
109
127
|
- lib/colors.rb
|
110
128
|
- lib/colors/abstract_color.rb
|
111
129
|
- lib/colors/alpha_component.rb
|
112
130
|
- lib/colors/color_data.rb
|
131
|
+
- lib/colors/colormap.rb
|
132
|
+
- lib/colors/colormap_data.rb
|
133
|
+
- lib/colors/colormap_data/matplotlib_builtin.rb
|
134
|
+
- lib/colors/colormap_data/seaborn_builtin.rb
|
135
|
+
- lib/colors/colormap_registry.rb
|
136
|
+
- lib/colors/convert.rb
|
113
137
|
- lib/colors/helper.rb
|
114
138
|
- lib/colors/hsl.rb
|
115
139
|
- lib/colors/hsla.rb
|
116
140
|
- lib/colors/husl.rb
|
141
|
+
- lib/colors/linear_segmented_colormap.rb
|
142
|
+
- lib/colors/listed_colormap.rb
|
117
143
|
- lib/colors/named_colors.rb
|
118
144
|
- lib/colors/rgb.rb
|
119
145
|
- lib/colors/rgba.rb
|
146
|
+
- lib/colors/utils.rb
|
120
147
|
- lib/colors/version.rb
|
148
|
+
- lib/colors/xterm256.rb
|
149
|
+
- lib/colors/xyy.rb
|
121
150
|
- lib/colors/xyz.rb
|
122
151
|
- red-colors.gemspec
|
123
152
|
- test/helper.rb
|
@@ -125,9 +154,12 @@ files:
|
|
125
154
|
- test/test-hsl.rb
|
126
155
|
- test/test-hsla.rb
|
127
156
|
- test/test-husl.rb
|
157
|
+
- test/test-linear-segmented-colormap.rb
|
158
|
+
- test/test-listed-colormap.rb
|
128
159
|
- test/test-named-color.rb
|
129
160
|
- test/test-rgb.rb
|
130
161
|
- test/test-rgba.rb
|
162
|
+
- test/test-xterm256.rb
|
131
163
|
- test/test-xyz.rb
|
132
164
|
homepage: https://github.com/red-data-tools/red-colors
|
133
165
|
licenses:
|
@@ -148,18 +180,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
180
|
- !ruby/object:Gem::Version
|
149
181
|
version: '0'
|
150
182
|
requirements: []
|
151
|
-
rubygems_version: 3.
|
183
|
+
rubygems_version: 3.2.3
|
152
184
|
signing_key:
|
153
185
|
specification_version: 4
|
154
186
|
summary: Red Colors provides a wide array of features for dealing with colors. This
|
155
187
|
includes conversion between colorspaces, desaturation, and parsing colors.
|
156
188
|
test_files:
|
157
|
-
- test/
|
189
|
+
- test/helper.rb
|
190
|
+
- test/run.rb
|
158
191
|
- test/test-hsl.rb
|
159
|
-
- test/test-husl.rb
|
160
|
-
- test/test-xyz.rb
|
161
192
|
- test/test-hsla.rb
|
162
|
-
- test/
|
193
|
+
- test/test-husl.rb
|
194
|
+
- test/test-linear-segmented-colormap.rb
|
195
|
+
- test/test-listed-colormap.rb
|
196
|
+
- test/test-named-color.rb
|
163
197
|
- test/test-rgb.rb
|
164
198
|
- test/test-rgba.rb
|
165
|
-
- test/
|
199
|
+
- test/test-xterm256.rb
|
200
|
+
- test/test-xyz.rb
|