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