webscout 7.1__py3-none-any.whl → 7.3__py3-none-any.whl

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.

Potentially problematic release.


This version of webscout might be problematic. Click here for more details.

Files changed (154) hide show
  1. webscout/AIauto.py +191 -191
  2. webscout/AIbase.py +122 -122
  3. webscout/AIutel.py +440 -440
  4. webscout/Bard.py +343 -161
  5. webscout/DWEBS.py +489 -492
  6. webscout/Extra/YTToolkit/YTdownloader.py +995 -995
  7. webscout/Extra/YTToolkit/__init__.py +2 -2
  8. webscout/Extra/YTToolkit/transcriber.py +476 -479
  9. webscout/Extra/YTToolkit/ytapi/channel.py +307 -307
  10. webscout/Extra/YTToolkit/ytapi/playlist.py +58 -58
  11. webscout/Extra/YTToolkit/ytapi/pool.py +7 -7
  12. webscout/Extra/YTToolkit/ytapi/utils.py +62 -62
  13. webscout/Extra/YTToolkit/ytapi/video.py +103 -103
  14. webscout/Extra/autocoder/__init__.py +9 -9
  15. webscout/Extra/autocoder/autocoder_utiles.py +199 -199
  16. webscout/Extra/autocoder/rawdog.py +5 -7
  17. webscout/Extra/autollama.py +230 -230
  18. webscout/Extra/gguf.py +3 -3
  19. webscout/Extra/weather.py +171 -171
  20. webscout/LLM.py +442 -442
  21. webscout/Litlogger/__init__.py +67 -681
  22. webscout/Litlogger/core/__init__.py +6 -0
  23. webscout/Litlogger/core/level.py +23 -0
  24. webscout/Litlogger/core/logger.py +166 -0
  25. webscout/Litlogger/handlers/__init__.py +12 -0
  26. webscout/Litlogger/handlers/console.py +33 -0
  27. webscout/Litlogger/handlers/file.py +143 -0
  28. webscout/Litlogger/handlers/network.py +173 -0
  29. webscout/Litlogger/styles/__init__.py +7 -0
  30. webscout/Litlogger/styles/colors.py +249 -0
  31. webscout/Litlogger/styles/formats.py +460 -0
  32. webscout/Litlogger/styles/text.py +87 -0
  33. webscout/Litlogger/utils/__init__.py +6 -0
  34. webscout/Litlogger/utils/detectors.py +154 -0
  35. webscout/Litlogger/utils/formatters.py +200 -0
  36. webscout/Provider/AISEARCH/DeepFind.py +250 -250
  37. webscout/Provider/AISEARCH/ISou.py +277 -0
  38. webscout/Provider/AISEARCH/__init__.py +2 -1
  39. webscout/Provider/Blackboxai.py +3 -3
  40. webscout/Provider/ChatGPTGratis.py +226 -0
  41. webscout/Provider/Cloudflare.py +3 -4
  42. webscout/Provider/DeepSeek.py +218 -0
  43. webscout/Provider/Deepinfra.py +40 -24
  44. webscout/Provider/Free2GPT.py +131 -124
  45. webscout/Provider/Gemini.py +100 -115
  46. webscout/Provider/Glider.py +3 -3
  47. webscout/Provider/Groq.py +5 -1
  48. webscout/Provider/Jadve.py +3 -3
  49. webscout/Provider/Marcus.py +191 -192
  50. webscout/Provider/Netwrck.py +3 -3
  51. webscout/Provider/PI.py +2 -2
  52. webscout/Provider/PizzaGPT.py +2 -3
  53. webscout/Provider/QwenLM.py +311 -0
  54. webscout/Provider/TTI/AiForce/__init__.py +22 -22
  55. webscout/Provider/TTI/AiForce/async_aiforce.py +257 -257
  56. webscout/Provider/TTI/AiForce/sync_aiforce.py +242 -242
  57. webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
  58. webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +206 -0
  59. webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +192 -0
  60. webscout/Provider/TTI/Nexra/__init__.py +22 -22
  61. webscout/Provider/TTI/Nexra/async_nexra.py +286 -286
  62. webscout/Provider/TTI/Nexra/sync_nexra.py +258 -258
  63. webscout/Provider/TTI/PollinationsAI/__init__.py +23 -23
  64. webscout/Provider/TTI/PollinationsAI/async_pollinations.py +330 -330
  65. webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +285 -285
  66. webscout/Provider/TTI/__init__.py +2 -1
  67. webscout/Provider/TTI/artbit/__init__.py +22 -22
  68. webscout/Provider/TTI/artbit/async_artbit.py +184 -184
  69. webscout/Provider/TTI/artbit/sync_artbit.py +176 -176
  70. webscout/Provider/TTI/blackbox/__init__.py +4 -4
  71. webscout/Provider/TTI/blackbox/async_blackbox.py +212 -212
  72. webscout/Provider/TTI/blackbox/sync_blackbox.py +199 -199
  73. webscout/Provider/TTI/deepinfra/__init__.py +4 -4
  74. webscout/Provider/TTI/deepinfra/async_deepinfra.py +227 -227
  75. webscout/Provider/TTI/deepinfra/sync_deepinfra.py +199 -199
  76. webscout/Provider/TTI/huggingface/__init__.py +22 -22
  77. webscout/Provider/TTI/huggingface/async_huggingface.py +199 -199
  78. webscout/Provider/TTI/huggingface/sync_huggingface.py +195 -195
  79. webscout/Provider/TTI/imgninza/__init__.py +4 -4
  80. webscout/Provider/TTI/imgninza/async_ninza.py +214 -214
  81. webscout/Provider/TTI/imgninza/sync_ninza.py +209 -209
  82. webscout/Provider/TTI/talkai/__init__.py +4 -4
  83. webscout/Provider/TTI/talkai/async_talkai.py +229 -229
  84. webscout/Provider/TTI/talkai/sync_talkai.py +207 -207
  85. webscout/Provider/TTS/deepgram.py +182 -182
  86. webscout/Provider/TTS/elevenlabs.py +136 -136
  87. webscout/Provider/TTS/gesserit.py +150 -150
  88. webscout/Provider/TTS/murfai.py +138 -138
  89. webscout/Provider/TTS/parler.py +133 -134
  90. webscout/Provider/TTS/streamElements.py +360 -360
  91. webscout/Provider/TTS/utils.py +280 -280
  92. webscout/Provider/TTS/voicepod.py +116 -116
  93. webscout/Provider/TextPollinationsAI.py +28 -8
  94. webscout/Provider/WiseCat.py +193 -0
  95. webscout/Provider/__init__.py +146 -134
  96. webscout/Provider/cerebras.py +242 -227
  97. webscout/Provider/chatglm.py +204 -204
  98. webscout/Provider/dgaf.py +2 -3
  99. webscout/Provider/freeaichat.py +221 -0
  100. webscout/Provider/gaurish.py +2 -3
  101. webscout/Provider/geminiapi.py +208 -208
  102. webscout/Provider/granite.py +223 -0
  103. webscout/Provider/hermes.py +218 -218
  104. webscout/Provider/llama3mitril.py +179 -179
  105. webscout/Provider/llamatutor.py +3 -3
  106. webscout/Provider/llmchat.py +2 -3
  107. webscout/Provider/meta.py +794 -794
  108. webscout/Provider/multichat.py +331 -331
  109. webscout/Provider/typegpt.py +359 -359
  110. webscout/Provider/yep.py +3 -3
  111. webscout/__init__.py +1 -0
  112. webscout/__main__.py +5 -5
  113. webscout/cli.py +319 -319
  114. webscout/conversation.py +241 -242
  115. webscout/exceptions.py +328 -328
  116. webscout/litagent/__init__.py +28 -28
  117. webscout/litagent/agent.py +2 -3
  118. webscout/litprinter/__init__.py +0 -58
  119. webscout/scout/__init__.py +8 -8
  120. webscout/scout/core.py +884 -884
  121. webscout/scout/element.py +459 -459
  122. webscout/scout/parsers/__init__.py +69 -69
  123. webscout/scout/parsers/html5lib_parser.py +172 -172
  124. webscout/scout/parsers/html_parser.py +236 -236
  125. webscout/scout/parsers/lxml_parser.py +178 -178
  126. webscout/scout/utils.py +38 -38
  127. webscout/swiftcli/__init__.py +811 -811
  128. webscout/update_checker.py +2 -12
  129. webscout/version.py +1 -1
  130. webscout/webscout_search.py +87 -6
  131. webscout/webscout_search_async.py +58 -1
  132. webscout/yep_search.py +297 -0
  133. webscout/zeroart/__init__.py +54 -54
  134. webscout/zeroart/base.py +60 -60
  135. webscout/zeroart/effects.py +99 -99
  136. webscout/zeroart/fonts.py +816 -816
  137. {webscout-7.1.dist-info → webscout-7.3.dist-info}/METADATA +62 -22
  138. webscout-7.3.dist-info/RECORD +223 -0
  139. {webscout-7.1.dist-info → webscout-7.3.dist-info}/WHEEL +1 -1
  140. webstoken/__init__.py +30 -30
  141. webstoken/classifier.py +189 -189
  142. webstoken/keywords.py +216 -216
  143. webstoken/language.py +128 -128
  144. webstoken/ner.py +164 -164
  145. webstoken/normalizer.py +35 -35
  146. webstoken/processor.py +77 -77
  147. webstoken/sentiment.py +206 -206
  148. webstoken/stemmer.py +73 -73
  149. webstoken/tagger.py +60 -60
  150. webstoken/tokenizer.py +158 -158
  151. webscout-7.1.dist-info/RECORD +0 -198
  152. {webscout-7.1.dist-info → webscout-7.3.dist-info}/LICENSE.md +0 -0
  153. {webscout-7.1.dist-info → webscout-7.3.dist-info}/entry_points.txt +0 -0
  154. {webscout-7.1.dist-info → webscout-7.3.dist-info}/top_level.txt +0 -0
