webscout 8.2.6__py3-none-any.whl → 8.2.8__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 (150) hide show
  1. webscout/AIauto.py +1 -1
  2. webscout/AIutel.py +298 -239
  3. webscout/Extra/Act.md +309 -0
  4. webscout/Extra/GitToolkit/gitapi/README.md +110 -0
  5. webscout/Extra/YTToolkit/README.md +375 -0
  6. webscout/Extra/YTToolkit/ytapi/README.md +44 -0
  7. webscout/Extra/YTToolkit/ytapi/extras.py +92 -19
  8. webscout/Extra/autocoder/autocoder.py +309 -114
  9. webscout/Extra/autocoder/autocoder_utiles.py +15 -15
  10. webscout/Extra/gguf.md +430 -0
  11. webscout/Extra/tempmail/README.md +488 -0
  12. webscout/Extra/weather.md +281 -0
  13. webscout/Litlogger/Readme.md +175 -0
  14. webscout/Provider/AISEARCH/DeepFind.py +41 -37
  15. webscout/Provider/AISEARCH/README.md +279 -0
  16. webscout/Provider/AISEARCH/__init__.py +0 -1
  17. webscout/Provider/AISEARCH/genspark_search.py +228 -86
  18. webscout/Provider/AISEARCH/hika_search.py +11 -11
  19. webscout/Provider/AISEARCH/scira_search.py +324 -322
  20. webscout/Provider/AllenAI.py +7 -14
  21. webscout/Provider/Blackboxai.py +518 -74
  22. webscout/Provider/Cloudflare.py +0 -1
  23. webscout/Provider/Deepinfra.py +23 -21
  24. webscout/Provider/Flowith.py +217 -0
  25. webscout/Provider/FreeGemini.py +250 -0
  26. webscout/Provider/GizAI.py +15 -5
  27. webscout/Provider/Glider.py +11 -8
  28. webscout/Provider/HeckAI.py +80 -52
  29. webscout/Provider/Koboldai.py +7 -4
  30. webscout/Provider/LambdaChat.py +2 -2
  31. webscout/Provider/Marcus.py +10 -18
  32. webscout/Provider/OPENAI/BLACKBOXAI.py +735 -0
  33. webscout/Provider/OPENAI/Cloudflare.py +378 -0
  34. webscout/Provider/OPENAI/FreeGemini.py +282 -0
  35. webscout/Provider/OPENAI/NEMOTRON.py +244 -0
  36. webscout/Provider/OPENAI/README.md +1253 -0
  37. webscout/Provider/OPENAI/__init__.py +8 -0
  38. webscout/Provider/OPENAI/ai4chat.py +293 -286
  39. webscout/Provider/OPENAI/api.py +810 -0
  40. webscout/Provider/OPENAI/base.py +217 -14
  41. webscout/Provider/OPENAI/c4ai.py +373 -367
  42. webscout/Provider/OPENAI/chatgpt.py +7 -0
  43. webscout/Provider/OPENAI/chatgptclone.py +7 -0
  44. webscout/Provider/OPENAI/chatsandbox.py +172 -0
  45. webscout/Provider/OPENAI/deepinfra.py +30 -20
  46. webscout/Provider/OPENAI/e2b.py +6 -0
  47. webscout/Provider/OPENAI/exaai.py +7 -0
  48. webscout/Provider/OPENAI/exachat.py +6 -0
  49. webscout/Provider/OPENAI/flowith.py +162 -0
  50. webscout/Provider/OPENAI/freeaichat.py +359 -352
  51. webscout/Provider/OPENAI/glider.py +323 -316
  52. webscout/Provider/OPENAI/groq.py +361 -354
  53. webscout/Provider/OPENAI/heckai.py +30 -64
  54. webscout/Provider/OPENAI/llmchatco.py +8 -0
  55. webscout/Provider/OPENAI/mcpcore.py +7 -0
  56. webscout/Provider/OPENAI/multichat.py +8 -0
  57. webscout/Provider/OPENAI/netwrck.py +356 -350
  58. webscout/Provider/OPENAI/opkfc.py +8 -0
  59. webscout/Provider/OPENAI/scirachat.py +471 -462
  60. webscout/Provider/OPENAI/sonus.py +9 -0
  61. webscout/Provider/OPENAI/standardinput.py +9 -1
  62. webscout/Provider/OPENAI/textpollinations.py +339 -329
  63. webscout/Provider/OPENAI/toolbaz.py +7 -0
  64. webscout/Provider/OPENAI/typefully.py +355 -0
  65. webscout/Provider/OPENAI/typegpt.py +358 -346
  66. webscout/Provider/OPENAI/uncovrAI.py +7 -0
  67. webscout/Provider/OPENAI/utils.py +103 -7
  68. webscout/Provider/OPENAI/venice.py +12 -0
  69. webscout/Provider/OPENAI/wisecat.py +19 -19
  70. webscout/Provider/OPENAI/writecream.py +7 -0
  71. webscout/Provider/OPENAI/x0gpt.py +7 -0
  72. webscout/Provider/OPENAI/yep.py +50 -21
  73. webscout/Provider/OpenGPT.py +1 -1
  74. webscout/Provider/TTI/AiForce/README.md +159 -0
  75. webscout/Provider/TTI/FreeAIPlayground/README.md +99 -0
  76. webscout/Provider/TTI/ImgSys/README.md +174 -0
  77. webscout/Provider/TTI/MagicStudio/README.md +101 -0
  78. webscout/Provider/TTI/Nexra/README.md +155 -0
  79. webscout/Provider/TTI/PollinationsAI/README.md +146 -0
  80. webscout/Provider/TTI/README.md +128 -0
  81. webscout/Provider/TTI/aiarta/README.md +134 -0
  82. webscout/Provider/TTI/artbit/README.md +100 -0
  83. webscout/Provider/TTI/fastflux/README.md +129 -0
  84. webscout/Provider/TTI/huggingface/README.md +114 -0
  85. webscout/Provider/TTI/piclumen/README.md +161 -0
  86. webscout/Provider/TTI/pixelmuse/README.md +79 -0
  87. webscout/Provider/TTI/talkai/README.md +139 -0
  88. webscout/Provider/TTS/README.md +192 -0
  89. webscout/Provider/TTS/__init__.py +2 -1
  90. webscout/Provider/TTS/speechma.py +500 -100
  91. webscout/Provider/TTS/sthir.py +94 -0
  92. webscout/Provider/TeachAnything.py +3 -7
  93. webscout/Provider/TextPollinationsAI.py +4 -2
  94. webscout/Provider/{aimathgpt.py → UNFINISHED/ChatHub.py} +88 -68
  95. webscout/Provider/UNFINISHED/liner_api_request.py +263 -0
  96. webscout/Provider/UNFINISHED/oivscode.py +351 -0
  97. webscout/Provider/UNFINISHED/test_lmarena.py +119 -0
  98. webscout/Provider/Writecream.py +11 -2
  99. webscout/Provider/__init__.py +8 -14
  100. webscout/Provider/ai4chat.py +4 -58
  101. webscout/Provider/asksteve.py +17 -9
  102. webscout/Provider/cerebras.py +3 -1
  103. webscout/Provider/koala.py +170 -268
  104. webscout/Provider/llmchat.py +3 -0
  105. webscout/Provider/lmarena.py +198 -0
  106. webscout/Provider/meta.py +7 -4
  107. webscout/Provider/samurai.py +223 -0
  108. webscout/Provider/scira_chat.py +4 -2
  109. webscout/Provider/typefully.py +23 -151
  110. webscout/__init__.py +4 -2
  111. webscout/cli.py +3 -28
  112. webscout/conversation.py +35 -35
  113. webscout/litagent/Readme.md +276 -0
  114. webscout/scout/README.md +402 -0
  115. webscout/swiftcli/Readme.md +323 -0
  116. webscout/version.py +1 -1
  117. webscout/webscout_search.py +2 -182
  118. webscout/webscout_search_async.py +1 -179
  119. webscout/zeroart/README.md +89 -0
  120. webscout/zeroart/__init__.py +134 -54
  121. webscout/zeroart/base.py +19 -13
  122. webscout/zeroart/effects.py +101 -99
  123. webscout/zeroart/fonts.py +1239 -816
  124. {webscout-8.2.6.dist-info → webscout-8.2.8.dist-info}/METADATA +116 -74
  125. {webscout-8.2.6.dist-info → webscout-8.2.8.dist-info}/RECORD +130 -103
  126. {webscout-8.2.6.dist-info → webscout-8.2.8.dist-info}/WHEEL +1 -1
  127. webscout-8.2.8.dist-info/entry_points.txt +3 -0
  128. webscout-8.2.8.dist-info/top_level.txt +1 -0
  129. webscout/Provider/AISEARCH/ISou.py +0 -256
  130. webscout/Provider/ElectronHub.py +0 -773
  131. webscout/Provider/Free2GPT.py +0 -241
  132. webscout/Provider/GPTWeb.py +0 -249
  133. webscout/Provider/bagoodex.py +0 -145
  134. webscout/Provider/geminiprorealtime.py +0 -160
  135. webscout/scout/core.py +0 -881
  136. webscout-8.2.6.dist-info/entry_points.txt +0 -3
  137. webscout-8.2.6.dist-info/top_level.txt +0 -2
  138. webstoken/__init__.py +0 -30
  139. webstoken/classifier.py +0 -189
  140. webstoken/keywords.py +0 -216
  141. webstoken/language.py +0 -128
  142. webstoken/ner.py +0 -164
  143. webstoken/normalizer.py +0 -35
  144. webstoken/processor.py +0 -77
  145. webstoken/sentiment.py +0 -206
  146. webstoken/stemmer.py +0 -73
  147. webstoken/tagger.py +0 -60
  148. webstoken/tokenizer.py +0 -158
  149. /webscout/Provider/{Youchat.py → UNFINISHED/Youchat.py} +0 -0
  150. {webscout-8.2.6.dist-info → webscout-8.2.8.dist-info}/licenses/LICENSE.md +0 -0
