sai 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -1
  3. data/README.md +11 -3
  4. data/docs/USAGE.md +57 -9
  5. data/lib/sai/ansi/color_parser.rb +109 -0
  6. data/lib/sai/ansi/sequence_processor.rb +15 -126
  7. data/lib/sai/ansi/style_parser.rb +66 -0
  8. data/lib/sai/ansi.rb +0 -27
  9. data/lib/sai/conversion/color_sequence.rb +4 -4
  10. data/lib/sai/conversion/rgb/color_classifier.rb +209 -0
  11. data/lib/sai/conversion/rgb/color_indexer.rb +48 -0
  12. data/lib/sai/conversion/rgb/color_space.rb +192 -0
  13. data/lib/sai/conversion/rgb/color_transformer.rb +140 -0
  14. data/lib/sai/conversion/rgb.rb +23 -269
  15. data/lib/sai/decorator/color_manipulations.rb +157 -0
  16. data/lib/sai/decorator/delegation.rb +84 -0
  17. data/lib/sai/decorator/gradients.rb +363 -0
  18. data/lib/sai/decorator/hex_colors.rb +56 -0
  19. data/lib/sai/decorator/named_colors.rb +780 -0
  20. data/lib/sai/decorator/named_styles.rb +276 -0
  21. data/lib/sai/decorator/rgb_colors.rb +64 -0
  22. data/lib/sai/decorator.rb +29 -775
  23. data/lib/sai/named_colors.rb +437 -0
  24. data/lib/sai.rb +731 -23
  25. data/sig/sai/ansi/color_parser.rbs +77 -0
  26. data/sig/sai/ansi/sequence_processor.rbs +0 -75
  27. data/sig/sai/ansi/style_parser.rbs +59 -0
  28. data/sig/sai/ansi.rbs +0 -10
  29. data/sig/sai/conversion/rgb/color_classifier.rbs +165 -0
  30. data/sig/sai/conversion/rgb/color_indexer.rbs +41 -0
  31. data/sig/sai/conversion/rgb/color_space.rbs +129 -0
  32. data/sig/sai/conversion/rgb/color_transformer.rbs +99 -0
  33. data/sig/sai/conversion/rgb.rbs +15 -198
  34. data/sig/sai/decorator/color_manipulations.rbs +125 -0
  35. data/sig/sai/decorator/delegation.rbs +47 -0
  36. data/sig/sai/decorator/gradients.rbs +267 -0
  37. data/sig/sai/decorator/hex_colors.rbs +48 -0
  38. data/sig/sai/decorator/named_colors.rbs +1491 -0
  39. data/sig/sai/decorator/named_styles.rbs +72 -0
  40. data/sig/sai/decorator/rgb_colors.rbs +52 -0
  41. data/sig/sai/decorator.rbs +21 -195
  42. data/sig/sai/named_colors.rbs +65 -0
  43. data/sig/sai.rbs +1468 -44
  44. metadata +32 -4
