ex_aequo 0.2.6 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 416ef0ad9abb2576e3b6d4c34bb1f5c47bab9dd59c7bdf42d165622b05e4e174
4
- data.tar.gz: 19bce52876f9f01a9e2f34cd21449e6ab680a7a8e26931e8f35d838d53315d7e
3
+ metadata.gz: 71da5e7d627af5e20d37598e9343cd3f4a3c357136b5e7fda31b6382c9ac6fea
4
+ data.tar.gz: d6262f6d6203f0e71d8c0183ccf102c33ec88e67390204fc1e341f79e89f64c7
5
5
  SHA512:
6
- metadata.gz: bd91e16bf24be7bedab872cd1c93fc5d3c218f54e1ab801bb2d1ccb347cfba60805177837f028d38f69c0fcc997c29fbd79481b73a436dcde11551fa17580533
7
- data.tar.gz: cd03ad0e7892f461b0149c061160b95d1d8dfaa13c59d4833c200854271881a089cc8bc802a1a78c08d5632e50f16cf595701275da664ab1663cc8e7f86b8ff6
6
+ metadata.gz: ac3fe38e39784567419326d8c8235c76a304ae4c55d588289bb4c4df768dd4554994f0f75148ed2eb63f22c6885901520a9bb24fa007a9ad3ad6e127849f3432
7
+ data.tar.gz: c7c7927170669b4ef35aa91a1838b560286eb99eab3157d04eb291de1b51373c9101e734f8b118be93adc9474e0e78b1ec3007385302a44cc34fdb62a155046e
data/README.md CHANGED
@@ -95,56 +95,6 @@ And, we can also provide allowed values (N.B. ruby sytnax is default)
95
95
  expect(result.keywords).to eq(MyStruct.new(alpha: '42'))
