webscout 8.2.9__py3-none-any.whl → 2026.1.19__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.
Files changed (413) hide show
  1. webscout/AIauto.py +524 -251
  2. webscout/AIbase.py +247 -319
  3. webscout/AIutel.py +68 -703
  4. webscout/Bard.py +1072 -1026
  5. webscout/Extra/GitToolkit/__init__.py +10 -10
  6. webscout/Extra/GitToolkit/gitapi/__init__.py +20 -12
  7. webscout/Extra/GitToolkit/gitapi/gist.py +142 -0
  8. webscout/Extra/GitToolkit/gitapi/organization.py +91 -0
  9. webscout/Extra/GitToolkit/gitapi/repository.py +308 -195
  10. webscout/Extra/GitToolkit/gitapi/search.py +162 -0
  11. webscout/Extra/GitToolkit/gitapi/trending.py +236 -0
  12. webscout/Extra/GitToolkit/gitapi/user.py +128 -96
  13. webscout/Extra/GitToolkit/gitapi/utils.py +82 -62
  14. webscout/Extra/YTToolkit/README.md +443 -375
  15. webscout/Extra/YTToolkit/YTdownloader.py +953 -957
  16. webscout/Extra/YTToolkit/__init__.py +3 -3
  17. webscout/Extra/YTToolkit/transcriber.py +595 -476
  18. webscout/Extra/YTToolkit/ytapi/README.md +230 -44
  19. webscout/Extra/YTToolkit/ytapi/__init__.py +22 -6
  20. webscout/Extra/YTToolkit/ytapi/captions.py +190 -0
  21. webscout/Extra/YTToolkit/ytapi/channel.py +302 -307
  22. webscout/Extra/YTToolkit/ytapi/errors.py +13 -13
  23. webscout/Extra/YTToolkit/ytapi/extras.py +178 -118
  24. webscout/Extra/YTToolkit/ytapi/hashtag.py +120 -0
  25. webscout/Extra/YTToolkit/ytapi/https.py +89 -88
  26. webscout/Extra/YTToolkit/ytapi/patterns.py +61 -61
  27. webscout/Extra/YTToolkit/ytapi/playlist.py +59 -59
  28. webscout/Extra/YTToolkit/ytapi/pool.py +8 -8
  29. webscout/Extra/YTToolkit/ytapi/query.py +143 -40
  30. webscout/Extra/YTToolkit/ytapi/shorts.py +122 -0
  31. webscout/Extra/YTToolkit/ytapi/stream.py +68 -63
  32. webscout/Extra/YTToolkit/ytapi/suggestions.py +97 -0
  33. webscout/Extra/YTToolkit/ytapi/utils.py +66 -62
  34. webscout/Extra/YTToolkit/ytapi/video.py +403 -232
  35. webscout/Extra/__init__.py +2 -3
  36. webscout/Extra/gguf.py +1298 -684
  37. webscout/Extra/tempmail/README.md +487 -487
  38. webscout/Extra/tempmail/__init__.py +28 -28
  39. webscout/Extra/tempmail/async_utils.py +143 -141
  40. webscout/Extra/tempmail/base.py +172 -161
  41. webscout/Extra/tempmail/cli.py +191 -187
  42. webscout/Extra/tempmail/emailnator.py +88 -84
  43. webscout/Extra/tempmail/mail_tm.py +378 -361
  44. webscout/Extra/tempmail/temp_mail_io.py +304 -292
  45. webscout/Extra/weather.py +196 -194
  46. webscout/Extra/weather_ascii.py +17 -15
  47. webscout/Provider/AISEARCH/PERPLEXED_search.py +175 -0
  48. webscout/Provider/AISEARCH/Perplexity.py +292 -333
  49. webscout/Provider/AISEARCH/README.md +106 -279
  50. webscout/Provider/AISEARCH/__init__.py +16 -9
  51. webscout/Provider/AISEARCH/brave_search.py +298 -0
  52. webscout/Provider/AISEARCH/iask_search.py +357 -410
  53. webscout/Provider/AISEARCH/monica_search.py +200 -220
  54. webscout/Provider/AISEARCH/webpilotai_search.py +242 -255
  55. webscout/Provider/Algion.py +413 -0
  56. webscout/Provider/Andi.py +74 -69
  57. webscout/Provider/Apriel.py +313 -0
  58. webscout/Provider/Ayle.py +323 -0
  59. webscout/Provider/ChatSandbox.py +329 -342
  60. webscout/Provider/ClaudeOnline.py +365 -0
  61. webscout/Provider/Cohere.py +232 -208
  62. webscout/Provider/DeepAI.py +367 -0
  63. webscout/Provider/Deepinfra.py +467 -340
  64. webscout/Provider/EssentialAI.py +217 -0
  65. webscout/Provider/ExaAI.py +274 -261
  66. webscout/Provider/Gemini.py +175 -169
  67. webscout/Provider/GithubChat.py +385 -369
  68. webscout/Provider/Gradient.py +286 -0
  69. webscout/Provider/Groq.py +556 -801
  70. webscout/Provider/HadadXYZ.py +323 -0
  71. webscout/Provider/HeckAI.py +392 -375
  72. webscout/Provider/HuggingFace.py +387 -0
  73. webscout/Provider/IBM.py +340 -0
  74. webscout/Provider/Jadve.py +317 -291
  75. webscout/Provider/K2Think.py +306 -0
  76. webscout/Provider/Koboldai.py +221 -384
  77. webscout/Provider/Netwrck.py +273 -270
  78. webscout/Provider/Nvidia.py +310 -0
  79. webscout/Provider/OPENAI/DeepAI.py +489 -0
  80. webscout/Provider/OPENAI/K2Think.py +423 -0
  81. webscout/Provider/OPENAI/PI.py +463 -0
  82. webscout/Provider/OPENAI/README.md +890 -952
  83. webscout/Provider/OPENAI/TogetherAI.py +405 -0
  84. webscout/Provider/OPENAI/TwoAI.py +255 -357
  85. webscout/Provider/OPENAI/__init__.py +148 -40
  86. webscout/Provider/OPENAI/ai4chat.py +348 -293
  87. webscout/Provider/OPENAI/akashgpt.py +436 -0
  88. webscout/Provider/OPENAI/algion.py +303 -0
  89. webscout/Provider/OPENAI/{exachat.py → ayle.py} +365 -444
  90. webscout/Provider/OPENAI/base.py +253 -249
  91. webscout/Provider/OPENAI/cerebras.py +296 -0
  92. webscout/Provider/OPENAI/chatgpt.py +870 -556
  93. webscout/Provider/OPENAI/chatsandbox.py +233 -173
  94. webscout/Provider/OPENAI/deepinfra.py +403 -322
  95. webscout/Provider/OPENAI/e2b.py +2370 -1414
  96. webscout/Provider/OPENAI/elmo.py +278 -0
  97. webscout/Provider/OPENAI/exaai.py +452 -417
  98. webscout/Provider/OPENAI/freeassist.py +446 -0
  99. webscout/Provider/OPENAI/gradient.py +448 -0
  100. webscout/Provider/OPENAI/groq.py +380 -364
  101. webscout/Provider/OPENAI/hadadxyz.py +292 -0
  102. webscout/Provider/OPENAI/heckai.py +333 -308
  103. webscout/Provider/OPENAI/huggingface.py +321 -0
  104. webscout/Provider/OPENAI/ibm.py +425 -0
  105. webscout/Provider/OPENAI/llmchat.py +253 -0
  106. webscout/Provider/OPENAI/llmchatco.py +378 -335
  107. webscout/Provider/OPENAI/meta.py +541 -0
  108. webscout/Provider/OPENAI/netwrck.py +374 -357
  109. webscout/Provider/OPENAI/nvidia.py +317 -0
  110. webscout/Provider/OPENAI/oivscode.py +348 -287
  111. webscout/Provider/OPENAI/openrouter.py +328 -0
  112. webscout/Provider/OPENAI/pydantic_imports.py +1 -172
  113. webscout/Provider/OPENAI/sambanova.py +397 -0
  114. webscout/Provider/OPENAI/sonus.py +305 -304
  115. webscout/Provider/OPENAI/textpollinations.py +370 -339
  116. webscout/Provider/OPENAI/toolbaz.py +375 -413
  117. webscout/Provider/OPENAI/typefully.py +419 -355
  118. webscout/Provider/OPENAI/typliai.py +279 -0
  119. webscout/Provider/OPENAI/utils.py +314 -318
  120. webscout/Provider/OPENAI/wisecat.py +359 -387
  121. webscout/Provider/OPENAI/writecream.py +185 -163
  122. webscout/Provider/OPENAI/x0gpt.py +462 -365
  123. webscout/Provider/OPENAI/zenmux.py +380 -0
  124. webscout/Provider/OpenRouter.py +386 -0
  125. webscout/Provider/Openai.py +337 -496
  126. webscout/Provider/PI.py +443 -429
  127. webscout/Provider/QwenLM.py +346 -254
  128. webscout/Provider/STT/__init__.py +28 -0
  129. webscout/Provider/STT/base.py +303 -0
  130. webscout/Provider/STT/elevenlabs.py +264 -0
  131. webscout/Provider/Sambanova.py +317 -0
  132. webscout/Provider/TTI/README.md +69 -82
  133. webscout/Provider/TTI/__init__.py +37 -7
  134. webscout/Provider/TTI/base.py +147 -64
  135. webscout/Provider/TTI/claudeonline.py +393 -0
  136. webscout/Provider/TTI/magicstudio.py +292 -201
  137. webscout/Provider/TTI/miragic.py +180 -0
  138. webscout/Provider/TTI/pollinations.py +331 -221
  139. webscout/Provider/TTI/together.py +334 -0
  140. webscout/Provider/TTI/utils.py +14 -11
  141. webscout/Provider/TTS/README.md +186 -192
  142. webscout/Provider/TTS/__init__.py +43 -10
  143. webscout/Provider/TTS/base.py +523 -159
  144. webscout/Provider/TTS/deepgram.py +286 -156
  145. webscout/Provider/TTS/elevenlabs.py +189 -111
  146. webscout/Provider/TTS/freetts.py +218 -0
  147. webscout/Provider/TTS/murfai.py +288 -113
  148. webscout/Provider/TTS/openai_fm.py +364 -129
  149. webscout/Provider/TTS/parler.py +203 -111
  150. webscout/Provider/TTS/qwen.py +334 -0
  151. webscout/Provider/TTS/sherpa.py +286 -0
  152. webscout/Provider/TTS/speechma.py +693 -580
  153. webscout/Provider/TTS/streamElements.py +275 -333
  154. webscout/Provider/TTS/utils.py +280 -280
  155. webscout/Provider/TextPollinationsAI.py +331 -308
  156. webscout/Provider/TogetherAI.py +450 -0
  157. webscout/Provider/TwoAI.py +309 -475
  158. webscout/Provider/TypliAI.py +311 -305
  159. webscout/Provider/UNFINISHED/ChatHub.py +219 -209
  160. webscout/Provider/{OPENAI/glider.py → UNFINISHED/ChutesAI.py} +331 -326
  161. webscout/Provider/{GizAI.py → UNFINISHED/GizAI.py} +300 -295
  162. webscout/Provider/{Marcus.py → UNFINISHED/Marcus.py} +218 -198
  163. webscout/Provider/UNFINISHED/Qodo.py +481 -0
  164. webscout/Provider/{MCPCore.py → UNFINISHED/XenAI.py} +330 -315
  165. webscout/Provider/UNFINISHED/Youchat.py +347 -330
  166. webscout/Provider/UNFINISHED/aihumanizer.py +41 -0
  167. webscout/Provider/UNFINISHED/grammerchecker.py +37 -0
  168. webscout/Provider/UNFINISHED/liner.py +342 -0
  169. webscout/Provider/UNFINISHED/liner_api_request.py +246 -263
  170. webscout/Provider/{samurai.py → UNFINISHED/samurai.py} +231 -224
  171. webscout/Provider/WiseCat.py +256 -233
  172. webscout/Provider/WrDoChat.py +390 -370
  173. webscout/Provider/__init__.py +115 -174
  174. webscout/Provider/ai4chat.py +181 -174
  175. webscout/Provider/akashgpt.py +330 -335
  176. webscout/Provider/cerebras.py +397 -290
  177. webscout/Provider/cleeai.py +236 -213
  178. webscout/Provider/elmo.py +291 -283
  179. webscout/Provider/geminiapi.py +343 -208
  180. webscout/Provider/julius.py +245 -223
  181. webscout/Provider/learnfastai.py +333 -325
  182. webscout/Provider/llama3mitril.py +230 -215
  183. webscout/Provider/llmchat.py +308 -258
  184. webscout/Provider/llmchatco.py +321 -306
  185. webscout/Provider/meta.py +996 -801
  186. webscout/Provider/oivscode.py +332 -309
  187. webscout/Provider/searchchat.py +316 -292
  188. webscout/Provider/sonus.py +264 -258
  189. webscout/Provider/toolbaz.py +359 -353
  190. webscout/Provider/turboseek.py +332 -266
  191. webscout/Provider/typefully.py +262 -202
  192. webscout/Provider/x0gpt.py +332 -299
  193. webscout/__init__.py +31 -39
  194. webscout/__main__.py +5 -5
  195. webscout/cli.py +585 -524
  196. webscout/client.py +1497 -70
  197. webscout/conversation.py +140 -436
  198. webscout/exceptions.py +383 -362
  199. webscout/litagent/__init__.py +29 -29
  200. webscout/litagent/agent.py +492 -455
  201. webscout/litagent/constants.py +60 -60
  202. webscout/models.py +505 -181
  203. webscout/optimizers.py +74 -420
  204. webscout/prompt_manager.py +376 -288
  205. webscout/sanitize.py +1514 -0
  206. webscout/scout/README.md +452 -404
  207. webscout/scout/__init__.py +8 -8
  208. webscout/scout/core/__init__.py +7 -7
  209. webscout/scout/core/crawler.py +330 -210
  210. webscout/scout/core/scout.py +800 -607
  211. webscout/scout/core/search_result.py +51 -96
  212. webscout/scout/core/text_analyzer.py +64 -63
  213. webscout/scout/core/text_utils.py +412 -277
  214. webscout/scout/core/web_analyzer.py +54 -52
  215. webscout/scout/element.py +872 -478
  216. webscout/scout/parsers/__init__.py +70 -69
  217. webscout/scout/parsers/html5lib_parser.py +182 -172
  218. webscout/scout/parsers/html_parser.py +238 -236
  219. webscout/scout/parsers/lxml_parser.py +203 -178
  220. webscout/scout/utils.py +38 -37
  221. webscout/search/__init__.py +47 -0
  222. webscout/search/base.py +201 -0
  223. webscout/search/bing_main.py +45 -0
  224. webscout/search/brave_main.py +92 -0
  225. webscout/search/duckduckgo_main.py +57 -0
  226. webscout/search/engines/__init__.py +127 -0
  227. webscout/search/engines/bing/__init__.py +15 -0
  228. webscout/search/engines/bing/base.py +35 -0
  229. webscout/search/engines/bing/images.py +114 -0
  230. webscout/search/engines/bing/news.py +96 -0
  231. webscout/search/engines/bing/suggestions.py +36 -0
  232. webscout/search/engines/bing/text.py +109 -0
  233. webscout/search/engines/brave/__init__.py +19 -0
  234. webscout/search/engines/brave/base.py +47 -0
  235. webscout/search/engines/brave/images.py +213 -0
  236. webscout/search/engines/brave/news.py +353 -0
  237. webscout/search/engines/brave/suggestions.py +318 -0
  238. webscout/search/engines/brave/text.py +167 -0
  239. webscout/search/engines/brave/videos.py +364 -0
  240. webscout/search/engines/duckduckgo/__init__.py +25 -0
  241. webscout/search/engines/duckduckgo/answers.py +80 -0
  242. webscout/search/engines/duckduckgo/base.py +189 -0
  243. webscout/search/engines/duckduckgo/images.py +100 -0
  244. webscout/search/engines/duckduckgo/maps.py +183 -0
  245. webscout/search/engines/duckduckgo/news.py +70 -0
  246. webscout/search/engines/duckduckgo/suggestions.py +22 -0
  247. webscout/search/engines/duckduckgo/text.py +221 -0
  248. webscout/search/engines/duckduckgo/translate.py +48 -0
  249. webscout/search/engines/duckduckgo/videos.py +80 -0
  250. webscout/search/engines/duckduckgo/weather.py +84 -0
  251. webscout/search/engines/mojeek.py +61 -0
  252. webscout/search/engines/wikipedia.py +77 -0
  253. webscout/search/engines/yahoo/__init__.py +41 -0
  254. webscout/search/engines/yahoo/answers.py +19 -0
  255. webscout/search/engines/yahoo/base.py +34 -0
  256. webscout/search/engines/yahoo/images.py +323 -0
  257. webscout/search/engines/yahoo/maps.py +19 -0
  258. webscout/search/engines/yahoo/news.py +258 -0
  259. webscout/search/engines/yahoo/suggestions.py +140 -0
  260. webscout/search/engines/yahoo/text.py +273 -0
  261. webscout/search/engines/yahoo/translate.py +19 -0
  262. webscout/search/engines/yahoo/videos.py +302 -0
  263. webscout/search/engines/yahoo/weather.py +220 -0
  264. webscout/search/engines/yandex.py +67 -0
  265. webscout/search/engines/yep/__init__.py +13 -0
  266. webscout/search/engines/yep/base.py +34 -0
  267. webscout/search/engines/yep/images.py +101 -0
  268. webscout/search/engines/yep/suggestions.py +38 -0
  269. webscout/search/engines/yep/text.py +99 -0
  270. webscout/search/http_client.py +172 -0
  271. webscout/search/results.py +141 -0
  272. webscout/search/yahoo_main.py +57 -0
  273. webscout/search/yep_main.py +48 -0
  274. webscout/server/__init__.py +48 -0
  275. webscout/server/config.py +78 -0
  276. webscout/server/exceptions.py +69 -0
  277. webscout/server/providers.py +286 -0
  278. webscout/server/request_models.py +131 -0
  279. webscout/server/request_processing.py +404 -0
  280. webscout/server/routes.py +642 -0
  281. webscout/server/server.py +351 -0
  282. webscout/server/ui_templates.py +1171 -0
  283. webscout/swiftcli/__init__.py +79 -95
  284. webscout/swiftcli/core/__init__.py +7 -7
  285. webscout/swiftcli/core/cli.py +574 -297
  286. webscout/swiftcli/core/context.py +98 -104
  287. webscout/swiftcli/core/group.py +268 -241
  288. webscout/swiftcli/decorators/__init__.py +28 -28
  289. webscout/swiftcli/decorators/command.py +243 -221
  290. webscout/swiftcli/decorators/options.py +247 -220
  291. webscout/swiftcli/decorators/output.py +392 -252
  292. webscout/swiftcli/exceptions.py +21 -21
  293. webscout/swiftcli/plugins/__init__.py +9 -9
  294. webscout/swiftcli/plugins/base.py +134 -135
  295. webscout/swiftcli/plugins/manager.py +269 -269
  296. webscout/swiftcli/utils/__init__.py +58 -59
  297. webscout/swiftcli/utils/formatting.py +251 -252
  298. webscout/swiftcli/utils/parsing.py +368 -267
  299. webscout/update_checker.py +280 -136
  300. webscout/utils.py +28 -14
  301. webscout/version.py +2 -1
  302. webscout/version.py.bak +3 -0
  303. webscout/zeroart/__init__.py +218 -135
  304. webscout/zeroart/base.py +70 -66
  305. webscout/zeroart/effects.py +155 -101
  306. webscout/zeroart/fonts.py +1799 -1239
  307. webscout-2026.1.19.dist-info/METADATA +638 -0
  308. webscout-2026.1.19.dist-info/RECORD +312 -0
  309. {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/WHEEL +1 -1
  310. {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/entry_points.txt +1 -1
  311. webscout/DWEBS.py +0 -520
  312. webscout/Extra/Act.md +0 -309
  313. webscout/Extra/GitToolkit/gitapi/README.md +0 -110
  314. webscout/Extra/autocoder/__init__.py +0 -9
  315. webscout/Extra/autocoder/autocoder.py +0 -1105
  316. webscout/Extra/autocoder/autocoder_utiles.py +0 -332
  317. webscout/Extra/gguf.md +0 -430
  318. webscout/Extra/weather.md +0 -281
  319. webscout/Litlogger/README.md +0 -10
  320. webscout/Litlogger/__init__.py +0 -15
  321. webscout/Litlogger/formats.py +0 -4
  322. webscout/Litlogger/handlers.py +0 -103
  323. webscout/Litlogger/levels.py +0 -13
  324. webscout/Litlogger/logger.py +0 -92
  325. webscout/Provider/AI21.py +0 -177
  326. webscout/Provider/AISEARCH/DeepFind.py +0 -254
  327. webscout/Provider/AISEARCH/felo_search.py +0 -202
  328. webscout/Provider/AISEARCH/genspark_search.py +0 -324
  329. webscout/Provider/AISEARCH/hika_search.py +0 -186
  330. webscout/Provider/AISEARCH/scira_search.py +0 -298
  331. webscout/Provider/Aitopia.py +0 -316
  332. webscout/Provider/AllenAI.py +0 -440
  333. webscout/Provider/Blackboxai.py +0 -791
  334. webscout/Provider/ChatGPTClone.py +0 -237
  335. webscout/Provider/ChatGPTGratis.py +0 -194
  336. webscout/Provider/Cloudflare.py +0 -324
  337. webscout/Provider/ExaChat.py +0 -358
  338. webscout/Provider/Flowith.py +0 -217
  339. webscout/Provider/FreeGemini.py +0 -250
  340. webscout/Provider/Glider.py +0 -225
  341. webscout/Provider/HF_space/__init__.py +0 -0
  342. webscout/Provider/HF_space/qwen_qwen2.py +0 -206
  343. webscout/Provider/HuggingFaceChat.py +0 -469
  344. webscout/Provider/Hunyuan.py +0 -283
  345. webscout/Provider/LambdaChat.py +0 -411
  346. webscout/Provider/Llama3.py +0 -259
  347. webscout/Provider/Nemotron.py +0 -218
  348. webscout/Provider/OLLAMA.py +0 -396
  349. webscout/Provider/OPENAI/BLACKBOXAI.py +0 -766
  350. webscout/Provider/OPENAI/Cloudflare.py +0 -378
  351. webscout/Provider/OPENAI/FreeGemini.py +0 -283
  352. webscout/Provider/OPENAI/NEMOTRON.py +0 -232
  353. webscout/Provider/OPENAI/Qwen3.py +0 -283
  354. webscout/Provider/OPENAI/api.py +0 -969
  355. webscout/Provider/OPENAI/c4ai.py +0 -373
  356. webscout/Provider/OPENAI/chatgptclone.py +0 -494
  357. webscout/Provider/OPENAI/copilot.py +0 -242
  358. webscout/Provider/OPENAI/flowith.py +0 -162
  359. webscout/Provider/OPENAI/freeaichat.py +0 -359
  360. webscout/Provider/OPENAI/mcpcore.py +0 -389
  361. webscout/Provider/OPENAI/multichat.py +0 -376
  362. webscout/Provider/OPENAI/opkfc.py +0 -496
  363. webscout/Provider/OPENAI/scirachat.py +0 -477
  364. webscout/Provider/OPENAI/standardinput.py +0 -433
  365. webscout/Provider/OPENAI/typegpt.py +0 -364
  366. webscout/Provider/OPENAI/uncovrAI.py +0 -463
  367. webscout/Provider/OPENAI/venice.py +0 -431
  368. webscout/Provider/OPENAI/yep.py +0 -382
  369. webscout/Provider/OpenGPT.py +0 -209
  370. webscout/Provider/Perplexitylabs.py +0 -415
  371. webscout/Provider/Reka.py +0 -214
  372. webscout/Provider/StandardInput.py +0 -290
  373. webscout/Provider/TTI/aiarta.py +0 -365
  374. webscout/Provider/TTI/artbit.py +0 -0
  375. webscout/Provider/TTI/fastflux.py +0 -200
  376. webscout/Provider/TTI/piclumen.py +0 -203
  377. webscout/Provider/TTI/pixelmuse.py +0 -225
  378. webscout/Provider/TTS/gesserit.py +0 -128
  379. webscout/Provider/TTS/sthir.py +0 -94
  380. webscout/Provider/TeachAnything.py +0 -229
  381. webscout/Provider/UNFINISHED/puterjs.py +0 -635
  382. webscout/Provider/UNFINISHED/test_lmarena.py +0 -119
  383. webscout/Provider/Venice.py +0 -258
  384. webscout/Provider/VercelAI.py +0 -253
  385. webscout/Provider/Writecream.py +0 -246
  386. webscout/Provider/WritingMate.py +0 -269
  387. webscout/Provider/asksteve.py +0 -220
  388. webscout/Provider/chatglm.py +0 -215
  389. webscout/Provider/copilot.py +0 -425
  390. webscout/Provider/freeaichat.py +0 -285
  391. webscout/Provider/granite.py +0 -235
  392. webscout/Provider/hermes.py +0 -266
  393. webscout/Provider/koala.py +0 -170
  394. webscout/Provider/lmarena.py +0 -198
  395. webscout/Provider/multichat.py +0 -364
  396. webscout/Provider/scira_chat.py +0 -299
  397. webscout/Provider/scnet.py +0 -243
  398. webscout/Provider/talkai.py +0 -194
  399. webscout/Provider/typegpt.py +0 -289
  400. webscout/Provider/uncovr.py +0 -368
  401. webscout/Provider/yep.py +0 -389
  402. webscout/litagent/Readme.md +0 -276
  403. webscout/litprinter/__init__.py +0 -59
  404. webscout/swiftcli/Readme.md +0 -323
  405. webscout/tempid.py +0 -128
  406. webscout/webscout_search.py +0 -1184
  407. webscout/webscout_search_async.py +0 -654
  408. webscout/yep_search.py +0 -347
  409. webscout/zeroart/README.md +0 -89
  410. webscout-8.2.9.dist-info/METADATA +0 -1033
  411. webscout-8.2.9.dist-info/RECORD +0 -289
  412. {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/licenses/LICENSE.md +0 -0
  413. {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/top_level.txt +0 -0
webscout/zeroart/fonts.py CHANGED
@@ -1,1239 +1,1799 @@
1
- """
2
- ZeroArt Fonts: Predefined ASCII art fonts
3
- """
4
-
5
- from typing import Dict, List
6
- from .base import ZeroArtFont
7
-
8
- class BlockFont(ZeroArtFont):
9
- """Block-style ASCII art font"""
10
- def __init__(self) -> None:
11
- super().__init__("block")
12
- self.letters: Dict[str, List[str]] = {
13
- ' ': [" ", " ", " ", " ", " "]
14
- }
15
- self._populate_letters()
16
-
17
- def _populate_letters(self) -> None:
18
- """Populate the font with predefined letters"""
19
- block_letters = {
20
- 'A': [
21
- " █████ ",
22
- " ██ ██ ",
23
- " ███████ ",
24
- " ██ ██ ",
25
- " ██ ██ "
26
- ],
27
- 'B': [
28
- " ██████ ",
29
- " ██ ██ ",
30
- " ██████ ",
31
- " ██ ██ ",
32
- " ██████ "
33
- ],
34
- 'C': [
35
- " ██████ ",
36
- " ██ ",
37
- " ██ ",
38
- " ██ ",
39
- " ██████ "
40
- ],
41
- 'D': [
42
- " ██████ ",
43
- " ██ ██ ",
44
- " ██ ██ ",
45
- " ██ ██ ",
46
- " ██████ "
47
- ],
48
- 'E': [
49
- " ███████ ",
50
- " ██ ",
51
- " ██████ ",
52
- " ██ ",
53
- " ███████ "
54
- ],
55
- 'F': [
56
- " ███████ ",
57
- " ██ ",
58
- " ██████ ",
59
- " ██ ",
60
- " ██ "
61
- ],
62
- 'G': [
63
- " ██████ ",
64
- " ██ ",
65
- " ██ ███ ",
66
- " ██ ██ ",
67
- " ██████ "
68
- ],
69
- 'H': [
70
- " ██ ██ ",
71
- " ██ ██ ",
72
- " ███████ ",
73
- " ██ ██ ",
74
- " ██ ██ "
75
- ],
76
- 'I': [
77
- " ███████ ",
78
- " ██ ",
79
- " ██ ",
80
- " ██ ",
81
- " ███████ "
82
- ],
83
- 'J': [
84
- " ██ ",
85
- " ██ ",
86
- " ██ ",
87
- " ██ ██ ",
88
- " █████ "
89
- ],
90
- 'K': [
91
- " ██ ██ ",
92
- " ██ ██ ",
93
- " ████ ",
94
- " ██ ██ ",
95
- " ██ ██ "
96
- ],
97
- 'L': [
98
- " ██ ",
99
- " ██ ",
100
- " ██ ",
101
- " ██ ",
102
- " ███████ "
103
- ],
104
- 'M': [
105
- " ██ ██ ",
106
- " ███ ███ ",
107
- " ████ ",
108
- " ██ ██ ",
109
- " ██ ██ "
110
- ],
111
- 'N': [
112
- " ██ ██ ",
113
- " ███ ██ ",
114
- " ████ ",
115
- " ██ ███ ",
116
- " ██ ██ "
117
- ],
118
- 'O': [
119
- " █████ ",
120
- " ██ ██ ",
121
- " ██ ██ ",
122
- " ██ ██ ",
123
- " █████ "
124
- ],
125
- 'P': [
126
- " ██████ ",
127
- " ██ ██ ",
128
- " ██████ ",
129
- " ██ ",
130
- " ██ "
131
- ],
132
- 'Q': [
133
- " █████ ",
134
- " ██ ██ ",
135
- " ██ ██ ",
136
- " ██ ██ ",
137
- " ██████ "
138
- ],
139
- 'R': [
140
- " ██████ ",
141
- " ██ ██ ",
142
- " ██████ ",
143
- " ██ ██ ",
144
- " ██ ██ "
145
- ],
146
- 'S': [
147
- " ██████ ",
148
- " ██ ",
149
- " ██████ ",
150
- " ██ ",
151
- " ██████ "
152
- ],
153
- 'T': [
154
- " ███████ ",
155
- " ██ ",
156
- " ██ ",
157
- " ██ ",
158
- " ██ "
159
- ],
160
- 'U': [
161
- " ██ ██ ",
162
- " ██ ██ ",
163
- " ██ ██ ",
164
- " ██ ██ ",
165
- " █████ "
166
- ],
167
- 'V': [
168
- " ██ ██ ",
169
- " ██ ██ ",
170
- " ██ ██ ",
171
- " ██ ██ ",
172
- " ███ "
173
- ],
174
- 'W': [
175
- " ██ ██ ",
176
- " ██ ██ ",
177
- " ████ ",
178
- " ███ ███ ",
179
- " ██ ██ "
180
- ],
181
- 'X': [
182
- " ██ ██ ",
183
- " ██ ██ ",
184
- " ███ ",
185
- " ██ ██ ",
186
- " ██ ██ "
187
- ],
188
- 'Y': [
189
- " ██ ██ ",
190
- " ██ ██ ",
191
- " ███ ",
192
- " ███ ",
193
- " ███ "
194
- ],
195
- 'Z': [
196
- " ███████ ",
197
- " ██ ",
198
- " ██ ",
199
- " ██ ",
200
- " ███████ "
201
- ]
202
- }
203
-
204
- self.letters.update(block_letters)
205
-
206
- class SlantFont(ZeroArtFont):
207
- """Slanted ASCII art font"""
208
- def __init__(self) -> None:
209
- super().__init__("slant")
210
- self.letters: Dict[str, List[str]] = {
211
- ' ': [" ", " ", " ", " ", " "]
212
- }
213
- self._populate_letters()
214
-
215
- def _populate_letters(self) -> None:
216
- """Populate the font with predefined letters"""
217
- slant_letters = {
218
- 'A': [
219
- " /\\ ",
220
- " / \\ ",
221
- " / /\\ \\ ",
222
- " / ____ \\ ",
223
- "/_/ \\_\\"
224
- ],
225
- 'B': [
226
- " ____ ",
227
- "| _ \\ ",
228
- "| |_) |",
229
- "| _ < ",
230
- "| |_) |",
231
- "|____/ "
232
- ],
233
- 'C': [
234
- " _____ ",
235
- " / ____| ",
236
- "| | ",
237
- "| | ",
238
- " \\_____| "
239
- ],
240
- 'D': [
241
- " _____ ",
242
- "| __ \\ ",
243
- "| | | | ",
244
- "| | | | ",
245
- "| |__| | ",
246
- "|_____/ "
247
- ],
248
- 'E': [
249
- " ______ ",
250
- "| ____| ",
251
- "| |__ ",
252
- "| __| ",
253
- "| |____ ",
254
- "|______| "
255
- ],
256
- 'F': [
257
- " ______ ",
258
- "| ____| ",
259
- "| |__ ",
260
- "| __| ",
261
- "| | ",
262
- "|_| "
263
- ],
264
- 'G': [
265
- " _____ ",
266
- " / ____| ",
267
- "| | __ ",
268
- "| | |_ | ",
269
- "| |__| | ",
270
- " \\_____| "
271
- ],
272
- 'H': [
273
- " _ _ ",
274
- "| | | | ",
275
- "| |__| | ",
276
- "| __ | ",
277
- "|_| |_| "
278
- ],
279
- 'I': [
280
- " _____ ",
281
- "|_ _|",
282
- " | | ",
283
- " | | ",
284
- " _| |_ ",
285
- "|_____|"
286
- ],
287
- 'J': [
288
- " ___ ",
289
- " |_ |",
290
- " | |",
291
- " _ | |",
292
- "| |__| |",
293
- " \\____/ "
294
- ],
295
- 'K': [
296
- " _ __ ",
297
- "| |/ / ",
298
- "| ' / ",
299
- "| < ",
300
- "| . \\ ",
301
- "|_|\\_\\ "
302
- ],
303
- 'L': [
304
- " _ ",
305
- "| | ",
306
- "| | ",
307
- "| | ",
308
- "| |____ ",
309
- "|______|"
310
- ],
311
- 'M': [
312
- " __ __ ",
313
- "| \\/ |",
314
- "| |\\/| |",
315
- "| | | |",
316
- "|_| |_|",
317
- " "
318
- ],
319
- 'N': [
320
- " _ _ ",
321
- "| \\ | |",
322
- "| \\| |",
323
- "| . ` |",
324
- "| |\\ |",
325
- "|_| \\_|"
326
- ],
327
- 'O': [
328
- " _____ ",
329
- " / ____| ",
330
- "| | __ ",
331
- "| | |_ | ",
332
- "| |__| | ",
333
- " \\_____| "
334
- ],
335
- 'P': [
336
- " _____ ",
337
- "| __ \\ ",
338
- "| |__) | ",
339
- "| ___/ ",
340
- "| | ",
341
- "|_| "
342
- ],
343
- 'Q': [
344
- " _____ ",
345
- " / ____| ",
346
- "| | __ ",
347
- "| | |_ | ",
348
- "| |__| | ",
349
- " \\____/\\ "
350
- ],
351
- 'R': [
352
- " _____ ",
353
- "| __ \\ ",
354
- "| |__) | ",
355
- "| _ / ",
356
- "| | \\ \\ ",
357
- "|_| \\_\\ "
358
- ],
359
- 'S': [
360
- " _____ ",
361
- " / ____| ",
362
- "| (___ ",
363
- " \\___ \\ ",
364
- " ____) | ",
365
- "|_____/ "
366
- ],
367
- 'T': [
368
- " ______ ",
369
- "|_ _| ",
370
- " | | ",
371
- " | | ",
372
- " | | ",
373
- " |_| "
374
- ],
375
- 'U': [
376
- " _ _ ",
377
- "| | | | ",
378
- "| | | | ",
379
- "| | | | ",
380
- "| |__| | ",
381
- " \\____/ "
382
- ],
383
- 'V': [
384
- " __ __ ",
385
- " \\ \\ / / ",
386
- " \\ \\_/ / ",
387
- " \\ / ",
388
- " \\_/ "
389
- ],
390
- 'W': [
391
- " __ __ ",
392
- " \\ \\ / / ",
393
- " \\ \\/ / ",
394
- " \\ / ",
395
- " \\/ "
396
- ],
397
- 'X': [
398
- " __ __ ",
399
- " \\ \\/ / ",
400
- " \\ / ",
401
- " / \\ ",
402
- " /_/\\_\\ "
403
- ],
404
- 'Y': [
405
- " _ _ ",
406
- "| | | |",
407
- "| | | |",
408
- "| | | |",
409
- "|_| |_|"
410
- ],
411
- 'Z': [
412
- " ______ ",
413
- "|__ / | ",
414
- " / /| | ",
415
- " / /_| | ",
416
- "/____|_| "
417
- ]
418
- }
419
-
420
- self.letters.update(slant_letters)
421
-
422
- # Add more custom fonts here
423
- class NeonFont(ZeroArtFont):
424
- """Neon-style ASCII art font"""
425
- def __init__(self) -> None:
426
- super().__init__("neon")
427
- self.letters: Dict[str, List[str]] = {
428
- ' ': [" ", " ", " ", " ", " "]
429
- }
430
- self._populate_letters()
431
-
432
- def _populate_letters(self) -> None:
433
- """Populate neon-style letters"""
434
- neon_letters = {
435
- 'A': [
436
- " ░█████░ ",
437
- " ██░░░░██ ",
438
- " ████████ ",
439
- " ██░░░░██ ",
440
- " ██░░░░██ "
441
- ],
442
- 'B': [
443
- " ████████ ",
444
- " ██░░░░██ ",
445
- " ████████ ",
446
- " ██░░░░██ ",
447
- " ████████ "
448
- ],
449
- 'C': [
450
- " ░██████ ",
451
- " ██░░░░ ",
452
- " ██ ",
453
- " ██░░░░ ",
454
- " ░██████ "
455
- ],
456
- 'D': [
457
- " ████████ ",
458
- " ██░░░░██ ",
459
- " ██░░░░██ ",
460
- " ██░░░░██ ",
461
- " ████████ "
462
- ],
463
- 'E': [
464
- " ████████ ",
465
- " ██░░░░ ",
466
- " ████████ ",
467
- " ██░░░░ ",
468
- " ████████ "
469
- ],
470
- 'F': [
471
- " ████████ ",
472
- " ██░░░░ ",
473
- " ████████ ",
474
- " ██░░░░ ",
475
- " ██░░░░ "
476
- ],
477
- 'G': [
478
- " ░██████ ",
479
- " ██░░░░ ",
480
- " ██ ████ ",
481
- " ██░░░░██ ",
482
- " ░██████ "
483
- ],
484
- 'H': [
485
- " ██░░░░██ ",
486
- " ██░░░░██ ",
487
- " ████████ ",
488
- " ██░░░░██ ",
489
- " ██░░░░██ "
490
- ],
491
- 'I': [
492
- " ████████ ",
493
- " ██░░ ",
494
- " ██░░ ",
495
- " ██░░ ",
496
- " ████████ "
497
- ],
498
- 'J': [
499
- " ██░ ",
500
- " ██░ ",
501
- " ██░ ",
502
- " ██░░░░██ ",
503
- " ██████ "
504
- ],
505
- 'K': [
506
- " ██░░░░██ ",
507
- " ██░░██░ ",
508
- " ████░░ ",
509
- " ██░░██░ ",
510
- " ██░░░░██ "
511
- ],
512
- 'L': [
513
- " ██░░░░ ",
514
- " ██░░░░ ",
515
- " ██░░░░ ",
516
- " ██░░░░ ",
517
- " ████████ "
518
- ],
519
- 'M': [
520
- " ██░░░░██ ",
521
- " ███░░███ ",
522
- " ██░█░███ ",
523
- " ██░░░░██ ",
524
- " ██░░░░██ "
525
- ],
526
- 'N': [
527
- " ██░░░░██ ",
528
- " ███░░░██ ",
529
- " ██░█░░██ ",
530
- " ██░░█░██ ",
531
- " ██░░░███ "
532
- ],
533
- 'O': [
534
- " ██████ ",
535
- " ██░░░░██ ",
536
- " ██░░░░██ ",
537
- " ██░░░░██ ",
538
- " ██████ "
539
- ],
540
- 'P': [
541
- " ████████ ",
542
- " ██░░░░██ ",
543
- " ████████ ",
544
- " ██░░░░ ",
545
- " ██░░░░ "
546
- ],
547
- 'Q': [
548
- " ██████ ",
549
- " ██░░░░██ ",
550
- " ██░░░░██ ",
551
- " ██░░██░ ",
552
- " ██████░ "
553
- ],
554
- 'R': [
555
- " ████████ ",
556
- " ██░░░░██ ",
557
- " ████████ ",
558
- " ██░░██░ ",
559
- " ██░░░░██ "
560
- ],
561
- 'S': [
562
- " ██████░ ",
563
- " ██░░░░ ",
564
- " ██████ ",
565
- " ░░██ ",
566
- " ████████ "
567
- ],
568
- 'T': [
569
- " ████████ ",
570
- " ██░░ ",
571
- " ██░░ ",
572
- " ██░░ ",
573
- " ██░░ "
574
- ],
575
- 'U': [
576
- " ██░░░░██ ",
577
- " ██░░░░██ ",
578
- " ██░░░░██ ",
579
- " ██░░░░██ ",
580
- " ██████ "
581
- ],
582
- 'V': [
583
- " ██░░░░██ ",
584
- " ██░░░░██ ",
585
- " ██░░░░██ ",
586
- " ██░░██ ",
587
- " ████ "
588
- ],
589
- 'W': [
590
- " ██░░░░██ ",
591
- " ██░░░░██ ",
592
- " ██░█░░██ ",
593
- " ███░███░ ",
594
- " ██░░██ "
595
- ],
596
- 'X': [
597
- " ██░░░░██ ",
598
- " ██░░██ ",
599
- " ████ ",
600
- " ██░░██ ",
601
- " ██░░░░██ "
602
- ],
603
- 'Y': [
604
- " ██░░░░██ ",
605
- " ██░░██ ",
606
- " ████ ",
607
- " ██░░ ",
608
- " ██░░ "
609
- ],
610
- 'Z': [
611
- " ████████ ",
612
- " ██░ ",
613
- " ██░ ",
614
- " ██░ ",
615
- " ████████ "
616
- ]
617
- }
618
-
619
- self.letters.update(neon_letters)
620
-
621
- class CyberFont(ZeroArtFont):
622
- """Cyberpunk-style ASCII art font"""
623
- def __init__(self) -> None:
624
- super().__init__("cyber")
625
- self.letters: Dict[str, List[str]] = {
626
- ' ': [" ", " ", " ", " ", " "]
627
- }
628
- self._populate_letters()
629
-
630
- def _populate_letters(self) -> None:
631
- """Populate cyberpunk-style letters"""
632
- cyber_letters = {
633
- 'A': [
634
- " ▓█▓▓▓▓ ",
635
- " ▓▓ ▓▓ ",
636
- " ▓▓▓▓▓▓▓ ",
637
- " ▓▓ ▓▓ ",
638
- " ▓▓ ▓▓ "
639
- ],
640
- 'B': [
641
- " ▓▓▓▓▓▓▓ ",
642
- " ▓▓ ▓▓ ",
643
- " ▓▓▓▓▓▓▓ ",
644
- " ▓▓ ▓▓ ",
645
- " ▓▓▓▓▓▓▓ "
646
- ],
647
- 'C': [
648
- " ▓▓▓▓▓▓▓ ",
649
- " ▓▓ ",
650
- " ▓▓ ",
651
- " ▓▓ ",
652
- " ▓▓▓▓▓▓▓ "
653
- ],
654
- 'D': [
655
- " ▓▓▓▓▓▓ ",
656
- " ▓▓ ▓▓ ",
657
- " ▓▓ ▓▓ ",
658
- " ▓▓ ▓▓ ",
659
- " ▓▓▓▓▓▓ "
660
- ],
661
- 'E': [
662
- " ▓▓▓▓▓▓▓ ",
663
- " ▓▓ ",
664
- " ▓▓▓▓▓▓ ",
665
- " ▓▓ ",
666
- " ▓▓▓▓▓▓▓ "
667
- ],
668
- 'F': [
669
- " ▓▓▓▓▓▓▓ ",
670
- " ▓▓ ",
671
- " ▓▓▓▓▓▓ ",
672
- " ▓▓ ",
673
- " ▓▓ "
674
- ],
675
- 'G': [
676
- " ▓▓▓▓▓▓▓ ",
677
- " ▓▓ ",
678
- " ▓▓ ▓▓▓ ",
679
- " ▓▓ ▓▓ ",
680
- " ▓▓▓▓▓▓▓ "
681
- ],
682
- 'H': [
683
- " ▓▓ ▓▓ ",
684
- " ▓▓ ▓▓ ",
685
- " ▓▓▓▓▓▓▓ ",
686
- " ▓▓ ▓▓ ",
687
- " ▓▓ ▓▓ "
688
- ],
689
- 'I': [
690
- " ▓▓▓▓▓▓▓ ",
691
- " ▓▓ ",
692
- " ▓▓ ",
693
- " ▓▓ ",
694
- " ▓▓▓▓▓▓▓ "
695
- ],
696
- 'J': [
697
- " ▓▓ ",
698
- " ▓▓ ",
699
- " ▓▓ ",
700
- " ▓▓ ▓▓ ",
701
- " ▓▓▓▓▓ "
702
- ],
703
- 'K': [
704
- " ▓▓ ▓▓ ",
705
- " ▓▓ ▓▓ ",
706
- " ▓▓▓▓▓ ",
707
- " ▓▓ ▓▓ ",
708
- " ▓▓ ▓▓ "
709
- ],
710
- 'L': [
711
- " ▓▓ ",
712
- " ▓▓ ",
713
- " ▓▓ ",
714
- " ▓▓ ",
715
- " ▓▓▓▓▓▓▓ "
716
- ],
717
- 'M': [
718
- " ▓▓ ▓▓ ",
719
- " ▓▓▓ ▓▓▓ ",
720
- " ▓▓▓▓▓▓▓ ",
721
- " ▓▓ ▓▓ ",
722
- " ▓▓ ▓▓ "
723
- ],
724
- 'N': [
725
- " ▓▓ ▓▓ ",
726
- " ▓▓▓ ▓▓ ",
727
- " ▓▓▓▓ ",
728
- " ▓▓ ▓▓▓ ",
729
- " ▓▓ ▓▓ "
730
- ],
731
- 'O': [
732
- " ▓▓▓▓▓▓▓ ",
733
- " ▓▓ ▓▓ ",
734
- " ▓▓ ▓▓ ",
735
- " ▓▓ ▓▓ ",
736
- " ▓▓▓▓▓▓▓ "
737
- ],
738
- 'P': [
739
- " ▓▓▓▓▓▓▓ ",
740
- " ▓▓ ▓▓ ",
741
- " ▓▓▓▓▓▓▓ ",
742
- " ▓▓ ",
743
- " ▓▓ "
744
- ],
745
- 'Q': [
746
- " ▓▓▓▓▓▓ ",
747
- " ▓▓ ▓▓ ",
748
- " ▓▓ ▓▓ ",
749
- " ▓▓ ▓▓▓ ",
750
- " ▓▓▓▓▓ "
751
- ],
752
- 'R': [
753
- " ▓▓▓▓▓▓ ",
754
- " ▓▓ ▓▓ ",
755
- " ▓▓▓▓▓▓ ",
756
- " ▓▓ ▓▓ ",
757
- " ▓▓ ▓▓ "
758
- ],
759
- 'S': [
760
- " ▓▓▓▓▓▓▓ ",
761
- " ▓▓ ",
762
- " ▓▓▓▓▓▓▓ ",
763
- " ▓▓ ",
764
- " ▓▓▓▓▓▓▓ "
765
- ],
766
- 'T': [
767
- " ▓▓▓▓▓▓▓ ",
768
- " ▓▓ ",
769
- " ▓▓ ",
770
- " ▓▓ ",
771
- " ▓▓ "
772
- ],
773
- 'U': [
774
- " ▓▓ ▓▓ ",
775
- " ▓▓ ▓▓ ",
776
- " ▓▓ ▓▓ ",
777
- " ▓▓ ▓▓ ",
778
- " ▓▓▓▓▓▓▓ "
779
- ],
780
- 'V': [
781
- " ▓▓ ▓▓ ",
782
- " ▓▓ ▓▓ ",
783
- " ▓▓ ▓▓ ",
784
- " ▓▓ ▓▓ ",
785
- " ▓▓▓ "
786
- ],
787
- 'W': [
788
- " ▓▓ ▓▓ ",
789
- " ▓▓ ▓▓ ",
790
- " ▓▓▓▓ ",
791
- " ▓▓▓ ▓▓▓ ",
792
- " ▓▓ ▓▓ "
793
- ],
794
- 'X': [
795
- " ▓▓ ▓▓ ",
796
- " ▓▓ ▓▓ ",
797
- " ▓▓▓ ",
798
- " ▓▓ ▓▓ ",
799
- " ▓▓ ▓▓ "
800
- ],
801
- 'Y': [
802
- " ▓▓ ▓▓ ",
803
- " ▓▓ ▓▓ ",
804
- " ▓▓ ",
805
- " ▓▓ ",
806
- " ▓▓ "
807
- ],
808
- 'Z': [
809
- " ▓▓▓▓▓▓▓ ",
810
- " ▓▓ ",
811
- " ▓▓ ",
812
- " ▓▓ ",
813
- " ▓▓▓▓▓▓▓ "
814
- ]
815
- }
816
-
817
- self.letters.update(cyber_letters)
818
-
819
- class DottedFont(ZeroArtFont):
820
- """Dotted-style ASCII art font"""
821
- def __init__(self) -> None:
822
- super().__init__("dotted")
823
- self.letters: Dict[str, List[str]] = {
824
- ' ': [" ", " ", " ", " ", " "]
825
- }
826
- self._populate_letters()
827
-
828
- def _populate_letters(self) -> None:
829
- """Populate dotted-style letters"""
830
- dotted_letters = {
831
- 'A': [
832
- " ........ ",
833
- " :: :: ",
834
- " :::::::: ",
835
- " :: :: ",
836
- " :: :: "
837
- ],
838
- 'B': [
839
- " ::::::: ",
840
- " :: :: ",
841
- " ::::::: ",
842
- " :: :: ",
843
- " ::::::: "
844
- ],
845
- 'C': [
846
- " ::::::: ",
847
- " :: ",
848
- " :: ",
849
- " :: ",
850
- " ::::::: "
851
- ],
852
- 'D': [
853
- " ::::::: ",
854
- " :: :: ",
855
- " :: :: ",
856
- " :: :: ",
857
- " ::::::: "
858
- ],
859
- 'E': [
860
- " :::::::: ",
861
- " :: ",
862
- " :::::: ",
863
- " :: ",
864
- " :::::::: "
865
- ],
866
- 'F': [
867
- " :::::::: ",
868
- " :: ",
869
- " :::::: ",
870
- " :: ",
871
- " :: "
872
- ],
873
- 'G': [
874
- " ::::::: ",
875
- " :: ",
876
- " :: :::: ",
877
- " :: :: ",
878
- " ::::::: "
879
- ],
880
- 'H': [
881
- " :: :: ",
882
- " :: :: ",
883
- " :::::::: ",
884
- " :: :: ",
885
- " :: :: "
886
- ],
887
- 'I': [
888
- " :::::::: ",
889
- " :: ",
890
- " :: ",
891
- " :: ",
892
- " :::::::: "
893
- ],
894
- 'J': [
895
- " :: ",
896
- " :: ",
897
- " :: ",
898
- " :: :: ",
899
- " :::::: "
900
- ],
901
- 'K': [
902
- " :: :: ",
903
- " :: :: ",
904
- " ::::: ",
905
- " :: :: ",
906
- " :: :: "
907
- ],
908
- 'L': [
909
- " :: ",
910
- " :: ",
911
- " :: ",
912
- " :: ",
913
- " :::::::: "
914
- ],
915
- 'M': [
916
- " :: :: ",
917
- " ::: ::: ",
918
- " :: :: :: ",
919
- " :: :: ",
920
- " :: :: "
921
- ],
922
- 'N': [
923
- " :: :: ",
924
- " ::: :: ",
925
- " :: :: :: ",
926
- " :: :::: ",
927
- " :: :: "
928
- ],
929
- 'O': [
930
- " :::::: ",
931
- " :: :: ",
932
- " :: :: ",
933
- " :: :: ",
934
- " :::::: "
935
- ],
936
- 'P': [
937
- " ::::::: ",
938
- " :: :: ",
939
- " ::::::: ",
940
- " :: ",
941
- " :: "
942
- ],
943
- 'Q': [
944
- " :::::: ",
945
- " :: :: ",
946
- " :: :: ",
947
- " :: :::: ",
948
- " :::: : "
949
- ],
950
- 'R': [
951
- " ::::::: ",
952
- " :: :: ",
953
- " ::::::: ",
954
- " :: :: ",
955
- " :: :: "
956
- ],
957
- 'S': [
958
- " ::::::: ",
959
- " :: ",
960
- " ::::::: ",
961
- " :: ",
962
- " ::::::: "
963
- ],
964
- 'T': [
965
- " :::::::: ",
966
- " :: ",
967
- " :: ",
968
- " :: ",
969
- " :: "
970
- ],
971
- 'U': [
972
- " :: :: ",
973
- " :: :: ",
974
- " :: :: ",
975
- " :: :: ",
976
- " :::::: "
977
- ],
978
- 'V': [
979
- " :: :: ",
980
- " :: :: ",
981
- " :: :: ",
982
- " :: :: ",
983
- " :: "
984
- ],
985
- 'W': [
986
- " :: :: ",
987
- " :: :: ",
988
- " :: :: :: ",
989
- " ::: ::: ",
990
- " :: :: "
991
- ],
992
- 'X': [
993
- " :: :: ",
994
- " :: :: ",
995
- " :: ",
996
- " :: :: ",
997
- " :: :: "
998
- ],
999
- 'Y': [
1000
- " :: :: ",
1001
- " :: :: ",
1002
- " :: ",
1003
- " :: ",
1004
- " :: "
1005
- ],
1006
- 'Z': [
1007
- " :::::::: ",
1008
- " :: ",
1009
- " :: ",
1010
- " :: ",
1011
- " :::::::: "
1012
- ]
1013
- }
1014
-
1015
- self.letters.update(dotted_letters)
1016
-
1017
- class ShadowFont(ZeroArtFont):
1018
- """Shadow-style ASCII art font"""
1019
- def __init__(self) -> None:
1020
- super().__init__("shadow")
1021
- self.letters: Dict[str, List[str]] = {
1022
- ' ': [" ", " ", " ", " ", " "]
1023
- }
1024
- self._populate_letters()
1025
-
1026
- def _populate_letters(self) -> None:
1027
- """Populate shadow-style letters"""
1028
- shadow_letters = {
1029
- 'A': [
1030
- " ██ ",
1031
- " ████ ",
1032
- " ██ ██ ",
1033
- "████████ ",
1034
- "██ ██▓",
1035
- " ▓▓"
1036
- ],
1037
- 'B': [
1038
- "██████ ",
1039
- "██ ██ ",
1040
- "███████ ",
1041
- "██ ██ ",
1042
- "███████ ",
1043
- " ▓▓▓▓▓▓▓ "
1044
- ],
1045
- 'C': [
1046
- " ██████ ",
1047
- "██ ██ ",
1048
- "██ ",
1049
- "██ ██ ",
1050
- " ██████ ",
1051
- " ▓▓▓▓▓▓ "
1052
- ],
1053
- 'D': [
1054
- "██████ ",
1055
- "██ ██ ",
1056
- "██ ██ ",
1057
- "██ ██ ",
1058
- "██████ ",
1059
- "▓▓▓▓▓▓ "
1060
- ],
1061
- 'E': [
1062
- "████████ ",
1063
- "██ ",
1064
- "██████ ",
1065
- "██ ",
1066
- "████████ ",
1067
- "▓▓▓▓▓▓▓▓ "
1068
- ],
1069
- 'F': [
1070
- "████████ ",
1071
- "██ ",
1072
- "██████ ",
1073
- "██ ",
1074
- "██ ",
1075
- "▓▓ "
1076
- ],
1077
- 'G': [
1078
- " ██████ ",
1079
- "██ ",
1080
- "██ ███ ",
1081
- "██ ██ ",
1082
- " ██████ ",
1083
- " ▓▓▓▓▓▓ "
1084
- ],
1085
- 'H': [
1086
- "██ ██ ",
1087
- "██ ██ ",
1088
- "████████ ",
1089
- "██ ██ ",
1090
- "██ ██ ",
1091
- "▓▓ ▓▓ "
1092
- ],
1093
- 'I': [
1094
- "████████ ",
1095
- " ██ ",
1096
- " ██ ",
1097
- " ██ ",
1098
- "████████ ",
1099
- "▓▓▓▓▓▓▓▓ "
1100
- ],
1101
- 'J': [
1102
- " ██ ",
1103
- " ██ ",
1104
- " ██ ",
1105
- "██ ██ ",
1106
- " █████ ",
1107
- " ▓▓▓▓ "
1108
- ],
1109
- 'K': [
1110
- "██ ██ ",
1111
- "██ ██ ",
1112
- "█████ ",
1113
- "██ ██ ",
1114
- "██ ██ ",
1115
- "▓▓ ▓▓ "
1116
- ],
1117
- 'L': [
1118
- "██ ",
1119
- "██ ",
1120
- "██ ",
1121
- "██ ",
1122
- "████████ ",
1123
- "▓▓▓▓▓▓▓▓ "
1124
- ],
1125
- 'M': [
1126
- "██ ██ ",
1127
- "███ ███ ",
1128
- "████████ ",
1129
- "██ ██ ██ ",
1130
- "██ ██ ",
1131
- "▓▓ ▓▓ "
1132
- ],
1133
- 'N': [
1134
- "██ ██ ",
1135
- "███ ██ ",
1136
- "████ ██ ",
1137
- "██ ██ ██ ",
1138
- "██ ███ ",
1139
- "▓▓ ▓▓ "
1140
- ],
1141
- 'O': [
1142
- " ██████ ",
1143
- "██ ██ ",
1144
- "██ ██ ",
1145
- "██ ██ ",
1146
- " ██████ ",
1147
- " ▓▓▓▓▓▓ "
1148
- ],
1149
- 'P': [
1150
- "███████ ",
1151
- "██ ██ ",
1152
- "███████ ",
1153
- "██ ",
1154
- "██ ",
1155
- "▓▓ "
1156
- ],
1157
- 'Q': [
1158
- " ██████ ",
1159
- "██ ██ ",
1160
- "██ ██ ",
1161
- "██ ▄▄ ██ ",
1162
- " ██████ ",
1163
- " ▓▓▓▓▓▓▓"
1164
- ],
1165
- 'R': [
1166
- "███████ ",
1167
- "██ ██ ",
1168
- "███████ ",
1169
- "██ ██ ",
1170
- "██ ██ ",
1171
- "▓▓ ▓▓ "
1172
- ],
1173
- 'S': [
1174
- " ██████ ",
1175
- "██ ",
1176
- " ██████ ",
1177
- " ██ ",
1178
- "███████ ",
1179
- "▓▓▓▓▓▓▓ "
1180
- ],
1181
- 'T': [
1182
- "████████ ",
1183
- " ██ ",
1184
- " ██ ",
1185
- " ██ ",
1186
- " ██ ",
1187
- " ▓▓ "
1188
- ],
1189
- 'U': [
1190
- "██ ██ ",
1191
- "██ ██ ",
1192
- "██ ██ ",
1193
- "██ ██ ",
1194
- " ██████ ",
1195
- " ▓▓▓▓▓▓ "
1196
- ],
1197
- 'V': [
1198
- "██ ██ ",
1199
- "██ ██ ",
1200
- "██ ██ ",
1201
- " ██ ██ ",
1202
- " ████ ",
1203
- " ▓▓ "
1204
- ],
1205
- 'W': [
1206
- "██ ██ ",
1207
- "██ ██ ",
1208
- "██ ██ ██ ",
1209
- "████████ ",
1210
- " ██ ██ ",
1211
- " ▓ ▓▓ "
1212
- ],
1213
- 'X': [
1214
- "██ ██ ",
1215
- " ██ ██ ",
1216
- " ████ ",
1217
- " ██ ██ ",
1218
- "██ ██ ",
1219
- "▓▓ ▓▓ "
1220
- ],
1221
- 'Y': [
1222
- "██ ██ ",
1223
- " ██ ██ ",
1224
- " ████ ",
1225
- " ██ ",
1226
- " ██ ",
1227
- " ▓▓ "
1228
- ],
1229
- 'Z': [
1230
- "████████ ",
1231
- " ██ ",
1232
- " ██ ",
1233
- " ██ ",
1234
- "████████ ",
1235
- "▓▓▓▓▓▓▓▓ "
1236
- ]
1237
- }
1238
-
1239
- self.letters.update(shadow_letters)
1
+ """
2
+ ZeroArt Fonts: Predefined ASCII art fonts
3
+ """
4
+
5
+ from typing import Dict, List, Optional
6
+
7
+ from .base import ZeroArtFont
8
+
9
+
10
+ class BlockFont(ZeroArtFont):
11
+ """Block-style ASCII art font"""
12
+ def __init__(self) -> None:
13
+ super().__init__("block")
14
+ self.letters: Dict[str, List[str]] = {
15
+ ' ': [" ", " ", " ", " ", " "]
16
+ }
17
+ self._populate_letters()
18
+
19
+ def _populate_letters(self) -> None:
20
+ """Populate the font with predefined letters"""
21
+ block_letters = {
22
+ 'A': [
23
+ " █████ ",
24
+ " ██ ██ ",
25
+ " ███████ ",
26
+ " ██ ██ ",
27
+ " ██ ██ "
28
+ ],
29
+ 'B': [
30
+ " ██████ ",
31
+ " ██ ██ ",
32
+ " ██████ ",
33
+ " ██ ██ ",
34
+ " ██████ "
35
+ ],
36
+ 'C': [
37
+ " ██████ ",
38
+ " ██ ",
39
+ " ██ ",
40
+ " ██ ",
41
+ " ██████ "
42
+ ],
43
+ 'D': [
44
+ " ██████ ",
45
+ " ██ ██ ",
46
+ " ██ ██ ",
47
+ " ██ ██ ",
48
+ " ██████ "
49
+ ],
50
+ 'E': [
51
+ " ███████ ",
52
+ " ██ ",
53
+ " ██████ ",
54
+ " ██ ",
55
+ " ███████ "
56
+ ],
57
+ 'F': [
58
+ " ███████ ",
59
+ " ██ ",
60
+ " ██████ ",
61
+ " ██ ",
62
+ " ██ "
63
+ ],
64
+ 'G': [
65
+ " ██████ ",
66
+ " ██ ",
67
+ " ██ ███ ",
68
+ " ██ ██ ",
69
+ " ██████ "
70
+ ],
71
+ 'H': [
72
+ " ██ ██ ",
73
+ " ██ ██ ",
74
+ " ███████ ",
75
+ " ██ ██ ",
76
+ " ██ ██ "
77
+ ],
78
+ 'I': [
79
+ " ███████ ",
80
+ " ██ ",
81
+ " ██ ",
82
+ " ██ ",
83
+ " ███████ "
84
+ ],
85
+ 'J': [
86
+ " ██ ",
87
+ " ██ ",
88
+ " ██ ",
89
+ " ██ ██ ",
90
+ " █████ "
91
+ ],
92
+ 'K': [
93
+ " ██ ██ ",
94
+ " ██ ██ ",
95
+ " ████ ",
96
+ " ██ ██ ",
97
+ " ██ ██ "
98
+ ],
99
+ 'L': [
100
+ " ██ ",
101
+ " ██ ",
102
+ " ██ ",
103
+ " ██ ",
104
+ " ███████ "
105
+ ],
106
+ 'M': [
107
+ " ██ ██ ",
108
+ " ███ ███ ",
109
+ " ████ ",
110
+ " ██ ██ ",
111
+ " ██ ██ "
112
+ ],
113
+ 'N': [
114
+ " ██ ██ ",
115
+ " ███ ██ ",
116
+ " ████ ",
117
+ " ██ ███ ",
118
+ " ██ ██ "
119
+ ],
120
+ 'O': [
121
+ " █████ ",
122
+ " ██ ██ ",
123
+ " ██ ██ ",
124
+ " ██ ██ ",
125
+ " █████ "
126
+ ],
127
+ 'P': [
128
+ " ██████ ",
129
+ " ██ ██ ",
130
+ " ██████ ",
131
+ " ██ ",
132
+ " ██ "
133
+ ],
134
+ 'Q': [
135
+ " █████ ",
136
+ " ██ ██ ",
137
+ " ██ ██ ",
138
+ " ██ ██ ",
139
+ " ██████ "
140
+ ],
141
+ 'R': [
142
+ " ██████ ",
143
+ " ██ ██ ",
144
+ " ██████ ",
145
+ " ██ ██ ",
146
+ " ██ ██ "
147
+ ],
148
+ 'S': [
149
+ " ██████ ",
150
+ " ██ ",
151
+ " ██████ ",
152
+ " ██ ",
153
+ " ██████ "
154
+ ],
155
+ 'T': [
156
+ " ███████ ",
157
+ " ██ ",
158
+ " ██ ",
159
+ " ██ ",
160
+ " ██ "
161
+ ],
162
+ 'U': [
163
+ " ██ ██ ",
164
+ " ██ ██ ",
165
+ " ██ ██ ",
166
+ " ██ ██ ",
167
+ " █████ "
168
+ ],
169
+ 'V': [
170
+ " ██ ██ ",
171
+ " ██ ██ ",
172
+ " ██ ██ ",
173
+ " ██ ██ ",
174
+ " ███ "
175
+ ],
176
+ 'W': [
177
+ " ██ ██ ",
178
+ " ██ ██ ",
179
+ " ██ ██ ",
180
+ " ███ ███ ",
181
+ " ██ ██ "
182
+ ],
183
+ 'X': [
184
+ " ██ ██ ",
185
+ " ██ ██ ",
186
+ " ███ ",
187
+ " ██ ██ ",
188
+ " ██ ██ "
189
+ ],
190
+ 'Y': [
191
+ " ██ ██ ",
192
+ " ██ ██ ",
193
+ " ███ ",
194
+ " ███ ",
195
+ " ███ "
196
+ ],
197
+ 'Z': [
198
+ " ███████ ",
199
+ " ██ ",
200
+ " ██ ",
201
+ " ██ ",
202
+ " ███████ "
203
+ ]
204
+ }
205
+
206
+ self.letters.update(block_letters)
207
+
208
+ class SlantFont(ZeroArtFont):
209
+ """Slanted ASCII art font"""
210
+ def __init__(self) -> None:
211
+ super().__init__("slant")
212
+ self.letters: Dict[str, List[str]] = {
213
+ ' ': [" ", " ", " ", " ", " "]
214
+ }
215
+ self._populate_letters()
216
+
217
+ def _populate_letters(self) -> None:
218
+ """Populate the font with predefined letters"""
219
+ slant_letters = {
220
+ 'A': [
221
+ " /\\ ",
222
+ " / \\ ",
223
+ " / /\\ \\ ",
224
+ " / ____ \\ ",
225
+ "/_/ \\_\\"
226
+ ],
227
+ 'B': [
228
+ " ____ ",
229
+ "| _ \\ ",
230
+ "| |_) |",
231
+ "| _ < ",
232
+ "| |_) |",
233
+ "|____/ "
234
+ ],
235
+ 'C': [
236
+ " _____ ",
237
+ " / ____| ",
238
+ "| | ",
239
+ "| | ",
240
+ " \\_____| "
241
+ ],
242
+ 'D': [
243
+ " _____ ",
244
+ "| __ \\ ",
245
+ "| | | | ",
246
+ "| | | | ",
247
+ "| |__| | ",
248
+ "|_____/ "
249
+ ],
250
+ 'E': [
251
+ " ______ ",
252
+ "| ____| ",
253
+ "| |__ ",
254
+ "| __| ",
255
+ "| |____ ",
256
+ "|______| "
257
+ ],
258
+ 'F': [
259
+ " ______ ",
260
+ "| ____| ",
261
+ "| |__ ",
262
+ "| __| ",
263
+ "| | ",
264
+ "|_| "
265
+ ],
266
+ 'G': [
267
+ " _____ ",
268
+ " / ____| ",
269
+ "| | __ ",
270
+ "| | |_ | ",
271
+ "| |__| | ",
272
+ " \\_____| "
273
+ ],
274
+ 'H': [
275
+ " _ _ ",
276
+ "| | | | ",
277
+ "| |__| | ",
278
+ "| __ | ",
279
+ "|_| |_| "
280
+ ],
281
+ 'I': [
282
+ " _____ ",
283
+ "|_ _|",
284
+ " | | ",
285
+ " | | ",
286
+ " _| |_ ",
287
+ "|_____|"
288
+ ],
289
+ 'J': [
290
+ " ___ ",
291
+ " |_ |",
292
+ " | |",
293
+ " _ | |",
294
+ "| |__| |",
295
+ " \\____/ "
296
+ ],
297
+ 'K': [
298
+ " _ __ ",
299
+ "| |/ / ",
300
+ "| ' / ",
301
+ "| < ",
302
+ "| . \\ ",
303
+ "|_|\\_\\ "
304
+ ],
305
+ 'L': [
306
+ " _ ",
307
+ "| | ",
308
+ "| | ",
309
+ "| | ",
310
+ "| |____ ",
311
+ "|______|"
312
+ ],
313
+ 'M': [
314
+ " __ __ ",
315
+ "| \\/ |",
316
+ "| |\\/| |",
317
+ "| | | |",
318
+ "|_| |_|",
319
+ " "
320
+ ],
321
+ 'N': [
322
+ " _ _ ",
323
+ "| \\ | |",
324
+ "| \\| |",
325
+ "| . ` |",
326
+ "| |\\ |",
327
+ "|_| \\_|"
328
+ ],
329
+ 'O': [
330
+ " _____ ",
331
+ " / ____| ",
332
+ "| | __ ",
333
+ "| | |_ | ",
334
+ "| |__| | ",
335
+ " \\_____| "
336
+ ],
337
+ 'P': [
338
+ " _____ ",
339
+ "| __ \\ ",
340
+ "| |__) | ",
341
+ "| ___/ ",
342
+ "| | ",
343
+ "|_| "
344
+ ],
345
+ 'Q': [
346
+ " _____ ",
347
+ " / ____| ",
348
+ "| | __ ",
349
+ "| | |_ | ",
350
+ "| |__| | ",
351
+ " \\____/\\ "
352
+ ],
353
+ 'R': [
354
+ " _____ ",
355
+ "| __ \\ ",
356
+ "| |__) | ",
357
+ "| _ / ",
358
+ "| | \\ \\ ",
359
+ "|_| \\_\\ "
360
+ ],
361
+ 'S': [
362
+ " _____ ",
363
+ " / ____| ",
364
+ "| (___ ",
365
+ " \\___ \\ ",
366
+ " ____) | ",
367
+ "|_____/ "
368
+ ],
369
+ 'T': [
370
+ " ______ ",
371
+ "|_ _| ",
372
+ " | | ",
373
+ " | | ",
374
+ " | | ",
375
+ " |_| "
376
+ ],
377
+ 'U': [
378
+ " _ _ ",
379
+ "| | | | ",
380
+ "| | | | ",
381
+ "| | | | ",
382
+ "| |__| | ",
383
+ " \\____/ "
384
+ ],
385
+ 'V': [
386
+ " __ __ ",
387
+ " \\ \\ / / ",
388
+ " \\ \\_/ / ",
389
+ " \\ / ",
390
+ " \\_/ "
391
+ ],
392
+ 'W': [
393
+ " __ __ ",
394
+ " \\ \\ / / ",
395
+ " \\ \\/ / ",
396
+ " \\ / ",
397
+ " \\/ "
398
+ ],
399
+ 'X': [
400
+ " __ __ ",
401
+ " \\ \\/ / ",
402
+ " \\ / ",
403
+ " / \\ ",
404
+ " /_/\\_\\ "
405
+ ],
406
+ 'Y': [
407
+ " _ _ ",
408
+ "| | | |",
409
+ "| | | |",
410
+ "| | | |",
411
+ "|_| |_|"
412
+ ],
413
+ 'Z': [
414
+ " ______ ",
415
+ "|__ / | ",
416
+ " / /| | ",
417
+ " / /_| | ",
418
+ "/____|_| "
419
+ ]
420
+ }
421
+
422
+ self.letters.update(slant_letters)
423
+
424
+ # Add more custom fonts here
425
+ class NeonFont(ZeroArtFont):
426
+ """Neon-style ASCII art font"""
427
+ def __init__(self) -> None:
428
+ super().__init__("neon")
429
+ self.letters: Dict[str, List[str]] = {
430
+ ' ': [" ", " ", " ", " ", " "]
431
+ }
432
+ self._populate_letters()
433
+
434
+ def _populate_letters(self) -> None:
435
+ """Populate neon-style letters"""
436
+ neon_letters = {
437
+ 'A': [
438
+ " ░█████░ ",
439
+ " ██░░░░██ ",
440
+ " ████████ ",
441
+ " ██░░░░██ ",
442
+ " ██░░░░██ "
443
+ ],
444
+ 'B': [
445
+ " ████████ ",
446
+ " ██░░░░██ ",
447
+ " ████████ ",
448
+ " ██░░░░██ ",
449
+ " ████████ "
450
+ ],
451
+ 'C': [
452
+ " ░██████ ",
453
+ " ██░░░░ ",
454
+ " ██ ",
455
+ " ██░░░░ ",
456
+ " ░██████ "
457
+ ],
458
+ 'D': [
459
+ " ████████ ",
460
+ " ██░░░░██ ",
461
+ " ██░░░░██ ",
462
+ " ██░░░░██ ",
463
+ " ████████ "
464
+ ],
465
+ 'E': [
466
+ " ████████ ",
467
+ " ██░░░░ ",
468
+ " ████████ ",
469
+ " ██░░░░ ",
470
+ " ████████ "
471
+ ],
472
+ 'F': [
473
+ " ████████ ",
474
+ " ██░░░░ ",
475
+ " ████████ ",
476
+ " ██░░░░ ",
477
+ " ██░░░░ "
478
+ ],
479
+ 'G': [
480
+ " ░██████ ",
481
+ " ██░░░░ ",
482
+ " ██ ████ ",
483
+ " ██░░░░██ ",
484
+ " ░██████ "
485
+ ],
486
+ 'H': [
487
+ " ██░░░░██ ",
488
+ " ██░░░░██ ",
489
+ " ████████ ",
490
+ " ██░░░░██ ",
491
+ " ██░░░░██ "
492
+ ],
493
+ 'I': [
494
+ " ████████ ",
495
+ " ██░░ ",
496
+ " ██░░ ",
497
+ " ██░░ ",
498
+ " ████████ "
499
+ ],
500
+ 'J': [
501
+ " ██░ ",
502
+ " ██░ ",
503
+ " ██░ ",
504
+ " ██░░░░██ ",
505
+ " ██████ "
506
+ ],
507
+ 'K': [
508
+ " ██░░░░██ ",
509
+ " ██░░██░ ",
510
+ " ████░░ ",
511
+ " ██░░██░ ",
512
+ " ██░░░░██ "
513
+ ],
514
+ 'L': [
515
+ " ██░░░░ ",
516
+ " ██░░░░ ",
517
+ " ██░░░░ ",
518
+ " ██░░░░ ",
519
+ " ████████ "
520
+ ],
521
+ 'M': [
522
+ " ██░░░░██ ",
523
+ " ███░░███ ",
524
+ " ██░█░███ ",
525
+ " ██░░░░██ ",
526
+ " ██░░░░██ "
527
+ ],
528
+ 'N': [
529
+ " ██░░░░██ ",
530
+ " ███░░░██ ",
531
+ " ██░█░░██ ",
532
+ " ██░░█░██ ",
533
+ " ██░░░███ "
534
+ ],
535
+ 'O': [
536
+ " ██████ ",
537
+ " ██░░░░██ ",
538
+ " ██░░░░██ ",
539
+ " ██░░░░██ ",
540
+ " ██████ "
541
+ ],
542
+ 'P': [
543
+ " ████████ ",
544
+ " ██░░░░██ ",
545
+ " ████████ ",
546
+ " ██░░░░ ",
547
+ " ██░░░░ "
548
+ ],
549
+ 'Q': [
550
+ " ██████ ",
551
+ " ██░░░░██ ",
552
+ " ██░░░░██ ",
553
+ " ██░░██░ ",
554
+ " ██████░ "
555
+ ],
556
+ 'R': [
557
+ " ████████ ",
558
+ " ██░░░░██ ",
559
+ " ████████ ",
560
+ " ██░░██░ ",
561
+ " ██░░░░██ "
562
+ ],
563
+ 'S': [
564
+ " ██████░ ",
565
+ " ██░░░░ ",
566
+ " ██████ ",
567
+ " ░░██ ",
568
+ " ████████ "
569
+ ],
570
+ 'T': [
571
+ " ████████ ",
572
+ " ██░░ ",
573
+ " ██░░ ",
574
+ " ██░░ ",
575
+ " ██░░ "
576
+ ],
577
+ 'U': [
578
+ " ██░░░░██ ",
579
+ " ██░░░░██ ",
580
+ " ██░░░░██ ",
581
+ " ██░░░░██ ",
582
+ " ██████ "
583
+ ],
584
+ 'V': [
585
+ " ██░░░░██ ",
586
+ " ██░░░░██ ",
587
+ " ██░░░░██ ",
588
+ " ██░░██ ",
589
+ " ████ "
590
+ ],
591
+ 'W': [
592
+ " ██░░░░██ ",
593
+ " ██░░░░██ ",
594
+ " ██░█░░██ ",
595
+ " ███░███░ ",
596
+ " ██░░██ "
597
+ ],
598
+ 'X': [
599
+ " ██░░░░██ ",
600
+ " ██░░██ ",
601
+ " ████ ",
602
+ " ██░░██ ",
603
+ " ██░░░░██ "
604
+ ],
605
+ 'Y': [
606
+ " ██░░░░██ ",
607
+ " ██░░██ ",
608
+ " ████ ",
609
+ " ██░░ ",
610
+ " ██░░ "
611
+ ],
612
+ 'Z': [
613
+ " ████████ ",
614
+ " ██░ ",
615
+ " ██░ ",
616
+ " ██░ ",
617
+ " ████████ "
618
+ ]
619
+ }
620
+
621
+ self.letters.update(neon_letters)
622
+
623
+ class CyberFont(ZeroArtFont):
624
+ """Cyberpunk-style ASCII art font"""
625
+ def __init__(self) -> None:
626
+ super().__init__("cyber")
627
+ self.letters: Dict[str, List[str]] = {
628
+ ' ': [" ", " ", " ", " ", " "]
629
+ }
630
+ self._populate_letters()
631
+
632
+ def _populate_letters(self) -> None:
633
+ """Populate cyberpunk-style letters"""
634
+ cyber_letters = {
635
+ 'A': [
636
+ " ▓█▓▓▓▓ ",
637
+ " ▓▓ ▓▓ ",
638
+ " ▓▓▓▓▓▓▓ ",
639
+ " ▓▓ ▓▓ ",
640
+ " ▓▓ ▓▓ "
641
+ ],
642
+ 'B': [
643
+ " ▓▓▓▓▓▓▓ ",
644
+ " ▓▓ ▓▓ ",
645
+ " ▓▓▓▓▓▓▓ ",
646
+ " ▓▓ ▓▓ ",
647
+ " ▓▓▓▓▓▓▓ "
648
+ ],
649
+ 'C': [
650
+ " ▓▓▓▓▓▓▓ ",
651
+ " ▓▓ ",
652
+ " ▓▓ ",
653
+ " ▓▓ ",
654
+ " ▓▓▓▓▓▓▓ "
655
+ ],
656
+ 'D': [
657
+ " ▓▓▓▓▓▓ ",
658
+ " ▓▓ ▓▓ ",
659
+ " ▓▓ ▓▓ ",
660
+ " ▓▓ ▓▓ ",
661
+ " ▓▓▓▓▓▓ "
662
+ ],
663
+ 'E': [
664
+ " ▓▓▓▓▓▓▓ ",
665
+ " ▓▓ ",
666
+ " ▓▓▓▓▓▓ ",
667
+ " ▓▓ ",
668
+ " ▓▓▓▓▓▓▓ "
669
+ ],
670
+ 'F': [
671
+ " ▓▓▓▓▓▓▓ ",
672
+ " ▓▓ ",
673
+ " ▓▓▓▓▓▓ ",
674
+ " ▓▓ ",
675
+ " ▓▓ "
676
+ ],
677
+ 'G': [
678
+ " ▓▓▓▓▓▓▓ ",
679
+ " ▓▓ ",
680
+ " ▓▓ ▓▓▓ ",
681
+ " ▓▓ ▓▓ ",
682
+ " ▓▓▓▓▓▓▓ "
683
+ ],
684
+ 'H': [
685
+ " ▓▓ ▓▓ ",
686
+ " ▓▓ ▓▓ ",
687
+ " ▓▓▓▓▓▓▓ ",
688
+ " ▓▓ ▓▓ ",
689
+ " ▓▓ ▓▓ "
690
+ ],
691
+ 'I': [
692
+ " ▓▓▓▓▓▓▓ ",
693
+ " ▓▓ ",
694
+ " ▓▓ ",
695
+ " ▓▓ ",
696
+ " ▓▓▓▓▓▓▓ "
697
+ ],
698
+ 'J': [
699
+ " ▓▓ ",
700
+ " ▓▓ ",
701
+ " ▓▓ ",
702
+ " ▓▓ ▓▓ ",
703
+ " ▓▓▓▓▓ "
704
+ ],
705
+ 'K': [
706
+ " ▓▓ ▓▓ ",
707
+ " ▓▓ ▓▓ ",
708
+ " ▓▓▓▓▓ ",
709
+ " ▓▓ ▓▓ ",
710
+ " ▓▓ ▓▓ "
711
+ ],
712
+ 'L': [
713
+ " ▓▓ ",
714
+ " ▓▓ ",
715
+ " ▓▓ ",
716
+ " ▓▓ ",
717
+ " ▓▓▓▓▓▓▓ "
718
+ ],
719
+ 'M': [
720
+ " ▓▓ ▓▓ ",
721
+ " ▓▓▓ ▓▓▓ ",
722
+ " ▓▓▓▓▓▓▓ ",
723
+ " ▓▓ ▓ ▓▓ ",
724
+ " ▓▓ ▓▓ "
725
+ ],
726
+ 'N': [
727
+ " ▓▓ ▓▓ ",
728
+ " ▓▓▓ ▓▓ ",
729
+ " ▓▓▓▓ ",
730
+ " ▓▓ ▓▓▓ ",
731
+ " ▓▓ ▓▓ "
732
+ ],
733
+ 'O': [
734
+ " ▓▓▓▓▓▓▓ ",
735
+ " ▓▓ ▓▓ ",
736
+ " ▓▓ ▓▓ ",
737
+ " ▓▓ ▓▓ ",
738
+ " ▓▓▓▓▓▓▓ "
739
+ ],
740
+ 'P': [
741
+ " ▓▓▓▓▓▓▓ ",
742
+ " ▓▓ ▓▓ ",
743
+ " ▓▓▓▓▓▓▓ ",
744
+ " ▓▓ ",
745
+ " ▓▓ "
746
+ ],
747
+ 'Q': [
748
+ " ▓▓▓▓▓▓ ",
749
+ " ▓▓ ▓▓ ",
750
+ " ▓▓ ▓▓ ",
751
+ " ▓▓ ▓▓▓ ",
752
+ " ▓▓▓▓▓ ▓ "
753
+ ],
754
+ 'R': [
755
+ " ▓▓▓▓▓▓ ",
756
+ " ▓▓ ▓▓ ",
757
+ " ▓▓▓▓▓▓ ",
758
+ " ▓▓ ▓▓ ",
759
+ " ▓▓ ▓▓ "
760
+ ],
761
+ 'S': [
762
+ " ▓▓▓▓▓▓▓ ",
763
+ " ▓▓ ",
764
+ " ▓▓▓▓▓▓▓ ",
765
+ " ▓▓ ",
766
+ " ▓▓▓▓▓▓▓ "
767
+ ],
768
+ 'T': [
769
+ " ▓▓▓▓▓▓▓ ",
770
+ " ▓▓ ",
771
+ " ▓▓ ",
772
+ " ▓▓ ",
773
+ " ▓▓ "
774
+ ],
775
+ 'U': [
776
+ " ▓▓ ▓▓ ",
777
+ " ▓▓ ▓▓ ",
778
+ " ▓▓ ▓▓ ",
779
+ " ▓▓ ▓▓ ",
780
+ " ▓▓▓▓▓▓▓ "
781
+ ],
782
+ 'V': [
783
+ " ▓▓ ▓▓ ",
784
+ " ▓▓ ▓▓ ",
785
+ " ▓▓ ▓▓ ",
786
+ " ▓▓ ▓▓ ",
787
+ " ▓▓▓ "
788
+ ],
789
+ 'W': [
790
+ " ▓▓ ▓▓ ",
791
+ " ▓▓ ▓▓ ",
792
+ " ▓▓ ▓▓ ",
793
+ " ▓▓▓ ▓▓▓ ",
794
+ " ▓▓ ▓▓ "
795
+ ],
796
+ 'X': [
797
+ " ▓▓ ▓▓ ",
798
+ " ▓▓ ▓▓ ",
799
+ " ▓▓▓ ",
800
+ " ▓▓ ▓▓ ",
801
+ " ▓▓ ▓▓ "
802
+ ],
803
+ 'Y': [
804
+ " ▓▓ ▓▓ ",
805
+ " ▓▓ ▓▓ ",
806
+ " ▓▓ ",
807
+ " ▓▓ ",
808
+ " ▓▓ "
809
+ ],
810
+ 'Z': [
811
+ " ▓▓▓▓▓▓▓ ",
812
+ " ▓▓ ",
813
+ " ▓▓ ",
814
+ " ▓▓ ",
815
+ " ▓▓▓▓▓▓▓ "
816
+ ]
817
+ }
818
+
819
+ self.letters.update(cyber_letters)
820
+
821
+ class DottedFont(ZeroArtFont):
822
+ """Dotted-style ASCII art font"""
823
+ def __init__(self) -> None:
824
+ super().__init__("dotted")
825
+ self.letters: Dict[str, List[str]] = {
826
+ ' ': [" ", " ", " ", " ", " "]
827
+ }
828
+ self._populate_letters()
829
+
830
+ def _populate_letters(self) -> None:
831
+ """Populate dotted-style letters"""
832
+ dotted_letters = {
833
+ 'A': [
834
+ " ........ ",
835
+ " :: :: ",
836
+ " :::::::: ",
837
+ " :: :: ",
838
+ " :: :: "
839
+ ],
840
+ 'B': [
841
+ " ::::::: ",
842
+ " :: :: ",
843
+ " ::::::: ",
844
+ " :: :: ",
845
+ " ::::::: "
846
+ ],
847
+ 'C': [
848
+ " ::::::: ",
849
+ " :: ",
850
+ " :: ",
851
+ " :: ",
852
+ " ::::::: "
853
+ ],
854
+ 'D': [
855
+ " ::::::: ",
856
+ " :: :: ",
857
+ " :: :: ",
858
+ " :: :: ",
859
+ " ::::::: "
860
+ ],
861
+ 'E': [
862
+ " :::::::: ",
863
+ " :: ",
864
+ " :::::: ",
865
+ " :: ",
866
+ " :::::::: "
867
+ ],
868
+ 'F': [
869
+ " :::::::: ",
870
+ " :: ",
871
+ " :::::: ",
872
+ " :: ",
873
+ " :: "
874
+ ],
875
+ 'G': [
876
+ " ::::::: ",
877
+ " :: ",
878
+ " :: :::: ",
879
+ " :: :: ",
880
+ " ::::::: "
881
+ ],
882
+ 'H': [
883
+ " :: :: ",
884
+ " :: :: ",
885
+ " :::::::: ",
886
+ " :: :: ",
887
+ " :: :: "
888
+ ],
889
+ 'I': [
890
+ " :::::::: ",
891
+ " :: ",
892
+ " :: ",
893
+ " :: ",
894
+ " :::::::: "
895
+ ],
896
+ 'J': [
897
+ " :: ",
898
+ " :: ",
899
+ " :: ",
900
+ " :: :: ",
901
+ " :::::: "
902
+ ],
903
+ 'K': [
904
+ " :: :: ",
905
+ " :: :: ",
906
+ " ::::: ",
907
+ " :: :: ",
908
+ " :: :: "
909
+ ],
910
+ 'L': [
911
+ " :: ",
912
+ " :: ",
913
+ " :: ",
914
+ " :: ",
915
+ " :::::::: "
916
+ ],
917
+ 'M': [
918
+ " :: :: ",
919
+ " ::: ::: ",
920
+ " :: :: :: ",
921
+ " :: :: ",
922
+ " :: :: "
923
+ ],
924
+ 'N': [
925
+ " :: :: ",
926
+ " ::: :: ",
927
+ " :: :: :: ",
928
+ " :: :::: ",
929
+ " :: :: "
930
+ ],
931
+ 'O': [
932
+ " :::::: ",
933
+ " :: :: ",
934
+ " :: :: ",
935
+ " :: :: ",
936
+ " :::::: "
937
+ ],
938
+ 'P': [
939
+ " ::::::: ",
940
+ " :: :: ",
941
+ " ::::::: ",
942
+ " :: ",
943
+ " :: "
944
+ ],
945
+ 'Q': [
946
+ " :::::: ",
947
+ " :: :: ",
948
+ " :: :: ",
949
+ " :: :::: ",
950
+ " :::: : "
951
+ ],
952
+ 'R': [
953
+ " ::::::: ",
954
+ " :: :: ",
955
+ " ::::::: ",
956
+ " :: :: ",
957
+ " :: :: "
958
+ ],
959
+ 'S': [
960
+ " ::::::: ",
961
+ " :: ",
962
+ " ::::::: ",
963
+ " :: ",
964
+ " ::::::: "
965
+ ],
966
+ 'T': [
967
+ " :::::::: ",
968
+ " :: ",
969
+ " :: ",
970
+ " :: ",
971
+ " :: "
972
+ ],
973
+ 'U': [
974
+ " :: :: ",
975
+ " :: :: ",
976
+ " :: :: ",
977
+ " :: :: ",
978
+ " :::::: "
979
+ ],
980
+ 'V': [
981
+ " :: :: ",
982
+ " :: :: ",
983
+ " :: :: ",
984
+ " :: :: ",
985
+ " :: "
986
+ ],
987
+ 'W': [
988
+ " :: :: ",
989
+ " :: :: ",
990
+ " :: :: :: ",
991
+ " ::: ::: ",
992
+ " :: :: "
993
+ ],
994
+ 'X': [
995
+ " :: :: ",
996
+ " :: :: ",
997
+ " :: ",
998
+ " :: :: ",
999
+ " :: :: "
1000
+ ],
1001
+ 'Y': [
1002
+ " :: :: ",
1003
+ " :: :: ",
1004
+ " :: ",
1005
+ " :: ",
1006
+ " :: "
1007
+ ],
1008
+ 'Z': [
1009
+ " :::::::: ",
1010
+ " :: ",
1011
+ " :: ",
1012
+ " :: ",
1013
+ " :::::::: "
1014
+ ]
1015
+ }
1016
+
1017
+ self.letters.update(dotted_letters)
1018
+
1019
+ class ShadowFont(ZeroArtFont):
1020
+ """Shadow-style ASCII art font"""
1021
+ def __init__(self) -> None:
1022
+ super().__init__("shadow")
1023
+ self.letters: Dict[str, List[str]] = {
1024
+ ' ': [" ", " ", " ", " ", " "]
1025
+ }
1026
+ self._populate_letters()
1027
+
1028
+ def _populate_letters(self) -> None:
1029
+ """Populate shadow-style letters"""
1030
+ shadow_letters = {
1031
+ 'A': [
1032
+ " ██ ",
1033
+ " ████ ",
1034
+ " ██ ██ ",
1035
+ "████████ ",
1036
+ "██ ██▓",
1037
+ " ▓▓"
1038
+ ],
1039
+ 'B': [
1040
+ "██████ ",
1041
+ "██ ██ ",
1042
+ "███████ ",
1043
+ "██ ██ ",
1044
+ "███████ ",
1045
+ " ▓▓▓▓▓▓▓ "
1046
+ ],
1047
+ 'C': [
1048
+ " ██████ ",
1049
+ "██ ██ ",
1050
+ "██ ",
1051
+ "██ ██ ",
1052
+ " ██████ ",
1053
+ " ▓▓▓▓▓▓ "
1054
+ ],
1055
+ 'D': [
1056
+ "██████ ",
1057
+ "██ ██ ",
1058
+ "██ ██ ",
1059
+ "██ ██ ",
1060
+ "██████ ",
1061
+ "▓▓▓▓▓▓ "
1062
+ ],
1063
+ 'E': [
1064
+ "████████ ",
1065
+ "██ ",
1066
+ "██████ ",
1067
+ "██ ",
1068
+ "████████ ",
1069
+ "▓▓▓▓▓▓▓▓ "
1070
+ ],
1071
+ 'F': [
1072
+ "████████ ",
1073
+ "██ ",
1074
+ "██████ ",
1075
+ "██ ",
1076
+ "██ ",
1077
+ "▓▓ "
1078
+ ],
1079
+ 'G': [
1080
+ " ██████ ",
1081
+ "██ ",
1082
+ "██ ███ ",
1083
+ "██ ██ ",
1084
+ " ██████ ",
1085
+ " ▓▓▓▓▓▓ "
1086
+ ],
1087
+ 'H': [
1088
+ "██ ██ ",
1089
+ "██ ██ ",
1090
+ "████████ ",
1091
+ "██ ██ ",
1092
+ "██ ██ ",
1093
+ "▓▓ ▓▓ "
1094
+ ],
1095
+ 'I': [
1096
+ "████████ ",
1097
+ " ██ ",
1098
+ " ██ ",
1099
+ " ██ ",
1100
+ "████████ ",
1101
+ "▓▓▓▓▓▓▓▓ "
1102
+ ],
1103
+ 'J': [
1104
+ " ██ ",
1105
+ " ██ ",
1106
+ " ██ ",
1107
+ "██ ██ ",
1108
+ " █████ ",
1109
+ " ▓▓▓▓ "
1110
+ ],
1111
+ 'K': [
1112
+ "██ ██ ",
1113
+ "██ ██ ",
1114
+ "█████ ",
1115
+ "██ ██ ",
1116
+ "██ ██ ",
1117
+ "▓▓ ▓▓ "
1118
+ ],
1119
+ 'L': [
1120
+ "██ ",
1121
+ "██ ",
1122
+ "██ ",
1123
+ "██ ",
1124
+ "████████ ",
1125
+ "▓▓▓▓▓▓▓▓ "
1126
+ ],
1127
+ 'M': [
1128
+ "██ ██ ",
1129
+ "███ ███ ",
1130
+ "████████ ",
1131
+ "██ ██ ██ ",
1132
+ "██ ██ ",
1133
+ "▓▓ ▓▓ "
1134
+ ],
1135
+ 'N': [
1136
+ "██ ██ ",
1137
+ "███ ██ ",
1138
+ "████ ██ ",
1139
+ "██ ██ ██ ",
1140
+ "██ ███ ",
1141
+ "▓▓ ▓▓ "
1142
+ ],
1143
+ 'O': [
1144
+ " ██████ ",
1145
+ "██ ██ ",
1146
+ "██ ██ ",
1147
+ "██ ██ ",
1148
+ " ██████ ",
1149
+ " ▓▓▓▓▓▓ "
1150
+ ],
1151
+ 'P': [
1152
+ "███████ ",
1153
+ "██ ██ ",
1154
+ "███████ ",
1155
+ "██ ",
1156
+ "██ ",
1157
+ "▓▓ "
1158
+ ],
1159
+ 'Q': [
1160
+ " ██████ ",
1161
+ "██ ██ ",
1162
+ "██ ██ ",
1163
+ "██ ▄▄ ██ ",
1164
+ " ██████ ",
1165
+ " ▓▓▓▓▓▓▓"
1166
+ ],
1167
+ 'R': [
1168
+ "███████ ",
1169
+ "██ ██ ",
1170
+ "███████ ",
1171
+ "██ ██ ",
1172
+ "██ ██ ",
1173
+ "▓▓ ▓▓ "
1174
+ ],
1175
+ 'S': [
1176
+ " ██████ ",
1177
+ "██ ",
1178
+ " ██████ ",
1179
+ " ██ ",
1180
+ "███████ ",
1181
+ "▓▓▓▓▓▓▓ "
1182
+ ],
1183
+ 'T': [
1184
+ "████████ ",
1185
+ " ██ ",
1186
+ " ██ ",
1187
+ " ██ ",
1188
+ " ██ ",
1189
+ " ▓▓ "
1190
+ ],
1191
+ 'U': [
1192
+ "██ ██ ",
1193
+ "██ ██ ",
1194
+ "██ ██ ",
1195
+ "██ ██ ",
1196
+ " ██████ ",
1197
+ " ▓▓▓▓▓▓ "
1198
+ ],
1199
+ 'V': [
1200
+ "██ ██ ",
1201
+ "██ ██ ",
1202
+ "██ ██ ",
1203
+ " ██ ██ ",
1204
+ " ████ ",
1205
+ " ▓▓ "
1206
+ ],
1207
+ 'W': [
1208
+ "██ ██ ",
1209
+ "██ ██ ",
1210
+ "██ ██ ██ ",
1211
+ "████████ ",
1212
+ " ██ ██ ",
1213
+ " ▓ ▓▓ "
1214
+ ],
1215
+ 'X': [
1216
+ "██ ██ ",
1217
+ " ██ ██ ",
1218
+ " ████ ",
1219
+ " ██ ██ ",
1220
+ "██ ██ ",
1221
+ "▓▓ ▓▓ "
1222
+ ],
1223
+ 'Y': [
1224
+ "██ ██ ",
1225
+ " ██ ██ ",
1226
+ " ████ ",
1227
+ " ██ ",
1228
+ " ██ ",
1229
+ " ▓▓ "
1230
+ ],
1231
+ 'Z': [
1232
+ "████████ ",
1233
+ " ██ ",
1234
+ " ██ ",
1235
+ " ██ ",
1236
+ "████████ ",
1237
+ "▓▓▓▓▓▓▓▓ "
1238
+ ]
1239
+ }
1240
+
1241
+ self.letters.update(shadow_letters)
1242
+
1243
+ class ThreeDFont(ZeroArtFont):
1244
+ """3D-style ASCII art font"""
1245
+ def __init__(self) -> None:
1246
+ super().__init__("3d")
1247
+ self.letters: Dict[str, List[str]] = {
1248
+ ' ': [" ", " ", " ", " ", " "]
1249
+ }
1250
+ self._populate_letters()
1251
+
1252
+ def _populate_letters(self) -> None:
1253
+ """Populate 3D-style letters"""
1254
+ three_d_letters = {
1255
+ 'A': [
1256
+ " /\\ ",
1257
+ " / \\ ",
1258
+ " / /\\ \\ ",
1259
+ "/_/----\\_\\",
1260
+ " / \\ "
1261
+ ],
1262
+ 'B': [
1263
+ " ____ ",
1264
+ "| _ \\ ",
1265
+ "| |_) |",
1266
+ "| _ < ",
1267
+ "| |_) |",
1268
+ "|____/ "
1269
+ ],
1270
+ 'C': [
1271
+ " ____ ",
1272
+ " / ___| ",
1273
+ "| | ",
1274
+ "| |___ ",
1275
+ " \\____| "
1276
+ ],
1277
+ 'D': [
1278
+ " ____ ",
1279
+ "| _ \\ ",
1280
+ "| | | |",
1281
+ "| | | |",
1282
+ "| |/ / ",
1283
+ "|___/ "
1284
+ ],
1285
+ 'E': [
1286
+ " ____ ",
1287
+ "| ___| ",
1288
+ "| |__ ",
1289
+ "| __| ",
1290
+ "| |___ ",
1291
+ "|_____| "
1292
+ ],
1293
+ 'F': [
1294
+ " ____ ",
1295
+ "| ___| ",
1296
+ "| |__ ",
1297
+ "| __| ",
1298
+ "| | ",
1299
+ "|_| "
1300
+ ],
1301
+ 'G': [
1302
+ " ____ ",
1303
+ " / ___| ",
1304
+ "| | _ ",
1305
+ "| |_| | ",
1306
+ " \\___| |",
1307
+ " |_|"
1308
+ ],
1309
+ 'H': [
1310
+ " _ _ ",
1311
+ "| | | |",
1312
+ "| |__| |",
1313
+ "| __ |",
1314
+ "| | | |",
1315
+ "|_| |_|"
1316
+ ],
1317
+ 'I': [
1318
+ " ___ ",
1319
+ "|_ |",
1320
+ " | |",
1321
+ " | |",
1322
+ " | |",
1323
+ " |_|"
1324
+ ],
1325
+ 'J': [
1326
+ " ___ ",
1327
+ " |_ |",
1328
+ " | |",
1329
+ " | |",
1330
+ "/\\ | |",
1331
+ "\\/|_|"
1332
+ ],
1333
+ 'K': [
1334
+ " _ __ ",
1335
+ "| |/ / ",
1336
+ "| ' / ",
1337
+ "| < ",
1338
+ "| . \\ ",
1339
+ "|_|\\_\\ "
1340
+ ],
1341
+ 'L': [
1342
+ " _ ",
1343
+ "| | ",
1344
+ "| | ",
1345
+ "| | ",
1346
+ "| |___ ",
1347
+ "|_____|"
1348
+ ],
1349
+ 'M': [
1350
+ " __ __ ",
1351
+ "| \\/ |",
1352
+ "| |\\/| |",
1353
+ "| | | |",
1354
+ "| | | |",
1355
+ "|_| |_|"
1356
+ ],
1357
+ 'N': [
1358
+ " _ _ ",
1359
+ "| \\ | |",
1360
+ "| \\| |",
1361
+ "| . ` |",
1362
+ "| |\\ |",
1363
+ "|_| \\_|"
1364
+ ],
1365
+ 'O': [
1366
+ " ____ ",
1367
+ " / __ \\ ",
1368
+ "| | | |",
1369
+ "| | | |",
1370
+ "| |__| |",
1371
+ " \\____/ "
1372
+ ],
1373
+ 'P': [
1374
+ " ____ ",
1375
+ "| _ \\ ",
1376
+ "| |_) |",
1377
+ "| __/ ",
1378
+ "| | ",
1379
+ "|_| "
1380
+ ],
1381
+ 'Q': [
1382
+ " ____ ",
1383
+ " / __ \\ ",
1384
+ "| | | |",
1385
+ "| | | |",
1386
+ "| |__| |",
1387
+ " \\__\\_\\"
1388
+ ],
1389
+ 'R': [
1390
+ " ____ ",
1391
+ "| _ \\ ",
1392
+ "| |_) |",
1393
+ "| _ < ",
1394
+ "| | \\ \\",
1395
+ "|_| \\_\\"
1396
+ ],
1397
+ 'S': [
1398
+ " ____ ",
1399
+ "/ ___| ",
1400
+ "\\___ \\ ",
1401
+ " ___) |",
1402
+ "|____/ "
1403
+ ],
1404
+ 'T': [
1405
+ " _____ ",
1406
+ "|_ _|",
1407
+ " | | ",
1408
+ " | | ",
1409
+ " | | ",
1410
+ " |_| "
1411
+ ],
1412
+ 'U': [
1413
+ " _ _ ",
1414
+ "| | | |",
1415
+ "| | | |",
1416
+ "| | | |",
1417
+ "| |__| |",
1418
+ " \\____/ "
1419
+ ],
1420
+ 'V': [
1421
+ "__ __",
1422
+ "\\ \\ / /",
1423
+ " \\ \\_/ / ",
1424
+ " \\ / ",
1425
+ " \\_/ "
1426
+ ],
1427
+ 'W': [
1428
+ "__ __",
1429
+ "\\ \\ / /",
1430
+ " \\ \\ / / ",
1431
+ " \\ \\/\\/ / ",
1432
+ " \\_/\\_/ "
1433
+ ],
1434
+ 'X': [
1435
+ "__ __",
1436
+ "\\ \\/ /",
1437
+ " \\ / ",
1438
+ " / \\ ",
1439
+ "/_/\\_\\"
1440
+ ],
1441
+ 'Y': [
1442
+ "__ __",
1443
+ "\\ \\ / /",
1444
+ " \\ \\_/ / ",
1445
+ " \\ / ",
1446
+ " |_| "
1447
+ ],
1448
+ 'Z': [
1449
+ " _____",
1450
+ "|__ /",
1451
+ " / / ",
1452
+ " / /_ ",
1453
+ "/____|"
1454
+ ]
1455
+ }
1456
+
1457
+ self.letters.update(three_d_letters)
1458
+
1459
+ class ElectronicFont(ZeroArtFont):
1460
+ """Electronic-style ASCII art font"""
1461
+ def __init__(self) -> None:
1462
+ super().__init__("electronic")
1463
+ self.letters: Dict[str, List[str]] = {
1464
+ ' ': [" ", " ", " ", " ", " "]
1465
+ }
1466
+ self._populate_letters()
1467
+
1468
+ def _populate_letters(self) -> None:
1469
+ """Populate electronic-style letters"""
1470
+ electronic_letters = {
1471
+ 'A': [
1472
+ " /\\ ",
1473
+ " /--\\ ",
1474
+ "/----\\",
1475
+ "/ \\"
1476
+ ],
1477
+ 'B': [
1478
+ "|--- ",
1479
+ "|=== ",
1480
+ "|--- ",
1481
+ "|___ "
1482
+ ],
1483
+ 'C': [
1484
+ " /===",
1485
+ "| ",
1486
+ "| ",
1487
+ " \\___"
1488
+ ],
1489
+ 'D': [
1490
+ "|==\\ ",
1491
+ "| | | ",
1492
+ "| | | ",
1493
+ "|==/ "
1494
+ ],
1495
+ 'E': [
1496
+ "|===",
1497
+ "|---",
1498
+ "| ",
1499
+ "|___"
1500
+ ],
1501
+ 'F': [
1502
+ "|===",
1503
+ "|---",
1504
+ "| ",
1505
+ "| "
1506
+ ],
1507
+ 'G': [
1508
+ " /===",
1509
+ "| ",
1510
+ "| ---",
1511
+ " \\-|_"
1512
+ ],
1513
+ 'H': [
1514
+ "| | ",
1515
+ "|----| ",
1516
+ "| | ",
1517
+ "| | "
1518
+ ],
1519
+ 'I': [
1520
+ "===",
1521
+ " | ",
1522
+ " | ",
1523
+ "==="
1524
+ ],
1525
+ 'J': [
1526
+ " ===",
1527
+ " | ",
1528
+ " | ",
1529
+ "_--/ "
1530
+ ],
1531
+ 'K': [
1532
+ "| / ",
1533
+ "|--< ",
1534
+ "| \\ ",
1535
+ "| \\"
1536
+ ],
1537
+ 'L': [
1538
+ "| ",
1539
+ "| ",
1540
+ "| ",
1541
+ "|___ "
1542
+ ],
1543
+ 'M': [
1544
+ "/\\ /\\",
1545
+ "| \\/ |",
1546
+ "| | ",
1547
+ "| | "
1548
+ ],
1549
+ 'N': [
1550
+ "/\\ | ",
1551
+ "| \\ | ",
1552
+ "| \\ | ",
1553
+ "| \\| "
1554
+ ],
1555
+ 'O': [
1556
+ " /==\\ ",
1557
+ "| | ",
1558
+ "| | ",
1559
+ " \\==/ "
1560
+ ],
1561
+ 'P': [
1562
+ "|===",
1563
+ "|---",
1564
+ "| ",
1565
+ "| "
1566
+ ],
1567
+ 'Q': [
1568
+ " /==\\ ",
1569
+ "| | ",
1570
+ "| \\| ",
1571
+ " \\==/\\"
1572
+ ],
1573
+ 'R': [
1574
+ "|===",
1575
+ "|---",
1576
+ "| \\",
1577
+ "| \\"
1578
+ ],
1579
+ 'S': [
1580
+ "/===",
1581
+ "\\---",
1582
+ "---/",
1583
+ "___/"
1584
+ ],
1585
+ 'T': [
1586
+ "=====",
1587
+ " | ",
1588
+ " | ",
1589
+ " | "
1590
+ ],
1591
+ 'U': [
1592
+ "| | ",
1593
+ "| | ",
1594
+ "| | ",
1595
+ " \\__/ "
1596
+ ],
1597
+ 'V': [
1598
+ "\\ /",
1599
+ " \\ / ",
1600
+ " \\/ ",
1601
+ " V "
1602
+ ],
1603
+ 'W': [
1604
+ "\\ /",
1605
+ " \\ / ",
1606
+ " \\/\\/ ",
1607
+ " V V "
1608
+ ],
1609
+ 'X': [
1610
+ "\\ /",
1611
+ " \\/ ",
1612
+ " /\\ ",
1613
+ "/ \\"
1614
+ ],
1615
+ 'Y': [
1616
+ "\\ /",
1617
+ " \\/ ",
1618
+ " | ",
1619
+ " | "
1620
+ ],
1621
+ 'Z': [
1622
+ "===",
1623
+ " /",
1624
+ " / ",
1625
+ "==="
1626
+ ]
1627
+ }
1628
+
1629
+ self.letters.update(electronic_letters)
1630
+
1631
+ class IsometricFont(ZeroArtFont):
1632
+ """Isometric-style ASCII art font"""
1633
+ def __init__(self) -> None:
1634
+ super().__init__("isometric")
1635
+ self.letters: Dict[str, List[str]] = {
1636
+ ' ': [" ", " ", " ", " ", " "]
1637
+ }
1638
+ self._populate_letters()
1639
+
1640
+ def _populate_letters(self) -> None:
1641
+ """Populate isometric-style letters"""
1642
+ isometric_letters = {
1643
+ 'A': [
1644
+ " /\\ ",
1645
+ " / \\ ",
1646
+ " /----\\ ",
1647
+ "/ \\"
1648
+ ],
1649
+ 'B': [
1650
+ "|---\\",
1651
+ "| |",
1652
+ "|---/ ",
1653
+ "|____/"
1654
+ ],
1655
+ 'C': [
1656
+ " /---",
1657
+ " / ",
1658
+ "| ",
1659
+ " \\___ "
1660
+ ],
1661
+ 'D': [
1662
+ "|---\\",
1663
+ "| |",
1664
+ "| |",
1665
+ "|___/"
1666
+ ],
1667
+ 'E': [
1668
+ "|----",
1669
+ "|--- ",
1670
+ "| ",
1671
+ "|____"
1672
+ ],
1673
+ 'F': [
1674
+ "|----",
1675
+ "|--- ",
1676
+ "| ",
1677
+ "| "
1678
+ ],
1679
+ 'G': [
1680
+ " /---",
1681
+ " / ",
1682
+ "| --",
1683
+ " \\_|_"
1684
+ ],
1685
+ 'H': [
1686
+ "| | ",
1687
+ "|----| ",
1688
+ "| | ",
1689
+ "| | "
1690
+ ],
1691
+ 'I': [
1692
+ "---",
1693
+ " | ",
1694
+ " | ",
1695
+ "---"
1696
+ ],
1697
+ 'J': [
1698
+ "----",
1699
+ " | ",
1700
+ " | ",
1701
+ "_--/ "
1702
+ ],
1703
+ 'K': [
1704
+ "| /",
1705
+ "|--< ",
1706
+ "| \\"
1707
+ ],
1708
+ 'L': [
1709
+ "| ",
1710
+ "| ",
1711
+ "| ",
1712
+ "|___ "
1713
+ ],
1714
+ 'M': [
1715
+ "/\\ /\\",
1716
+ "| \\/ |",
1717
+ "| | ",
1718
+ "| | "
1719
+ ],
1720
+ 'N': [
1721
+ "|\\ | ",
1722
+ "| \\ | ",
1723
+ "| \\| ",
1724
+ "| \\ "
1725
+ ],
1726
+ 'O': [
1727
+ " /---\\ ",
1728
+ "| | ",
1729
+ "| | ",
1730
+ " \\---/ "
1731
+ ],
1732
+ 'P': [
1733
+ "|---",
1734
+ "|--- ",
1735
+ "| ",
1736
+ "| "
1737
+ ],
1738
+ 'Q': [
1739
+ " /---\\ ",
1740
+ "| | ",
1741
+ "| / | ",
1742
+ " \\--/\\"
1743
+ ],
1744
+ 'R': [
1745
+ "|---",
1746
+ "|--- ",
1747
+ "| \\",
1748
+ "| \\"
1749
+ ],
1750
+ 'S': [
1751
+ "/---",
1752
+ "\\---",
1753
+ "---/",
1754
+ "--/"
1755
+ ],
1756
+ 'T': [
1757
+ "-----",
1758
+ " | ",
1759
+ " | ",
1760
+ " | "
1761
+ ],
1762
+ 'U': [
1763
+ "| | ",
1764
+ "| | ",
1765
+ "| | ",
1766
+ " \\__/ "
1767
+ ],
1768
+ 'V': [
1769
+ "\\ /",
1770
+ " \\ / ",
1771
+ " \\/ "
1772
+ ],
1773
+ 'W': [
1774
+ "\\ /",
1775
+ " \\ / ",
1776
+ " \\/\\/ ",
1777
+ " V V "
1778
+ ],
1779
+ 'X': [
1780
+ "\\ /",
1781
+ " \\/ ",
1782
+ " /\\ ",
1783
+ "/ \\"
1784
+ ],
1785
+ 'Y': [
1786
+ "\\ /",
1787
+ " \\/ ",
1788
+ " | ",
1789
+ " | "
1790
+ ],
1791
+ 'Z': [
1792
+ "----",
1793
+ " /",
1794
+ " / ",
1795
+ "----"
1796
+ ]
1797
+ }
1798
+
1799
+ self.letters.update(isometric_letters)