colours 0.8.12 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +331 -200
  3. data/bin/colours +2 -2
  4. data/bin/show_basic_colour_palette +7 -0
  5. data/colours.gemspec +1 -2
  6. data/doc/README.gen +294 -178
  7. data/doc/how_to_pick_your_own_colours/how_to_pick_your_own_colours.md +33 -0
  8. data/lib/colours/autoalias_e.rb +4 -1
  9. data/lib/colours/autogenerated/256_colours_instance_methods.rb +1429 -0
  10. data/lib/colours/autogenerated/256_colours_methods.rb +1429 -0
  11. data/lib/colours/autogenerated/html_colours_instance_methods.rb +1191 -0
  12. data/lib/colours/autogenerated/html_colours_methods.rb +1191 -0
  13. data/lib/colours/base/base.rb +61 -13
  14. data/lib/colours/class/colours.rb +8 -6
  15. data/lib/colours/{toplevel_methods/use_colours.rb → colour/colour.rb} +4 -125
  16. data/lib/colours/commandline/README.md +2 -1
  17. data/lib/colours/commandline/commandline.rb +177 -34
  18. data/lib/colours/constants/constants.rb +752 -6
  19. data/lib/colours/e/README.md +6 -6
  20. data/lib/colours/eparse/eparse.rb +2 -1
  21. data/lib/colours/essentials/README.md +5 -0
  22. data/lib/colours/{basic_colours/basic_colours.rb → essentials/essentials.rb} +87 -85
  23. data/lib/colours/html_colours/README.md +2 -1
  24. data/lib/colours/html_colours/hash_html_colours.rb +168 -0
  25. data/lib/colours/html_colours/html_colours.rb +226 -244
  26. data/lib/colours/html_colours/push_the_html_colours_methods_onto_the_toplevel_namespace.rb +30 -0
  27. data/lib/colours/html_colours/random_html_colour.rb +67 -0
  28. data/lib/colours/{requires/require_the_basic_colours.rb → html_colours.rb} +4 -2
  29. data/lib/colours/map_symbol_to_corresponding_colour/map_symbol_to_corresponding_colour.rb +12 -10
  30. data/lib/colours/module_256_colours/module_256_colours.rb +465 -0
  31. data/lib/colours/project/project.rb +3 -1
  32. data/lib/colours/rainbow_colours/check_for_trollop_being_available_or_exit.rb +4 -0
  33. data/lib/colours/rainbow_colours/constants.rb +3 -3
  34. data/lib/colours/rainbow_colours/do_parse_via_rainbow_colours.rb +9 -10
  35. data/lib/colours/rainbow_colours/print_rainbow_line.rb +4 -4
  36. data/lib/colours/rainbow_colours/println_ani.rb +7 -7
  37. data/lib/colours/rainbow_colours/println_plain.rb +2 -2
  38. data/lib/colours/rainbow_colours/rainbow.rb +31 -1
  39. data/lib/colours/rainbow_colours/report_errors.rb +7 -7
  40. data/lib/colours/rainbow_colours/returnln_plain.rb +3 -3
  41. data/lib/colours/replace_tokens_with_colour_code/replace_tokens_with_colour_code.rb +409 -0
  42. data/lib/colours/requires/require_autogenerated_colour_methods.rb +4 -1
  43. data/lib/colours/requires/{require_the_colour_table.rb → require_essentials.rb} +2 -2
  44. data/lib/colours/requires/require_save_file.rb +11 -0
  45. data/lib/colours/requires/require_the_256_colours_module.rb +1 -3
  46. data/lib/colours/requires/require_the_colour_methods.rb +1 -22
  47. data/lib/colours/requires/require_the_project.rb +31 -29
  48. data/lib/colours/requires/require_the_toplevel_methods.rb +2 -20
  49. data/lib/colours/rgb/rgb.rb +107 -89
  50. data/lib/colours/{colour_methods/colour_methods.rb → sfile_sdir_sfancy_swarn_simp_scomments_and_ssymlink/sfile_sdir_sfancy_swarn_simp_scomments_and_ssymlink.rb} +467 -405
  51. data/lib/colours/testing/testing.rb +1 -3
  52. data/lib/colours/toplevel_methods/e.rb +9 -13
  53. data/lib/colours/toplevel_methods/map_this_symbol_to_that_html_colour.rb +57 -0
  54. data/lib/colours/toplevel_methods/{revert.rb → rev.rb} +5 -48
  55. data/lib/colours/toplevel_methods/toplevel_methods.rb +1204 -0
  56. data/lib/colours/version/version.rb +2 -2
  57. data/lib/colours/yaml/256_colours.yml +776 -257
  58. data/lib/colours/yaml/html_colours.yml +1 -1
  59. data/lib/colours/yaml/prefer_this_colour_schemata.yml +1 -1
  60. data/lib/colours/yaml/use_these_values_for_the_colour_methods.yml +5 -1
  61. data/lib/colours.rb +1 -1
  62. data/test/testing_256_colours_support.rb +10 -1
  63. data/test/testing_replace_number_words_with_the_corresponding_html_colour.rb +15 -9
  64. data/test/testing_the_colour_methods_such_as_simp_sdir_sfile_swarn_sfancy_sargument_and_ssymlink.rb +53 -0
  65. metadata +30 -57
  66. data/doc/HOW_TO_PICK_YOUR_OWN_COLOURS.md +0 -28
  67. data/lib/colours/256_colours/support_for_256_colours.rb +0 -196
  68. data/lib/colours/autogenerated/support_for_256_colours.rb +0 -2235
  69. data/lib/colours/autogenerated/support_for_html_colours.rb +0 -1778
  70. data/lib/colours/autogenerated/toplevel_basic_colour_methods.rb +0 -7001
  71. data/lib/colours/basic_colours/README.md +0 -4
  72. data/lib/colours/colour_methods/README.md +0 -11
  73. data/lib/colours/colour_table/README.md +0 -2
  74. data/lib/colours/colour_table/colour_table.rb +0 -282
  75. data/lib/colours/commandline/menu.rb +0 -122
  76. data/lib/colours/constants/escape.rb +0 -22
  77. data/lib/colours/constants/file_constants.rb +0 -73
  78. data/lib/colours/constants/hash_ansi_colours.rb +0 -39
  79. data/lib/colours/constants/hash_simple_colours.rb +0 -148
  80. data/lib/colours/constants/misc.rb +0 -361
  81. data/lib/colours/constants/newline.rb +0 -14
  82. data/lib/colours/constants/registered_colour_methods.rb +0 -53
  83. data/lib/colours/html_colours/add_html_colours_onto_the_toplevel_namespace.rb +0 -22
  84. data/lib/colours/toplevel_methods/autogenerate.rb +0 -310
  85. data/lib/colours/toplevel_methods/bold.rb +0 -41
  86. data/lib/colours/toplevel_methods/bold_and_italic.rb +0 -38
  87. data/lib/colours/toplevel_methods/cat.rb +0 -39
  88. data/lib/colours/toplevel_methods/clear_screen.rb +0 -18
  89. data/lib/colours/toplevel_methods/cliner.rb +0 -17
  90. data/lib/colours/toplevel_methods/col.rb +0 -54
  91. data/lib/colours/toplevel_methods/esystem.rb +0 -19
  92. data/lib/colours/toplevel_methods/html_colour_to_hex_value.rb +0 -41
  93. data/lib/colours/toplevel_methods/html_colourize.rb +0 -69
  94. data/lib/colours/toplevel_methods/is_on_roebe.rb +0 -16
  95. data/lib/colours/toplevel_methods/italic.rb +0 -110
  96. data/lib/colours/toplevel_methods/make_colour.rb +0 -28
  97. data/lib/colours/toplevel_methods/methods_related_to_html_colours.rb +0 -336
  98. data/lib/colours/toplevel_methods/misc.rb +0 -226
  99. data/lib/colours/toplevel_methods/open_this_file.rb +0 -26
  100. data/lib/colours/toplevel_methods/prefer_this_colour_schemata.rb +0 -88
  101. data/lib/colours/toplevel_methods/random_value.rb +0 -37
  102. data/lib/colours/toplevel_methods/remove_escape_sequence.rb +0 -112
  103. data/lib/colours/toplevel_methods/set_last_colour_used.rb +0 -32
  104. data/lib/colours/toplevel_methods/shell_file_containing_the_html_colours.sh +0 -148
  105. data/lib/colours/toplevel_methods/show_basic_colour_palette.rb +0 -36
  106. data/lib/colours/toplevel_methods/underline.rb +0 -130
  107. data/test/testing_the_colour_methods.rb +0 -36
  108. /data/doc/{COLOUR_CODES_CHART.md → colour_codes_chart/colour_codes_chart.md} +0 -0
