ex_aequo 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6b01e509cb74f6f5082dab85a74484caab9cc5cf7b36c93fce837f262dc947f
4
- data.tar.gz: 6e24bdda3f88cdb57c82796b300139e33e7a0fa41db8443e7fb1644d8ceef8c7
3
+ metadata.gz: 71da5e7d627af5e20d37598e9343cd3f4a3c357136b5e7fda31b6382c9ac6fea
4
+ data.tar.gz: d6262f6d6203f0e71d8c0183ccf102c33ec88e67390204fc1e341f79e89f64c7
5
5
  SHA512:
6
- metadata.gz: 75f600153b4b90bc5851259db66741785a388bde1c25975cd73c294c19e4b7fdbcfab2061a10b88a090a83ba2bdf3829ec8a80cc62c3504acf8ea56854eb0b6a
7
- data.tar.gz: 036fd48fcfbbc5cc18c2749f0024cb76e4a2ff597b384b47269066c723bcfe5b3e20a07699f3e67e68265be88845fc6ebd358e92b0a60ac67b886972bb939466
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