webscout/zeroart/fonts.py CHANGED
@@ -1,816 +1,1239 @@
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 typing import Dict, List
6
+ from .base import ZeroArtFont
7
+
8
+ class BlockFont(ZeroArtFont):
9
+ """Block-style ASCII art font"""
10
+ def __init__(self) -> None:
11
+ super().__init__("block")
12
+ self.letters: Dict[str, List[str]] = {
13
+ ' ': [" ", " ", " ", " ", " "]
14
+ }
15
+ self._populate_letters()
16
+
17
+ def _populate_letters(self) -> None:
18
+ """Populate the font with predefined letters"""
19
+ block_letters = {
20
+ 'A': [
21
+ " █████ ",
22
+ " ██ ██ ",
23
+ " ███████ ",
24
+ " ██ ██ ",
25
+ " ██ ██ "
26
+ ],
27
+ 'B': [
28
+ " ██████ ",
29
+ " ██ ██ ",
30
+ " ██████ ",
31
+ " ██ ██ ",
32
+ " ██████ "
33
+ ],
34
+ 'C': [
35
+ " ██████ ",
36
+ " ██ ",
37
+ " ██ ",
38
+ " ██ ",
39
+ " ██████ "
40
+ ],
41
+ 'D': [
42
+ " ██████ ",
43
+ " ██ ██ ",
44
+ " ██ ██ ",
45
+ " ██ ██ ",
46
+ " ██████ "
47
+ ],
48
+ 'E': [
49
+ " ███████ ",
50
+ " ██ ",
51
+ " ██████ ",
52
+ " ██ ",
53
+ " ███████ "
54
+ ],
55
+ 'F': [
56
+ " ███████ ",
57
+ " ██ ",
58
+ " ██████ ",
59
+ " ██ ",
60
+ " ██ "
61
+ ],
62
+ 'G': [
63
+ " ██████ ",
64
+ " ██ ",
65
+ " ██ ███ ",
66
+ " ██ ██ ",
67
+ " ██████ "
68
+ ],
69
+ 'H': [
70
+ " ██ ██ ",
71
+ " ██ ██ ",
72
+ " ███████ ",
73
+ " ██ ██ ",
74
+ " ██ ██ "
75
+ ],
76
+ 'I': [
77
+ " ███████ ",
78
+ " ██ ",
79
+ " ██ ",
80
+ " ██ ",
81
+ " ███████ "
82
+ ],
83
+ 'J': [
84
+ " ██ ",
85
+ " ██ ",
86
+ " ██ ",
87
+ " ██ ██ ",
88
+ " █████ "
89
+ ],
90
+ 'K': [
91
+ " ██ ██ ",
92
+ " ██ ██ ",
93
+ " ████ ",
94
+ " ██ ██ ",
95
+ " ██ ██ "
96
+ ],
97
+ 'L': [
98
+ " ██ ",
99
+ " ██ ",
100
+ " ██ ",
101
+ " ██ ",
102
+ " ███████ "
103
+ ],
104
+ 'M': [
105
+ " ██ ██ ",
106
+ " ███ ███ ",
107
+ " ████ ",
108
+ " ██ ██ ",
109
+ " ██ ██ "
110
+ ],
111
+ 'N': [
112
+ " ██ ██ ",
113
+ " ███ ██ ",
114
+ " ██ █ ██ ",
115
+ " ██ ███ ",
116
+ " ██ ██ "
117
+ ],
118
+ 'O': [
119
+ " █████ ",
120
+ " ██ ██ ",
121
+ " ██ ██ ",
122
+ " ██ ██ ",
123
+ " █████ "
124
+ ],
125
+ 'P': [
126
+ " ██████ ",
127
+ " ██ ██ ",
128
+ " ██████ ",
129
+ " ██ ",
130
+ " ██ "
131
+ ],
132
+ 'Q': [
133
+ " █████ ",
134
+ " ██ ██ ",
135
+ " ██ ██ ",
136
+ " ██ ██ ",
137
+ " ██████ "
138
+ ],
139
+ 'R': [
140
+ " ██████ ",
141
+ " ██ ██ ",
142
+ " ██████ ",
143
+ " ██ ██ ",
144
+ " ██ ██ "
145
+ ],
146
+ 'S': [
147
+ " ██████ ",
148
+ " ██ ",
149
+ " ██████ ",
150
+ " ██ ",
151
+ " ██████ "
152
+ ],
153
+ 'T': [
154
+ " ███████ ",
155
+ " ██ ",
156
+ " ██ ",
157
+ " ██ ",
158
+ " ██ "
159
+ ],
160
+ 'U': [
161
+ " ██ ██ ",
162
+ " ██ ██ ",
163
+ " ██ ██ ",
164
+ " ██ ██ ",
165
+ " █████ "
166
+ ],
167
+ 'V': [
168
+ " ██ ██ ",
169
+ " ██ ██ ",
170
+ " ██ ██ ",
171
+ " ██ ██ ",
172
+ " ███ "
173
+ ],
174
+ 'W': [
175
+ " ██ ██ ",
176
+ " ██ ██ ",
177
+ " ██ ██ ",
178
+ " ███ ███ ",
179
+ " ██ ██ "
180
+ ],
181
+ 'X': [
182
+ " ██ ██ ",
183
+ " ██ ██ ",
184
+ " ███ ",
185
+ " ██ ██ ",
186
+ " ██ ██ "
187
+ ],
188
+ 'Y': [
189
+ " ██ ██ ",
190
+ " ██ ██ ",
191
+ " ███ ",
192
+ " ███ ",
193
+ " ███ "
194
+ ],
195
+ 'Z': [
196
+ " ███████ ",
197
+ " ██ ",
198
+ " ██ ",
199
+ " ██ ",
200
+ " ███████ "
201
+ ]
202
+ }
203
+
204
+ self.letters.update(block_letters)
205
+
206
+ class SlantFont(ZeroArtFont):
207
+ """Slanted ASCII art font"""
208
+ def __init__(self) -> None:
209
+ super().__init__("slant")
210
+ self.letters: Dict[str, List[str]] = {
211
+ ' ': [" ", " ", " ", " ", " "]
212
+ }
213
+ self._populate_letters()
214
+
215
+ def _populate_letters(self) -> None:
216
+ """Populate the font with predefined letters"""
217
+ slant_letters = {
218
+ 'A': [
219
+ " /\\ ",
220
+ " / \\ ",
221
+ " / /\\ \\ ",
222
+ " / ____ \\ ",
223
+ "/_/ \\_\\"
224
+ ],
225
+ 'B': [
226
+ " ____ ",
227
+ "| _ \\ ",
228
+ "| |_) |",
229
+ "| _ < ",
230
+ "| |_) |",
231
+ "|____/ "
232
+ ],
233
+ 'C': [
234
+ " _____ ",
235
+ " / ____| ",
236
+ "| | ",
237
+ "| | ",
238
+ " \\_____| "
239
+ ],
240
+ 'D': [
241
+ " _____ ",
242
+ "| __ \\ ",
243
+ "| | | | ",
244
+ "| | | | ",
245
+ "| |__| | ",
246
+ "|_____/ "
247
+ ],
248
+ 'E': [
249
+ " ______ ",
250
+ "| ____| ",
251
+ "| |__ ",
252
+ "| __| ",
253
+ "| |____ ",
254
+ "|______| "
255
+ ],
256
+ 'F': [
257
+ " ______ ",
258
+ "| ____| ",
259
+ "| |__ ",
260
+ "| __| ",
261
+ "| | ",
262
+ "|_| "
263
+ ],
264
+ 'G': [
265
+ " _____ ",
266
+ " / ____| ",
267
+ "| | __ ",
268
+ "| | |_ | ",
269
+ "| |__| | ",
270
+ " \\_____| "
271
+ ],
272
+ 'H': [
273
+ " _ _ ",
274
+ "| | | | ",
275
+ "| |__| | ",
276
+ "| __ | ",
277
+ "|_| |_| "
278
+ ],
279
+ 'I': [
280
+ " _____ ",
281
+ "|_ _|",
282
+ " | | ",
283
+ " | | ",
284
+ " _| |_ ",
285
+ "|_____|"
286
+ ],
287
+ 'J': [
288
+ " ___ ",
289
+ " |_ |",
290
+ " | |",
291
+ " _ | |",
292
+ "| |__| |",
293
+ " \\____/ "
294
+ ],
295
+ 'K': [
296
+ " _ __ ",
297
+ "| |/ / ",
298
+ "| ' / ",
299
+ "| < ",
300
+ "| . \\ ",
301
+ "|_|\\_\\ "
302
+ ],
303
+ 'L': [
304
+ " _ ",
305
+ "| | ",
306
+ "| | ",
307
+ "| | ",
308
+ "| |____ ",
309
+ "|______|"
310
+ ],
311
+ 'M': [
312
+ " __ __ ",
313
+ "| \\/ |",
314
+ "| |\\/| |",
315
+ "| | | |",
316
+ "|_| |_|",
317
+ " "
318
+ ],
319
+ 'N': [
320
+ " _ _ ",
321
+ "| \\ | |",
322
+ "| \\| |",
323
+ "| . ` |",
324
+ "| |\\ |",
325
+ "|_| \\_|"
326
+ ],
327
+ 'O': [
328
+ " _____ ",
329
+ " / ____| ",
330
+ "| | __ ",
331
+ "| | |_ | ",
332
+ "| |__| | ",
333
+ " \\_____| "
334
+ ],
335
+ 'P': [
336
+ " _____ ",
337
+ "| __ \\ ",
338
+ "| |__) | ",
339
+ "| ___/ ",
340
+ "| | ",
341
+ "|_| "
342
+ ],
343
+ 'Q': [
344
+ " _____ ",
345
+ " / ____| ",
346
+ "| | __ ",
347
+ "| | |_ | ",
348
+ "| |__| | ",
349
+ " \\____/\\ "
350
+ ],
351
+ 'R': [
352
+ " _____ ",
353
+ "| __ \\ ",
354
+ "| |__) | ",
355
+ "| _ / ",
356
+ "| | \\ \\ ",
357
+ "|_| \\_\\ "
358
+ ],
359
+ 'S': [
360
+ " _____ ",
361
+ " / ____| ",
362
+ "| (___ ",
363
+ " \\___ \\ ",
364
+ " ____) | ",
365
+ "|_____/ "
366
+ ],
367
+ 'T': [
368
+ " ______ ",
369
+ "|_ _| ",
370
+ " | | ",
371
+ " | | ",
372
+ " | | ",
373
+ " |_| "
374
+ ],
375
+ 'U': [
376
+ " _ _ ",
377
+ "| | | | ",
378
+ "| | | | ",
379
+ "| | | | ",
380
+ "| |__| | ",
381
+ " \\____/ "
382
+ ],
383
+ 'V': [
384
+ " __ __ ",
385
+ " \\ \\ / / ",
386
+ " \\ \\_/ / ",
387
+ " \\ / ",
388
+ " \\_/ "
389
+ ],
390
+ 'W': [
391
+ " __ __ ",
392
+ " \\ \\ / / ",
393
+ " \\ \\/ / ",
394
+ " \\ / ",
395
+ " \\/ "
396
+ ],
397
+ 'X': [
398
+ " __ __ ",
399
+ " \\ \\/ / ",
400
+ " \\ / ",
401
+ " / \\ ",
402
+ " /_/\\_\\ "
403
+ ],
404
+ 'Y': [
405
+ " _ _ ",
406
+ "| | | |",
407
+ "| | | |",
408
+ "| | | |",
409
+ "|_| |_|"
410
+ ],
411
+ 'Z': [
412
+ " ______ ",
413
+ "|__ / | ",
414
+ " / /| | ",
415
+ " / /_| | ",
416
+ "/____|_| "
417
+ ]
418
+ }
419
+
420
+ self.letters.update(slant_letters)
421
+
422
+ # Add more custom fonts here
423
+ class NeonFont(ZeroArtFont):
424
+ """Neon-style ASCII art font"""
425
+ def __init__(self) -> None:
426
+ super().__init__("neon")
427
+ self.letters: Dict[str, List[str]] = {
428
+ ' ': [" ", " ", " ", " ", " "]
429
+ }
430
+ self._populate_letters()
431
+
432
+ def _populate_letters(self) -> None:
433
+ """Populate neon-style letters"""
434
+ neon_letters = {
435
+ 'A': [
436
+ " ░█████░ ",
437
+ " ██░░░░██ ",
438
+ " ████████ ",
439
+ " ██░░░░██ ",
440
+ " ██░░░░██ "
441
+ ],
442
+ 'B': [
443
+ " ████████ ",
444
+ " ██░░░░██ ",
445
+ " ████████ ",
446
+ " ██░░░░██ ",
447
+ " ████████ "
448
+ ],
449
+ 'C': [
450
+ " ░██████ ",
451
+ " ██░░░░ ",
452
+ " ██ ",
453
+ " ██░░░░ ",
454
+ " ░██████ "
455
+ ],
456
+ 'D': [
457
+ " ████████ ",
458
+ " ██░░░░██ ",
459
+ " ██░░░░██ ",
460
+ " ██░░░░██ ",
461
+ " ████████ "
462
+ ],
463
+ 'E': [
464
+ " ████████ ",
465
+ " ██░░░░ ",
466
+ " ████████ ",
467
+ " ██░░░░ ",
468
+ " ████████ "
469
+ ],
470
+ 'F': [
471
+ " ████████ ",
472
+ " ██░░░░ ",
473
+ " ████████ ",
474
+ " ██░░░░ ",
475
+ " ██░░░░ "
476
+ ],
477
+ 'G': [
478
+ " ░██████ ",
479
+ " ██░░░░ ",
480
+ " ██ ████ ",
481
+ " ██░░░░██ ",
482
+ " ░██████ "
483
+ ],
484
+ 'H': [
485
+ " ██░░░░██ ",
486
+ " ██░░░░██ ",
487
+ " ████████ ",
488
+ " ██░░░░██ ",
489
+ " ██░░░░██ "
490
+ ],
491
+ 'I': [
492
+ " ████████ ",
493
+ " ██░░ ",
494
+ " ██░░ ",
495
+ " ██░░ ",
496
+ " ████████ "
497
+ ],
498
+ 'J': [
499
+ " ██░ ",
500
+ " ██░ ",
501
+ " ██░ ",
502
+ " ██░░░░██ ",
503
+ " ██████ "
504
+ ],
505
+ 'K': [
506
+ " ██░░░░██ ",
507
+ " ██░░██░ ",
508
+ " ████░░ ",
509
+ " ██░░██░ ",
510
+ " ██░░░░██ "
511
+ ],
512
+ 'L': [
513
+ " ██░░░░ ",
514
+ " ██░░░░ ",
515
+ " ██░░░░ ",
516
+ " ██░░░░ ",
517
+ " ████████ "
518
+ ],
519
+ 'M': [
520
+ " ██░░░░██ ",
521
+ " ███░░███ ",
522
+ " ██░█░███ ",
523
+ " ██░░░░██ ",
524
+ " ██░░░░██ "
525
+ ],
526
+ 'N': [
527
+ " ██░░░░██ ",
528
+ " ███░░░██ ",
529
+ " ██░█░░██ ",
530
+ " ██░░█░██ ",
531
+ " ██░░░███ "
532
+ ],
533
+ 'O': [
534
+ " ██████ ",
535
+ " ██░░░░██ ",
536
+ " ██░░░░██ ",
537
+ " ██░░░░██ ",
538
+ " ██████ "
539
+ ],
540
+ 'P': [
541
+ " ████████ ",
542
+ " ██░░░░██ ",
543
+ " ████████ ",
544
+ " ██░░░░ ",
545
+ " ██░░░░ "
546
+ ],
547
+ 'Q': [
548
+ " ██████ ",
549
+ " ██░░░░██ ",
550
+ " ██░░░░██ ",
551
+ " ██░░██░ ",
552
+ " ██████░ "
553
+ ],
554
+ 'R': [
555
+ " ████████ ",
556
+ " ██░░░░██ ",
557
+ " ████████ ",
558
+ " ██░░██░ ",
559
+ " ██░░░░██ "
560
+ ],
561
+ 'S': [
562
+ " ██████░ ",
563
+ " ██░░░░ ",
564
+ " ██████ ",
565
+ " ░░██ ",
566
+ " ████████ "
567
+ ],
568
+ 'T': [
569
+ " ████████ ",
570
+ " ██░░ ",
571
+ " ██░░ ",
572
+ " ██░░ ",
573
+ " ██░░ "
574
+ ],
575
+ 'U': [
576
+ " ██░░░░██ ",
577
+ " ██░░░░██ ",
578
+ " ██░░░░██ ",
579
+ " ██░░░░██ ",
580
+ " ██████ "
581
+ ],
582
+ 'V': [
583
+ " ██░░░░██ ",
584
+ " ██░░░░██ ",
585
+ " ██░░░░██ ",
586
+ " ██░░██ ",
587
+ " ████ "
588
+ ],
589
+ 'W': [
590
+ " ██░░░░██ ",
591
+ " ██░░░░██ ",
592
+ " ██░█░░██ ",
593
+ " ███░███░ ",
594
+ " ██░░██ "
595
+ ],
596
+ 'X': [
597
+ " ██░░░░██ ",
598
+ " ██░░██ ",
599
+ " ████ ",
600
+ " ██░░██ ",
601
+ " ██░░░░██ "
602
+ ],
603
+ 'Y': [
604
+ " ██░░░░██ ",
605
+ " ██░░██ ",
606
+ " ████ ",
607
+ " ██░░ ",
608
+ " ██░░ "
609
+ ],
610
+ 'Z': [
611
+ " ████████ ",
612
+ " ██░ ",
613
+ " ██░ ",
614
+ " ██░ ",
615
+ " ████████ "
616
+ ]
617
+ }
618
+
619
+ self.letters.update(neon_letters)
620
+
621
+ class CyberFont(ZeroArtFont):
622
+ """Cyberpunk-style ASCII art font"""
623
+ def __init__(self) -> None:
624
+ super().__init__("cyber")
625
+ self.letters: Dict[str, List[str]] = {
626
+ ' ': [" ", " ", " ", " ", " "]
627
+ }
628
+ self._populate_letters()
629
+
630
+ def _populate_letters(self) -> None:
631
+ """Populate cyberpunk-style letters"""
632
+ cyber_letters = {
633
+ 'A': [
634
+ " ▓█▓▓▓▓ ",
635
+ " ▓▓ ▓▓ ",
636
+ " ▓▓▓▓▓▓▓ ",
637
+ " ▓▓ ▓▓ ",
638
+ " ▓▓ ▓▓ "
639
+ ],
640
+ 'B': [
641
+ " ▓▓▓▓▓▓▓ ",
642
+ " ▓▓ ▓▓ ",
643
+ " ▓▓▓▓▓▓▓ ",
644
+ " ▓▓ ▓▓ ",
645
+ " ▓▓▓▓▓▓▓ "
646
+ ],
647
+ 'C': [
648
+ " ▓▓▓▓▓▓▓ ",
649
+ " ▓▓ ",
650
+ " ▓▓ ",
651
+ " ▓▓ ",
652
+ " ▓▓▓▓▓▓▓ "
653
+ ],
654
+ 'D': [
655
+ " ▓▓▓▓▓▓ ",
656
+ " ▓▓ ▓▓ ",
657
+ " ▓▓ ▓▓ ",
658
+ " ▓▓ ▓▓ ",
659
+ " ▓▓▓▓▓▓ "
660
+ ],
661
+ 'E': [
662
+ " ▓▓▓▓▓▓▓ ",
663
+ " ▓▓ ",
664
+ " ▓▓▓▓▓▓ ",
665
+ " ▓▓ ",
666
+ " ▓▓▓▓▓▓▓ "
667
+ ],
668
+ 'F': [
669
+ " ▓▓▓▓▓▓▓ ",
670
+ " ▓▓ ",
671
+ " ▓▓▓▓▓▓ ",
672
+ " ▓▓ ",
673
+ " ▓▓ "
674
+ ],
675
+ 'G': [
676
+ " ▓▓▓▓▓▓▓ ",
677
+ " ▓▓ ",
678
+ " ▓▓ ▓▓▓ ",
679
+ " ▓▓ ▓▓ ",
680
+ " ▓▓▓▓▓▓▓ "
681
+ ],
682
+ 'H': [
683
+ " ▓▓ ▓▓ ",
684
+ " ▓▓ ▓▓ ",
685
+ " ▓▓▓▓▓▓▓ ",
686
+ " ▓▓ ▓▓ ",
687
+ " ▓▓ ▓▓ "
688
+ ],
689
+ 'I': [
690
+ " ▓▓▓▓▓▓▓ ",
691
+ " ▓▓ ",
692
+ " ▓▓ ",
693
+ " ▓▓ ",
694
+ " ▓▓▓▓▓▓▓ "
695
+ ],
696
+ 'J': [
697
+ " ▓▓ ",
698
+ " ▓▓ ",
699
+ " ▓▓ ",
700
+ " ▓▓ ▓▓ ",
701
+ " ▓▓▓▓▓ "
702
+ ],
703
+ 'K': [
704
+ " ▓▓ ▓▓ ",
705
+ " ▓▓ ▓▓ ",
706
+ " ▓▓▓▓▓ ",
707
+ " ▓▓ ▓▓ ",
708
+ " ▓▓ ▓▓ "
709
+ ],
710
+ 'L': [
711
+ " ▓▓ ",
712
+ " ▓▓ ",
713
+ " ▓▓ ",
714
+ " ▓▓ ",
715
+ " ▓▓▓▓▓▓▓ "
716
+ ],
717
+ 'M': [
718
+ " ▓▓ ▓▓ ",
719
+ " ▓▓▓ ▓▓▓ ",
720
+ " ▓▓▓▓▓▓▓ ",
721
+ " ▓▓▓▓ ",
722
+ " ▓▓ ▓▓ "
723
+ ],
724
+ 'N': [
725
+ " ▓▓ ▓▓ ",
726
+ " ▓▓▓ ▓▓ ",
727
+ " ▓▓ ▓▓ ",
728
+ " ▓▓ ▓▓▓ ",
729
+ " ▓▓ ▓▓ "
730
+ ],
731
+ 'O': [
732
+ " ▓▓▓▓▓▓▓ ",
733
+ " ▓▓ ▓▓ ",
734
+ " ▓▓ ▓▓ ",
735
+ " ▓▓ ▓▓ ",
736
+ " ▓▓▓▓▓▓▓ "
737
+ ],
738
+ 'P': [
739
+ " ▓▓▓▓▓▓▓ ",
740
+ " ▓▓ ▓▓ ",
741
+ " ▓▓▓▓▓▓▓ ",
742
+ " ▓▓ ",
743
+ " ▓▓ "
744
+ ],
745
+ 'Q': [
746
+ " ▓▓▓▓▓▓ ",
747
+ " ▓▓ ▓▓ ",
748
+ " ▓▓ ▓▓ ",
749
+ " ▓▓ ▓▓▓ ",
750
+ " ▓▓▓▓▓ ▓ "
751
+ ],
752
+ 'R': [
753
+ " ▓▓▓▓▓▓ ",
754
+ " ▓▓ ▓▓ ",
755
+ " ▓▓▓▓▓▓ ",
756
+ " ▓▓ ▓▓ ",
757
+ " ▓▓ ▓▓ "
758
+ ],
759
+ 'S': [
760
+ " ▓▓▓▓▓▓▓ ",
761
+ " ▓▓ ",
762
+ " ▓▓▓▓▓▓▓ ",
763
+ " ▓▓ ",
764
+ " ▓▓▓▓▓▓▓ "
765
+ ],
766
+ 'T': [
767
+ " ▓▓▓▓▓▓▓ ",
768
+ " ▓▓ ",
769
+ " ▓▓ ",
770
+ " ▓▓ ",
771
+ " ▓▓ "
772
+ ],
773
+ 'U': [
774
+ " ▓▓ ▓▓ ",
775
+ " ▓▓ ▓▓ ",
776
+ " ▓▓ ▓▓ ",
777
+ " ▓▓ ▓▓ ",
778
+ " ▓▓▓▓▓▓▓ "
779
+ ],
780
+ 'V': [
781
+ " ▓▓ ▓▓ ",
782
+ " ▓▓ ▓▓ ",
783
+ " ▓▓ ▓▓ ",
784
+ " ▓▓ ▓▓ ",
785
+ " ▓▓▓ "
786
+ ],
787
+ 'W': [
788
+ " ▓▓ ▓▓ ",
789
+ " ▓▓ ▓▓ ",
790
+ " ▓▓ ▓ ▓▓ ",
791
+ " ▓▓▓ ▓▓▓ ",
792
+ " ▓▓ ▓▓ "
793
+ ],
794
+ 'X': [
795
+ " ▓▓ ▓▓ ",
796
+ " ▓▓ ▓▓ ",
797
+ " ▓▓▓ ",
798
+ " ▓▓ ▓▓ ",
799
+ " ▓▓ ▓▓ "
800
+ ],
801
+ 'Y': [
802
+ " ▓▓ ▓▓ ",
803
+ " ▓▓ ▓▓ ",
804
+ " ▓▓ ",
805
+ " ▓▓ ",
806
+ " ▓▓ "
807
+ ],
808
+ 'Z': [
809
+ " ▓▓▓▓▓▓▓ ",
810
+ " ▓▓ ",
811
+ " ▓▓ ",
812
+ " ▓▓ ",
813
+ " ▓▓▓▓▓▓▓ "
814
+ ]
815
+ }
816
+
817
+ self.letters.update(cyber_letters)
818
+
819
+ class DottedFont(ZeroArtFont):
820
+ """Dotted-style ASCII art font"""
821
+ def __init__(self) -> None:
822
+ super().__init__("dotted")
823
+ self.letters: Dict[str, List[str]] = {
824
+ ' ': [" ", " ", " ", " ", " "]
825
+ }
826
+ self._populate_letters()
827
+
828
+ def _populate_letters(self) -> None:
829
+ """Populate dotted-style letters"""
830
+ dotted_letters = {
831
+ 'A': [
832
+ " ........ ",
833
+ " :: :: ",
834
+ " :::::::: ",
835
+ " :: :: ",
836
+ " :: :: "
837
+ ],
838
+ 'B': [
839
+ " ::::::: ",
840
+ " :: :: ",
841
+ " ::::::: ",
842
+ " :: :: ",
843
+ " ::::::: "
844
+ ],
845
+ 'C': [
846
+ " ::::::: ",
847
+ " :: ",
848
+ " :: ",
849
+ " :: ",
850
+ " ::::::: "
851
+ ],
852
+ 'D': [
853
+ " ::::::: ",
854
+ " :: :: ",
855
+ " :: :: ",
856
+ " :: :: ",
857
+ " ::::::: "
858
+ ],
859
+ 'E': [
860
+ " :::::::: ",
861
+ " :: ",
862
+ " :::::: ",
863
+ " :: ",
864
+ " :::::::: "
865
+ ],
866
+ 'F': [
867
+ " :::::::: ",
868
+ " :: ",
869
+ " :::::: ",
870
+ " :: ",
871
+ " :: "
872
+ ],
873
+ 'G': [
874
+ " ::::::: ",
875
+ " :: ",
876
+ " :: :::: ",
877
+ " :: :: ",
878
+ " ::::::: "
879
+ ],
880
+ 'H': [
881
+ " :: :: ",
882
+ " :: :: ",
883
+ " :::::::: ",
884
+ " :: :: ",
885
+ " :: :: "
886
+ ],
887
+ 'I': [
888
+ " :::::::: ",
889
+ " :: ",
890
+ " :: ",
891
+ " :: ",
892
+ " :::::::: "
893
+ ],
894
+ 'J': [
895
+ " :: ",
896
+ " :: ",
897
+ " :: ",
898
+ " :: :: ",
899
+ " :::::: "
900
+ ],
901
+ 'K': [
902
+ " :: :: ",
903
+ " :: :: ",
904
+ " ::::: ",
905
+ " :: :: ",
906
+ " :: :: "
907
+ ],
908
+ 'L': [
909
+ " :: ",
910
+ " :: ",
911
+ " :: ",
912
+ " :: ",
913
+ " :::::::: "
914
+ ],
915
+ 'M': [
916
+ " :: :: ",
917
+ " ::: ::: ",
918
+ " :: :: :: ",
919
+ " :: :: ",
920
+ " :: :: "
921
+ ],
922
+ 'N': [
923
+ " :: :: ",
924
+ " ::: :: ",
925
+ " :: :: :: ",
926
+ " :: :::: ",
927
+ " :: :: "
928
+ ],
929
+ 'O': [
930
+ " :::::: ",
931
+ " :: :: ",
932
+ " :: :: ",
933
+ " :: :: ",
934
+ " :::::: "
935
+ ],
936
+ 'P': [
937
+ " ::::::: ",
938
+ " :: :: ",
939
+ " ::::::: ",
940
+ " :: ",
941
+ " :: "
942
+ ],
943
+ 'Q': [
944
+ " :::::: ",
945
+ " :: :: ",
946
+ " :: :: ",
947
+ " :: :::: ",
948
+ " :::: : "
949
+ ],
950
+ 'R': [
951
+ " ::::::: ",
952
+ " :: :: ",
953
+ " ::::::: ",
954
+ " :: :: ",
955
+ " :: :: "
956
+ ],
957
+ 'S': [
958
+ " ::::::: ",
959
+ " :: ",
960
+ " ::::::: ",
961
+ " :: ",
962
+ " ::::::: "
963
+ ],
964
+ 'T': [
965
+ " :::::::: ",
966
+ " :: ",
967
+ " :: ",
968
+ " :: ",
969
+ " :: "
970
+ ],
971
+ 'U': [
972
+ " :: :: ",
973
+ " :: :: ",
974
+ " :: :: ",
975
+ " :: :: ",
976
+ " :::::: "
977
+ ],
978
+ 'V': [
979
+ " :: :: ",
980
+ " :: :: ",
981
+ " :: :: ",
982
+ " :: :: ",
983
+ " :: "
984
+ ],
985
+ 'W': [
986
+ " :: :: ",
987
+ " :: :: ",
988
+ " :: :: :: ",
989
+ " ::: ::: ",
990
+ " :: :: "
991
+ ],
992
+ 'X': [
993
+ " :: :: ",
994
+ " :: :: ",
995
+ " :: ",
996
+ " :: :: ",
997
+ " :: :: "
998
+ ],
999
+ 'Y': [
1000
+ " :: :: ",
1001
+ " :: :: ",
1002
+ " :: ",
1003
+ " :: ",
1004
+ " :: "
1005
+ ],
1006
+ 'Z': [
1007
+ " :::::::: ",
1008
+ " :: ",
1009
+ " :: ",
1010
+ " :: ",
1011
+ " :::::::: "
1012
+ ]
1013
+ }
1014
+
1015
+ self.letters.update(dotted_letters)
1016
+
1017
+ class ShadowFont(ZeroArtFont):
1018
+ """Shadow-style ASCII art font"""
1019
+ def __init__(self) -> None:
1020
+ super().__init__("shadow")
1021
+ self.letters: Dict[str, List[str]] = {
1022
+ ' ': [" ", " ", " ", " ", " "]
1023
+ }
1024
+ self._populate_letters()
1025
+
1026
+ def _populate_letters(self) -> None:
1027
+ """Populate shadow-style letters"""
1028
+ shadow_letters = {
1029
+ 'A': [
1030
+ " ██ ",
1031
+ " ████ ",
1032
+ " ██ ██ ",
1033
+ "████████ ",
1034
+ "██ ██▓",
1035
+ " ▓▓"
1036
+ ],
1037
+ 'B': [
1038
+ "██████ ",
1039
+ "██ ██ ",
1040
+ "███████ ",
1041
+ "██ ██ ",
1042
+ "███████ ",
1043
+ " ▓▓▓▓▓▓▓ "
1044
+ ],
1045
+ 'C': [
1046
+ " ██████ ",
1047
+ "██ ██ ",
1048
+ "██ ",
1049
+ "██ ██ ",
1050
+ " ██████ ",
1051
+ " ▓▓▓▓▓▓ "
1052
+ ],
1053
+ 'D': [
1054
+ "██████ ",
1055
+ "██ ██ ",
1056
+ "██ ██ ",
1057
+ "██ ██ ",
1058
+ "██████ ",
1059
+ "▓▓▓▓▓▓ "
1060
+ ],
1061
+ 'E': [
1062
+ "████████ ",
1063
+ "██ ",
1064
+ "██████ ",
1065
+ "██ ",
1066
+ "████████ ",
1067
+ "▓▓▓▓▓▓▓▓ "
1068
+ ],
1069
+ 'F': [
1070
+ "████████ ",
1071
+ "██ ",
1072
+ "██████ ",
1073
+ "██ ",
1074
+ "██ ",
1075
+ "▓▓ "
1076
+ ],
1077
+ 'G': [
1078
+ " ██████ ",
1079
+ "██ ",
1080
+ "██ ███ ",
1081
+ "██ ██ ",
1082
+ " ██████ ",
1083
+ " ▓▓▓▓▓▓ "
1084
+ ],
1085
+ 'H': [
1086
+ "██ ██ ",
1087
+ "██ ██ ",
1088
+ "████████ ",
1089
+ "██ ██ ",
1090
+ "██ ██ ",
1091
+ "▓▓ ▓▓ "
1092
+ ],
1093
+ 'I': [
1094
+ "████████ ",
1095
+ " ██ ",
1096
+ " ██ ",
1097
+ " ██ ",
1098
+ "████████ ",
1099
+ "▓▓▓▓▓▓▓▓ "
1100
+ ],
1101
+ 'J': [
1102
+ " ██ ",
1103
+ " ██ ",
1104
+ " ██ ",
1105
+ "██ ██ ",
1106
+ " █████ ",
1107
+ " ▓▓▓▓ "
1108
+ ],
1109
+ 'K': [
1110
+ "██ ██ ",
1111
+ "██ ██ ",
1112
+ "█████ ",
1113
+ "██ ██ ",
1114
+ "██ ██ ",
1115
+ "▓▓ ▓▓ "
1116
+ ],
1117
+ 'L': [
1118
+ "██ ",
1119
+ "██ ",
1120
+ "██ ",
1121
+ "██ ",
1122
+ "████████ ",
1123
+ "▓▓▓▓▓▓▓▓ "
1124
+ ],
1125
+ 'M': [
1126
+ "██ ██ ",
1127
+ "███ ███ ",
1128
+ "████████ ",
1129
+ "██ ██ ██ ",
1130
+ "██ ██ ",
1131
+ "▓▓ ▓▓ "
1132
+ ],
1133
+ 'N': [
1134
+ "██ ██ ",
1135
+ "███ ██ ",
1136
+ "████ ██ ",
1137
+ "██ ██ ██ ",
1138
+ "██ ███ ",
1139
+ "▓▓ ▓▓ "
1140
+ ],
1141
+ 'O': [
1142
+ " ██████ ",
1143
+ "██ ██ ",
1144
+ "██ ██ ",
1145
+ "██ ██ ",
1146
+ " ██████ ",
1147
+ " ▓▓▓▓▓▓ "
1148
+ ],
1149
+ 'P': [
1150
+ "███████ ",
1151
+ "██ ██ ",
1152
+ "███████ ",
1153
+ "██ ",
1154
+ "██ ",
1155
+ "▓▓ "
1156
+ ],
1157
+ 'Q': [
1158
+ " ██████ ",
1159
+ "██ ██ ",
1160
+ "██ ██ ",
1161
+ "██ ▄▄ ██ ",
1162
+ " ██████ ",
1163
+ " ▓▓▓▓▓▓▓"
1164
+ ],
1165
+ 'R': [
1166
+ "███████ ",
1167
+ "██ ██ ",
1168
+ "███████ ",
1169
+ "██ ██ ",
1170
+ "██ ██ ",
1171
+ "▓▓ ▓▓ "
1172
+ ],
1173
+ 'S': [
1174
+ " ██████ ",
1175
+ "██ ",
1176
+ " ██████ ",
1177
+ " ██ ",
1178
+ "███████ ",
1179
+ "▓▓▓▓▓▓▓ "
1180
+ ],
1181
+ 'T': [
1182
+ "████████ ",
1183
+ " ██ ",
1184
+ " ██ ",
1185
+ " ██ ",
1186
+ " ██ ",
1187
+ " ▓▓ "
1188
+ ],
1189
+ 'U': [
1190
+ "██ ██ ",
1191
+ "██ ██ ",
1192
+ "██ ██ ",
1193
+ "██ ██ ",
1194
+ " ██████ ",
1195
+ " ▓▓▓▓▓▓ "
1196
+ ],
1197
+ 'V': [
1198
+ "██ ██ ",
1199
+ "██ ██ ",
1200
+ "██ ██ ",
1201
+ " ██ ██ ",
1202
+ " ████ ",
1203
+ " ▓▓ "
1204
+ ],
1205
+ 'W': [
1206
+ "██ ██ ",
1207
+ "██ ██ ",
1208
+ "██ ██ ██ ",
1209
+ "████████ ",
1210
+ " ██ ██ ",
1211
+ " ▓ ▓▓ "
1212
+ ],
1213
+ 'X': [
1214
+ "██ ██ ",
1215
+ " ██ ██ ",
1216
+ " ████ ",
1217
+ " ██ ██ ",
1218
+ "██ ██ ",
1219
+ "▓▓ ▓▓ "
1220
+ ],
1221
+ 'Y': [
1222
+ "██ ██ ",
1223
+ " ██ ██ ",
1224
+ " ████ ",
1225
+ " ██ ",
1226
+ " ██ ",
1227
+ " ▓▓ "
1228
+ ],
1229
+ 'Z': [
1230
+ "████████ ",
1231
+ " ██ ",
1232
+ " ██ ",
1233
+ " ██ ",
1234
+ "████████ ",
1235
+ "▓▓▓▓▓▓▓▓ "
1236
+ ]
1237
+ }
1238
+
1239
+ self.letters.update(shadow_letters)