@@ -1,9 +1,755 @@
1
1
  #!/usr/bin/ruby -w
2
2
  # Encoding: UTF-8
3
- # frozen_string_literal: true
3
+ # frozen_string_literal = true
4
+ # =========================================================================== #
5
+ # This file primarily stores constants, including AnsiColours-related
6
+ # escape sequences. Additionally it will also store methods can refer
7
+ # or make use of these constants, such as Colours.teal(), and so forth.
8
+ #
9
+ # The different escape sequences can be combined into a single escape
10
+ # sequence by separating them via semicolons. For example, to create
11
+ # a section of text that is bold text with a yellow foreground and
12
+ # blue background, the escape sequence would be:
13
+ #
14
+ # ^[[1;33;44m
15
+ #
16
+ # Keep in mind that in bash the ESC code can be either of the following:
17
+ #
18
+ # \e
19
+ # \033 (octal)
20
+ # \x1B (hexadecimal)
21
+ #
22
+ # BOLD colour constants will have a "1" as part of their escape sequence.
23
+ # Note that the bold colours are sometimes also called the "bright colours".
24
+ # =========================================================================== #
25
+ # To see which colours are supported/supportable, for each terminal,
26
+ # have a look at this link:
27
+ #
28
+ # https://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility
29
+ #
30
+ # This wikipedia link is also somewhat useful for ANSI escape sequences
31
+ # in general:
32
+ #
33
+ # http://en.wikipedia.org/wiki/ANSI_escape_code#Colors
34
+ #
35
+ # =========================================================================== #
36
+ # This file is tested in the file
37
+ # colours/test/testing_the_basic_colours_of_the_colours_project.rb
4
38
  # =========================================================================== #