96
96
  ```
97
97
 
98
- ## Context: Colors
99
-
100
- Given the inclusion of the `Color` module
101
- ```ruby
102
- include ExAequo::Color
103
- ```
104
-
105
-
106
- Then we can create ansi colored strings
107
- ```ruby
108
- expect(ansi(:red)).to eq("\e[31m")
109
- ```
110
-
111
- Or we can create 256 color strings
112
- ```ruby
113
- expect(ansi256(100)).to eq("\e[38;5;100m")
114
- ```
115
-
116
- Or we can use RGB colors
117
- ```ruby
118
- expect(rgb(96,32,16)).to eq("\e[38;2;96;32;16m")
119
- expect(rgb('#602010')).to eq("\e[38;2;96;32;16m")
120
- ```
121
-
122
- ### Context: Colorize Helper
123
-
124
- And
125
- ```ruby
126
- expect(colorize('red', ansi: :green)).to eq("\e[32mred\e[0m")
127
- ```
128
-
129
- Or we can omit the reset
130
- ```ruby
131
- expect(colorize('red', ansi: :green, reset: false)).to eq("\e[32mred")
132
- ```
133
-
134
- ### Context: Colorize Text
135
-
136
- Given we include the Color::Text module
137
- ```ruby
138
- require 'ex_aequo/color/text'
139
- include ExAequo::Color::Text
140
- ```
141
-
142
- Then we can obtain a colored text as follows
143
- ```ruby
144
- expect(colorized_text(:red, 'green', :yellow, 'blue', :reset, 'white'))
145
- .to eq("\e[31mgreen\e[33mblue\e[0mwhite")
146
- ```
147
-
148
98
  ## Other Tools are described [here](/speculations)
149
99
 
150
100
  ## LICENSE
@@ -0,0 +1,513 @@
1
+ # frozen_string_literal: true
2
+
3
+ ANSI_COLORS = {
4
+ aqua: [0, 255, 255],
5
+ aquamarine1: [95, 255, 215],
6
+ aquamarine3: [95, 215, 175],
7
+ azure1: [240, 255, 255],
8
+ bg_black: 40,
9
+ bg_red: 41,
10
+ bg_green: 42,
11
+ bg_yellow: 43,
12
+ bg_blue: 44,
13
+ bg_magenta: 45,
14
+ bg_cyan: 46,
15
+ bg_white: 47,
16
+ black: 30,
17
+ blue1: [0, 0, 255],
18
+ blue3: [0, 0, 175],
19
+ blue: 34,
20
+ blue_violet: [95, 0, 255],
21
+ bold: 1,
22
+ cadet_blue: [95, 175, 135],
23
+ chartreuse1: [135, 255, 0],
24
+ chartreuse2: [95, 255, 0],
25
+ chartreuse3: [95, 175, 0],
26
+ chartreuse4: [95, 135, 0],
27
+ color0: [:color, 0],
28
+ color1: [:color, 1],
29
+ color2: [:color, 2],
30
+ color3: [:color, 3],
31
+ color4: [:color, 4],
32
+ color5: [:color, 5],
33
+ color6: [:color, 6],
34
+ color7: [:color, 7],
35
+ color8: [:color, 8],
36
+ color9: [:color, 9],
37
+ color10: [:color, 10],
38
+ color11: [:color, 11],
39
+ color12: [:color, 12],
40
+ color13: [:color, 13],
41
+ color14: [:color, 14],
42
+ color15: [:color, 15],
43
+ color16: [:color, 16],
44
+ color17: [:color, 17],
45
+ color18: [:color, 18],
46
+ color19: [:color, 19],
47
+ color20: [:color, 20],
48
+ color21: [:color, 21],
49
+ color22: [:color, 22],
50
+ color23: [:color, 23],
51
+ color24: [:color, 24],
52
+ color25: [:color, 25],
53
+ color26: [:color, 26],
54
+ color27: [:color, 27],
55
+ color28: [:color, 28],
56
+ color29: [:color, 29],
57
+ color30: [:color, 30],
58
+ color31: [:color, 31],
59
+ color32: [:color, 32],
60
+ color33: [:color, 33],
61
+ color34: [:color, 34],
62
+ color35: [:color, 35],
63
+ color36: [:color, 36],
64
+ color37: [:color, 37],
65
+ color38: [:color, 38],
66
+ color39: [:color, 39],
67
+ color40: [:color, 40],
68
+ color41: [:color, 41],
69
+ color42: [:color, 42],
70
+ color43: [:color, 43],
71
+ color44: [:color, 44],
72
+ color45: [:color, 45],
73
+ color46: [:color, 46],
74
+ color47: [:color, 47],
75
+ color48: [:color, 48],
76
+ color49: [:color, 49],
77
+ color50: [:color, 50],
78
+ color51: [:color, 51],
79
+ color52: [:color, 52],
80
+ color53: [:color, 53],
81
+ color54: [:color, 54],
82
+ color55: [:color, 55],
83
+ color56: [:color, 56],
84
+ color57: [:color, 57],
85
+ color58: [:color, 58],
86
+ color59: [:color, 59],
87
+ color60: [:color, 60],
88
+ color61: [:color, 61],
89
+ color62: [:color, 62],
90
+ color63: [:color, 63],
91
+ color64: [:color, 64],
92
+ color65: [:color, 65],
93
+ color66: [:color, 66],
94
+ color67: [:color, 67],
95
+ color68: [:color, 68],
96
+ color69: [:color, 69],
97
+ color70: [:color, 70],
98
+ color71: [:color, 71],
99
+ color72: [:color, 72],
100
+ color73: [:color, 73],
101
+ color74: [:color, 74],
102
+ color75: [:color, 75],
103
+ color76: [:color, 76],
104
+ color77: [:color, 77],
105
+ color78: [:color, 78],
106
+ color79: [:color, 79],
107
+ color80: [:color, 80],
108
+ color81: [:color, 81],
109
+ color82: [:color, 82],
110
+ color83: [:color, 83],
111
+ color84: [:color, 84],
112
+ color85: [:color, 85],
113
+ color86: [:color, 86],
114
+ color87: [:color, 87],
115
+ color88: [:color, 88],
116
+ color89: [:color, 89],
117
+ color90: [:color, 90],
118
+ color91: [:color, 91],
119
+ color92: [:color, 92],
120
+ color93: [:color, 93],
121
+ color94: [:color, 94],
122
+ color95: [:color, 95],
123
+ color96: [:color, 96],
124
+ color97: [:color, 97],
125
+ color98: [:color, 98],
126
+ color99: [:color, 99],
127
+ color100: [:color, 100],
128
+ color101: [:color, 101],
129
+ color102: [:color, 102],
130
+ color103: [:color, 103],
131
+ color104: [:color, 104],
132
+ color105: [:color, 105],
133
+ color106: [:color, 106],
134
+ color107: [:color, 107],
135
+ color108: [:color, 108],
136
+ color109: [:color, 109],
137
+ color110: [:color, 110],
138
+ color111: [:color, 111],
139
+ color112: [:color, 112],
140
+ color113: [:color, 113],
141
+ color114: [:color, 114],
142
+ color115: [:color, 115],
143
+ color116: [:color, 116],
144
+ color117: [:color, 117],
145
+ color118: [:color, 118],
146
+ color119: [:color, 119],
147
+ color120: [:color, 120],
148
+ color121: [:color, 121],
149
+ color122: [:color, 122],
150
+ color123: [:color, 123],
151
+ color124: [:color, 124],
152
+ color125: [:color, 125],
153
+ color126: [:color, 126],
154
+ color127: [:color, 127],
155
+ color128: [:color, 128],
156
+ color129: [:color, 129],
157
+ color130: [:color, 130],
158
+ color131: [:color, 131],
159
+ color132: [:color, 132],
160
+ color133: [:color, 133],
161
+ color134: [:color, 134],
162
+ color135: [:color, 135],
163
+ color136: [:color, 136],
164
+ color137: [:color, 137],
165
+ color138: [:color, 138],
166
+ color139: [:color, 139],
167
+ color140: [:color, 140],
168
+ color141: [:color, 141],
169
+ color142: [:color, 142],
170
+ color143: [:color, 143],
171
+ color144: [:color, 144],
172
+ color145: [:color, 145],
173
+ color146: [:color, 146],
174
+ color147: [:color, 147],
175
+ color148: [:color, 148],
176
+ color149: [:color, 149],
177
+ color150: [:color, 150],
178
+ color151: [:color, 151],
179
+ color152: [:color, 152],
180
+ color153: [:color, 153],
181
+ color154: [:color, 154],
182
+ color155: [:color, 155],
183
+ color156: [:color, 156],
184
+ color157: [:color, 157],
185
+ color158: [:color, 158],
186
+ color159: [:color, 159],
187
+ color160: [:color, 160],
188
+ color161: [:color, 161],
189
+ color162: [:color, 162],
190
+ color163: [:color, 163],
191
+ color164: [:color, 164],
192
+ color165: [:color, 165],
193
+ color166: [:color, 166],
194
+ color167: [:color, 167],
195
+ color168: [:color, 168],
196
+ color169: [:color, 169],
197
+ color170: [:color, 170],
198
+ color171: [:color, 171],
199
+ color172: [:color, 172],
200
+ color173: [:color, 173],
201
+ color174: [:color, 174],
202
+ color175: [:color, 175],
203
+ color176: [:color, 176],
204
+ color177: [:color, 177],
205
+ color178: [:color, 178],
206
+ color179: [:color, 179],
207
+ color180: [:color, 180],
208
+ color181: [:color, 181],
209
+ color182: [:color, 182],
210
+ color183: [:color, 183],
211
+ color184: [:color, 184],
212
+ color185: [:color, 185],
213
+ color186: [:color, 186],
214
+ color187: [:color, 187],
215
+ color188: [:color, 188],
216
+ color189: [:color, 189],
217
+ color190: [:color, 190],
218
+ color191: [:color, 191],
219
+ color192: [:color, 192],
220
+ color193: [:color, 193],
221
+ color194: [:color, 194],
222
+ color195: [:color, 195],
223
+ color196: [:color, 196],
224
+ color197: [:color, 197],
225
+ color198: [:color, 198],
226
+ color199: [:color, 199],
227
+ color200: [:color, 200],
228
+ color201: [:color, 201],
229
+ color202: [:color, 202],
230
+ color203: [:color, 203],
231
+ color204: [:color, 204],
232
+ color205: [:color, 205],
233
+ color206: [:color, 206],
234
+ color207: [:color, 207],
235
+ color208: [:color, 208],
236
+ color209: [:color, 209],
237
+ color210: [:color, 210],
238
+ color211: [:color, 211],
239
+ color212: [:color, 212],
240
+ color213: [:color, 213],
241
+ color214: [:color, 214],
242
+ color215: [:color, 215],
243
+ color216: [:color, 216],
244
+ color217: [:color, 217],
245
+ color218: [:color, 218],
246
+ color219: [:color, 219],
247
+ color220: [:color, 220],
248
+ color221: [:color, 221],
249
+ color222: [:color, 222],
250
+ color223: [:color, 223],
251
+ color224: [:color, 224],
252
+ color225: [:color, 225],
253
+ color226: [:color, 226],
254
+ color227: [:color, 227],
255
+ color228: [:color, 228],
256
+ color229: [:color, 229],
257
+ color230: [:color, 230],
258
+ color231: [:color, 231],
259
+ color232: [:color, 232],
260
+ color233: [:color, 233],
261
+ color234: [:color, 234],
262
+ color235: [:color, 235],
263
+ color236: [:color, 236],
264
+ color237: [:color, 237],
265
+ color238: [:color, 238],
266
+ color239: [:color, 239],
267
+ color240: [:color, 240],
268
+ color241: [:color, 241],
269
+ color242: [:color, 242],
270
+ color243: [:color, 243],
271
+ color244: [:color, 244],
272
+ color245: [:color, 245],
273
+ color246: [:color, 246],
274
+ color247: [:color, 247],
275
+ color248: [:color, 248],
276
+ color249: [:color, 249],
277
+ color250: [:color, 250],
278
+ color251: [:color, 251],
279
+ color252: [:color, 252],
280
+ color253: [:color, 253],
281
+ color254: [:color, 254],
282
+ color255: [:color, 255],
283
+ cornflower_blue: [95, 135, 255],
284
+ cornsilk1: [255, 255, 215],
285
+ cyan1: [0, 255, 255],
286
+ cyan2: [0, 255, 215],
287
+ cyan3: [0, 215, 175],
288
+ cyan: 36,
289
+ dark_blue: [0, 0, 135],
290
+ dark_cyan: [0, 175, 135],
291
+ dark_goldenrod: [175, 135, 0],
292
+ dark_green: [0, 95, 0],
293
+ dark_khaki: [175, 175, 95],
294
+ dark_magenta: [135, 0, 135],
295
+ dark_olive_green1: [215, 255, 95],
296
+ dark_olive_green2: [175, 255, 95],
297
+ dark_olive_green3: [135, 175, 95],
298
+ dark_orange3: [175, 95, 0],
299
+ dark_orange: [255, 135, 0],
300
+ dark_red: [95, 0, 0],
301
+ dark_sea_green1: [175, 255, 215],
302
+ dark_sea_green2: [175, 215, 175],
303
+ dark_sea_green3: [135, 215, 175],
304
+ dark_sea_green4: [95, 135, 95],
305
+ dark_sea_green: [135, 175, 135],
306
+ dark_slate_gray1: [135, 255, 255],
307
+ dark_slate_gray2: [95, 255, 255],
308
+ dark_slate_gray3: [135, 215, 215],
309
+ dark_turquoise: [0, 215, 215],
310
+ dark_violet: [135, 0, 215],
311
+ deep_pink1: [255, 0, 135],
312
+ deep_pink2: [255, 0, 95],
313
+ deep_pink3: [215, 0, 95],
314
+ deep_pink4: [95, 0, 95],
315
+ deep_sky_blue1: [0, 175, 255],
316
+ deep_sky_blue2: [0, 175, 215],
317
+ deep_sky_blue3: [0, 135, 175],
318
+ deep_sky_blue4: [0, 95, 95],
319
+ dim: 2,
320
+ dodger_blue1: [0, 135, 255],
321
+ dodger_blue2: [0, 95, 255],
322
+ dodger_blue3: [0, 95, 215],
323
+ fuchsia: [255, 0, 255],
324
+ gold1: [255, 215, 0],
325
+ gold3: [175, 175, 0],
326
+ green1: [0, 255, 0],
327
+ green3: [0, 175, 0],
328
+ green4: [0, 135, 0],
329
+ green: 32,
330
+ green_yellow: [175, 255, 0],
331
+ grey0: [0, 0, 0],
332
+ grey100: [255, 255, 255],
333
+ grey11: [28, 28, 28],
334
+ grey15: [38, 38, 38],
335
+ grey19: [48, 48, 48],
336
+ grey23: [58, 58, 58],
337
+ grey27: [68, 68, 68],
338
+ grey30: [78, 78, 78],
339
+ grey35: [88, 88, 88],
340
+ grey37: [95, 95, 95],
341
+ grey39: [98, 98, 98],
342
+ grey3: [8, 8, 8],
343
+ grey42: [108, 108, 108],
344
+ grey46: [118, 118, 118],
345
+ grey50: [128, 128, 128],
346
+ grey53: [135, 135, 135],
347
+ grey54: [138, 138, 138],
348
+ grey58: [148, 148, 148],
349
+ grey62: [158, 158, 158],
350
+ grey63: [175, 135, 175],
351
+ grey66: [168, 168, 168],
352
+ grey69: [175, 175, 175],
353
+ grey70: [178, 178, 178],
354
+ grey74: [188, 188, 188],
355
+ grey78: [198, 198, 198],
356
+ grey7: [18, 18, 18],
357
+ grey82: [208, 208, 208],
358
+ grey84: [215, 215, 215],
359
+ grey85: [218, 218, 218],
360
+ grey89: [228, 228, 228],
361
+ grey93: [238, 238, 238],
362
+ grey: [128, 128, 128],
363
+ honeydew2: [215, 255, 215],
364
+ hot_pink2: [215, 95, 175],
365
+ hot_pink3: [175, 95, 135],
366
+ hot_pink: [255, 95, 175],
367
+ indian_red1: [255, 95, 95],
368
+ indian_red: [175, 95, 95],
369
+ italic: 3,
370
+ khaki1: [255, 255, 135],
371
+ khaki3: [215, 215, 95],
372
+ light_coral: [255, 135, 135],
373
+ light_cyan1: [215, 255, 255],
374
+ light_cyan3: [175, 215, 215],
375
+ light_goldenrod1: [255, 255, 95],
376
+ light_goldenrod2: [215, 215, 135],
377
+ light_goldenrod3: [215, 175, 95],
378
+ light_green: [135, 255, 95],
379
+ light_pink1: [255, 175, 175],
380
+ light_pink3: [215, 135, 135],
381
+ light_pink4: [135, 95, 95],
382
+ light_salmon1: [255, 175, 135],
383
+ light_salmon3: [175, 135, 95],
384
+ light_sea_green: [0, 175, 175],
385
+ light_sky_blue1: [175, 215, 255],
386
+ light_sky_blue3: [135, 175, 175],
387
+ light_slate_blue: [135, 135, 255],
388
+ light_slate_grey: [135, 135, 175],
389
+ light_steel_blue1: [215, 215, 255],
390
+ light_steel_blue3: [175, 175, 215],
391
+ light_steel_blue: [175, 175, 255],
392
+ light_yellow3: [215, 215, 175],
393
+ lime: [0, 255, 0],
394
+ magenta1: [255, 0, 255],
395
+ magenta2: [215, 0, 255],
396
+ magenta3: [175, 0, 175],
397
+ magenta: 35,
398
+ maroon: [128, 0, 0],
399
+ medium_orchid1: [215, 95, 255],
400
+ medium_orchid3: [175, 95, 175],
401
+ medium_orchid: [175, 95, 215],
402
+ medium_purple1: [175, 135, 255],
403
+ medium_purple2: [175, 95, 255],
404
+ medium_purple3: [135, 95, 175],
405
+ medium_purple4: [95, 95, 135],
406
+ medium_purple: [135, 135, 215],
407
+ medium_spring_green: [0, 255, 175],
408
+ medium_turquoise: [95, 215, 215],
409
+ medium_violet_red: [175, 0, 135],
410
+ misty_rose1: [255, 215, 215],
411
+ misty_rose3: [215, 175, 175],
412
+ navajo_white1: [255, 215, 175],
413
+ navajo_white3: [175, 175, 135],
414
+ navy: [0, 0, 128],
415
+ navy_blue: [0, 0, 95],
416
+ olive: [128, 128, 0],
417
+ orange: [255, 128, 0],
418
+ orange1: [255, 175, 0],
419
+ orange3: [215, 135, 0],
420
+ orange4: [95, 95, 0],
421
+ orange_red1: [255, 95, 0],
422
+ orchid1: [255, 135, 255],
423
+ orchid2: [255, 135, 215],
424
+ orchid: [215, 95, 215],
425
+ pale_green1: [135, 255, 175],
426
+ pale_green3: [95, 215, 95],
427
+ pale_turquoise1: [175, 255, 255],
428
+ pale_turquoise4: [95, 135, 135],
429
+ pale_violet_red1: [255, 135, 175],
430
+ pink1: [255, 175, 215],
431
+ pink3: [215, 135, 175],
432
+ plum1: [255, 175, 255],
433
+ plum2: [215, 175, 255],
434
+ plum3: [215, 135, 215],
435
+ plum4: [135, 95, 135],
436
+ purple3: [95, 0, 215],
437
+ purple4: [95, 0, 135],
438
+ purple: [128, 0, 128],
439
+ red1: [255, 0, 0],
440
+ red3: [175, 0, 0],
441
+ red: 31,
442
+ reset: 0,
443
+ rosy_brown: [175, 135, 135],
444
+ royal_blue1: [95, 95, 255],
445
+ salmon1: [255, 135, 95],
446
+ sandy_brown: [255, 175, 95],
447
+ sea_green1: [95, 255, 135],
448
+ sea_green2: [95, 255, 95],
449
+ sea_green3: [95, 215, 135],
450
+ silver: [192, 192, 192],
451
+ sky_blue1: [135, 215, 255],
452
+ sky_blue2: [135, 175, 255],
453
+ sky_blue3: [95, 175, 215],
454
+ slate_blue1: [135, 95, 255],
455
+ slate_blue3: [95, 95, 175],
456
+ spring_green1: [0, 255, 135],
457
+ spring_green2: [0, 215, 135],
458
+ spring_green3: [0, 175, 95],
459
+ spring_green4: [0, 135, 95],
460
+ steel_blue1: [95, 175, 255],
461
+ steel_blue3: [95, 135, 215],
462
+ steel_blue: [95, 135, 175],
463
+ tan: [215, 175, 135],
464
+ teal: [0, 128, 128],
465
+ thistle1: [255, 215, 255],
466
+ thistle3: [215, 175, 215],
467
+ turquoise2: [0, 215, 255],
468
+ turquoise4: [0, 135, 135],
469
+ uline: 4,
470
+ underline: 4,
471
+ violet: [215, 135, 255],
472
+ wheat1: [255, 255, 175],
473
+ wheat4: [135, 135, 95],
474
+ white: 37,
475
+ yellow1: [255, 255, 0],
476
+ yellow2: [215, 255, 0],
477
+ yellow3: [175, 215, 0],
478
+ yellow4: [135, 135, 0],
479
+ yellow: 33
480
+ }
481
+
482
+ module ExAequo
483
+ module Colorizer
484
+ module ColorDefinitions extend self
485
+
486
+ def get(color, no_color)
487
+ color = find_color(color)
488
+ if color
489
+ return '' if no_color
490
+ color
491
+ end
492
+ end
493
+
494
+ private
495
+ def find_color(color)
496
+ case ANSI_COLORS.fetch(color.to_sym, nil)
497
+ in [r, g, b]
498
+ # not yet implemented
499
+ nil
500
+ in [:color, col]
501
+ # not yet implemented
502
+ nil
503
+ in nil
504
+ nil
505
+ in value
506
+ "\e[#{value}m"
507
+ end
508
+ end
509
+ end
510
+
511
+ end
512
+ end
513
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'colorizer'
4
+ module ExAequo
5
+ module Colorize
6
+ extend Forwardable
7
+
8
+ def_delegators Colorizer, :colorize, :colorize_file, :colorize_lines
9
+
10
+
11
+ end
12
+ end
13
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './colorize/color_definitions'
4
+
5
+ module ExAequo
6
+ module Colorizer extend self
7
+
8
+ def colorize(line, reset: false)
9
+ line = line.chomp
10
+ no_color = ENV.fetch('NO_COLOR', false)
11
+ case parse(line.grapheme_clusters, no_color)
12
+ in {ok: true, result:}
13
+ {ok: true, result: join_result(result, no_color:, reset:)}
14
+ in error
15
+ error
16
+ end
17
+ end
18
+
19
+ def colorize_file(file, reset: false)
20
+ file = File.open(file, 'r') if String === file
21
+
22
+ at_exit do
23
+ file.close rescue nil
24
+ end
25
+ colorize_lines( file.readlines(chomp: true) )
26
+ end
27
+
28
+ def colorize_lines(lines, reset: false)
29
+ lines = lines.split(%r{\n\r?}) if String === lines
30
+ lines
31
+ .each_with_index do | line, idx |
32
+ case colorize(line, reset:)
33
+ in {ok: true, result:}
34
+ puts result
35
+ in {ok: false, error:}
36
+ $stderr.puts("ERROR in line #{idx.succ} ** #{error} **")
37
+ end
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def app(ary, ary_or_elem)
44
+ case ary_or_elem
45
+ when Array
46
+ [*ary, *ary_or_elem]
47
+ else
48
+ [*ary, ary_or_elem]
49
+ end
50
+ end
51
+
52
+ def check_color_definition(rest, no_color,color)
53
+ case ColorDefinitions.get(color, no_color)
54
+ in nil
55
+ {ok: false, error: "undefined color #{color}"}
56
+ in color
57
+ {ok: true, color:}
58
+ end
59
+ end
60
+
61
+ def get_color!(color, no_color)
62
+ case ColorDefinitions.get(color, no_color)
63
+ in nil
64
+ raise "This should not have happened"
65
+ in color
66
+ color
67
+ end
68
+ end
69
+
70
+ def join_result(result, no_color:, reset:)
71
+ app(result, reset ? get_color!(:reset, no_color) : '')
72
+ .join
73
+ end
74
+
75
+ def parse(line, no_color, result = [])
76
+ # p(line:, result:)
77
+ case line
78
+ in []
79
+ {ok: true, result:}
80
+ in ['<', '<', *rest]
81
+ parse(rest, no_color, app(result, '<'))
82
+ in ['$', '$', *rest]
83
+ parse(rest, no_color, app(result, '$'))
84
+ in ['$', *rest]
85
+ parse(rest, no_color, app(result, reset(no_color)))
86
+ in ['<', *rest]
87
+ parse_color(rest, no_color, result)
88
+ in [char, *rest]
89
+ parse(rest, no_color, app(result, char))
90
+ end
91
+ end
92
+
93
+ def parse_color(line, no_color, result, color=[])
94
+ # p(line:line, result:, color:)
95
+ case line
96
+ in []
97
+ {ok: false, error: "Incomplete Color Spec #{color.join}"}
98
+ in ['>', *rest]
99
+ parse_continue_after_color(rest, no_color, result, color.join)
100
+ in [',', *rest]
101
+ parse_next_color(rest, no_color, result, color.join)
102
+ in [char, *rest]
103
+ parse_color(rest, no_color, result, app(color, char))
104
+ end
105
+ end
106
+
107
+ def parse_continue_after_color(rest, no_color, result, color)
108
+ case check_color_definition(rest, no_color, color)
109
+ in {ok: true, color:}
110
+ parse(rest, no_color, app(result, color))
111
+ in error
112
+ error
113
+ end
114
+ end
115
+
116
+ def parse_next_color(rest, no_color, result, color)
117
+ case check_color_definition(rest, no_color, color)
118
+ in {ok: true, color:}
119
+ parse_color(rest, no_color, app(result, color))
120
+ in error
121
+ error
122
+ end
123
+ end
124
+
125
+ def reset(no_color)
126
+ get_color!(:reset, no_color)
127
+ end
128
+ end
129
+ end
130
+ # SPDX-License-Identifier: AGPL-3.0-or-later