webscout 8.2.8__py3-none-any.whl → 8.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 (197) hide show
  1. webscout/AIauto.py +34 -16
  2. webscout/AIbase.py +96 -37
  3. webscout/AIutel.py +491 -87
  4. webscout/Bard.py +441 -323
  5. webscout/Extra/GitToolkit/__init__.py +10 -10
  6. webscout/Extra/YTToolkit/ytapi/video.py +232 -232
  7. webscout/Litlogger/README.md +10 -0
  8. webscout/Litlogger/__init__.py +7 -59
  9. webscout/Litlogger/formats.py +4 -0
  10. webscout/Litlogger/handlers.py +103 -0
  11. webscout/Litlogger/levels.py +13 -0
  12. webscout/Litlogger/logger.py +92 -0
  13. webscout/Provider/AISEARCH/Perplexity.py +332 -358
  14. webscout/Provider/AISEARCH/felo_search.py +9 -35
  15. webscout/Provider/AISEARCH/genspark_search.py +30 -56
  16. webscout/Provider/AISEARCH/hika_search.py +4 -16
  17. webscout/Provider/AISEARCH/iask_search.py +410 -436
  18. webscout/Provider/AISEARCH/monica_search.py +4 -30
  19. webscout/Provider/AISEARCH/scira_search.py +6 -32
  20. webscout/Provider/AISEARCH/webpilotai_search.py +38 -64
  21. webscout/Provider/Blackboxai.py +155 -35
  22. webscout/Provider/ChatSandbox.py +2 -1
  23. webscout/Provider/Deepinfra.py +339 -339
  24. webscout/Provider/ExaChat.py +358 -358
  25. webscout/Provider/Gemini.py +169 -169
  26. webscout/Provider/GithubChat.py +1 -2
  27. webscout/Provider/Glider.py +3 -3
  28. webscout/Provider/HeckAI.py +172 -82
  29. webscout/Provider/LambdaChat.py +1 -0
  30. webscout/Provider/MCPCore.py +7 -3
  31. webscout/Provider/OPENAI/BLACKBOXAI.py +421 -139
  32. webscout/Provider/OPENAI/Cloudflare.py +38 -21
  33. webscout/Provider/OPENAI/FalconH1.py +457 -0
  34. webscout/Provider/OPENAI/FreeGemini.py +35 -18
  35. webscout/Provider/OPENAI/NEMOTRON.py +34 -34
  36. webscout/Provider/OPENAI/PI.py +427 -0
  37. webscout/Provider/OPENAI/Qwen3.py +304 -0
  38. webscout/Provider/OPENAI/README.md +952 -1253
  39. webscout/Provider/OPENAI/TwoAI.py +374 -0
  40. webscout/Provider/OPENAI/__init__.py +7 -1
  41. webscout/Provider/OPENAI/ai4chat.py +73 -63
  42. webscout/Provider/OPENAI/api.py +869 -644
  43. webscout/Provider/OPENAI/base.py +2 -0
  44. webscout/Provider/OPENAI/c4ai.py +34 -13
  45. webscout/Provider/OPENAI/chatgpt.py +575 -556
  46. webscout/Provider/OPENAI/chatgptclone.py +512 -487
  47. webscout/Provider/OPENAI/chatsandbox.py +11 -6
  48. webscout/Provider/OPENAI/copilot.py +258 -0
  49. webscout/Provider/OPENAI/deepinfra.py +327 -318
  50. webscout/Provider/OPENAI/e2b.py +140 -104
  51. webscout/Provider/OPENAI/exaai.py +420 -411
  52. webscout/Provider/OPENAI/exachat.py +448 -443
  53. webscout/Provider/OPENAI/flowith.py +7 -3
  54. webscout/Provider/OPENAI/freeaichat.py +12 -8
  55. webscout/Provider/OPENAI/glider.py +15 -8
  56. webscout/Provider/OPENAI/groq.py +5 -2
  57. webscout/Provider/OPENAI/heckai.py +311 -307
  58. webscout/Provider/OPENAI/llmchatco.py +9 -7
  59. webscout/Provider/OPENAI/mcpcore.py +18 -9
  60. webscout/Provider/OPENAI/multichat.py +7 -5
  61. webscout/Provider/OPENAI/netwrck.py +16 -11
  62. webscout/Provider/OPENAI/oivscode.py +290 -0
  63. webscout/Provider/OPENAI/opkfc.py +507 -496
  64. webscout/Provider/OPENAI/pydantic_imports.py +172 -0
  65. webscout/Provider/OPENAI/scirachat.py +29 -17
  66. webscout/Provider/OPENAI/sonus.py +308 -303
  67. webscout/Provider/OPENAI/standardinput.py +442 -433
  68. webscout/Provider/OPENAI/textpollinations.py +18 -11
  69. webscout/Provider/OPENAI/toolbaz.py +419 -413
  70. webscout/Provider/OPENAI/typefully.py +17 -10
  71. webscout/Provider/OPENAI/typegpt.py +21 -11
  72. webscout/Provider/OPENAI/uncovrAI.py +477 -462
  73. webscout/Provider/OPENAI/utils.py +90 -79
  74. webscout/Provider/OPENAI/venice.py +435 -425
  75. webscout/Provider/OPENAI/wisecat.py +387 -381
  76. webscout/Provider/OPENAI/writecream.py +166 -163
  77. webscout/Provider/OPENAI/x0gpt.py +26 -37
  78. webscout/Provider/OPENAI/yep.py +384 -356
  79. webscout/Provider/PI.py +2 -1
  80. webscout/Provider/TTI/README.md +55 -101
  81. webscout/Provider/TTI/__init__.py +4 -9
  82. webscout/Provider/TTI/aiarta.py +365 -0
  83. webscout/Provider/TTI/artbit.py +0 -0
  84. webscout/Provider/TTI/base.py +64 -0
  85. webscout/Provider/TTI/fastflux.py +200 -0
  86. webscout/Provider/TTI/magicstudio.py +201 -0
  87. webscout/Provider/TTI/piclumen.py +203 -0
  88. webscout/Provider/TTI/pixelmuse.py +225 -0
  89. webscout/Provider/TTI/pollinations.py +221 -0
  90. webscout/Provider/TTI/utils.py +11 -0
  91. webscout/Provider/TTS/__init__.py +2 -1
  92. webscout/Provider/TTS/base.py +159 -159
  93. webscout/Provider/TTS/openai_fm.py +129 -0
  94. webscout/Provider/TextPollinationsAI.py +308 -308
  95. webscout/Provider/TwoAI.py +239 -44
  96. webscout/Provider/UNFINISHED/Youchat.py +330 -330
  97. webscout/Provider/UNFINISHED/puterjs.py +635 -0
  98. webscout/Provider/UNFINISHED/test_lmarena.py +119 -119
  99. webscout/Provider/Writecream.py +246 -246
  100. webscout/Provider/__init__.py +2 -2
  101. webscout/Provider/ai4chat.py +33 -8
  102. webscout/Provider/granite.py +41 -6
  103. webscout/Provider/koala.py +169 -169
  104. webscout/Provider/oivscode.py +309 -0
  105. webscout/Provider/samurai.py +3 -2
  106. webscout/Provider/scnet.py +1 -0
  107. webscout/Provider/typegpt.py +3 -3
  108. webscout/Provider/uncovr.py +368 -368
  109. webscout/client.py +70 -0
  110. webscout/litprinter/__init__.py +58 -58
  111. webscout/optimizers.py +419 -419
  112. webscout/scout/README.md +3 -1
  113. webscout/scout/core/crawler.py +134 -64
  114. webscout/scout/core/scout.py +148 -109
  115. webscout/scout/element.py +106 -88
  116. webscout/swiftcli/Readme.md +323 -323
  117. webscout/swiftcli/plugins/manager.py +9 -2
  118. webscout/version.py +1 -1
  119. webscout/zeroart/__init__.py +134 -134
  120. webscout/zeroart/effects.py +100 -100
  121. webscout/zeroart/fonts.py +1238 -1238
  122. {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/METADATA +160 -35
  123. webscout-8.3.dist-info/RECORD +290 -0
  124. {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/WHEEL +1 -1
  125. {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/entry_points.txt +1 -0
  126. webscout/Litlogger/Readme.md +0 -175
  127. webscout/Litlogger/core/__init__.py +0 -6
  128. webscout/Litlogger/core/level.py +0 -23
  129. webscout/Litlogger/core/logger.py +0 -165
  130. webscout/Litlogger/handlers/__init__.py +0 -12
  131. webscout/Litlogger/handlers/console.py +0 -33
  132. webscout/Litlogger/handlers/file.py +0 -143
  133. webscout/Litlogger/handlers/network.py +0 -173
  134. webscout/Litlogger/styles/__init__.py +0 -7
  135. webscout/Litlogger/styles/colors.py +0 -249
  136. webscout/Litlogger/styles/formats.py +0 -458
  137. webscout/Litlogger/styles/text.py +0 -87
  138. webscout/Litlogger/utils/__init__.py +0 -6
  139. webscout/Litlogger/utils/detectors.py +0 -153
  140. webscout/Litlogger/utils/formatters.py +0 -200
  141. webscout/Provider/ChatGPTGratis.py +0 -194
  142. webscout/Provider/TTI/AiForce/README.md +0 -159
  143. webscout/Provider/TTI/AiForce/__init__.py +0 -22
  144. webscout/Provider/TTI/AiForce/async_aiforce.py +0 -224
  145. webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -245
  146. webscout/Provider/TTI/FreeAIPlayground/README.md +0 -99
  147. webscout/Provider/TTI/FreeAIPlayground/__init__.py +0 -9
  148. webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +0 -181
  149. webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +0 -180
  150. webscout/Provider/TTI/ImgSys/README.md +0 -174
  151. webscout/Provider/TTI/ImgSys/__init__.py +0 -23
  152. webscout/Provider/TTI/ImgSys/async_imgsys.py +0 -202
  153. webscout/Provider/TTI/ImgSys/sync_imgsys.py +0 -195
  154. webscout/Provider/TTI/MagicStudio/README.md +0 -101
  155. webscout/Provider/TTI/MagicStudio/__init__.py +0 -2
  156. webscout/Provider/TTI/MagicStudio/async_magicstudio.py +0 -111
  157. webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +0 -109
  158. webscout/Provider/TTI/Nexra/README.md +0 -155
  159. webscout/Provider/TTI/Nexra/__init__.py +0 -22
  160. webscout/Provider/TTI/Nexra/async_nexra.py +0 -286
  161. webscout/Provider/TTI/Nexra/sync_nexra.py +0 -258
  162. webscout/Provider/TTI/PollinationsAI/README.md +0 -146
  163. webscout/Provider/TTI/PollinationsAI/__init__.py +0 -23
  164. webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -311
  165. webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -265
  166. webscout/Provider/TTI/aiarta/README.md +0 -134
  167. webscout/Provider/TTI/aiarta/__init__.py +0 -2
  168. webscout/Provider/TTI/aiarta/async_aiarta.py +0 -482
  169. webscout/Provider/TTI/aiarta/sync_aiarta.py +0 -440
  170. webscout/Provider/TTI/artbit/README.md +0 -100
  171. webscout/Provider/TTI/artbit/__init__.py +0 -22
  172. webscout/Provider/TTI/artbit/async_artbit.py +0 -155
  173. webscout/Provider/TTI/artbit/sync_artbit.py +0 -148
  174. webscout/Provider/TTI/fastflux/README.md +0 -129
  175. webscout/Provider/TTI/fastflux/__init__.py +0 -22
  176. webscout/Provider/TTI/fastflux/async_fastflux.py +0 -261
  177. webscout/Provider/TTI/fastflux/sync_fastflux.py +0 -252
  178. webscout/Provider/TTI/huggingface/README.md +0 -114
  179. webscout/Provider/TTI/huggingface/__init__.py +0 -22
  180. webscout/Provider/TTI/huggingface/async_huggingface.py +0 -199
  181. webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -195
  182. webscout/Provider/TTI/piclumen/README.md +0 -161
  183. webscout/Provider/TTI/piclumen/__init__.py +0 -23
  184. webscout/Provider/TTI/piclumen/async_piclumen.py +0 -268
  185. webscout/Provider/TTI/piclumen/sync_piclumen.py +0 -233
  186. webscout/Provider/TTI/pixelmuse/README.md +0 -79
  187. webscout/Provider/TTI/pixelmuse/__init__.py +0 -4
  188. webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +0 -249
  189. webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +0 -182
  190. webscout/Provider/TTI/talkai/README.md +0 -139
  191. webscout/Provider/TTI/talkai/__init__.py +0 -4
  192. webscout/Provider/TTI/talkai/async_talkai.py +0 -229
  193. webscout/Provider/TTI/talkai/sync_talkai.py +0 -207
  194. webscout/Provider/UNFINISHED/oivscode.py +0 -351
  195. webscout-8.2.8.dist-info/RECORD +0 -334
  196. {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/licenses/LICENSE.md +0 -0
  197. {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/top_level.txt +0 -0
webscout/zeroart/fonts.py CHANGED
@@ -1,1239 +1,1239 @@
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
-
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
1239
  self.letters.update(shadow_letters)