5
- require 'colours/constants/file_constants.rb'
6
- require 'colours/constants/hash_simple_colours.rb'
7
- require 'colours/constants/misc.rb'
8
- require 'colours/constants/newline.rb'
9
- require 'colours/constants/registered_colour_methods.rb'
39
+ # The following table shows the colour-codes for the terminal:
40
+ #
41
+ # Black 0;30 Dark Gray 1;30
42
+ # Red 0;31 Light Red 1;31
43
+ # Green 0;32 Light Green 1;32
44
+ # Yellow 0;33 Brown 1;33
45
+ # Blue 0;34 Light Blue 1;34
46
+ # Magenta 0;35 Light Magenta 1;35
47
+ # Cyan 0;36 Light Cyan 1;36
48
+ # Light Gray 0;37 White 1;37
49
+ #
50
+ # These are also stored in the Hash called HASH_SIMPLE_COLOURS.
51
+ #
52
+ # =========================================================================== #
53
+ # require 'colours/constants/constants.rb'
54
+ # Colours.file_html_colours
55
+ # Colours.file_html_colours_to_rgb?
56
+ # =========================================================================== #
57
+ module Colours
58
+
59
+ require 'colours/project/project.rb'
60
+
61
+ # ========================================================================= #
62
+ # === Colours::N
63
+ # ========================================================================= #
64
+ N = "\n"
65
+
66
+ # ========================================================================= #
67
+ # === Colours::USE_THIS_COLOUR_FOR_THE_DEFAULT_COLOUR
68
+ #
69
+ # Here we specify the default colour to be used, in order to revert
70
+ # to the prior colour in use. This can be modified by the user,
71
+ # in order to conform to other colours if said user wishes to
72
+ # do so.
73
+ # ========================================================================= #
74
+ USE_THIS_COLOUR_FOR_THE_DEFAULT_COLOUR = :grey
75
+
76
+ # ========================================================================= #
77
+ # === Colours::ESC
78
+ #
79
+ # Escape sequences start with the character ESC (ASCII decimal 27/hex
80
+ # 0x1B/octal 033).
81
+ #
82
+ # The characters ESC and [ (left bracket) are called CSI, for "Control
83
+ # Sequence Initiator".
84
+ #
85
+ # Keep in mind that "\e" can be represented via "\u001b" in Ruby, too.
86
+ # ========================================================================= #
87
+ ESC = "\e["
88
+
89
+ # ========================================================================= #
90
+ # === Colours::COLOUR_NC
91
+ #
92
+ # Note that this will actually reset all attributes.
93
+ #
94
+ # The "\e[0m" sequence removes all attributes, including formatting
95
+ # and colours. It may be useful to add it to the end of each colour
96
+ # text - and this is what the Colours project is essentially doing.
97
+ #
98
+ # An alternative may be to assign REVERT to WHITE, but this seems
99
+ # to be incorrect according to the specification.
100
+ # ========================================================================= #
101
+ COLOUR_NC = "#{ESC}0m" # No Colour. This is the reset code, aka \033[0m
102
+ REVERT = COLOUR_NC # === REVERT
103
+ REV = COLOUR_NC # === REV
104
+ CLOSING_TAG = COLOUR_NC # === CLOSING_TAG (also represented as "#{ESC}0m")
105
+ RESET = COLOUR_NC # === RESET
106
+ RESET_TERMINAL = COLOUR_NC # === RESET_TERMINAL
107
+ CLEAR = COLOUR_NC # === CLEAR
108
+ COLOUR_RESET = COLOUR_NC # === COLOUR_RESET
109
+ DEFAULT_COLOUR = COLOUR_RESET # === DEFAULT_COLOUR
110
+
111
+ # ========================================================================= #
112
+ # === RESET_ALL_ATTRIBUTES
113
+ #
114
+ # This is essentially the same as COLOUR_NC / RESET.
115
+ # ========================================================================= #
116
+ RESET_ALL_ATTRIBUTES = "\x1b[0m"
117
+
118
+ # ========================================================================= #
119
+ # === Colours::HASH_ANSI_COLOURS
120
+ # ========================================================================= #
121
+ HASH_ANSI_COLOURS = {
122
+ black: '30',
123
+ red: '31',
124
+ green: '32',
125
+ brown: '33', # This is also known as yellow.
126
+ yellow: '33',
127
+ blue: '34',
128
+ purple: '35', # Also known as magenta.
129
+ magenta: '35',
130
+ light_magenta: '35',
131
+ cyan: '36',
132
+ light_gray: '37',
133
+ grey: '37',
134
+ white: '37',
135
+ light_red: '41',
136
+ background_black: '40',
137
+ background_red: '41',
138
+ background_green: '42',
139
+ background_brown: '43',
140
+ background_yellow: '43',
141
+ background_blue: '44',
142
+ light_blue: '44', # Alias to the above ^^^.
143
+ background_purple: '45',
144
+ background_cyan: '46',
145
+ background_white: '47'
146
+ }
147
+
148
+ # ========================================================================= #
149
+ # === REGEX_REMOVE_ANSI_ESCAPE_CHARACTERS
150
+ #
151
+ # This regex can be used to get rid of (some) AnsiEscape characters.
152
+ # ========================================================================= #
153
+ REGEX_REMOVE_ANSI_ESCAPE_CHARACTERS =
154
+ /\033\[.*?m/
155
+ REMOVE_ANSI_ESCAPE_CHARACTERS = REGEX_REMOVE_ANSI_ESCAPE_CHARACTERS # === REMOVE_ANSI_ESCAPE_CHARACTERS
156
+
157
+ # ========================================================================= #
158
+ # === REGEX_FOR_HTML_COLOURS
159
+ #
160
+ # This regex supports the use case where we can match against HTML
161
+ # colours. (The name is a bit of a misnomer, though.)
162
+ #
163
+ # For the following regex, see this entry at rubular:
164
+ #
165
+ # https://rubular.com/r/o5r4DneMTGOsbX
166
+ #
167
+ # ========================================================================= #
168
+ REGEX_FOR_HTML_COLOURS =
169
+ /<([()a-zA-Z0-9²→\n]+?)>/
170
+
171
+ # ========================================================================= #
172
+ # === GENERIC_RUBY_HEADER
173
+ # ========================================================================= #
174
+ GENERIC_RUBY_HEADER = '#!/usr/bin/ruby -w
175
+ # Encoding: UTF-8
176
+ # frozen_string_literal: true
177
+ # =========================================================================== #'
178
+ RUBY_HEADER = GENERIC_RUBY_HEADER # === RUBY_HEADER
179
+
180
+ # ========================================================================= #
181
+ # === UNDERLINE_CODE
182
+ #
183
+ # To quickly test the underline-functionality, you can try:
184
+ #
185
+ # echo -e "\e[4mone two three\e[23m"
186
+ #
187
+ # ========================================================================= #
188
+ UNDERLINE_CODE = '4'
189
+
190
+ # ========================================================================= #
191
+ # === ITALIC_CODE
192
+ #
193
+ # If you wish to test italic output quickly on the terminal, then you
194
+ # can use something like this:
195
+ #
196
+ # echo -e "\e[3mone two three\e[23m and this is not in italic"
197
+ #
198
+ # ========================================================================= #
199
+ ITALIC_CODE = '3'
200
+
201
+ # ========================================================================= #
202
+ # === Colours::FILE_HTML_COLOURS
203
+ # ========================================================================= #
204
+ FILE_HTML_COLOURS =
205
+ "#{PROJECT_BASE_DIRECTORY}yaml/html_colours.yml"
206
+
207
+ # ========================================================================= #
208
+ # === Colours::FILE_KDE_COLOUR_PALETTE
209
+ # ========================================================================= #
210
+ FILE_KDE_COLOUR_PALETTE =
211
+ "#{PROJECT_BASE_DIRECTORY}yaml/kde_colour_palette.yml"
212
+
213
+ # ========================================================================= #
214
+ # === Colours::FILE_256_COLOURS
215
+ # ========================================================================= #
216
+ FILE_256_COLOURS =
217
+ "#{PROJECT_BASE_DIRECTORY}yaml/256_colours.yml"
218
+
219
+ # ========================================================================= #
220
+ # === Colours::FILE_BASIC_COLOURS
221
+ # ========================================================================= #
222
+ FILE_BASIC_COLOURS =
223
+ "#{PROJECT_BASE_DIRECTORY}yaml/basic_colours.yml"
224
+
225
+ # ========================================================================= #
226
+ # === Colours::FILE_USE_THESE_VALUES_FOR_THE_COLOUR_METHODS
227
+ # ========================================================================= #
228
+ FILE_USE_THESE_VALUES_FOR_THE_COLOUR_METHODS =
229
+ "#{PROJECT_BASE_DIRECTORY}yaml/use_these_values_for_the_colour_methods.yml"
230
+
231
+ # ========================================================================= #
232
+ # === Colours::FILE_PREFER_THIS_COLOUR_SCHEMATA
233
+ # ========================================================================= #
234
+ FILE_PREFER_THIS_COLOUR_SCHEMATA =
235
+ "#{PROJECT_BASE_DIRECTORY}yaml/prefer_this_colour_schemata.yml"
236
+
237
+ # ========================================================================= #
238
+ # === Colours.file_html_colours_to_rgb?
239
+ #
240
+ # Easier toplevel-getter method to determine where the file for
241
+ # the html-colours-to-rgb conversion resides.
242
+ # ========================================================================= #
243
+ def self.file_html_colours_to_rgb?
244
+ "#{PROJECT_BASE_DIRECTORY}yaml/html_colours.yml"
245
+ end; self.instance_eval { alias file_html_colours file_html_colours_to_rgb? } # === Colours.file_html_colours
246
+ self.instance_eval { alias file_html_colours? file_html_colours_to_rgb? } # === Colours.file_html_colours?
247
+
248
+ # ========================================================================= #
249
+ # === Colours.available_file_constants
250
+ # ========================================================================= #
251
+ def self.available_file_constants
252
+ [
253
+ FILE_HTML_COLOURS, # colours/yaml/html_colours.yml
254
+ FILE_KDE_COLOUR_PALETTE, # colours/yaml/kde_colour_palette.yml
255
+ FILE_256_COLOURS # colours/yaml/256_colours.yml
256
+ ]
257
+ end
258
+
259
+ # ========================================================================= #
260
+ # === Colours::REGISTERED_COLOUR_METHODS
261
+ #
262
+ # These methods constitute the registered colour methods.
263
+ #
264
+ # These have a corresponding method, such as snormal() or sdir() or
265
+ # sfile().
266
+ #
267
+ # snormal() stands for the "normal" colour, aka the "default
268
+ # colour".
269
+ # ========================================================================= #
270
+ REGISTERED_COLOUR_METHODS = %i(
271
+ snormal
272
+ sargument
273
+ scomments
274
+ ssymlink
275
+ sdir
276
+ sfile
277
+ sfancy
278
+ simportant
279
+ swarn
280
+ )
281
+
282
+ # ========================================================================= #
283
+ # === Colours::REGISTERED_COLOUR_METHODS_ALIASES
284
+ #
285
+ # This Array should hold all aliases to the main colour-methods,
286
+ # such as simportant() or sargument().
287
+ # ========================================================================= #
288
+ REGISTERED_COLOUR_METHODS_ALIASES = %i(
289
+ argument
290
+ ssym
291
+ simp
292
+ sarg
293
+ normal
294
+ comments
295
+ symlink
296
+ dir
297
+ file
298
+ fancy
299
+ important
300
+ warn
301
+ )
302
+
303
+ # ========================================================================= #
304
+ # === Colours::HASH_SIMPLE_COLOURS
305
+ #
306
+ # This hash will only store one name for the corresponding colour code.
307
+ # ========================================================================= #
308
+ HASH_SIMPLE_COLOURS = {
309
+ black: '0;30',
310
+ red: '0;31',
311
+ green: '0;32',
312
+ yellow: '0;33',
313
+ blue: '0;34',
314
+ magenta: '0;35',
315
+ cyan: '0;36',
316
+ light_gray: '0;37',
317
+ # ======================================================================= #
318
+ # Next, the secondary-colours:
319
+ # ======================================================================= #
320
+ dark_gray: '1;30',
321
+ light_red: '1;31',
322
+ light_green: '1;32',
323
+ brown: '1;33',
324
+ light_blue: '1;34',
325
+ light_magenta: '1;35',
326
+ light_cyan: '1;36',
327
+ white: '1;37'
328
+ }
329
+
330
+ # ========================================================================= #
331
+ # === Colours::MAIN_COLOURS
332
+ #
333
+ # The main colours come next.
334
+ #
335
+ # Eight main colours are currently defined, according to:
336
+ #
337
+ # http://en.wikipedia.org/wiki/ANSI_escape_code#Colors
338
+ #
339
+ # The range is:
340
+ #
341
+ # Intensity: 0 1 2 3 4 5 6 7
342
+ # Normal: Black Red Green Yellow Blue Magenta Cyan White
343
+ #
344
+ # Yellow, in my opinion, looks more like brown.
345
+ # ========================================================================= #
346
+ MAIN_COLOURS = %i(
347
+ black red green yellow blue magenta teal white
348
+ ) # ^^^ An Array of Symbols.
349
+
350
+ # ========================================================================= #
351
+ # === Colours.available_main_colours?
352
+ #
353
+ # Feedback which main colours are available.
354
+ # ========================================================================= #
355
+ def self.available_main_colours?
356
+ MAIN_COLOURS
357
+ end; self.instance_eval { alias available_basic_colours? available_main_colours? } # === Colours.available_basic_colours?
358
+
359
+ # ========================================================================= #
360
+ # === main_colours
361
+ #
362
+ # This will return an Array with the symbols such as
363
+ # :black, :red etc..
364
+ # ========================================================================= #
365
+ def main_colours
366
+ ::Colours.available_main_colours?
367
+ end
368
+
369
+ # ========================================================================= #
370
+ # === Colours::SECONDARY_COLOURS
371
+ #
372
+ # The secondary Colours.
373
+ #
374
+ # Colours which are not part of the MAIN_COLOURS Array.
375
+ #
376
+ # The secondary colours are:
377
+ #
378
+ # Bright Black
379
+ # Bright Red
380
+ # Bright Green
381
+ # Bright Yellow
382
+ # Bright Blue
383
+ # Bright Magenta
384
+ # Bright Cyan
385
+ # Bright White
386
+ #
387
+ # ========================================================================= #
388
+ SECONDARY_COLOURS = [
389
+ :bright_black,
390
+ :bright_red,
391
+ :bright_green,
392
+ :bright_yellow,
393
+ :bright_blue,
394
+ :bright_magenta,
395
+ :bright_cyan,
396
+ :bright_white
397
+ ]
398
+
399
+ # ========================================================================= #
400
+ # === ALL_COLOURS
401
+ #
402
+ # Simply combine the two Arrays, MAIN_COLOURS and SECONDARY_COLOURS,
403
+ # into one aggregate Array.
404
+ # ========================================================================= #
405
+ ALL_COLOURS = MAIN_COLOURS +
406
+ SECONDARY_COLOURS
407
+
408
+ # ========================================================================= #
409
+ # === Colours.really_all_colours
410
+ #
411
+ # This method will return an Array that may look like this:
412
+ #
413
+ # [:black, :red, :green, :yellow, :blue, :magenta, :teal,
414
+ # :white, :bright_black, :bright_red, :bright_green,
415
+ # :bright_yellow, :bright_blue, :bright_magenta,
416
+ # :bright_cyan, :bright_white]
417
+ #
418
+ # ========================================================================= #
419
+ def self.really_all_colours
420
+ ALL_COLOURS # This is the conjoint Array.
421
+ end; self.instance_eval { alias all_available_colours really_all_colours } # === Colours.all_available_colours
422
+
423
+ # ========================================================================= #
424
+ # === Colours.is_a_valid_colour?
425
+ #
426
+ # This method allows you to check if a given input-string is a
427
+ # valid colour.
428
+ #
429
+ # A "valid" colour is one that the colours project supports.
430
+ #
431
+ # For example, the string "lightblue" is a valid colour.
432
+ #
433
+ # Usage example:
434
+ #
435
+ # Colours.is_a_valid_colour? 'lightblue'
436
+ #
437
+ # ========================================================================= #
438
+ def self.is_a_valid_colour?(i)
439
+ ALL_COLOURS.include? i.to_sym
440
+ end
441
+
442
+ # ========================================================================= #
443
+ # === Colours::REDRAW_THE_PROMPT
444
+ #
445
+ # The following constant is necessary in order for the background colour
446
+ # to apply to the whole line and in order for the foreground colour to
447
+ # apply to the cursor.
448
+ # ========================================================================= #
449
+ REDRAW_THE_PROMPT = "\e[K"
450
+
451
+ # ========================================================================= #
452
+ # === Colours::HOME_DIRECTORY_OF_USER_X
453
+ #
454
+ # This constant is only useful on my home system.
455
+ # ========================================================================= #
456
+ HOME_DIRECTORY_OF_USER_X = '/home/x/'
457
+
458
+ # ========================================================================= #
459
+ # === Colours::DEFAULT_TEXT
460
+ # ========================================================================= #
461
+ DEFAULT_TEXT = 'Hello World!'
462
+
463
+ # ========================================================================= #
464
+ # === Colours::IS_A_TEST
465
+ # ========================================================================= #
466
+ IS_A_TEST = ' This is just a simple colour test.'
467
+
468
+ # ========================================================================= #
469
+ # === Colours::TEST_FILE
470
+ # ========================================================================= #
471
+ TEST_FILE =
472
+ "#{HOME_DIRECTORY_OF_USER_X}programming/ruby/src/colours/test/testing_konsole_submodule.rb"
473
+
474
+ # ========================================================================= #
475
+ # === LEFT
476
+ #
477
+ # Leading on the left side, for RGB value setting. This is the beginning
478
+ # of a special instruction. Note that "\e[38" should be equal to "\x1b",
479
+ # but IRB reports that this is not the case so.
480
+ #
481
+ # Examples on the www show usage such as this:
482
+ #
483
+ # printf "\x1b[${bg};2;${red};${green};${blue}m\n"
484
+ # printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n"
485
+ #
486
+ # ========================================================================= #
487
+ LEFT = "\e[38;2;".dup
488
+
489
+ # ========================================================================= #
490
+ # === Colours.left?
491
+ # ========================================================================= #
492
+ def self.left?
493
+ LEFT
494
+ end
495
+
496
+ # ========================================================================= #
497
+ # === left?
498
+ # ========================================================================= #
499
+ def left?
500
+ Colours.left?
501
+ end
502
+
503
+ # ========================================================================= #
504
+ # === COLOUR_BLACK
505
+ # ========================================================================= #
506
+ COLOUR_BLACK = "#{ESC}0;30m"
507
+ COLOUR_GRAY = COLOUR_BLACK # === COLOUR_GRAY
508
+ BLACK = COLOUR_BLACK # === BLACK
509
+
510
+ # ========================================================================= #
511
+ # === COLOUR_LIGHT_CYAN
512
+ # ========================================================================= #
513
+ COLOUR_LIGHT_CYAN = "#{ESC}1;36m"
514
+ BOLD_CYAN = COLOUR_LIGHT_CYAN # === BOLD_CYAN
515
+ COLOUR_BOLD_TEAL = COLOUR_LIGHT_CYAN # === COLOUR_BOLD_TEAL
516
+ BRIGHT_CYAN = COLOUR_LIGHT_CYAN # === BRIGHT_CYAN
517
+ BRIGHT_TEAL = COLOUR_LIGHT_CYAN # === BRIGHT_TEAL
518
+ CYANB = COLOUR_LIGHT_CYAN # === CYANB
519
+ BOLD_TEAL = COLOUR_LIGHT_CYAN # === BOLD_TEAL
520
+
521
+ # ========================================================================= #
522
+ # === COLOUR_CYAN
523
+ #
524
+ # This is also called TEAL, sort of.
525
+ # ========================================================================= #
526
+ COLOUR_CYAN = "#{ESC}0;36m"
527
+ TEAL = COLOUR_CYAN # === TEAL
528
+ CYAN = COLOUR_CYAN # === CYAN
529
+ COLOUR_TEAL = COLOUR_CYAN # === COLOUR_TEAL
530
+
531
+ # ========================================================================= #
532
+ # === COLOUR_BROWN
533
+ # ========================================================================= #
534
+ COLOUR_BROWN = "#{ESC}1;33m"
535
+ BOLD_YELLOW = COLOUR_BROWN # === BOLD_YELLOW
536
+ GOLD = COLOUR_BROWN # === GOLD
537
+ BRIGHT_BROWN = COLOUR_BROWN # === BRIGHT_BROWN
538
+ BRIGHT_YELLOW = COLOUR_BROWN # === BRIGHT_YELLOW
539
+ BOLDYELLOW = COLOUR_BROWN # === BOLDYELLOW
540
+ BYEL = COLOUR_BROWN # === BYEL
541
+ BYELLOW = COLOUR_BROWN # === BYELLOW
542
+ COLOUR_BOLD_YELLOW = COLOUR_BROWN # === COLOUR_BOLD_YELLOW
543
+
544
+ # ========================================================================= #
545
+ # === COLOUR_LIGHT_GRAY
546
+ #
547
+ # This is also known as white.
548
+ # ========================================================================= #
549
+ COLOUR_LIGHT_GRAY = "#{ESC}0;37m"
550
+ WHITE = COLOUR_LIGHT_GRAY # === WHITE
551
+ COLOUR_LIGHT_GREY = COLOUR_LIGHT_GRAY # === COLOUR_LIGHT_GREY
552
+
553
+ # ========================================================================= #
554
+ # === COLOUR_WHITE
555
+ #
556
+ # This is bold white, actually.
557
+ # ========================================================================= #
558
+ COLOUR_WHITE = "#{ESC}1;37m"
559
+ BOLD_WHITE = COLOUR_WHITE # === BOLD_WHITE
560
+ BRIGHT_WHITE = COLOUR_WHITE # === BRIGHT_WHITE
561
+ BWHITE = COLOUR_WHITE # === BWHITE
562
+ COLOUR_BOLD_WHITE = COLOUR_WHITE # === COLOUR_BOLD_WHITE
563
+
564
+ # ========================================================================= #
565
+ # === COLOUR_DARK_GRAY
566
+ #
567
+ # This is also called "black bold".
568
+ # ========================================================================= #
569
+ COLOUR_DARK_GRAY = "#{ESC}1;30m"
570
+ GREY = COLOUR_DARK_GRAY # === GREY
571
+ GRAY = COLOUR_DARK_GRAY # === GRAY
572
+ CGREY = COLOUR_DARK_GRAY # === CGREY
573
+ BRIGHT_BLACK = COLOUR_DARK_GRAY # === BRIGHT_BLACK
574
+ BOLD_BLACK = COLOUR_DARK_GRAY # === BOLD_BLACK
575
+
576
+ # ========================================================================= #
577
+ # == COLOUR_RED (red tag)
578
+ # ========================================================================= #
579
+ COLOUR_RED = "#{ESC}0;31m" # This is thin, darkred.
580
+ RED = COLOUR_RED # === RED
581
+ CRED = COLOUR_RED # === CRED
582
+
583
+ # ========================================================================= #
584
+ # === COLOUR_GREEN
585
+ # ========================================================================= #
586
+ COLOUR_GREEN = "#{ESC}0;32m" # This is lightgreen.
587
+ GREEN = COLOUR_GREEN # === GREEN
588
+ CGREEN = COLOUR_GREEN # === CGREEN
589
+ DARKGREEN = COLOUR_GREEN # === DARKGREEN
590
+
591
+ # ========================================================================= #
592
+ # === COLOUR_BLUE
593
+ # ========================================================================= #
594
+ COLOUR_BLUE = "#{ESC}0;34m"
595
+ BLUE = COLOUR_BLUE # === BLUE
596
+
597
+ # ========================================================================= #
598
+ # === COLOUR_LIGHT_GREEN
599
+ # ========================================================================= #
600
+ COLOUR_LIGHT_GREEN = "#{ESC}1;32m"
601
+ BOLD_GREEN = COLOUR_LIGHT_GREEN # === BOLD_GREEN
602
+ COLOUR_BOLD_GREEN = COLOUR_LIGHT_GREEN # === COLOUR_BOLD_GREEN
603
+ BRIGHT_GREEN = COLOUR_LIGHT_GREEN # === BRIGHT_GREEN
604
+ LIGHTGREEN = COLOUR_LIGHT_GREEN # === LIGHTGREEN
605
+ BGREEN = COLOUR_LIGHT_GREEN # === BGREEN
606
+
607
+ # ========================================================================= #
608
+ # === COLOUR_MAGENTA
609
+ # ========================================================================= #
610
+ COLOUR_MAGENTA = "#{ESC}0;35m"
611
+ PURPLE = COLOUR_MAGENTA # === PURPLE
612
+ COLOUR_PURPLE = COLOUR_MAGENTA # === COLOUR_PURPLE
613
+ MAGENTA = COLOUR_MAGENTA # === MAGENTA
614
+
615
+ # ========================================================================= #
616
+ # === COLOUR_LIGHT_BLUE
617
+ #
618
+ # This is also known as "bold blue".
619
+ # ========================================================================= #
620
+ COLOUR_LIGHT_BLUE = "#{ESC}1;34m"
621
+ BOLD_BLUE = COLOUR_LIGHT_BLUE # === BOLD_BLUE
622
+ COLOUR_BOLD_BLUE = COLOUR_LIGHT_BLUE # === COLOUR_BOLD_BLUE
623
+ BRIGHT_BLUE = COLOUR_LIGHT_BLUE # === BRIGHT_BLUE
624
+ LIGHT_BLUE = COLOUR_LIGHT_BLUE # === LIGHT_BLUE
625
+ LIGHTBLUE = COLOUR_LIGHT_BLUE # === LIGHTBLUE
626
+ BBLUE = COLOUR_LIGHT_BLUE # === BBLUE
627
+ BOLDBLUE = COLOUR_LIGHT_BLUE # === BOLDBLUE
628
+
629
+ # ========================================================================= #
630
+ # === Colours::BLACK_ON_WHITE_BACKGROUND
631
+ #
632
+ # Usage example:
633
+ #
634
+ # puts Colours::BLACK_ON_WHITE_BACKGROUND+'Hello world!'+Colours::RESET
635
+ #
636
+ # ========================================================================= #
637
+ BLACK_ON_WHITE_BACKGROUND = "#{ESC}0;30;47m"
638
+ BLACK_ON_WHITE_BG = BLACK_ON_WHITE_BACKGROUND # === BLACK_ON_WHITE_BG
639
+
640
+ # ========================================================================= #
641
+ # === COLOUR_YELLOW
642
+ # ========================================================================= #
643
+ COLOUR_YELLOW = "#{ESC}0;33m"
644
+ BROWN = COLOUR_YELLOW # === BROWN
645
+ YEL = COLOUR_YELLOW # === YEL
646
+ YELLOW = COLOUR_YELLOW # === YELLOW
647
+ BOLD_BROWN = COLOUR_YELLOW # === BOLD_BROWN
648
+
649
+ # ========================================================================= #
650
+ # === COLOUR_LIGHT_MAGENTA
651
+ #
652
+ # This is not the "normal" magenta, but the light variant; also
653
+ # called light purple.
654
+ # ========================================================================= #
655
+ COLOUR_LIGHT_MAGENTA = "#{ESC}1;35m"
656
+ LIGHT_PURPLE = COLOUR_LIGHT_MAGENTA # === LIGHT_PURPLE
657
+ COLOUR_LIGHT_PURPLE = COLOUR_LIGHT_MAGENTA # === COLOUR_LIGHT_PURPLE
658
+ PINK = COLOUR_LIGHT_MAGENTA # === PINK
659
+ COLOUR_PINK = COLOUR_LIGHT_MAGENTA # === COLOUR_PINK
660
+ BRIGHT_PINK = COLOUR_LIGHT_MAGENTA # === BRIGHT_PINK
661
+ BRIGHT_MAGENTA = COLOUR_LIGHT_MAGENTA # === BRIGHT_MAGENTA
662
+
663
+ # ========================================================================= #
664
+ # === Colours::COLOUR_LIGHT_RED
665
+ # ========================================================================= #
666
+ COLOUR_LIGHT_RED = "#{ESC}1;31m"
667
+ LIGHT_RED = COLOUR_LIGHT_RED # === LIGHT_RED
668
+ BOLD_RED = COLOUR_LIGHT_RED # === BOLD_RED
669
+ COLOUR_BOLD_RED = COLOUR_LIGHT_RED # === COLOUR_BOLD_RED
670
+ BRIGHT_RED = COLOUR_LIGHT_RED # === BRIGHT_RED
671
+ BOLDRED = COLOUR_LIGHT_RED # === BOLDRED
672
+ REDB = COLOUR_LIGHT_RED # === REDB
673
+ BRED = COLOUR_LIGHT_RED # === BRED
674
+
675
+ # ========================================================================= #
676
+ # === ARRAY_REGISTERED_ANSI_COLOURS
677
+ #
678
+ # This array exists mostly for testing-purposes.
679
+ # ========================================================================= #
680
+ ARRAY_REGISTERED_ANSI_COLOURS = [
681
+
682
+ COLOUR_BLACK,
683
+ COLOUR_RED,
684
+ COLOUR_GREEN,
685
+ COLOUR_YELLOW,
686
+ COLOUR_BLUE,
687
+ COLOUR_MAGENTA,
688
+ COLOUR_TEAL,
689
+ COLOUR_LIGHT_GREY,
690
+
691
+ COLOUR_BOLD_RED,
692
+ COLOUR_BOLD_GREEN,
693
+ COLOUR_BOLD_YELLOW,
694
+ COLOUR_BOLD_BLUE,
695
+ COLOUR_PINK,
696
+ COLOUR_BOLD_TEAL,
697
+ COLOUR_BOLD_WHITE,
698
+
699
+ COLOUR_RESET
700
+
701
+ ]
702
+
703
+ # ========================================================================= #
704
+ # === Colours.file_256_colours
705
+ #
706
+ # This method will return the path to the .yml file containing the
707
+ # data for the 256-colours variant.
708
+ # ========================================================================= #
709
+ def self.file_256_colours
710
+ FILE_256_COLOURS
711
+ end
712
+
713
+ end
714
+
715
+ if __FILE__ == $PROGRAM_NAME
716
+ alias e puts
717
+ include Colours
718
+ e
719
+ # pp Colours::COLOUR_NC == "\033[0m" # yup, this is true, as confirmed in November 2023.
720
+ pp Colours.available_file_constants
721
+ e
722
+ e 'The registered colour methods are:'
723
+ e
724
+ pp Colours::REGISTERED_COLOUR_METHODS
725
+ e
726
+ e 'My home directory: '+Colours::HOME_DIRECTORY_OF_USER_X
727
+ e
728
+ e Colours::COLOUR_LIGHT_RED+'Testing light red here.'
729
+ e
730
+ e CYAN+'Hi there.'+RESET
731
+ e BWHITE+'Hi there.'+BBLUE+' Yo there.'+RESET
732
+ e WHITE+'Hi there.'+BBLUE+' Yo there.'+RESET
733
+ e BLACK_ON_WHITE_BACKGROUND+'Hello world!'+RESET
734
+ e BRIGHT_RED+'Hi there.'+BBLUE+' Yo there.'+RESET
735
+ e BRIGHT_BLUE+'Hi there.'+BWHITE+' Yo there.'+RESET
736
+ e
737
+ e 'And testing individual colours for the characters next:'
738
+ e
739
+ e BLACK+' A '+
740
+ RED+' B '+
741
+ GREEN+' C '+
742
+ BROWN+' D '+
743
+ BLUE+' E '+
744
+ MAGENTA+' F '+
745
+ TEAL+' G '+
746
+ WHITE+' H '+
747
+ RESET
748
+ e
749
+ e 'Same as above but with the bright colours instead:'
750
+ e
751
+ e BRIGHT_BLACK+' A '+BRIGHT_RED+' B '+BRIGHT_GREEN+' C '+
752
+ BRIGHT_BROWN+' D '+BRIGHT_BLUE+' E '+BRIGHT_MAGENTA+
753
+ ' F '+BRIGHT_TEAL+' G '+BRIGHT_WHITE+' H '+RESET
754
+ e
755
+ end