customization 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/customization.rb +320 -0
  3. data/lib/errors.rb +61 -0
  4. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b5964699612cdc7dd15e9a0675e07875216e03db10720f389325d93fdd88e9ab
4
+ data.tar.gz: b88e61a0bac781d682726e482bdc1a35e8aee9c5bb0257e69c88f4fb0b22de8f
5
+ SHA512:
6
+ metadata.gz: e76e80e2f95ef60d55e81b7d9097069fe49c842994d1d8d90ceb3c3f59f843fb1ef4e9b0aa23e56a51611745485eceadd11ef79d242399656670875164a51d5d
7
+ data.tar.gz: e7a2dcd6e4807a43db69a2686ccf4ede439bfc4099b741a81db38d7081b955e8be5a6fddc4d3daef8fedaf7773cca8e89fcc4db2d2751ef90aee39de2654643f
@@ -0,0 +1,320 @@
1
+ # customization.rb
2
+
3
+ module Customization
4
+ COLORS = {
5
+ black: "\e[30m",
6
+ red: "\e[31m",
7
+ green: "\e[32m",
8
+ yellow: "\e[33m",
9
+ blue: "\e[34m",
10
+ magenta: "\e[35m",
11
+ cyan: "\e[36m",
12
+ white: "\e[37m",
13
+ bright_black: "\e[90m",
14
+ bright_red: "\e[91m",
15
+ bright_green: "\e[92m",
16
+ bright_yellow: "\e[93m",
17
+ bright_blue: "\e[94m",
18
+ bright_magenta: "\e[95m",
19
+ bright_cyan: "\e[96m",
20
+ bright_white: "\e[97m",
21
+ gray: "\e[38;5;236m",
22
+ light_red: "\e[38;5;196m",
23
+ light_green: "\e[38;5;118m",
24
+ light_yellow: "\e[38;5;226m",
25
+ light_blue: "\e[38;5;69m",
26
+ light_magenta: "\e[38;5;201m",
27
+ light_cyan: "\e[38;5;87m",
28
+ light_gray: "\e[38;5;248m",
29
+ dark_gray: "\e[38;5;235m",
30
+ purple: "\e[38;5;141m",
31
+ orange: "\e[38;5;208m",
32
+ pink: "\e[38;5;200m",
33
+ teal: "\e[38;5;30m",
34
+ lime: "\e[38;5;154m",
35
+ brown: "\e[38;5;130m",
36
+ navy: "\e[38;5;18m",
37
+ olive: "\e[38;5;100m",
38
+ maroon: "\e[38;5;52m",
39
+ indigo: "\e[38;5;54m",
40
+ violet: "\e[38;5;92m",
41
+ turquoise: "\e[38;5;45m",
42
+ gold: "\e[38;5;178m",
43
+ silver: "\e[38;5;249m",
44
+ lavender: "\e[38;5;183m",
45
+ plum: "\e[38;5;182m",
46
+ rose: "\e[38;5;197m",
47
+ coral: "\e[38;5;210m",
48
+ peach: "\e[38;5;203m",
49
+ salmon: "\e[38;5;204m",
50
+ apricot: "\e[38;5;222m",
51
+ tangerine: "\e[38;5;214m",
52
+ pumpkin: "\e[38;5;166m",
53
+ cinnamon: "\e[38;5;166m",
54
+ chocolate: "\e[38;5;52m",
55
+ coffee: "\e[38;5;130m",
56
+ mahogany: "\e[38;5;94m",
57
+ olive_green: "\e[38;5;107m",
58
+ forest_green: "\e[38;5;28m",
59
+ emerald: "\e[38;5;46m",
60
+ mint: "\e[38;5;121m",
61
+ turquoise_blue: "\e[38;5;45m",
62
+ aqua: "\e[38;5;51m",
63
+ sky_blue: "\e[38;5;111m",
64
+ baby_blue: "\e[38;5;153m",
65
+ lavender_blue: "\e[38;5;105m",
66
+ periwinkle: "\e[38;5;182m",
67
+ steel_blue: "\e[38;5;67m",
68
+ royal_blue: "\e[38;5;21m",
69
+ navy_blue: "\e[38;5;18m",
70
+ sapphire: "\e[38;5;20m",
71
+ cobalt: "\e[38;5;18m",
72
+ iris: "\e[38;5;135m",
73
+ orchid: "\e[38;5;170m",
74
+ fuchsia: "\e[38;5;13m",
75
+ raspberry: "\e[38;5;161m",
76
+ cherry: "\e[38;5;160m",
77
+ wine: "\e[38;5;88m",
78
+ scarlet: "\e[38;5;196m",
79
+ brick_red: "\e[38;5;124m",
80
+ rust: "\e[38;5;166m",
81
+ sienna: "\e[38;5;95m",
82
+ sepia: "\e[38;5;130m",
83
+ taupe: "\e[38;5;101m",
84
+ stone: "\e[38;5;102m",
85
+ charcoal: "\e[38;5;236m",
86
+ ruby: "\e[38;5;196m",
87
+ onyx: "\e[38;5;16m",
88
+ opal: "\e[38;5;155m",
89
+ peridot: "\e[38;5;112m",
90
+ citrine: "\e[38;5;172m",
91
+ topaz: "\e[38;5;220m",
92
+ aquamarine: "\e[38;5;87m",
93
+ bronze: "\e[38;5;101m",
94
+ platinum: "\e[38;5;238m",
95
+ pewter: "\e[38;5;245m",
96
+ brass: "\e[38;5;180m",
97
+ lavender_purple: "\e[38;5;183m",
98
+ lilac: "\e[38;5;208m",
99
+ amaranth: "\e[38;5;203m",
100
+ marigold: "\e[38;5;204m",
101
+ olive_drab: "\e[38;5;222m",
102
+ chartreuse: "\e[38;5;214m",
103
+ butterscotch: "\e[38;5;166m",
104
+ caramel: "\e[38;5;166m",
105
+ hazelnut: "\e[38;5;52m",
106
+ espresso: "\e[38;5;130m",
107
+ walnut: "\e[38;5;94m",
108
+ moss_green: "\e[38;5;107m",
109
+ pine_green: "\e[38;5;28m",
110
+ jade: "\e[38;5;46m",
111
+ pistachio: "\e[38;5;121m",
112
+ teal_green: "\e[38;5;45m",
113
+ ocean_blue: "\e[38;5;51m",
114
+ azure: "\e[38;5;111m",
115
+ powder_blue: "\e[38;5;153m",
116
+ periwinkle_blue: "\e[38;5;105m",
117
+ lavender_mist: "\e[38;5;182m",
118
+ slate_blue: "\e[38;5;67m",
119
+ midnight_blue: "\e[38;5;21m",
120
+ deep_navy: "\e[38;5;18m",
121
+ cobalt_blue: "\e[38;5;20m",
122
+ sapphire_blue: "\e[38;5;18m",
123
+ cerulean: "\e[38;5;54m",
124
+ amethyst: "\e[38;5;135m",
125
+ raspberry_pink: "\e[38;5;161m",
126
+ cherry_red: "\e[38;5;160m",
127
+ wine_red: "\e[38;5;88m",
128
+ scarlet_red: "\e[38;5;196m",
129
+ brick_orange: "\e[38;5;124m",
130
+ rust_brown: "\e[38;5;166m",
131
+ sienna_brown: "\e[38;5;95m",
132
+ sepia_brown: "\e[38;5;130m",
133
+ taupe_brown: "\e[38;5;101m",
134
+ stone_gray: "\e[38;5;102m",
135
+ charcoal_gray: "\e[38;5;236m",
136
+ ruby_red: "\e[38;5;196m",
137
+ emerald_green: "\e[38;5;46m",
138
+ garnet_red: "\e[38;5;52m",
139
+ onyx_black: "\e[38;5;16m",
140
+ opal_white: "\e[38;5;155m",
141
+ amethyst_purple: "\e[38;5;127m",
142
+ peridot_green: "\e[38;5;112m",
143
+ citrine_yellow: "\e[38;5;172m",
144
+ topaz_yellow: "\e[38;5;220m",
145
+ aquamarine_blue: "\e[38;5;87m",
146
+ bronze_brown: "\e[38;5;101m",
147
+ platinum_gray: "\e[38;5;238m",
148
+ pewter_gray: "\e[38;5;245m",
149
+ brass_gold: "\e[38;5;180m"
150
+ }.freeze
151
+
152
+ FORMATS = {
153
+ bold: "\e[1m",
154
+ italic: "\e[3m",
155
+ underline: "\e[4m",
156
+ strikethrough: "\e[9m",
157
+ reset: "\e[0m",
158
+ reverse: "\e[7m", # Reverse video (swap foreground and background colors)
159
+ invisible: "\e[8m", # Make text invisible (usually not visible, but can be used for certain effects)
160
+ blink_fast: "\e[6m", # Fast blinking text effect
161
+ conceal: "\e[8m", # Conceal text (hide it)
162
+ blink_slow: "\e[5m", # Slow blinking text effect
163
+ double_underline: "\e[21m", # Double underline
164
+ }.freeze
165
+
166
+ BORDERS = {
167
+ single: "\u2500" * 30, # Single horizontal line
168
+ double: "\u2550" * 30, # Double horizontal line
169
+ thick: "\u2501" * 30, # Thick horizontal line
170
+ rounded: "\u256D" * 30, # Rounded border
171
+ dashed: "\u2504" * 30, # Dashed border
172
+ dotted: "\u2508" * 30, # Dotted border
173
+ heavy_rounded: "\u256E" * 30, # Another rounded border style
174
+ wave: "\u223D" * 30, # Wave border
175
+ zigzag: "\u224B" * 30, # Zigzag border
176
+ stars: "\u272D" * 30, # Stars border
177
+ arrows: "\u2192" * 30, # Arrows border
178
+ double_line: "\u2551" * 30, # Double vertical line
179
+ }.freeze
180
+
181
+ TEXT_EFFECTS = {
182
+ shadow: "\e[2m", # Text shadow effect
183
+ blink: "\e[5m", # Blinking text effect
184
+ opacity: "\e[30;40m", # Adjust text opacity (foreground and background colors)
185
+ }.freeze
186
+
187
+ def self.color_text(text, color)
188
+ unless COLORS.key?(color)
189
+ raise InvalidColorError.new(color)
190
+ end
191
+
192
+ "#{COLORS[color]}#{text}#{FORMATS[:reset]}"
193
+ end
194
+
195
+ def self.format_text(text, format)
196
+ unless FORMATS.key?(format)
197
+ raise InvalidFormatError.new(format)
198
+ end
199
+
200
+ "#{FORMATS[format]}#{text}#{FORMATS[:reset]}"
201
+ end
202
+
203
+ def self.visible_length(text)
204
+ text.gsub(/\e\[\d+(;\d+)*m/, '').length
205
+ end
206
+
207
+ def self.center_text(text, width)
208
+ padding = [(width - visible_length(text)) / 2, 0].max
209
+ ' ' * padding + text + ' ' * padding
210
+ end
211
+
212
+ def self.left_align(text, width)
213
+ text + ' ' * [width - visible_length(text), 0].max
214
+ end
215
+
216
+ def self.right_align(text, width)
217
+ ' ' * [width - visible_length(text), 0].max + text
218
+ end
219
+
220
+ def self.justify_text(text, width)
221
+ words = text.split
222
+ return text if words.length == 1
223
+
224
+ total_space = width - visible_length(text)
225
+ space_between_words = (total_space / (words.length - 1)).to_i
226
+
227
+ justified_text = words.join(" " * space_between_words)
228
+ extra_space = total_space % (words.length - 1)
229
+
230
+ justified_text + ' ' * extra_space
231
+ end
232
+
233
+ def self.set_text_border(text, border)
234
+ unless BORDERS.key?(border)
235
+ raise InvalidBorderError.new(border)
236
+ end
237
+
238
+ "#{BORDERS[border]}#{text}#{BORDERS[border]}"
239
+ end
240
+
241
+ def self.underline_text(text)
242
+ "#{FORMATS[:underline]}#{text}#{FORMATS[:reset]}"
243
+ end
244
+
245
+ def self.strikethrough_text(text)
246
+ "#{FORMATS[:strikethrough]}#{text}#{FORMATS[:reset]}"
247
+ end
248
+
249
+ def self.apply_text_shadow(text)
250
+ "#{TEXT_EFFECTS[:shadow]}#{text}#{FORMATS[:reset]}"
251
+ end
252
+
253
+ def self.apply_blinking_effect(text)
254
+ "#{TEXT_EFFECTS[:blink]}#{text}#{FORMATS[:reset]}"
255
+ end
256
+
257
+ def self.color_text(text, color, custom_code = nil)
258
+ if COLORS.key?(color)
259
+ "#{COLORS[color]}#{text}#{FORMATS[:reset]}"
260
+ elsif custom_code
261
+ "#{custom_code}#{text}#{FORMATS[:reset]}"
262
+ else
263
+ raise InvalidColorError.new(color)
264
+ end
265
+ end
266
+
267
+ def self.adjust_text_opacity(text)
268
+ "#{TEXT_EFFECTS[:opacity]}#{text}#{FORMATS[:reset]}"
269
+ end
270
+
271
+ def self.gradient_text(text, colors)
272
+ unless colors.is_a?(Array) && colors.length >= 2
273
+ raise ArgumentError, "Gradient text requires at least two colors"
274
+ end
275
+
276
+ color_count = colors.length
277
+ step_size = 100.0 / (color_count - 1)
278
+ gradient = ""
279
+
280
+ text.each_char.with_index do |char, index|
281
+ color_index = (step_size * index / 100).round
282
+ color = colors[color_index]
283
+ gradient += "#{COLORS[color]}#{char}"
284
+ end
285
+
286
+ gradient + FORMATS[:reset]
287
+ end
288
+
289
+ def self.set_text_border(text, border)
290
+ unless BORDERS.key?(border)
291
+ raise InvalidBorderError.new(border)
292
+ end
293
+
294
+ "#{BORDERS[border]}#{text}#{BORDERS[border]}"
295
+ end
296
+
297
+ def self.text_with_shadow(text, shadow_color, blur_radius, x_offset, y_offset)
298
+ shadow = "\e[38;2;#{shadow_color[:r]};#{shadow_color[:g]};#{shadow_color[:b]};48;2;#{shadow_color[:r]};#{shadow_color[:g]};#{shadow_color[:b]}m"
299
+ "#{shadow}#{text}#{FORMATS[:reset]}"
300
+ end
301
+
302
+ def self.wrap_text(text, width)
303
+ lines = []
304
+ current_line = ''
305
+
306
+ words = text.split(/\s+/)
307
+
308
+ words.each do |word|
309
+ if visible_length(current_line + word) <= width
310
+ current_line += word + ' '
311
+ else
312
+ lines << current_line.rstrip
313
+ current_line = word + ' '
314
+ end
315
+ end
316
+
317
+ lines << current_line.rstrip if current_line != ''
318
+ lines.join("\n")
319
+ end
320
+ end
data/lib/errors.rb ADDED
@@ -0,0 +1,61 @@
1
+ # errors.rb
2
+
3
+ module Customization
4
+ class InvalidColorError < StandardError
5
+ def initialize(color)
6
+ super("Invalid color: #{color}")
7
+ end
8
+ end
9
+
10
+ class InvalidFormatError < StandardError
11
+ def initialize(format)
12
+ super("Invalid format: #{format}")
13
+ end
14
+ end
15
+
16
+ class InvalidFontSizeError < StandardError
17
+ def initialize(size)
18
+ super("Invalid font size: #{size}")
19
+ end
20
+ end
21
+
22
+ class InvalidBorderError < StandardError
23
+ def initialize(border)
24
+ super("Invalid text border style: #{border}")
25
+ end
26
+ end
27
+
28
+ class InvalidTextEffectError < StandardError
29
+ def initialize(effect)
30
+ super("Invalid text effect: #{effect}")
31
+ end
32
+ end
33
+
34
+ class InvalidLetterSpacingError < StandardError
35
+ def initialize(spacing)
36
+ super("Invalid letter spacing value: #{spacing}")
37
+ end
38
+ end
39
+
40
+ class InvalidLineSpacingError < StandardError
41
+ def initialize(spacing)
42
+ super("Invalid line spacing value: #{spacing}")
43
+ end
44
+ end
45
+
46
+ class InvalidTextShadowError < StandardError
47
+ def initialize(shadow)
48
+ super("Invalid text shadow: #{shadow}")
49
+ end
50
+ end
51
+
52
+ class InvalidBlinkingEffectError < StandardError
53
+ def initialize
54
+ super("Blinking effect is not supported in some environments.")
55
+ end
56
+ end
57
+
58
+ class InvalidTextOpacityError < StandardError
59
+ def initialize(opacity)
60
+ super("Invalid text opacity value: #{opacity}")
61
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: customization
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ThatAlecs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-10-11 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Customization is a library for customizing text with various effects
14
+ and colors.
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/customization.rb
21
+ - lib/errors.rb
22
+ homepage: https://github.com/thatalecs/customizationrb
23
+ licenses:
24
+ - MIT
25
+ metadata:
26
+ source_code_uri: https://github.com/thatalecs/customizationrb
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - test
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.4.20
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: A Ruby library for text customization using ANSI escape codes
46
+ test_files: []