webscout/zeroart/fonts.py CHANGED
@@ -1,816 +1,816 @@
1
- """
2
- ZeroArt Fonts: Predefined ASCII art fonts
3
- """
4
-
5
- from .base import ZeroArtFont
6
-
7
- class BlockFont(ZeroArtFont):
8
- """Block-style ASCII art font"""
9
- def __init__(self):
10
- super().__init__("block")
11
- self.letters = {
12
- ' ': [" ", " ", " ", " ", " "]
13
- }
14
- self._populate_letters()
15
-
16
- def _populate_letters(self):
17
- """Populate the font with predefined letters"""
18
- block_letters = {
19
- 'A': [
20
- " █████ ",
21
- " ██ ██ ",
22
- " ███████ ",
23
- " ██ ██ ",
24
- " ██ ██ "
25
- ],
26
- 'B': [
27
- " ██████ ",
28
- " ██ ██ ",
29
- " ██████ ",
30
- " ██ ██ ",
31
- " ██████ "
32
- ],
33
- 'C': [
34
- " ██████ ",
35
- " ██ ",
36
- " ██ ",
37
- " ██ ",
38
- " ██████ "
39
- ],
40
- 'D': [
41
- " ██████ ",
42
- " ██ ██ ",
43
- " ██ ██ ",
44
- " ██ ██ ",
45
- " ██████ "
46
- ],
47
- 'E': [
48
- " ███████ ",
49
- " ██ ",
50
- " ██████ ",
51
- " ██ ",
52
- " ███████ "
53
- ],
54
- 'F': [
55
- " ███████ ",
56
- " ██ ",
57
- " ██████ ",
58
- " ██ ",
59
- " ██ "
60
- ],
61
- 'G': [
62
- " ██████ ",
63
- " ██ ",
64
- " ██ ███ ",
65
- " ██ ██ ",
66
- " ██████ "
67
- ],
68
- 'H': [
69
- " ██ ██ ",
70
- " ██ ██ ",
71
- " ███████ ",
72
- " ██ ██ ",
73
- " ██ ██ "
74
- ],
75
- 'I': [
76
- " ███████ ",
77
- " ██ ",
78
- " ██ ",
79
- " ██ ",
80
- " ███████ "
81
- ],
82
- 'J': [
83
- " ██ ",
84
- " ██ ",
85
- " ██ ",
86
- " ██ ██ ",
87
- " █████ "
88
- ],
89
- 'K': [
90
- " ██ ██ ",
91
- " ██ ██ ",
92
- " ████ ",
93
- " ██ ██ ",
94
- " ██ ██ "
95
- ],
96
- 'L': [
97
- " ██ ",
98
- " ██ ",
99
- " ██ ",
100
- " ██ ",
101
- " ███████ "
102
- ],
103
- 'M': [
104
- " ██ ██ ",
105
- " ███ ███ ",
106
- " ██ █ ██ ",
107
- " ██ ██ ",
108
- " ██ ██ "
109
- ],
110
- 'N': [
111
- " ██ ██ ",
112
- " ███ ██ ",
113
- " ██ █ ██ ",
114
- " ██ ███ ",
115
- " ██ ██ "
116
- ],
117
- 'O': [
118
- " █████ ",
119
- " ██ ██ ",
120
- " ██ ██ ",
121
- " ██ ██ ",
122
- " █████ "
123
- ],
124
- 'P': [
125
- " ██████ ",
126
- " ██ ██ ",
127
- " ██████ ",
128
- " ██ ",
129
- " ██ "
130
- ],
131
- 'Q': [
132
- " █████ ",
133
- " ██ ██ ",
134
- " ██ ██ ",
135
- " ██ ██ ",
136
- " ██████ "
137
- ],
138
- 'R': [
139
- " ██████ ",
140
- " ██ ██ ",
141
- " ██████ ",
142
- " ██ ██ ",
143
- " ██ ██ "
144
- ],
145
- 'S': [
146
- " ██████ ",
147
- " ██ ",
148
- " ██████ ",
149
- " ██ ",
150
- " ██████ "
151
- ],
152
- 'T': [
153
- " ███████ ",
154
- " ██ ",
155
- " ██ ",
156
- " ██ ",
157
- " ██ "
158
- ],
159
- 'U': [
160
- " ██ ██ ",
161
- " ██ ██ ",
162
- " ██ ██ ",
163
- " ██ ██ ",
164
- " █████ "
165
- ],
166
- 'V': [
167
- " ██ ██ ",
168
- " ██ ██ ",
169
- " ██ ██ ",
170
- " ██ ██ ",
171
- " ███ "
172
- ],
173
- 'W': [
174
- " ██ ██ ",
175
- " ██ ██ ",
176
- " ██ █ ██ ",
177
- " ███ ███ ",
178
- " ██ ██ "
179
- ],
180
- 'X': [
181
- " ██ ██ ",
182
- " ██ ██ ",
183
- " ███ ",
184
- " ██ ██ ",
185
- " ██ ██ "
186
- ],
187
- 'Y': [
188
- " ██ ██ ",
189
- " ██ ██ ",
190
- " ███ ",
191
- " ███ ",
192
- " ███ "
193
- ],
194
- 'Z': [
195
- " ███████ ",
196
- " ██ ",
197
- " ██ ",
198
- " ██ ",
199
- " ███████ "
200
- ]
201
- }
202
-
203
- self.letters.update(block_letters)
204
-
205
- class SlantFont(ZeroArtFont):
206
- """Slanted ASCII art font"""
207
- def __init__(self):
208
- super().__init__("slant")
209
- self.letters = {
210
- ' ': [" ", " ", " ", " ", " "]
211
- }
212
- self._populate_letters()
213
-
214
- def _populate_letters(self):
215
- """Populate the font with predefined letters"""
216
- slant_letters = {
217
- 'A': [
218
- " /\\ ",
219
- " / \\ ",
220
- " / /\\ \\ ",
221
- " / ____ \\ ",
222
- "/_/ \\_\\"
223
- ],
224
- 'B': [
225
- " ____ ",
226
- "| _ \\ ",
227
- "| |_) |",
228
- "| _ < ",
229
- "| |_) |",
230
- "|____/ "
231
- ],
232
- 'C': [
233
- " _____ ",
234
- " / ____| ",
235
- "| | ",
236
- "| | ",
237
- " \\_____| "
238
- ],
239
- 'D': [
240
- " _____ ",
241
- "| __ \\ ",
242
- "| | | | ",
243
- "| | | | ",
244
- "| |__| | ",
245
- "|_____/ "
246
- ],
247
- 'E': [
248
- " ______ ",
249
- "| ____| ",
250
- "| |__ ",
251
- "| __| ",
252
- "| |____ ",
253
- "|______| "
254
- ],
255
- 'F': [
256
- " ______ ",
257
- "| ____| ",
258
- "| |__ ",
259
- "| __| ",
260
- "| | ",
261
- "|_| "
262
- ],
263
- 'G': [
264
- " _____ ",
265
- " / ____| ",
266
- "| | __ ",
267
- "| | |_ | ",
268
- "| |__| | ",
269
- " \\_____| "
270
- ],
271
- 'H': [
272
- " _ _ ",
273
- "| | | | ",
274
- "| |__| | ",
275
- "| __ | ",
276
- "|_| |_| "
277
- ],
278
- 'I': [
279
- " _____ ",
280
- "|_ _|",
281
- " | | ",
282
- " | | ",
283
- " _| |_ ",
284
- "|_____|"
285
- ],
286
- 'J': [
287
- " ___ ",
288
- " |_ |",
289
- " | |",
290
- " _ | |",
291
- "| |__| |",
292
- " \\____/ "
293
- ],
294
- 'K': [
295
- " _ __ ",
296
- "| |/ / ",
297
- "| ' / ",
298
- "| < ",
299
- "| . \\ ",
300
- "|_|\\_\\ "
301
- ],
302
- 'L': [
303
- " _ ",
304
- "| | ",
305
- "| | ",
306
- "| | ",
307
- "| |____ ",
308
- "|______|"
309
- ],
310
- 'M': [
311
- " __ __ ",
312
- "| \\/ |",
313
- "| |\\/| |",
314
- "| | | |",
315
- "|_| |_|",
316
- " "
317
- ],
318
- 'N': [
319
- " _ _ ",
320
- "| \\ | |",
321
- "| \\| |",
322
- "| . ` |",
323
- "| |\\ |",
324
- "|_| \\_|"
325
- ],
326
- 'O': [
327
- " _____ ",
328
- " / ____| ",
329
- "| | __ ",
330
- "| | |_ | ",
331
- "| |__| | ",
332
- " \\_____| "
333
- ],
334
- 'P': [
335
- " _____ ",
336
- "| __ \\ ",
337
- "| |__) | ",
338
- "| ___/ ",
339
- "| | ",
340
- "|_| "
341
- ],
342
- 'Q': [
343
- " _____ ",
344
- " / ____| ",
345
- "| | __ ",
346
- "| | |_ | ",
347
- "| |__| | ",
348
- " \\____/\\ "
349
- ],
350
- 'R': [
351
- " _____ ",
352
- "| __ \\ ",
353
- "| |__) | ",
354
- "| _ / ",
355
- "| | \\ \\ ",
356
- "|_| \\_\\ "
357
- ],
358
- 'S': [
359
- " _____ ",
360
- " / ____| ",
361
- "| (___ ",
362
- " \\___ \\ ",
363
- " ____) | ",
364
- "|_____/ "
365
- ],
366
- 'T': [
367
- " ______ ",
368
- "|_ _| ",
369
- " | | ",
370
- " | | ",
371
- " | | ",
372
- " |_| "
373
- ],
374
- 'U': [
375
- " _ _ ",
376
- "| | | | ",
377
- "| | | | ",
378
- "| | | | ",
379
- "| |__| | ",
380
- " \\____/ "
381
- ],
382
- 'V': [
383
- " __ __ ",
384
- " \\ \\ / / ",
385
- " \\ \\_/ / ",
386
- " \\ / ",
387
- " \\_/ "
388
- ],
389
- 'W': [
390
- " __ __ ",
391
- " \\ \\ / / ",
392
- " \\ \\/ / ",
393
- " \\ / ",
394
- " \\/ "
395
- ],
396
- 'X': [
397
- " __ __ ",
398
- " \\ \\/ / ",
399
- " \\ / ",
400
- " / \\ ",
401
- " /_/\\_\\ "
402
- ],
403
- 'Y': [
404
- " _ _ ",
405
- "| | | |",
406
- "| | | |",
407
- "| | | |",
408
- "|_| |_|"
409
- ],
410
- 'Z': [
411
- " ______ ",
412
- "|__ / | ",
413
- " / /| | ",
414
- " / /_| | ",
415
- "/____|_| "
416
- ]
417
- }
418
-
419
- self.letters.update(slant_letters)
420
-
421
- # Add more custom fonts here
422
- class NeonFont(ZeroArtFont):
423
- """Neon-style ASCII art font"""
424
- def __init__(self):
425
- super().__init__("neon")
426
- self.letters = {
427
- ' ': [" ", " ", " ", " ", " "]
428
- }
429
- self._populate_letters()
430
-
431
- def _populate_letters(self):
432
- """Populate neon-style letters"""
433
- neon_letters = {
434
- 'A': [
435
- " ░█████░ ",
436
- " ██░░░░██ ",
437
- " ████████ ",
438
- " ██░░░░██ ",
439
- " ██░░░░██ "
440
- ],
441
- 'B': [
442
- " ████████ ",
443
- " ██░░░░██ ",
444
- " ████████ ",
445
- " ██░░░░██ ",
446
- " ████████ "
447
- ],
448
- 'C': [
449
- " ░██████ ",
450
- " ██░░░░ ",
451
- " ██ ",
452
- " ██░░░░ ",
453
- " ░██████ "
454
- ],
455
- 'D': [
456
- " ████████ ",
457
- " ██░░░░██ ",
458
- " ██░░░░██ ",
459
- " ██░░░░██ ",
460
- " ████████ "
461
- ],
462
- 'E': [
463
- " ████████ ",
464
- " ██░░░░ ",
465
- " ████████ ",
466
- " ██░░░░ ",
467
- " ████████ "
468
- ],
469
- 'F': [
470
- " ████████ ",
471
- " ██░░░░ ",
472
- " ████████ ",
473
- " ██░░░░ ",
474
- " ██░░░░ "
475
- ],
476
- 'G': [
477
- " ░██████ ",
478
- " ██░░░░ ",
479
- " ██ ████ ",
480
- " ██░░░░██ ",
481
- " ░██████ "
482
- ],
483
- 'H': [
484
- " ██░░░░██ ",
485
- " ██░░░░██ ",
486
- " ████████ ",
487
- " ██░░░░██ ",
488
- " ██░░░░██ "
489
- ],
490
- 'I': [
491
- " ████████ ",
492
- " ██░░ ",
493
- " ██░░ ",
494
- " ██░░ ",
495
- " ████████ "
496
- ],
497
- 'J': [
498
- " ██ ",
499
- " ██ ",
500
- " ██ ",
501
- " ██░░░██ ",
502
- " ░████ "
503
- ],
504
- 'K': [
505
- " ██░░░░██ ",
506
- " ██░░██ ",
507
- " ████ ",
508
- " ██░░██ ",
509
- " ██░░░░██ "
510
- ],
511
- 'L': [
512
- " ██░░░░ ",
513
- " ██░░░░ ",
514
- " ██░░░░ ",
515
- " ██░░░░ ",
516
- " ████████ "
517
- ],
518
- 'M': [
519
- " ██░░░░██ ",
520
- " ███░███ ",
521
- " ██ █ ██ ",
522
- " ██░░░░██ ",
523
- " ██░░░░██ "
524
- ],
525
- 'N': [
526
- " ██░░░░██ ",
527
- " ███░░░██ ",
528
- " ██ █░░██ ",
529
- " ██░░███ ",
530
- " ██░░░░██ "
531
- ],
532
- 'O': [
533
- " ░██████ ",
534
- " ██░░░░██ ",
535
- " ██░░░░██ ",
536
- " ██░░░░██ ",
537
- " ░██████ "
538
- ],
539
- 'P': [
540
- " ████████ ",
541
- " ██░░░░██ ",
542
- " ████████ ",
543
- " ██░░░░ ",
544
- " ██░░░░ "
545
- ],
546
- 'Q': [
547
- " ░██████ ",
548
- " ██░░░░██ ",
549
- " ██░░░░██ ",
550
- " ██░░██ ",
551
- " ░██░██ "
552
- ],
553
- 'R': [
554
- " ████████ ",
555
- " ██░░░░██ ",
556
- " ████████ ",
557
- " ██░░██ ",
558
- " ██░░░██ "
559
- ],
560
- 'S': [
561
- " ░██████ ",
562
- " ██░░░░ ",
563
- " ░██████ ",
564
- " ░██ ",
565
- " ████████ "
566
- ],
567
- 'T': [
568
- " ████████ ",
569
- " ██░░ ",
570
- " ██░░ ",
571
- " ██░░ ",
572
- " ██░░ "
573
- ],
574
- 'U': [
575
- " ██░░░░██ ",
576
- " ██░░░░██ ",
577
- " ██░░░░██ ",
578
- " ██░░░░██ ",
579
- " ░██████ "
580
- ],
581
- 'V': [
582
- " ██░░░░██ ",
583
- " ██░░░░██ ",
584
- " ██░░░░██ ",
585
- " ██░░██ ",
586
- " ░████ "
587
- ],
588
- 'W': [
589
- " ██░░░░██ ",
590
- " ██░░░░██ ",
591
- " ██ █ ██ ",
592
- " ███ ███ ",
593
- " ██ ██ "
594
- ],
595
- 'X': [
596
- " ██░░░░██ ",
597
- " ██░░██ ",
598
- " ████ ",
599
- " ██░░██ ",
600
- " ██░░░░██ "
601
- ],
602
- 'Y': [
603
- " ██░░░░██ ",
604
- " ██░░██ ",
605
- " ████ ",
606
- " ██░░ ",
607
- " ██░░ "
608
- ],
609
- 'Z': [
610
- " ████████ ",
611
- " ██░ ",
612
- " ██░ ",
613
- " ██░ ",
614
- " ████████ "
615
- ]
616
- }
617
-
618
- self.letters.update(neon_letters)
619
-
620
- class CyberFont(ZeroArtFont):
621
- """Cyberpunk-style ASCII art font"""
622
- def __init__(self):
623
- super().__init__("cyber")
624
- self.letters = {
625
- ' ': [" ", " ", " ", " ", " "]
626
- }
627
- self._populate_letters()
628
-
629
- def _populate_letters(self):
630
- """Populate cyberpunk-style letters"""
631
- cyber_letters = {
632
- 'A': [
633
- " ▓█▓▓▓▓ ",
634
- " ▓▓ ▓▓ ",
635
- " ▓▓▓▓▓▓▓ ",
636
- " ▓▓ ▓▓ ",
637
- " ▓▓ ▓▓ "
638
- ],
639
- 'B': [
640
- " ▓▓▓▓▓▓▓ ",
641
- " ▓▓ ▓▓ ",
642
- " ▓▓▓▓▓▓▓ ",
643
- " ▓▓ ▓▓ ",
644
- " ▓▓▓▓▓▓▓ "
645
- ],
646
- 'C': [
647
- " ▓▓▓▓▓▓▓ ",
648
- " ▓▓ ",
649
- " ▓▓ ",
650
- " ▓▓ ",
651
- " ▓▓▓▓▓▓▓ "
652
- ],
653
- 'D': [
654
- " ▓▓▓▓▓▓▓ ",
655
- " ▓▓ ▓▓ ",
656
- " ▓▓ ▓▓ ",
657
- " ▓▓ ▓▓ ",
658
- " ▓▓▓▓▓▓▓ "
659
- ],
660
- 'E': [
661
- " ▓▓▓▓▓▓▓ ",
662
- " ▓▓ ",
663
- " ▓▓▓▓▓▓▓ ",
664
- " ▓▓ ",
665
- " ▓▓▓▓▓▓▓ "
666
- ],
667
- 'F': [
668
- " ▓▓▓▓▓▓▓ ",
669
- " ▓▓ ",
670
- " ▓▓▓▓▓▓▓ ",
671
- " ▓▓ ",
672
- " ▓▓ "
673
- ],
674
- 'G': [
675
- " ▓▓▓▓▓▓▓ ",
676
- " ▓▓ ",
677
- " ▓▓ ▓▓▓ ",
678
- " ▓▓ ▓▓ ",
679
- " ▓▓▓▓▓▓▓ "
680
- ],
681
- 'H': [
682
- " ▓▓ ▓▓ ",
683
- " ▓▓ ▓▓ ",
684
- " ▓▓▓▓▓▓▓ ",
685
- " ▓▓ ▓▓ ",
686
- " ▓▓ ▓▓ "
687
- ],
688
- 'I': [
689
- " ▓▓▓▓▓▓▓ ",
690
- " ▓▓ ",
691
- " ▓▓ ",
692
- " ▓▓ ",
693
- " ▓▓▓▓▓▓▓ "
694
- ],
695
- 'J': [
696
- " ▓▓ ",
697
- " ▓▓ ",
698
- " ▓▓ ",
699
- " ▓▓ ▓▓ ",
700
- " ▓▓▓▓ "
701
- ],
702
- 'K': [
703
- " ▓▓ ▓▓ ",
704
- " ▓▓ ▓▓ ",
705
- " ▓▓▓▓ ",
706
- " ▓▓ ▓▓ ",
707
- " ▓▓ ▓▓ "
708
- ],
709
- 'L': [
710
- " ▓▓ ",
711
- " ▓▓ ",
712
- " ▓▓ ",
713
- " ▓▓ ",
714
- " ▓▓▓▓▓▓▓ "
715
- ],
716
- 'M': [
717
- " ▓▓ ▓▓ ",
718
- " ▓▓ █ ▓▓ ",
719
- " ▓▓ ▓ ▓▓ ",
720
- " ▓▓ ▓▓ ",
721
- " ▓▓ ▓▓ "
722
- ],
723
- 'N': [
724
- " ▓▓ ▓▓ ",
725
- " ▓▓ ▓▓ ",
726
- " ▓▓ ▓ ▓▓ ",
727
- " ▓▓▓ ▓▓ ",
728
- " ▓▓ ▓▓ "
729
- ],
730
- 'O': [
731
- " ▓▓▓▓ ",
732
- " ▓▓ ▓▓ ",
733
- " ▓▓ ▓▓ ",
734
- " ▓▓ ▓▓ ",
735
- " ▓▓▓▓ "
736
- ],
737
- 'P': [
738
- " ▓▓▓▓▓▓▓ ",
739
- " ▓▓ ▓▓ ",
740
- " ▓▓▓▓▓▓▓ ",
741
- " ▓▓ ",
742
- " ▓▓ "
743
- ],
744
- 'Q': [
745
- " ▓▓▓▓ ",
746
- " ▓▓ ▓▓ ",
747
- " ▓▓ ▓▓ ",
748
- " ▓▓ ▓▓ ",
749
- " ▓▓▓▓▓ "
750
- ],
751
- 'R': [
752
- " ▓▓▓▓▓▓▓ ",
753
- " ▓▓ ▓▓ ",
754
- " ▓▓▓▓▓▓▓ ",
755
- " ▓▓ ▓▓ ",
756
- " ▓▓ ▓▓ "
757
- ],
758
- 'S': [
759
- " ▓▓▓▓▓▓▓ ",
760
- " ▓▓ ",
761
- " ▓▓▓▓▓▓▓ ",
762
- " ▓▓ ",
763
- " ▓▓▓▓▓▓▓ "
764
- ],
765
- 'T': [
766
- " ▓▓▓▓▓▓▓ ",
767
- " ▓▓ ",
768
- " ▓▓ ",
769
- " ▓▓ ",
770
- " ▓▓ "
771
- ],
772
- 'U': [
773
- " ▓▓ ▓▓ ",
774
- " ▓▓ ▓▓ ",
775
- " ▓▓ ▓▓ ",
776
- " ▓▓ ▓▓ ",
777
- " ▓▓▓▓ "
778
- ],
779
- 'V': [
780
- " ▓▓ ▓▓ ",
781
- " ▓▓ ▓▓ ",
782
- " ▓▓ ▓▓ ",
783
- " ▓▓ ▓▓ ",
784
- " ▓▓ "
785
- ],
786
- 'W': [
787
- " ▓▓ ▓▓ ",
788
- " ▓▓ ▓▓ ",
789
- " ▓▓ █ ▓▓ ",
790
- " ▓▓▓▓▓▓ ",
791
- " ▓▓ ▓▓ "
792
- ],
793
- 'X': [
794
- " ▓▓ ▓▓ ",
795
- " ▓▓ ▓▓ ",
796
- " ▓▓ ",
797
- " ▓▓ ▓▓ ",
798
- " ▓▓ ▓▓ "
799
- ],
800
- 'Y': [
801
- " ▓▓ ▓▓ ",
802
- " ▓▓ ▓▓ ",
803
- " ▓▓ ",
804
- " ▓▓ ",
805
- " ▓▓ "
806
- ],
807
- 'Z': [
808
- " ▓▓▓▓▓▓▓ ",
809
- " ▓▓ ",
810
- " ▓▓ ",
811
- " ▓▓ ",
812
- " ▓▓▓▓▓▓▓ "
813
- ]
814
- }
815
-
816
- self.letters.update(cyber_letters)
1
+ """
2
+ ZeroArt Fonts: Predefined ASCII art fonts
3
+ """
4
+
5
+ from .base import ZeroArtFont
6
+
7
+ class BlockFont(ZeroArtFont):
8
+ """Block-style ASCII art font"""
9
+ def __init__(self):
10
+ super().__init__("block")
11
+ self.letters = {
12
+ ' ': [" ", " ", " ", " ", " "]
13
+ }
14
+ self._populate_letters()
15
+
16
+ def _populate_letters(self):
17
+ """Populate the font with predefined letters"""
18
+ block_letters = {
19
+ 'A': [
20
+ " █████ ",
21
+ " ██ ██ ",
22
+ " ███████ ",
23
+ " ██ ██ ",
24
+ " ██ ██ "
25
+ ],
26
+ 'B': [
27
+ " ██████ ",
28
+ " ██ ██ ",
29
+ " ██████ ",
30
+ " ██ ██ ",
31
+ " ██████ "
32
+ ],
33
+ 'C': [
34
+ " ██████ ",
35
+ " ██ ",
36
+ " ██ ",
37
+ " ██ ",
38
+ " ██████ "
39
+ ],
40
+ 'D': [
41
+ " ██████ ",
42
+ " ██ ██ ",
43
+ " ██ ██ ",
44
+ " ██ ██ ",
45
+ " ██████ "
46
+ ],
47
+ 'E': [
48
+ " ███████ ",
49
+ " ██ ",
50
+ " ██████ ",
51
+ " ██ ",
52
+ " ███████ "
53
+ ],
54
+ 'F': [
55
+ " ███████ ",
56
+ " ██ ",
57
+ " ██████ ",
58
+ " ██ ",
59
+ " ██ "
60
+ ],
61
+ 'G': [
62
+ " ██████ ",
63
+ " ██ ",
64
+ " ██ ███ ",
65
+ " ██ ██ ",
66
+ " ██████ "
67
+ ],
68
+ 'H': [
69
+ " ██ ██ ",
70
+ " ██ ██ ",
71
+ " ███████ ",
72
+ " ██ ██ ",
73
+ " ██ ██ "
74
+ ],
75
+ 'I': [
76
+ " ███████ ",
77
+ " ██ ",
78
+ " ██ ",
79
+ " ██ ",
80
+ " ███████ "
81
+ ],
82
+ 'J': [
83
+ " ██ ",
84
+ " ██ ",
85
+ " ██ ",
86
+ " ██ ██ ",
87
+ " █████ "
88
+ ],
89
+ 'K': [
90
+ " ██ ██ ",
91
+ " ██ ██ ",
92
+ " ████ ",
93
+ " ██ ██ ",
94
+ " ██ ██ "
95
+ ],
96
+ 'L': [
97
+ " ██ ",
98
+ " ██ ",
99
+ " ██ ",
100
+ " ██ ",
101
+ " ███████ "
102
+ ],
103
+ 'M': [
104
+ " ██ ██ ",
105
+ " ███ ███ ",
106
+ " ██ █ ██ ",
107
+ " ██ ██ ",
108
+ " ██ ██ "
109
+ ],
110
+ 'N': [
111
+ " ██ ██ ",
112
+ " ███ ██ ",
113
+ " ██ █ ██ ",
114
+ " ██ ███ ",
115
+ " ██ ██ "
116
+ ],
117
+ 'O': [
118
+ " █████ ",
119
+ " ██ ██ ",
120
+ " ██ ██ ",
121
+ " ██ ██ ",
122
+ " █████ "
123
+ ],
124
+ 'P': [
125
+ " ██████ ",
126
+ " ██ ██ ",
127
+ " ██████ ",
128
+ " ██ ",
129
+ " ██ "
130
+ ],
131
+ 'Q': [
132
+ " █████ ",
133
+ " ██ ██ ",
134
+ " ██ ██ ",
135
+ " ██ ██ ",
136
+ " ██████ "
137
+ ],
138
+ 'R': [
139
+ " ██████ ",
140
+ " ██ ██ ",
141
+ " ██████ ",
142
+ " ██ ██ ",
143
+ " ██ ██ "
144
+ ],
145
+ 'S': [
146
+ " ██████ ",
147
+ " ██ ",
148
+ " ██████ ",
149
+ " ██ ",
150
+ " ██████ "
151
+ ],
152
+ 'T': [
153
+ " ███████ ",
154
+ " ██ ",
155
+ " ██ ",
156
+ " ██ ",
157
+ " ██ "
158
+ ],
159
+ 'U': [
160
+ " ██ ██ ",
161
+ " ██ ██ ",
162
+ " ██ ██ ",
163
+ " ██ ██ ",
164
+ " █████ "
165
+ ],
166
+ 'V': [
167
+ " ██ ██ ",
168
+ " ██ ██ ",
169
+ " ██ ██ ",
170
+ " ██ ██ ",
171
+ " ███ "
172
+ ],
173
+ 'W': [
174
+ " ██ ██ ",
175
+ " ██ ██ ",
176
+ " ██ █ ██ ",
177
+ " ███ ███ ",
178
+ " ██ ██ "
179
+ ],
180
+ 'X': [
181
+ " ██ ██ ",
182
+ " ██ ██ ",
183
+ " ███ ",
184
+ " ██ ██ ",
185
+ " ██ ██ "
186
+ ],
187
+ 'Y': [
188
+ " ██ ██ ",
189
+ " ██ ██ ",
190
+ " ███ ",
191
+ " ███ ",
192
+ " ███ "
193
+ ],
194
+ 'Z': [
195
+ " ███████ ",
196
+ " ██ ",
197
+ " ██ ",
198
+ " ██ ",
199
+ " ███████ "
200
+ ]
201
+ }
202
+
203
+ self.letters.update(block_letters)
204
+
205
+ class SlantFont(ZeroArtFont):
206
+ """Slanted ASCII art font"""
207
+ def __init__(self):
208
+ super().__init__("slant")
209
+ self.letters = {
210
+ ' ': [" ", " ", " ", " ", " "]
211
+ }
212
+ self._populate_letters()
213
+
214
+ def _populate_letters(self):
215
+ """Populate the font with predefined letters"""
216
+ slant_letters = {
217
+ 'A': [
218
+ " /\\ ",
219
+ " / \\ ",
220
+ " / /\\ \\ ",
221
+ " / ____ \\ ",
222
+ "/_/ \\_\\"
223
+ ],
224
+ 'B': [
225
+ " ____ ",
226
+ "| _ \\ ",
227
+ "| |_) |",
228
+ "| _ < ",
229
+ "| |_) |",
230
+ "|____/ "
231
+ ],
232
+ 'C': [
233
+ " _____ ",
234
+ " / ____| ",
235
+ "| | ",
236
+ "| | ",
237
+ " \\_____| "
238
+ ],
239
+ 'D': [
240
+ " _____ ",
241
+ "| __ \\ ",
242
+ "| | | | ",
243
+ "| | | | ",
244
+ "| |__| | ",
245
+ "|_____/ "
246
+ ],
247
+ 'E': [
248
+ " ______ ",
249
+ "| ____| ",
250
+ "| |__ ",
251
+ "| __| ",
252
+ "| |____ ",
253
+ "|______| "
254
+ ],
255
+ 'F': [
256
+ " ______ ",
257
+ "| ____| ",
258
+ "| |__ ",
259
+ "| __| ",
260
+ "| | ",
261
+ "|_| "
262
+ ],
263
+ 'G': [
264
+ " _____ ",
265
+ " / ____| ",
266
+ "| | __ ",
267
+ "| | |_ | ",
268
+ "| |__| | ",
269
+ " \\_____| "
270
+ ],
271
+ 'H': [
272
+ " _ _ ",
273
+ "| | | | ",
274
+ "| |__| | ",
275
+ "| __ | ",
276
+ "|_| |_| "
277
+ ],
278
+ 'I': [
279
+ " _____ ",
280
+ "|_ _|",
281
+ " | | ",
282
+ " | | ",
283
+ " _| |_ ",
284
+ "|_____|"
285
+ ],
286
+ 'J': [
287
+ " ___ ",
288
+ " |_ |",
289
+ " | |",
290
+ " _ | |",
291
+ "| |__| |",
292
+ " \\____/ "
293
+ ],
294
+ 'K': [
295
+ " _ __ ",
296
+ "| |/ / ",
297
+ "| ' / ",
298
+ "| < ",
299
+ "| . \\ ",
300
+ "|_|\\_\\ "
301
+ ],
302
+ 'L': [
303
+ " _ ",
304
+ "| | ",
305
+ "| | ",
306
+ "| | ",
307
+ "| |____ ",
308
+ "|______|"
309
+ ],
310
+ 'M': [
311
+ " __ __ ",
312
+ "| \\/ |",
313
+ "| |\\/| |",
314
+ "| | | |",
315
+ "|_| |_|",
316
+ " "
317
+ ],
318
+ 'N': [
319
+ " _ _ ",
320
+ "| \\ | |",
321
+ "| \\| |",
322
+ "| . ` |",
323
+ "| |\\ |",
324
+ "|_| \\_|"
325
+ ],
326
+ 'O': [
327
+ " _____ ",
328
+ " / ____| ",
329
+ "| | __ ",
330
+ "| | |_ | ",
331
+ "| |__| | ",
332
+ " \\_____| "
333
+ ],
334
+ 'P': [
335
+ " _____ ",
336
+ "| __ \\ ",
337
+ "| |__) | ",
338
+ "| ___/ ",
339
+ "| | ",
340
+ "|_| "
341
+ ],
342
+ 'Q': [
343
+ " _____ ",
344
+ " / ____| ",
345
+ "| | __ ",
346
+ "| | |_ | ",
347
+ "| |__| | ",
348
+ " \\____/\\ "
349
+ ],
350
+ 'R': [
351
+ " _____ ",
352
+ "| __ \\ ",
353
+ "| |__) | ",
354
+ "| _ / ",
355
+ "| | \\ \\ ",
356
+ "|_| \\_\\ "
357
+ ],
358
+ 'S': [
359
+ " _____ ",
360
+ " / ____| ",
361
+ "| (___ ",
362
+ " \\___ \\ ",
363
+ " ____) | ",
364
+ "|_____/ "
365
+ ],
366
+ 'T': [
367
+ " ______ ",
368
+ "|_ _| ",
369
+ " | | ",
370
+ " | | ",
371
+ " | | ",
372
+ " |_| "
373
+ ],
374
+ 'U': [
375
+ " _ _ ",
376
+ "| | | | ",
377
+ "| | | | ",
378
+ "| | | | ",
379
+ "| |__| | ",
380
+ " \\____/ "
381
+ ],
382
+ 'V': [
383
+ " __ __ ",
384
+ " \\ \\ / / ",
385
+ " \\ \\_/ / ",
386
+ " \\ / ",
387
+ " \\_/ "
388
+ ],
389
+ 'W': [
390
+ " __ __ ",
391
+ " \\ \\ / / ",
392
+ " \\ \\/ / ",
393
+ " \\ / ",
394
+ " \\/ "
395
+ ],
396
+ 'X': [
397
+ " __ __ ",
398
+ " \\ \\/ / ",
399
+ " \\ / ",
400
+ " / \\ ",
401
+ " /_/\\_\\ "
402
+ ],
403
+ 'Y': [
404
+ " _ _ ",
405
+ "| | | |",
406
+ "| | | |",
407
+ "| | | |",
408
+ "|_| |_|"
409
+ ],
410
+ 'Z': [
411
+ " ______ ",
412
+ "|__ / | ",
413
+ " / /| | ",
414
+ " / /_| | ",
415
+ "/____|_| "
416
+ ]
417
+ }
418
+
419
+ self.letters.update(slant_letters)
420
+
421
+ # Add more custom fonts here
422
+ class NeonFont(ZeroArtFont):
423
+ """Neon-style ASCII art font"""
424
+ def __init__(self):
425
+ super().__init__("neon")
426
+ self.letters = {
427
+ ' ': [" ", " ", " ", " ", " "]
428
+ }
429
+ self._populate_letters()
430
+
431
+ def _populate_letters(self):
432
+ """Populate neon-style letters"""
433
+ neon_letters = {
434
+ 'A': [
435
+ " ░█████░ ",
436
+ " ██░░░░██ ",
437
+ " ████████ ",
438
+ " ██░░░░██ ",
439
+ " ██░░░░██ "
440
+ ],
441
+ 'B': [
442
+ " ████████ ",
443
+ " ██░░░░██ ",
444
+ " ████████ ",
445
+ " ██░░░░██ ",
446
+ " ████████ "
447
+ ],
448
+ 'C': [
449
+ " ░██████ ",
450
+ " ██░░░░ ",
451
+ " ██ ",
452
+ " ██░░░░ ",
453
+ " ░██████ "
454
+ ],
455
+ 'D': [
456
+ " ████████ ",
457
+ " ██░░░░██ ",
458
+ " ██░░░░██ ",
459
+ " ██░░░░██ ",
460
+ " ████████ "
461
+ ],
462
+ 'E': [
463
+ " ████████ ",
464
+ " ██░░░░ ",
465
+ " ████████ ",
466
+ " ██░░░░ ",
467
+ " ████████ "
468
+ ],
469
+ 'F': [
470
+ " ████████ ",
471
+ " ██░░░░ ",
472
+ " ████████ ",
473
+ " ██░░░░ ",
474
+ " ██░░░░ "
475
+ ],
476
+ 'G': [
477
+ " ░██████ ",
478
+ " ██░░░░ ",
479
+ " ██ ████ ",
480
+ " ██░░░░██ ",
481
+ " ░██████ "
482
+ ],
483
+ 'H': [
484
+ " ██░░░░██ ",
485
+ " ██░░░░██ ",
486
+ " ████████ ",
487
+ " ██░░░░██ ",
488
+ " ██░░░░██ "
489
+ ],
490
+ 'I': [
491
+ " ████████ ",
492
+ " ██░░ ",
493
+ " ██░░ ",
494
+ " ██░░ ",
495
+ " ████████ "
496
+ ],
497
+ 'J': [
498
+ " ██ ",
499
+ " ██ ",
500
+ " ██ ",
501
+ " ██░░░██ ",
502
+ " ░████ "
503
+ ],
504
+ 'K': [
505
+ " ██░░░░██ ",
506
+ " ██░░██ ",
507
+ " ████ ",
508
+ " ██░░██ ",
509
+ " ██░░░░██ "
510
+ ],
511
+ 'L': [
512
+ " ██░░░░ ",
513
+ " ██░░░░ ",
514
+ " ██░░░░ ",
515
+ " ██░░░░ ",
516
+ " ████████ "
517
+ ],
518
+ 'M': [
519
+ " ██░░░░██ ",
520
+ " ███░███ ",
521
+ " ██ █ ██ ",
522
+ " ██░░░░██ ",
523
+ " ██░░░░██ "
524
+ ],
525
+ 'N': [
526
+ " ██░░░░██ ",
527
+ " ███░░░██ ",
528
+ " ██ █░░██ ",
529
+ " ██░░███ ",
530
+ " ██░░░░██ "
531
+ ],
532
+ 'O': [
533
+ " ░██████ ",
534
+ " ██░░░░██ ",
535
+ " ██░░░░██ ",
536
+ " ██░░░░██ ",
537
+ " ░██████ "
538
+ ],
539
+ 'P': [
540
+ " ████████ ",
541
+ " ██░░░░██ ",
542
+ " ████████ ",
543
+ " ██░░░░ ",
544
+ " ██░░░░ "
545
+ ],
546
+ 'Q': [
547
+ " ░██████ ",
548
+ " ██░░░░██ ",
549
+ " ██░░░░██ ",
550
+ " ██░░██ ",
551
+ " ░██░██ "
552
+ ],
553
+ 'R': [
554
+ " ████████ ",
555
+ " ██░░░░██ ",
556
+ " ████████ ",
557
+ " ██░░██ ",
558
+ " ██░░░██ "
559
+ ],
560
+ 'S': [
561
+ " ░██████ ",
562
+ " ██░░░░ ",
563
+ " ░██████ ",
564
+ " ░██ ",
565
+ " ████████ "
566
+ ],
567
+ 'T': [
568
+ " ████████ ",
569
+ " ██░░ ",
570
+ " ██░░ ",
571
+ " ██░░ ",
572
+ " ██░░ "
573
+ ],
574
+ 'U': [
575
+ " ██░░░░██ ",
576
+ " ██░░░░██ ",
577
+ " ██░░░░██ ",
578
+ " ██░░░░██ ",
579
+ " ░██████ "
580
+ ],
581
+ 'V': [
582
+ " ██░░░░██ ",
583
+ " ██░░░░██ ",
584
+ " ██░░░░██ ",
585
+ " ██░░██ ",
586
+ " ░████ "
587
+ ],
588
+ 'W': [
589
+ " ██░░░░██ ",
590
+ " ██░░░░██ ",
591
+ " ██ █ ██ ",
592
+ " ███ ███ ",
593
+ " ██ ██ "
594
+ ],
595
+ 'X': [
596
+ " ██░░░░██ ",
597
+ " ██░░██ ",
598
+ " ████ ",
599
+ " ██░░██ ",
600
+ " ██░░░░██ "
601
+ ],
602
+ 'Y': [
603
+ " ██░░░░██ ",
604
+ " ██░░██ ",
605
+ " ████ ",
606
+ " ██░░ ",
607
+ " ██░░ "
608
+ ],
609
+ 'Z': [
610
+ " ████████ ",
611
+ " ██░ ",
612
+ " ██░ ",
613
+ " ██░ ",
614
+ " ████████ "
615
+ ]
616
+ }
617
+
618
+ self.letters.update(neon_letters)
619
+
620
+ class CyberFont(ZeroArtFont):
621
+ """Cyberpunk-style ASCII art font"""
622
+ def __init__(self):
623
+ super().__init__("cyber")
624
+ self.letters = {
625
+ ' ': [" ", " ", " ", " ", " "]
626
+ }
627
+ self._populate_letters()
628
+
629
+ def _populate_letters(self):
630
+ """Populate cyberpunk-style letters"""
631
+ cyber_letters = {
632
+ 'A': [
633
+ " ▓█▓▓▓▓ ",
634
+ " ▓▓ ▓▓ ",
635
+ " ▓▓▓▓▓▓▓ ",
636
+ " ▓▓ ▓▓ ",
637
+ " ▓▓ ▓▓ "
638
+ ],
639
+ 'B': [
640
+ " ▓▓▓▓▓▓▓ ",
641
+ " ▓▓ ▓▓ ",
642
+ " ▓▓▓▓▓▓▓ ",
643
+ " ▓▓ ▓▓ ",
644
+ " ▓▓▓▓▓▓▓ "
645
+ ],
646
+ 'C': [
647
+ " ▓▓▓▓▓▓▓ ",
648
+ " ▓▓ ",
649
+ " ▓▓ ",
650
+ " ▓▓ ",
651
+ " ▓▓▓▓▓▓▓ "
652
+ ],
653
+ 'D': [
654
+ " ▓▓▓▓▓▓▓ ",
655
+ " ▓▓ ▓▓ ",
656
+ " ▓▓ ▓▓ ",
657
+ " ▓▓ ▓▓ ",
658
+ " ▓▓▓▓▓▓▓ "
659
+ ],
660
+ 'E': [
661
+ " ▓▓▓▓▓▓▓ ",
662
+ " ▓▓ ",
663
+ " ▓▓▓▓▓▓▓ ",
664
+ " ▓▓ ",
665
+ " ▓▓▓▓▓▓▓ "
666
+ ],
667
+ 'F': [
668
+ " ▓▓▓▓▓▓▓ ",
669
+ " ▓▓ ",
670
+ " ▓▓▓▓▓▓▓ ",
671
+ " ▓▓ ",
672
+ " ▓▓ "
673
+ ],
674
+ 'G': [
675
+ " ▓▓▓▓▓▓▓ ",
676
+ " ▓▓ ",
677
+ " ▓▓ ▓▓▓ ",
678
+ " ▓▓ ▓▓ ",
679
+ " ▓▓▓▓▓▓▓ "
680
+ ],
681
+ 'H': [
682
+ " ▓▓ ▓▓ ",
683
+ " ▓▓ ▓▓ ",
684
+ " ▓▓▓▓▓▓▓ ",
685
+ " ▓▓ ▓▓ ",
686
+ " ▓▓ ▓▓ "
687
+ ],
688
+ 'I': [
689
+ " ▓▓▓▓▓▓▓ ",
690
+ " ▓▓ ",
691
+ " ▓▓ ",
692
+ " ▓▓ ",
693
+ " ▓▓▓▓▓▓▓ "
694
+ ],
695
+ 'J': [
696
+ " ▓▓ ",
697
+ " ▓▓ ",
698
+ " ▓▓ ",
699
+ " ▓▓ ▓▓ ",
700
+ " ▓▓▓▓ "
701
+ ],
702
+ 'K': [
703
+ " ▓▓ ▓▓ ",
704
+ " ▓▓ ▓▓ ",
705
+ " ▓▓▓▓ ",
706
+ " ▓▓ ▓▓ ",
707
+ " ▓▓ ▓▓ "
708
+ ],
709
+ 'L': [
710
+ " ▓▓ ",
711
+ " ▓▓ ",
712
+ " ▓▓ ",
713
+ " ▓▓ ",
714
+ " ▓▓▓▓▓▓▓ "
715
+ ],
716
+ 'M': [
717
+ " ▓▓ ▓▓ ",
718
+ " ▓▓ █ ▓▓ ",
719
+ " ▓▓ ▓ ▓▓ ",
720
+ " ▓▓ ▓▓ ",
721
+ " ▓▓ ▓▓ "
722
+ ],
723
+ 'N': [
724
+ " ▓▓ ▓▓ ",
725
+ " ▓▓ ▓▓ ",
726
+ " ▓▓ ▓ ▓▓ ",
727
+ " ▓▓▓ ▓▓ ",
728
+ " ▓▓ ▓▓ "
729
+ ],
730
+ 'O': [
731
+ " ▓▓▓▓ ",
732
+ " ▓▓ ▓▓ ",
733
+ " ▓▓ ▓▓ ",
734
+ " ▓▓ ▓▓ ",
735
+ " ▓▓▓▓ "
736
+ ],
737
+ 'P': [
738
+ " ▓▓▓▓▓▓▓ ",
739
+ " ▓▓ ▓▓ ",
740
+ " ▓▓▓▓▓▓▓ ",
741
+ " ▓▓ ",
742
+ " ▓▓ "
743
+ ],
744
+ 'Q': [
745
+ " ▓▓▓▓ ",
746
+ " ▓▓ ▓▓ ",
747
+ " ▓▓ ▓▓ ",
748
+ " ▓▓ ▓▓ ",
749
+ " ▓▓▓▓▓ "
750
+ ],
751
+ 'R': [
752
+ " ▓▓▓▓▓▓▓ ",
753
+ " ▓▓ ▓▓ ",
754
+ " ▓▓▓▓▓▓▓ ",
755
+ " ▓▓ ▓▓ ",
756
+ " ▓▓ ▓▓ "
757
+ ],
758
+ 'S': [
759
+ " ▓▓▓▓▓▓▓ ",
760
+ " ▓▓ ",
761
+ " ▓▓▓▓▓▓▓ ",
762
+ " ▓▓ ",
763
+ " ▓▓▓▓▓▓▓ "
764
+ ],
765
+ 'T': [
766
+ " ▓▓▓▓▓▓▓ ",
767
+ " ▓▓ ",
768
+ " ▓▓ ",
769
+ " ▓▓ ",
770
+ " ▓▓ "
771
+ ],
772
+ 'U': [
773
+ " ▓▓ ▓▓ ",
774
+ " ▓▓ ▓▓ ",
775
+ " ▓▓ ▓▓ ",
776
+ " ▓▓ ▓▓ ",
777
+ " ▓▓▓▓ "
778
+ ],
779
+ 'V': [
780
+ " ▓▓ ▓▓ ",
781
+ " ▓▓ ▓▓ ",
782
+ " ▓▓ ▓▓ ",
783
+ " ▓▓ ▓▓ ",
784
+ " ▓▓ "
785
+ ],
786
+ 'W': [
787
+ " ▓▓ ▓▓ ",
788
+ " ▓▓ ▓▓ ",
789
+ " ▓▓ █ ▓▓ ",
790
+ " ▓▓▓▓▓▓ ",
791
+ " ▓▓ ▓▓ "
792
+ ],
793
+ 'X': [
794
+ " ▓▓ ▓▓ ",
795
+ " ▓▓ ▓▓ ",
796
+ " ▓▓ ",
797
+ " ▓▓ ▓▓ ",
798
+ " ▓▓ ▓▓ "
799
+ ],
800
+ 'Y': [
801
+ " ▓▓ ▓▓ ",
802
+ " ▓▓ ▓▓ ",
803
+ " ▓▓ ",
804
+ " ▓▓ ",
805
+ " ▓▓ "
806
+ ],
807
+ 'Z': [
808
+ " ▓▓▓▓▓▓▓ ",
809
+ " ▓▓ ",
810
+ " ▓▓ ",
811
+ " ▓▓ ",
812
+ " ▓▓▓▓▓▓▓ "
813
+ ]
814
+ }
815
+
816
+ self.letters.update(cyber_letters)