webscout 8.3.7__py3-none-any.whl → 2025.10.11__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 (273) hide show
  1. webscout/AIauto.py +250 -250
  2. webscout/AIbase.py +379 -379
  3. webscout/AIutel.py +60 -60
  4. webscout/Bard.py +1012 -1012
  5. webscout/Bing_search.py +417 -417
  6. webscout/DWEBS.py +529 -529
  7. webscout/Extra/Act.md +309 -309
  8. webscout/Extra/GitToolkit/__init__.py +10 -10
  9. webscout/Extra/GitToolkit/gitapi/README.md +110 -110
  10. webscout/Extra/GitToolkit/gitapi/__init__.py +11 -11
  11. webscout/Extra/GitToolkit/gitapi/repository.py +195 -195
  12. webscout/Extra/GitToolkit/gitapi/user.py +96 -96
  13. webscout/Extra/GitToolkit/gitapi/utils.py +61 -61
  14. webscout/Extra/YTToolkit/README.md +375 -375
  15. webscout/Extra/YTToolkit/YTdownloader.py +956 -956
  16. webscout/Extra/YTToolkit/__init__.py +2 -2
  17. webscout/Extra/YTToolkit/transcriber.py +475 -475
  18. webscout/Extra/YTToolkit/ytapi/README.md +44 -44
  19. webscout/Extra/YTToolkit/ytapi/__init__.py +6 -6
  20. webscout/Extra/YTToolkit/ytapi/channel.py +307 -307
  21. webscout/Extra/YTToolkit/ytapi/errors.py +13 -13
  22. webscout/Extra/YTToolkit/ytapi/extras.py +118 -118
  23. webscout/Extra/YTToolkit/ytapi/https.py +88 -88
  24. webscout/Extra/YTToolkit/ytapi/patterns.py +61 -61
  25. webscout/Extra/YTToolkit/ytapi/playlist.py +58 -58
  26. webscout/Extra/YTToolkit/ytapi/pool.py +7 -7
  27. webscout/Extra/YTToolkit/ytapi/query.py +39 -39
  28. webscout/Extra/YTToolkit/ytapi/stream.py +62 -62
  29. webscout/Extra/YTToolkit/ytapi/utils.py +62 -62
  30. webscout/Extra/YTToolkit/ytapi/video.py +232 -232
  31. webscout/Extra/autocoder/__init__.py +9 -9
  32. webscout/Extra/autocoder/autocoder.py +1105 -1105
  33. webscout/Extra/autocoder/autocoder_utiles.py +332 -332
  34. webscout/Extra/gguf.md +429 -429
  35. webscout/Extra/gguf.py +1213 -1213
  36. webscout/Extra/tempmail/README.md +487 -487
  37. webscout/Extra/tempmail/__init__.py +27 -27
  38. webscout/Extra/tempmail/async_utils.py +140 -140
  39. webscout/Extra/tempmail/base.py +160 -160
  40. webscout/Extra/tempmail/cli.py +186 -186
  41. webscout/Extra/tempmail/emailnator.py +84 -84
  42. webscout/Extra/tempmail/mail_tm.py +360 -360
  43. webscout/Extra/tempmail/temp_mail_io.py +291 -291
  44. webscout/Extra/weather.md +281 -281
  45. webscout/Extra/weather.py +193 -193
  46. webscout/Litlogger/README.md +10 -10
  47. webscout/Litlogger/__init__.py +15 -15
  48. webscout/Litlogger/formats.py +13 -13
  49. webscout/Litlogger/handlers.py +121 -121
  50. webscout/Litlogger/levels.py +13 -13
  51. webscout/Litlogger/logger.py +134 -134
  52. webscout/Provider/AISEARCH/Perplexity.py +332 -332
  53. webscout/Provider/AISEARCH/README.md +279 -279
  54. webscout/Provider/AISEARCH/__init__.py +16 -1
  55. webscout/Provider/AISEARCH/felo_search.py +206 -206
  56. webscout/Provider/AISEARCH/genspark_search.py +323 -323
  57. webscout/Provider/AISEARCH/hika_search.py +185 -185
  58. webscout/Provider/AISEARCH/iask_search.py +410 -410
  59. webscout/Provider/AISEARCH/monica_search.py +219 -219
  60. webscout/Provider/AISEARCH/scira_search.py +316 -316
  61. webscout/Provider/AISEARCH/stellar_search.py +177 -177
  62. webscout/Provider/AISEARCH/webpilotai_search.py +255 -255
  63. webscout/Provider/Aitopia.py +314 -314
  64. webscout/Provider/Apriel.py +306 -0
  65. webscout/Provider/ChatGPTClone.py +236 -236
  66. webscout/Provider/ChatSandbox.py +343 -343
  67. webscout/Provider/Cloudflare.py +324 -324
  68. webscout/Provider/Cohere.py +208 -208
  69. webscout/Provider/Deepinfra.py +370 -366
  70. webscout/Provider/ExaAI.py +260 -260
  71. webscout/Provider/ExaChat.py +308 -308
  72. webscout/Provider/Flowith.py +221 -221
  73. webscout/Provider/GMI.py +293 -0
  74. webscout/Provider/Gemini.py +164 -164
  75. webscout/Provider/GeminiProxy.py +167 -167
  76. webscout/Provider/GithubChat.py +371 -372
  77. webscout/Provider/Groq.py +800 -800
  78. webscout/Provider/HeckAI.py +383 -383
  79. webscout/Provider/Jadve.py +282 -282
  80. webscout/Provider/K2Think.py +307 -307
  81. webscout/Provider/Koboldai.py +205 -205
  82. webscout/Provider/LambdaChat.py +423 -423
  83. webscout/Provider/Nemotron.py +244 -244
  84. webscout/Provider/Netwrck.py +248 -248
  85. webscout/Provider/OLLAMA.py +395 -395
  86. webscout/Provider/OPENAI/Cloudflare.py +393 -393
  87. webscout/Provider/OPENAI/FalconH1.py +451 -451
  88. webscout/Provider/OPENAI/FreeGemini.py +296 -296
  89. webscout/Provider/OPENAI/K2Think.py +431 -431
  90. webscout/Provider/OPENAI/NEMOTRON.py +240 -240
  91. webscout/Provider/OPENAI/PI.py +427 -427
  92. webscout/Provider/OPENAI/README.md +959 -959
  93. webscout/Provider/OPENAI/TogetherAI.py +345 -345
  94. webscout/Provider/OPENAI/TwoAI.py +465 -465
  95. webscout/Provider/OPENAI/__init__.py +33 -18
  96. webscout/Provider/OPENAI/base.py +248 -248
  97. webscout/Provider/OPENAI/chatglm.py +528 -0
  98. webscout/Provider/OPENAI/chatgpt.py +592 -592
  99. webscout/Provider/OPENAI/chatgptclone.py +521 -521
  100. webscout/Provider/OPENAI/chatsandbox.py +202 -202
  101. webscout/Provider/OPENAI/deepinfra.py +318 -314
  102. webscout/Provider/OPENAI/e2b.py +1665 -1665
  103. webscout/Provider/OPENAI/exaai.py +420 -420
  104. webscout/Provider/OPENAI/exachat.py +452 -452
  105. webscout/Provider/OPENAI/friendli.py +232 -232
  106. webscout/Provider/OPENAI/{refact.py → gmi.py} +324 -274
  107. webscout/Provider/OPENAI/groq.py +364 -364
  108. webscout/Provider/OPENAI/heckai.py +314 -314
  109. webscout/Provider/OPENAI/llmchatco.py +337 -337
  110. webscout/Provider/OPENAI/netwrck.py +355 -355
  111. webscout/Provider/OPENAI/oivscode.py +290 -290
  112. webscout/Provider/OPENAI/opkfc.py +518 -518
  113. webscout/Provider/OPENAI/pydantic_imports.py +1 -1
  114. webscout/Provider/OPENAI/scirachat.py +535 -535
  115. webscout/Provider/OPENAI/sonus.py +308 -308
  116. webscout/Provider/OPENAI/standardinput.py +442 -442
  117. webscout/Provider/OPENAI/textpollinations.py +340 -340
  118. webscout/Provider/OPENAI/toolbaz.py +419 -416
  119. webscout/Provider/OPENAI/typefully.py +362 -362
  120. webscout/Provider/OPENAI/utils.py +295 -295
  121. webscout/Provider/OPENAI/venice.py +436 -436
  122. webscout/Provider/OPENAI/wisecat.py +387 -387
  123. webscout/Provider/OPENAI/writecream.py +166 -166
  124. webscout/Provider/OPENAI/x0gpt.py +378 -378
  125. webscout/Provider/OPENAI/yep.py +389 -389
  126. webscout/Provider/OpenGPT.py +230 -230
  127. webscout/Provider/Openai.py +243 -243
  128. webscout/Provider/PI.py +405 -405
  129. webscout/Provider/Perplexitylabs.py +430 -430
  130. webscout/Provider/QwenLM.py +272 -272
  131. webscout/Provider/STT/__init__.py +16 -1
  132. webscout/Provider/Sambanova.py +257 -257
  133. webscout/Provider/StandardInput.py +309 -309
  134. webscout/Provider/TTI/README.md +82 -82
  135. webscout/Provider/TTI/__init__.py +33 -18
  136. webscout/Provider/TTI/aiarta.py +413 -413
  137. webscout/Provider/TTI/base.py +136 -136
  138. webscout/Provider/TTI/bing.py +243 -243
  139. webscout/Provider/TTI/gpt1image.py +149 -149
  140. webscout/Provider/TTI/imagen.py +196 -196
  141. webscout/Provider/TTI/infip.py +211 -211
  142. webscout/Provider/TTI/magicstudio.py +232 -232
  143. webscout/Provider/TTI/monochat.py +219 -219
  144. webscout/Provider/TTI/piclumen.py +214 -214
  145. webscout/Provider/TTI/pixelmuse.py +232 -232
  146. webscout/Provider/TTI/pollinations.py +232 -232
  147. webscout/Provider/TTI/together.py +288 -288
  148. webscout/Provider/TTI/utils.py +12 -12
  149. webscout/Provider/TTI/venice.py +367 -367
  150. webscout/Provider/TTS/README.md +192 -192
  151. webscout/Provider/TTS/__init__.py +33 -18
  152. webscout/Provider/TTS/parler.py +110 -110
  153. webscout/Provider/TTS/streamElements.py +333 -333
  154. webscout/Provider/TTS/utils.py +280 -280
  155. webscout/Provider/TeachAnything.py +237 -237
  156. webscout/Provider/TextPollinationsAI.py +310 -310
  157. webscout/Provider/TogetherAI.py +356 -356
  158. webscout/Provider/TwoAI.py +312 -312
  159. webscout/Provider/TypliAI.py +311 -311
  160. webscout/Provider/UNFINISHED/ChatHub.py +208 -208
  161. webscout/Provider/UNFINISHED/ChutesAI.py +313 -313
  162. webscout/Provider/UNFINISHED/GizAI.py +294 -294
  163. webscout/Provider/UNFINISHED/Marcus.py +198 -198
  164. webscout/Provider/UNFINISHED/Qodo.py +477 -477
  165. webscout/Provider/UNFINISHED/VercelAIGateway.py +338 -338
  166. webscout/Provider/UNFINISHED/XenAI.py +324 -324
  167. webscout/Provider/UNFINISHED/Youchat.py +330 -330
  168. webscout/Provider/UNFINISHED/liner.py +334 -0
  169. webscout/Provider/UNFINISHED/liner_api_request.py +262 -262
  170. webscout/Provider/UNFINISHED/puterjs.py +634 -634
  171. webscout/Provider/UNFINISHED/samurai.py +223 -223
  172. webscout/Provider/UNFINISHED/test_lmarena.py +119 -119
  173. webscout/Provider/Venice.py +250 -250
  174. webscout/Provider/VercelAI.py +256 -256
  175. webscout/Provider/WiseCat.py +231 -231
  176. webscout/Provider/WrDoChat.py +366 -366
  177. webscout/Provider/__init__.py +33 -18
  178. webscout/Provider/ai4chat.py +174 -174
  179. webscout/Provider/akashgpt.py +331 -331
  180. webscout/Provider/cerebras.py +446 -446
  181. webscout/Provider/chatglm.py +394 -301
  182. webscout/Provider/cleeai.py +211 -211
  183. webscout/Provider/elmo.py +282 -282
  184. webscout/Provider/geminiapi.py +208 -208
  185. webscout/Provider/granite.py +261 -261
  186. webscout/Provider/hermes.py +263 -263
  187. webscout/Provider/julius.py +223 -223
  188. webscout/Provider/learnfastai.py +309 -309
  189. webscout/Provider/llama3mitril.py +214 -214
  190. webscout/Provider/llmchat.py +243 -243
  191. webscout/Provider/llmchatco.py +290 -290
  192. webscout/Provider/meta.py +801 -801
  193. webscout/Provider/oivscode.py +309 -309
  194. webscout/Provider/scira_chat.py +383 -383
  195. webscout/Provider/searchchat.py +292 -292
  196. webscout/Provider/sonus.py +258 -258
  197. webscout/Provider/toolbaz.py +370 -367
  198. webscout/Provider/turboseek.py +273 -273
  199. webscout/Provider/typefully.py +207 -207
  200. webscout/Provider/yep.py +372 -372
  201. webscout/__init__.py +30 -31
  202. webscout/__main__.py +5 -5
  203. webscout/auth/api_key_manager.py +189 -189
  204. webscout/auth/config.py +175 -175
  205. webscout/auth/models.py +185 -185
  206. webscout/auth/routes.py +664 -664
  207. webscout/auth/simple_logger.py +236 -236
  208. webscout/cli.py +523 -523
  209. webscout/conversation.py +438 -438
  210. webscout/exceptions.py +361 -361
  211. webscout/litagent/Readme.md +298 -298
  212. webscout/litagent/__init__.py +28 -28
  213. webscout/litagent/agent.py +581 -581
  214. webscout/litagent/constants.py +59 -59
  215. webscout/litprinter/__init__.py +58 -58
  216. webscout/models.py +181 -181
  217. webscout/optimizers.py +419 -419
  218. webscout/prompt_manager.py +288 -288
  219. webscout/sanitize.py +1078 -1078
  220. webscout/scout/README.md +401 -401
  221. webscout/scout/__init__.py +8 -8
  222. webscout/scout/core/__init__.py +6 -6
  223. webscout/scout/core/crawler.py +297 -297
  224. webscout/scout/core/scout.py +706 -706
  225. webscout/scout/core/search_result.py +95 -95
  226. webscout/scout/core/text_analyzer.py +62 -62
  227. webscout/scout/core/text_utils.py +277 -277
  228. webscout/scout/core/web_analyzer.py +51 -51
  229. webscout/scout/element.py +599 -599
  230. webscout/scout/parsers/__init__.py +69 -69
  231. webscout/scout/parsers/html5lib_parser.py +172 -172
  232. webscout/scout/parsers/html_parser.py +236 -236
  233. webscout/scout/parsers/lxml_parser.py +178 -178
  234. webscout/scout/utils.py +37 -37
  235. webscout/swiftcli/Readme.md +323 -323
  236. webscout/swiftcli/__init__.py +95 -95
  237. webscout/swiftcli/core/__init__.py +7 -7
  238. webscout/swiftcli/core/cli.py +308 -308
  239. webscout/swiftcli/core/context.py +104 -104
  240. webscout/swiftcli/core/group.py +241 -241
  241. webscout/swiftcli/decorators/__init__.py +28 -28
  242. webscout/swiftcli/decorators/command.py +221 -221
  243. webscout/swiftcli/decorators/options.py +220 -220
  244. webscout/swiftcli/decorators/output.py +302 -302
  245. webscout/swiftcli/exceptions.py +21 -21
  246. webscout/swiftcli/plugins/__init__.py +9 -9
  247. webscout/swiftcli/plugins/base.py +135 -135
  248. webscout/swiftcli/plugins/manager.py +269 -269
  249. webscout/swiftcli/utils/__init__.py +59 -59
  250. webscout/swiftcli/utils/formatting.py +252 -252
  251. webscout/swiftcli/utils/parsing.py +267 -267
  252. webscout/update_checker.py +117 -117
  253. webscout/version.py +1 -1
  254. webscout/webscout_search.py +1183 -1183
  255. webscout/webscout_search_async.py +649 -649
  256. webscout/yep_search.py +346 -346
  257. webscout/zeroart/README.md +89 -89
  258. webscout/zeroart/__init__.py +134 -134
  259. webscout/zeroart/base.py +66 -66
  260. webscout/zeroart/effects.py +100 -100
  261. webscout/zeroart/fonts.py +1238 -1238
  262. {webscout-8.3.7.dist-info → webscout-2025.10.11.dist-info}/METADATA +937 -937
  263. webscout-2025.10.11.dist-info/RECORD +300 -0
  264. webscout/Provider/AISEARCH/DeepFind.py +0 -254
  265. webscout/Provider/OPENAI/Qwen3.py +0 -303
  266. webscout/Provider/OPENAI/qodo.py +0 -630
  267. webscout/Provider/OPENAI/xenai.py +0 -514
  268. webscout/tempid.py +0 -134
  269. webscout-8.3.7.dist-info/RECORD +0 -301
  270. {webscout-8.3.7.dist-info → webscout-2025.10.11.dist-info}/WHEEL +0 -0
  271. {webscout-8.3.7.dist-info → webscout-2025.10.11.dist-info}/entry_points.txt +0 -0
  272. {webscout-8.3.7.dist-info → webscout-2025.10.11.dist-info}/licenses/LICENSE.md +0 -0
  273. {webscout-8.3.7.dist-info → webscout-2025.10.11.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)