@@ -0,0 +1,437 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sai
4
+ # A collection of named colors and their RGB values
5
+ #
6
+ # @author {https://aaronmallen.me Aaron Allen}
7
+ # @since 0.3.1
8
+ #
9
+ # @api private
10
+ module NamedColors
11
+ # Standard ANSI color names and their RGB values
12
+ #
13
+ # @author {https://aaronmallen.me Aaron Allen}
14
+ # @since 0.3.1
15
+ #
16
+ # @api private
17
+ #
18
+ # @return [Hash{Symbol => Array<Integer>}] the color names and RGB values
19
+ ANSI = {
20
+ black: [0, 0, 0],
21
+ red: [205, 0, 0],
22
+ green: [0, 205, 0],
23
+ yellow: [205, 205, 0],
24
+ blue: [0, 0, 238],
25
+ magenta: [205, 0, 205],
26
+ cyan: [0, 205, 205],
27
+ white: [229, 229, 229],
28
+ bright_black: [127, 127, 127],
29
+ bright_red: [255, 0, 0],
30
+ bright_green: [0, 255, 0],
31
+ bright_yellow: [255, 255, 0],
32
+ bright_blue: [92, 92, 255],
33
+ bright_magenta: [255, 0, 255],
34
+ bright_cyan: [0, 255, 255],
35
+ bright_white: [255, 255, 255]
36
+ }.freeze # Hash[Symbol, Array[Integer]]
37
+
38
+ # CSS color names and their RGB values
39
+ #
40
+ # @author {https://aaronmallen.me Aaron Allen}
41
+ # @since 0.3.1
42
+ #
43
+ # @api private
44
+ #
45
+ # @return [Hash{Symbol => Array<Integer>}] the color names and RGB values
46
+ CSS = {
47
+ alice_blue: [240, 248, 255],
48
+ antique_white: [250, 235, 215],
49
+ aqua: [0, 255, 255],
50
+ aquamarine: [127, 255, 212],
51
+ azure: [240, 255, 255],
52
+ beige: [245, 245, 220],
53
+ bisque: [255, 228, 196],
54
+ blanched_almond: [255, 235, 205],
55
+ brown: [165, 42, 42],
56
+ burly_wood: [222, 184, 135],
57
+ chartreuse: [127, 255, 0],
58
+ chocolate: [210, 105, 30],
59
+ coral: [255, 127, 80],
60
+ cornsilk: [255, 248, 220],
61
+ crimson: [220, 20, 60],
62
+ dark_gray: [169, 169, 169],
63
+ dark_olive_green: [85, 107, 47],
64
+ dark_orchid: [153, 50, 204],
65
+ dark_salmon: [233, 150, 122],
66
+ dark_slate_blue: [72, 61, 139],
67
+ dark_slate_gray: [47, 79, 79],
68
+ deep_pink: [255, 20, 147],
69
+ deep_sky_blue: [0, 191, 255],
70
+ dim_gray: [105, 105, 105],
71
+ dodger_blue: [30, 144, 255],
72
+ firebrick: [178, 34, 34],
73
+ floral_white: [255, 250, 240],
74
+ forest_green: [34, 139, 34],
75
+ fuchsia: [255, 0, 255],
76
+ gainsboro: [220, 220, 220],
77
+ ghost_white: [248, 248, 255],
78
+ gold: [255, 215, 0],
79
+ goldenrod: [218, 165, 32],
80
+ gray: [128, 128, 128],
81
+ honeydew: [240, 255, 240],
82
+ indigo: [75, 0, 130],
83
+ ivory: [255, 255, 240],
84
+ khaki: [240, 230, 140],
85
+ lavender: [230, 230, 250],
86
+ lavender_blush: [255, 240, 245],
87
+ lawn_green: [124, 252, 0],
88
+ lemon_chiffon: [255, 250, 205],
89
+ light_blue: [173, 216, 230],
90
+ light_cyan: [224, 255, 255],
91
+ light_goldenrod_yellow: [250, 250, 210],
92
+ light_gray: [211, 211, 211],
93
+ light_pink: [255, 182, 193],
94
+ light_salmon: [255, 160, 122],
95
+ light_sea_green: [32, 178, 170],
96
+ light_sky_blue: [135, 206, 250],
97
+ light_slate_gray: [119, 136, 153],
98
+ light_yellow: [255, 255, 224],
99
+ lime: [0, 255, 0],
100
+ lime_green: [50, 205, 50],
101
+ linen: [250, 240, 230],
102
+ maroon: [128, 0, 0],
103
+ medium_aquamarine: [102, 205, 170],
104
+ medium_blue: [0, 0, 205],
105
+ medium_sea_green: [60, 179, 113],
106
+ medium_slate_blue: [123, 104, 238],
107
+ midnight_blue: [25, 25, 112],
108
+ mint_cream: [245, 255, 250],
109
+ misty_rose: [255, 228, 225],
110
+ moccasin: [255, 228, 181],
111
+ navajo_white: [255, 222, 173],
112
+ navy: [0, 0, 128],
113
+ old_lace: [253, 245, 230],
114
+ olive: [128, 128, 0],
115
+ olive_drab: [107, 142, 35],
116
+ orange: [255, 165, 0],
117
+ orange_red: [255, 69, 0],
118
+ pale_goldenrod: [238, 232, 170],
119
+ pale_green: [152, 251, 152],
120
+ pale_turquoise: [175, 238, 238],
121
+ pale_violet_red: [219, 112, 147],
122
+ papaya_whip: [255, 239, 213],
123
+ peach_puff: [255, 218, 185],
124
+ peru: [205, 133, 63],
125
+ pink: [255, 192, 203],
126
+ plum: [221, 160, 221],
127
+ powder_blue: [176, 224, 230],
128
+ royal_blue: [65, 105, 225],
129
+ saddle_brown: [139, 69, 19],
130
+ salmon: [250, 128, 114],
131
+ sea_green: [46, 139, 87],
132
+ sea_shell: [255, 245, 238],
133
+ sienna: [160, 82, 45],
134
+ silver: [192, 192, 192],
135
+ sky_blue: [135, 206, 235],
136
+ slate_blue: [106, 90, 205],
137
+ slate_gray: [112, 128, 144],
138
+ snow: [255, 250, 250],
139
+ spring_green: [0, 255, 127],
140
+ teal: [0, 128, 128],
141
+ thistle: [216, 191, 216],
142
+ tomato: [255, 99, 71],
143
+ turquoise: [64, 224, 208],
144
+ wheat: [245, 222, 179],
145
+ white_smoke: [245, 245, 245],
146
+ yellow_green: [154, 205, 50]
147
+ }.freeze #: Hash[Symbol, Array[Integer]]
148
+
149
+ # XTERM color names and their RGB values
150
+ #
151
+ # @author {https://aaronmallen.me Aaron Allen}
152
+ # @since 0.3.1
153
+ #
154
+ # @api private
155
+ #
156
+ # @return [Hash{Symbol => Array<Integer>}] the color names and RGB values
157
+ # rubocop:disable Naming/VariableNumber
158
+ XTERM = {
159
+ aqua_system: [0, 255, 255],
160
+ aquamarine1: [95, 255, 215],
161
+ aquamarine1_122: [135, 255, 215],
162
+ aquamarine3: [95, 215, 175],
163
+ black_system: [0, 0, 0],
164
+ blue1: [0, 0, 255],
165
+ blue_system: [0, 0, 255],
166
+ blue_violet: [95, 0, 255],
167
+ blue3: [0, 0, 175],
168
+ blue3_20: [0, 0, 215],
169
+ cadet_blue: [95, 175, 135],
170
+ cadet_blue_73: [95, 175, 175],
171
+ chartreuse1: [135, 255, 0],
172
+ chartreuse2: [95, 255, 0],
173
+ chartreuse2_112: [135, 215, 0],
174
+ chartreuse3: [95, 175, 0],
175
+ chartreuse3_76: [95, 215, 0],
176
+ chartreuse4: [95, 135, 0],
177
+ cornflower_blue: [95, 135, 255],
178
+ cornsilk1: [255, 255, 215],
179
+ cyan1: [0, 255, 255],
180
+ cyan2: [0, 255, 215],
181
+ cyan3: [0, 215, 175],
182
+ dark_blue: [0, 0, 135],
183
+ dark_cyan: [0, 175, 135],
184
+ dark_goldenrod: [175, 135, 0],
185
+ dark_green: [0, 95, 0],
186
+ dark_khaki: [175, 175, 95],
187
+ dark_magenta: [135, 0, 135],
188
+ dark_magenta_91: [135, 0, 175],
189
+ dark_olive_green1: [215, 255, 95],
190
+ dark_olive_green1_192: [215, 255, 135],
191
+ dark_olive_green2: [175, 255, 95],
192
+ dark_olive_green3: [135, 175, 95],
193
+ dark_olive_green3_113: [135, 215, 95],
194
+ dark_olive_green3_149: [175, 215, 95],
195
+ dark_orange: [255, 135, 0],
196
+ dark_orange3: [175, 95, 0],
197
+ dark_orange3_166: [215, 95, 0],
198
+ dark_red: [95, 0, 0],
199
+ dark_red_88: [135, 0, 0],
200
+ dark_sea_green: [135, 175, 135],
201
+ dark_sea_green1: [175, 255, 215],
202
+ dark_sea_green1_193: [215, 255, 175],
203
+ dark_sea_green2: [175, 215, 175],
204
+ dark_sea_green2_157: [175, 255, 175],
205
+ dark_sea_green3: [135, 215, 175],
206
+ dark_sea_green3_150: [175, 215, 135],
207
+ dark_sea_green4: [95, 135, 95],
208
+ dark_sea_green4_71: [95, 175, 95],
209
+ dark_slate_gray1: [135, 255, 255],
210
+ dark_slate_gray2: [95, 255, 255],
211
+ dark_slate_gray3: [135, 215, 215],
212
+ dark_turquoise: [0, 215, 215],
213
+ dark_violet: [135, 0, 215],
214
+ dark_violet_128: [175, 0, 215],
215
+ deep_pink1: [255, 0, 135],
216
+ deep_pink1_199: [255, 0, 175],
217
+ deep_pink2: [255, 0, 95],
218
+ deep_pink3: [215, 0, 95],
219
+ deep_pink3_162: [215, 0, 135],
220
+ deep_pink4: [95, 0, 95],
221
+ deep_pink4_89: [135, 0, 95],
222
+ deep_pink4_125: [175, 0, 95],
223
+ deep_sky_blue1: [0, 175, 255],
224
+ deep_sky_blue2: [0, 175, 215],
225
+ deep_sky_blue3: [0, 135, 175],
226
+ deep_sky_blue3_32: [0, 135, 215],
227
+ deep_sky_blue4: [0, 95, 95],
228
+ deep_sky_blue4_24: [0, 95, 135],
229
+ deep_sky_blue4_25: [0, 95, 175],
230
+ dodger_blue1: [0, 135, 255],
231
+ dodger_blue2: [0, 95, 255],
232
+ dodger_blue3: [0, 95, 215],
233
+ fuchsia_system: [255, 0, 255],
234
+ gold1: [255, 215, 0],
235
+ gold3: [175, 175, 0],
236
+ gold3_178: [215, 175, 0],
237
+ green1: [0, 255, 0],
238
+ green3: [0, 175, 0],
239
+ green3_40: [0, 215, 0],
240
+ green4: [0, 135, 0],
241
+ green_system: [0, 128, 0],
242
+ green_yellow: [175, 255, 0],
243
+ grey0: [0, 0, 0],
244
+ grey100: [255, 255, 255],
245
+ grey11: [28, 28, 28],
246
+ grey15: [38, 38, 38],
247
+ grey19: [48, 48, 48],
248
+ grey23: [58, 58, 58],
249
+ grey27: [68, 68, 68],
250
+ grey3: [8, 8, 8],
251
+ grey30: [78, 78, 78],
252
+ grey35: [88, 88, 88],
253
+ grey37: [95, 95, 95],
254
+ grey39: [98, 98, 98],
255
+ grey42: [108, 108, 108],
256
+ grey46: [118, 118, 118],
257
+ grey50: [128, 128, 128],
258
+ grey53: [135, 135, 135],
259
+ grey54: [138, 138, 138],
260
+ grey58: [148, 148, 148],
261
+ grey62: [158, 158, 158],
262
+ grey66: [168, 168, 168],
263
+ grey7: [18, 18, 18],
264
+ grey70: [178, 178, 178],
265
+ grey74: [188, 188, 188],
266
+ grey78: [198, 198, 198],
267
+ grey82: [208, 208, 208],
268
+ grey84: [215, 215, 215],
269
+ grey85: [218, 218, 218],
270
+ grey89: [228, 228, 228],
271
+ grey93: [238, 238, 238],
272
+ grey_system: [128, 128, 128],
273
+ honeydew2: [215, 255, 215],
274
+ hot_pink: [255, 95, 175],
275
+ hot_pink_206: [255, 95, 215],
276
+ hot_pink2: [215, 95, 175],
277
+ hot_pink3: [175, 95, 135],
278
+ hot_pink3_168: [215, 95, 135],
279
+ indian_red: [175, 95, 95],
280
+ indian_red_167: [215, 95, 95],
281
+ indian_red1: [255, 95, 95],
282
+ indian_red1_204: [255, 95, 135],
283
+ khaki1: [255, 255, 135],
284
+ khaki3: [215, 215, 95],
285
+ light_coral: [255, 135, 135],
286
+ light_cyan1: [215, 255, 255],
287
+ light_cyan3: [175, 215, 215],
288
+ light_goldenrod1: [255, 255, 95],
289
+ light_goldenrod2: [255, 215, 135],
290
+ light_goldenrod2_221: [255, 215, 95],
291
+ light_goldenrod3: [215, 175, 95],
292
+ light_green: [135, 255, 95],
293
+ light_green_120: [135, 255, 135],
294
+ light_pink1: [255, 175, 175],
295
+ light_pink3: [215, 135, 135],
296
+ light_pink4: [135, 95, 95],
297
+ light_salmon1: [255, 175, 135],
298
+ light_salmon3: [175, 135, 95],
299
+ light_salmon3_173: [215, 135, 95],
300
+ light_sky_blue1: [175, 215, 255],
301
+ light_sky_blue3: [135, 175, 175],
302
+ light_sky_blue3_110: [135, 175, 215],
303
+ light_slate_blue: [135, 135, 255],
304
+ light_slate_grey: [135, 135, 175],
305
+ light_steel_blue: [175, 175, 255],
306
+ light_steel_blue1: [215, 215, 255],
307
+ light_steel_blue3: [175, 175, 215],
308
+ lime_system: [0, 255, 0],
309
+ magenta1: [255, 0, 255],
310
+ magenta2: [215, 0, 255],
311
+ magenta2_200: [255, 0, 215],
312
+ magenta3: [175, 0, 175],
313
+ magenta3_163: [215, 0, 175],
314
+ magenta3_164: [215, 0, 215],
315
+ maroon_system: [128, 0, 0],
316
+ medium_orchid: [175, 95, 215],
317
+ medium_orchid1: [215, 95, 255],
318
+ medium_orchid1_207: [255, 95, 255],
319
+ medium_orchid3: [175, 95, 175],
320
+ medium_purple: [135, 135, 215],
321
+ medium_purple1: [175, 135, 255],
322
+ medium_purple2: [175, 95, 255],
323
+ medium_purple2_140: [175, 135, 215],
324
+ medium_purple3: [135, 95, 175],
325
+ medium_purple3_98: [135, 95, 215],
326
+ medium_purple4: [95, 95, 135],
327
+ medium_spring_green: [0, 255, 175],
328
+ medium_turquoise: [95, 215, 215],
329
+ medium_violet_red: [175, 0, 135],
330
+ misty_rose1: [255, 215, 215],
331
+ misty_rose3: [215, 175, 175],
332
+ navy_blue: [0, 0, 95],
333
+ navy_system: [0, 0, 128],
334
+ navajo_white1: [255, 215, 175],
335
+ navajo_white3: [175, 175, 135],
336
+ olive_system: [128, 128, 0],
337
+ orange1: [255, 175, 0],
338
+ orange3: [215, 135, 0],
339
+ orange4: [95, 95, 0],
340
+ orange4_94: [135, 95, 0],
341
+ orange_red1: [255, 95, 0],
342
+ orchid: [215, 95, 215],
343
+ orchid1: [255, 135, 255],
344
+ orchid2: [255, 135, 215],
345
+ pale_green1: [135, 255, 175],
346
+ pale_green1_156: [175, 255, 135],
347
+ pale_green3: [95, 215, 95],
348
+ pale_green3_114: [135, 215, 135],
349
+ pale_turquoise1: [175, 255, 255],
350
+ pale_turquoise4: [95, 135, 135],
351
+ pale_violet_red1: [255, 135, 175],
352
+ pink1: [255, 175, 215],
353
+ pink3: [215, 135, 175],
354
+ plum1: [255, 175, 255],
355
+ plum2: [215, 175, 255],
356
+ plum3: [215, 135, 215],
357
+ plum4: [135, 95, 135],
358
+ purple: [135, 0, 255],
359
+ purple_129: [175, 0, 255],
360
+ purple3: [95, 0, 215],
361
+ purple4: [95, 0, 135],
362
+ purple4_55: [95, 0, 175],
363
+ purple_system: [128, 0, 128],
364
+ red1: [255, 0, 0],
365
+ red3: [175, 0, 0],
366
+ red3_160: [215, 0, 0],
367
+ red_system: [255, 0, 0],
368
+ rosy_brown: [175, 135, 135],
369
+ royal_blue1: [95, 95, 255],
370
+ salmon1: [255, 135, 95],
371
+ sandy_brown: [255, 175, 95],
372
+ silver_system: [192, 192, 192],
373
+ sky_blue1: [135, 215, 255],
374
+ sky_blue2: [135, 175, 255],
375
+ sky_blue3: [95, 175, 215],
376
+ slate_blue1: [135, 95, 255],
377
+ slate_blue3: [95, 95, 175],
378
+ slate_blue3_62: [95, 95, 215],
379
+ spring_green1: [0, 255, 135],
380
+ spring_green2: [0, 215, 135],
381
+ spring_green2_47: [0, 255, 95],
382
+ spring_green3: [0, 175, 95],
383
+ spring_green3_41: [0, 215, 95],
384
+ spring_green4: [0, 135, 95],
385
+ steel_blue: [95, 135, 175],
386
+ steel_blue1: [95, 175, 255],
387
+ steel_blue1_81: [95, 215, 255],
388
+ steel_blue3: [95, 135, 215],
389
+ tan: [215, 175, 135],
390
+ teal_system: [0, 128, 128],
391
+ thistle1: [255, 215, 255],
392
+ thistle3: [215, 175, 215],
393
+ turquoise2: [0, 215, 255],
394
+ turquoise4: [0, 135, 135],
395
+ violet: [215, 135, 255],
396
+ wheat1: [255, 255, 175],
397
+ wheat4: [135, 135, 95],
398
+ white_system: [255, 255, 255],
399
+ yellow1: [255, 255, 0],
400
+ yellow2: [215, 255, 0],
401
+ yellow3: [175, 215, 0],
402
+ yellow3_184: [215, 215, 0],
403
+ yellow4: [135, 135, 0],
404
+ yellow4_106: [135, 175, 0],
405
+ yellow_system: [255, 255, 0]
406
+ }.freeze #: Hash[Symbol, Array[Integer]]
407
+ # rubocop:enable Naming/VariableNumber
408
+
409
+ # Look up an RGB value by color name
410
+ #
411
+ # @author {https://aaronmallen.me Aaron Allen}
412
+ # @since 0.3.1
413
+ #
414
+ # @api private
415
+ #
416
+ # @param name [String, Symbol] the color name
417
+ #
418
+ # @return [Array<Integer>] the RGB value
419
+ # @rbs (String | Symbol name) -> Array[Integer]?
420
+ def self.[](name)
421
+ key = name.to_sym
422
+ ANSI.fetch(key, XTERM.fetch(key, CSS.fetch(key, nil)))
423
+ end
424
+
425
+ # Get a list of all color names
426
+ #
427
+ # @author {https://aaronmallen.me Aaron Allen}
428
+ # @since 0.3.1
429
+ #
430
+ # @api private
431
+ #
432
+ # @return [Array<Symbol>] the color names
433
+ def self.names
434
+ (ANSI.keys + CSS.keys + XTERM.keys).uniq.sort
435
+ end
436
+ end
437
+ end