webscout 8.2.7__py3-none-any.whl → 8.2.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of webscout might be problematic. Click here for more details.

Files changed (323) hide show
  1. webscout/AIauto.py +1 -1
  2. webscout/AIutel.py +298 -249
  3. webscout/Extra/Act.md +309 -0
  4. webscout/Extra/GitToolkit/__init__.py +10 -0
  5. webscout/Extra/GitToolkit/gitapi/README.md +110 -0
  6. webscout/Extra/GitToolkit/gitapi/__init__.py +12 -0
  7. webscout/Extra/GitToolkit/gitapi/repository.py +195 -0
  8. webscout/Extra/GitToolkit/gitapi/user.py +96 -0
  9. webscout/Extra/GitToolkit/gitapi/utils.py +62 -0
  10. webscout/Extra/YTToolkit/README.md +375 -0
  11. webscout/Extra/YTToolkit/YTdownloader.py +957 -0
  12. webscout/Extra/YTToolkit/__init__.py +3 -0
  13. webscout/Extra/YTToolkit/transcriber.py +476 -0
  14. webscout/Extra/YTToolkit/ytapi/README.md +44 -0
  15. webscout/Extra/YTToolkit/ytapi/__init__.py +6 -0
  16. webscout/Extra/YTToolkit/ytapi/channel.py +307 -0
  17. webscout/Extra/YTToolkit/ytapi/errors.py +13 -0
  18. webscout/Extra/YTToolkit/ytapi/extras.py +118 -0
  19. webscout/Extra/YTToolkit/ytapi/https.py +88 -0
  20. webscout/Extra/YTToolkit/ytapi/patterns.py +61 -0
  21. webscout/Extra/YTToolkit/ytapi/playlist.py +59 -0
  22. webscout/Extra/YTToolkit/ytapi/pool.py +8 -0
  23. webscout/Extra/YTToolkit/ytapi/query.py +40 -0
  24. webscout/Extra/YTToolkit/ytapi/stream.py +63 -0
  25. webscout/Extra/YTToolkit/ytapi/utils.py +62 -0
  26. webscout/Extra/YTToolkit/ytapi/video.py +232 -0
  27. webscout/Extra/__init__.py +7 -0
  28. webscout/Extra/autocoder/__init__.py +9 -0
  29. webscout/Extra/autocoder/autocoder.py +1105 -0
  30. webscout/Extra/autocoder/autocoder_utiles.py +332 -0
  31. webscout/Extra/gguf.md +430 -0
  32. webscout/Extra/gguf.py +684 -0
  33. webscout/Extra/tempmail/README.md +488 -0
  34. webscout/Extra/tempmail/__init__.py +28 -0
  35. webscout/Extra/tempmail/async_utils.py +141 -0
  36. webscout/Extra/tempmail/base.py +161 -0
  37. webscout/Extra/tempmail/cli.py +187 -0
  38. webscout/Extra/tempmail/emailnator.py +84 -0
  39. webscout/Extra/tempmail/mail_tm.py +361 -0
  40. webscout/Extra/tempmail/temp_mail_io.py +292 -0
  41. webscout/Extra/weather.md +281 -0
  42. webscout/Extra/weather.py +194 -0
  43. webscout/Extra/weather_ascii.py +76 -0
  44. webscout/Litlogger/Readme.md +175 -0
  45. webscout/Litlogger/__init__.py +67 -0
  46. webscout/Litlogger/core/__init__.py +6 -0
  47. webscout/Litlogger/core/level.py +23 -0
  48. webscout/Litlogger/core/logger.py +165 -0
  49. webscout/Litlogger/handlers/__init__.py +12 -0
  50. webscout/Litlogger/handlers/console.py +33 -0
  51. webscout/Litlogger/handlers/file.py +143 -0
  52. webscout/Litlogger/handlers/network.py +173 -0
  53. webscout/Litlogger/styles/__init__.py +7 -0
  54. webscout/Litlogger/styles/colors.py +249 -0
  55. webscout/Litlogger/styles/formats.py +458 -0
  56. webscout/Litlogger/styles/text.py +87 -0
  57. webscout/Litlogger/utils/__init__.py +6 -0
  58. webscout/Litlogger/utils/detectors.py +153 -0
  59. webscout/Litlogger/utils/formatters.py +200 -0
  60. webscout/Provider/AI21.py +177 -0
  61. webscout/Provider/AISEARCH/DeepFind.py +254 -0
  62. webscout/Provider/AISEARCH/Perplexity.py +359 -0
  63. webscout/Provider/AISEARCH/README.md +279 -0
  64. webscout/Provider/AISEARCH/__init__.py +9 -0
  65. webscout/Provider/AISEARCH/felo_search.py +228 -0
  66. webscout/Provider/AISEARCH/genspark_search.py +350 -0
  67. webscout/Provider/AISEARCH/hika_search.py +198 -0
  68. webscout/Provider/AISEARCH/iask_search.py +436 -0
  69. webscout/Provider/AISEARCH/monica_search.py +246 -0
  70. webscout/Provider/AISEARCH/scira_search.py +324 -0
  71. webscout/Provider/AISEARCH/webpilotai_search.py +281 -0
  72. webscout/Provider/Aitopia.py +316 -0
  73. webscout/Provider/AllenAI.py +440 -0
  74. webscout/Provider/Andi.py +228 -0
  75. webscout/Provider/Blackboxai.py +673 -0
  76. webscout/Provider/ChatGPTClone.py +237 -0
  77. webscout/Provider/ChatGPTGratis.py +194 -0
  78. webscout/Provider/ChatSandbox.py +342 -0
  79. webscout/Provider/Cloudflare.py +324 -0
  80. webscout/Provider/Cohere.py +208 -0
  81. webscout/Provider/Deepinfra.py +340 -0
  82. webscout/Provider/ExaAI.py +261 -0
  83. webscout/Provider/ExaChat.py +358 -0
  84. webscout/Provider/Flowith.py +217 -0
  85. webscout/Provider/FreeGemini.py +250 -0
  86. webscout/Provider/Gemini.py +169 -0
  87. webscout/Provider/GithubChat.py +370 -0
  88. webscout/Provider/GizAI.py +295 -0
  89. webscout/Provider/Glider.py +225 -0
  90. webscout/Provider/Groq.py +801 -0
  91. webscout/Provider/HF_space/__init__.py +0 -0
  92. webscout/Provider/HF_space/qwen_qwen2.py +206 -0
  93. webscout/Provider/HeckAI.py +285 -0
  94. webscout/Provider/HuggingFaceChat.py +469 -0
  95. webscout/Provider/Hunyuan.py +283 -0
  96. webscout/Provider/Jadve.py +291 -0
  97. webscout/Provider/Koboldai.py +384 -0
  98. webscout/Provider/LambdaChat.py +411 -0
  99. webscout/Provider/Llama3.py +259 -0
  100. webscout/Provider/MCPCore.py +315 -0
  101. webscout/Provider/Marcus.py +198 -0
  102. webscout/Provider/Nemotron.py +218 -0
  103. webscout/Provider/Netwrck.py +270 -0
  104. webscout/Provider/OLLAMA.py +396 -0
  105. webscout/Provider/OPENAI/BLACKBOXAI.py +735 -0
  106. webscout/Provider/OPENAI/Cloudflare.py +378 -0
  107. webscout/Provider/OPENAI/FreeGemini.py +282 -0
  108. webscout/Provider/OPENAI/NEMOTRON.py +244 -0
  109. webscout/Provider/OPENAI/README.md +1253 -0
  110. webscout/Provider/OPENAI/__init__.py +36 -0
  111. webscout/Provider/OPENAI/ai4chat.py +293 -0
  112. webscout/Provider/OPENAI/api.py +810 -0
  113. webscout/Provider/OPENAI/base.py +249 -0
  114. webscout/Provider/OPENAI/c4ai.py +373 -0
  115. webscout/Provider/OPENAI/chatgpt.py +556 -0
  116. webscout/Provider/OPENAI/chatgptclone.py +488 -0
  117. webscout/Provider/OPENAI/chatsandbox.py +172 -0
  118. webscout/Provider/OPENAI/deepinfra.py +319 -0
  119. webscout/Provider/OPENAI/e2b.py +1356 -0
  120. webscout/Provider/OPENAI/exaai.py +411 -0
  121. webscout/Provider/OPENAI/exachat.py +443 -0
  122. webscout/Provider/OPENAI/flowith.py +162 -0
  123. webscout/Provider/OPENAI/freeaichat.py +359 -0
  124. webscout/Provider/OPENAI/glider.py +323 -0
  125. webscout/Provider/OPENAI/groq.py +361 -0
  126. webscout/Provider/OPENAI/heckai.py +307 -0
  127. webscout/Provider/OPENAI/llmchatco.py +335 -0
  128. webscout/Provider/OPENAI/mcpcore.py +383 -0
  129. webscout/Provider/OPENAI/multichat.py +376 -0
  130. webscout/Provider/OPENAI/netwrck.py +356 -0
  131. webscout/Provider/OPENAI/opkfc.py +496 -0
  132. webscout/Provider/OPENAI/scirachat.py +471 -0
  133. webscout/Provider/OPENAI/sonus.py +303 -0
  134. webscout/Provider/OPENAI/standardinput.py +433 -0
  135. webscout/Provider/OPENAI/textpollinations.py +339 -0
  136. webscout/Provider/OPENAI/toolbaz.py +413 -0
  137. webscout/Provider/OPENAI/typefully.py +355 -0
  138. webscout/Provider/OPENAI/typegpt.py +358 -0
  139. webscout/Provider/OPENAI/uncovrAI.py +462 -0
  140. webscout/Provider/OPENAI/utils.py +307 -0
  141. webscout/Provider/OPENAI/venice.py +425 -0
  142. webscout/Provider/OPENAI/wisecat.py +381 -0
  143. webscout/Provider/OPENAI/writecream.py +163 -0
  144. webscout/Provider/OPENAI/x0gpt.py +378 -0
  145. webscout/Provider/OPENAI/yep.py +356 -0
  146. webscout/Provider/OpenGPT.py +209 -0
  147. webscout/Provider/Openai.py +496 -0
  148. webscout/Provider/PI.py +429 -0
  149. webscout/Provider/Perplexitylabs.py +415 -0
  150. webscout/Provider/QwenLM.py +254 -0
  151. webscout/Provider/Reka.py +214 -0
  152. webscout/Provider/StandardInput.py +290 -0
  153. webscout/Provider/TTI/AiForce/README.md +159 -0
  154. webscout/Provider/TTI/AiForce/__init__.py +22 -0
  155. webscout/Provider/TTI/AiForce/async_aiforce.py +224 -0
  156. webscout/Provider/TTI/AiForce/sync_aiforce.py +245 -0
  157. webscout/Provider/TTI/FreeAIPlayground/README.md +99 -0
  158. webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
  159. webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +181 -0
  160. webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +180 -0
  161. webscout/Provider/TTI/ImgSys/README.md +174 -0
  162. webscout/Provider/TTI/ImgSys/__init__.py +23 -0
  163. webscout/Provider/TTI/ImgSys/async_imgsys.py +202 -0
  164. webscout/Provider/TTI/ImgSys/sync_imgsys.py +195 -0
  165. webscout/Provider/TTI/MagicStudio/README.md +101 -0
  166. webscout/Provider/TTI/MagicStudio/__init__.py +2 -0
  167. webscout/Provider/TTI/MagicStudio/async_magicstudio.py +111 -0
  168. webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +109 -0
  169. webscout/Provider/TTI/Nexra/README.md +155 -0
  170. webscout/Provider/TTI/Nexra/__init__.py +22 -0
  171. webscout/Provider/TTI/Nexra/async_nexra.py +286 -0
  172. webscout/Provider/TTI/Nexra/sync_nexra.py +258 -0
  173. webscout/Provider/TTI/PollinationsAI/README.md +146 -0
  174. webscout/Provider/TTI/PollinationsAI/__init__.py +23 -0
  175. webscout/Provider/TTI/PollinationsAI/async_pollinations.py +311 -0
  176. webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +265 -0
  177. webscout/Provider/TTI/README.md +128 -0
  178. webscout/Provider/TTI/__init__.py +12 -0
  179. webscout/Provider/TTI/aiarta/README.md +134 -0
  180. webscout/Provider/TTI/aiarta/__init__.py +2 -0
  181. webscout/Provider/TTI/aiarta/async_aiarta.py +482 -0
  182. webscout/Provider/TTI/aiarta/sync_aiarta.py +440 -0
  183. webscout/Provider/TTI/artbit/README.md +100 -0
  184. webscout/Provider/TTI/artbit/__init__.py +22 -0
  185. webscout/Provider/TTI/artbit/async_artbit.py +155 -0
  186. webscout/Provider/TTI/artbit/sync_artbit.py +148 -0
  187. webscout/Provider/TTI/fastflux/README.md +129 -0
  188. webscout/Provider/TTI/fastflux/__init__.py +22 -0
  189. webscout/Provider/TTI/fastflux/async_fastflux.py +261 -0
  190. webscout/Provider/TTI/fastflux/sync_fastflux.py +252 -0
  191. webscout/Provider/TTI/huggingface/README.md +114 -0
  192. webscout/Provider/TTI/huggingface/__init__.py +22 -0
  193. webscout/Provider/TTI/huggingface/async_huggingface.py +199 -0
  194. webscout/Provider/TTI/huggingface/sync_huggingface.py +195 -0
  195. webscout/Provider/TTI/piclumen/README.md +161 -0
  196. webscout/Provider/TTI/piclumen/__init__.py +23 -0
  197. webscout/Provider/TTI/piclumen/async_piclumen.py +268 -0
  198. webscout/Provider/TTI/piclumen/sync_piclumen.py +233 -0
  199. webscout/Provider/TTI/pixelmuse/README.md +79 -0
  200. webscout/Provider/TTI/pixelmuse/__init__.py +4 -0
  201. webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +249 -0
  202. webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +182 -0
  203. webscout/Provider/TTI/talkai/README.md +139 -0
  204. webscout/Provider/TTI/talkai/__init__.py +4 -0
  205. webscout/Provider/TTI/talkai/async_talkai.py +229 -0
  206. webscout/Provider/TTI/talkai/sync_talkai.py +207 -0
  207. webscout/Provider/TTS/README.md +192 -0
  208. webscout/Provider/TTS/__init__.py +9 -0
  209. webscout/Provider/TTS/base.py +159 -0
  210. webscout/Provider/TTS/deepgram.py +156 -0
  211. webscout/Provider/TTS/elevenlabs.py +111 -0
  212. webscout/Provider/TTS/gesserit.py +128 -0
  213. webscout/Provider/TTS/murfai.py +113 -0
  214. webscout/Provider/TTS/parler.py +111 -0
  215. webscout/Provider/TTS/speechma.py +580 -0
  216. webscout/Provider/TTS/sthir.py +94 -0
  217. webscout/Provider/TTS/streamElements.py +333 -0
  218. webscout/Provider/TTS/utils.py +280 -0
  219. webscout/Provider/TeachAnything.py +229 -0
  220. webscout/Provider/TextPollinationsAI.py +308 -0
  221. webscout/Provider/TwoAI.py +280 -0
  222. webscout/Provider/TypliAI.py +305 -0
  223. webscout/Provider/UNFINISHED/ChatHub.py +209 -0
  224. webscout/Provider/UNFINISHED/Youchat.py +330 -0
  225. webscout/Provider/UNFINISHED/liner_api_request.py +263 -0
  226. webscout/Provider/UNFINISHED/oivscode.py +351 -0
  227. webscout/Provider/UNFINISHED/test_lmarena.py +119 -0
  228. webscout/Provider/Venice.py +258 -0
  229. webscout/Provider/VercelAI.py +253 -0
  230. webscout/Provider/WiseCat.py +233 -0
  231. webscout/Provider/WrDoChat.py +370 -0
  232. webscout/Provider/Writecream.py +246 -0
  233. webscout/Provider/WritingMate.py +269 -0
  234. webscout/Provider/__init__.py +172 -0
  235. webscout/Provider/ai4chat.py +149 -0
  236. webscout/Provider/akashgpt.py +335 -0
  237. webscout/Provider/asksteve.py +220 -0
  238. webscout/Provider/cerebras.py +290 -0
  239. webscout/Provider/chatglm.py +215 -0
  240. webscout/Provider/cleeai.py +213 -0
  241. webscout/Provider/copilot.py +425 -0
  242. webscout/Provider/elmo.py +283 -0
  243. webscout/Provider/freeaichat.py +285 -0
  244. webscout/Provider/geminiapi.py +208 -0
  245. webscout/Provider/granite.py +235 -0
  246. webscout/Provider/hermes.py +266 -0
  247. webscout/Provider/julius.py +223 -0
  248. webscout/Provider/koala.py +170 -0
  249. webscout/Provider/learnfastai.py +325 -0
  250. webscout/Provider/llama3mitril.py +215 -0
  251. webscout/Provider/llmchat.py +258 -0
  252. webscout/Provider/llmchatco.py +306 -0
  253. webscout/Provider/lmarena.py +198 -0
  254. webscout/Provider/meta.py +801 -0
  255. webscout/Provider/multichat.py +364 -0
  256. webscout/Provider/samurai.py +223 -0
  257. webscout/Provider/scira_chat.py +299 -0
  258. webscout/Provider/scnet.py +243 -0
  259. webscout/Provider/searchchat.py +292 -0
  260. webscout/Provider/sonus.py +258 -0
  261. webscout/Provider/talkai.py +194 -0
  262. webscout/Provider/toolbaz.py +353 -0
  263. webscout/Provider/turboseek.py +266 -0
  264. webscout/Provider/typefully.py +202 -0
  265. webscout/Provider/typegpt.py +289 -0
  266. webscout/Provider/uncovr.py +368 -0
  267. webscout/Provider/x0gpt.py +299 -0
  268. webscout/Provider/yep.py +389 -0
  269. webscout/__init__.py +4 -2
  270. webscout/cli.py +3 -28
  271. webscout/conversation.py +35 -35
  272. webscout/litagent/Readme.md +276 -0
  273. webscout/litagent/__init__.py +29 -0
  274. webscout/litagent/agent.py +455 -0
  275. webscout/litagent/constants.py +60 -0
  276. webscout/litprinter/__init__.py +59 -0
  277. webscout/scout/README.md +402 -0
  278. webscout/scout/__init__.py +8 -0
  279. webscout/scout/core/__init__.py +7 -0
  280. webscout/scout/core/crawler.py +140 -0
  281. webscout/scout/core/scout.py +568 -0
  282. webscout/scout/core/search_result.py +96 -0
  283. webscout/scout/core/text_analyzer.py +63 -0
  284. webscout/scout/core/text_utils.py +277 -0
  285. webscout/scout/core/web_analyzer.py +52 -0
  286. webscout/scout/element.py +460 -0
  287. webscout/scout/parsers/__init__.py +69 -0
  288. webscout/scout/parsers/html5lib_parser.py +172 -0
  289. webscout/scout/parsers/html_parser.py +236 -0
  290. webscout/scout/parsers/lxml_parser.py +178 -0
  291. webscout/scout/utils.py +37 -0
  292. webscout/swiftcli/Readme.md +323 -0
  293. webscout/swiftcli/__init__.py +95 -0
  294. webscout/swiftcli/core/__init__.py +7 -0
  295. webscout/swiftcli/core/cli.py +297 -0
  296. webscout/swiftcli/core/context.py +104 -0
  297. webscout/swiftcli/core/group.py +241 -0
  298. webscout/swiftcli/decorators/__init__.py +28 -0
  299. webscout/swiftcli/decorators/command.py +221 -0
  300. webscout/swiftcli/decorators/options.py +220 -0
  301. webscout/swiftcli/decorators/output.py +252 -0
  302. webscout/swiftcli/exceptions.py +21 -0
  303. webscout/swiftcli/plugins/__init__.py +9 -0
  304. webscout/swiftcli/plugins/base.py +135 -0
  305. webscout/swiftcli/plugins/manager.py +262 -0
  306. webscout/swiftcli/utils/__init__.py +59 -0
  307. webscout/swiftcli/utils/formatting.py +252 -0
  308. webscout/swiftcli/utils/parsing.py +267 -0
  309. webscout/version.py +1 -1
  310. webscout/webscout_search.py +2 -182
  311. webscout/webscout_search_async.py +1 -179
  312. webscout/zeroart/README.md +89 -0
  313. webscout/zeroart/__init__.py +135 -0
  314. webscout/zeroart/base.py +66 -0
  315. webscout/zeroart/effects.py +101 -0
  316. webscout/zeroart/fonts.py +1239 -0
  317. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/METADATA +115 -60
  318. webscout-8.2.8.dist-info/RECORD +334 -0
  319. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/WHEEL +1 -1
  320. webscout-8.2.7.dist-info/RECORD +0 -26
  321. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/entry_points.txt +0 -0
  322. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/licenses/LICENSE.md +0 -0
  323. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,89 @@
1
+ # 🎨 ZeroArt: Zero-Dependency ASCII Art Generator
2
+
3
+ ## 🚀 Overview
4
+
5
+ ZeroArt is a powerful, lightweight Python library for generating stunning ASCII art text with zero external dependencies. Transform your plain text into eye-catching, stylized art with just a few lines of code!
6
+
7
+ ## ✨ Features
8
+
9
+ - **Multiple Font Styles**
10
+ - Block Font
11
+ - Slant Font
12
+ - Neon Font
13
+ - Cyber Font
14
+
15
+ - **Zero Dependencies**
16
+ - Completely standalone library
17
+ - No external package requirements
18
+
19
+ - **Easy to Use**
20
+ - Simple, intuitive API
21
+ - Minimal setup needed
22
+
23
+ - **Text Effects**
24
+ - Rainbow coloring
25
+ - Glitch effect
26
+ - Text wrapping
27
+ - Outline generation
28
+
29
+ ## 🛠 Installation
30
+
31
+ No installation required! Just copy the `zeroart` directory into your project.
32
+
33
+ ## 💻 Usage Examples
34
+
35
+ ### Basic ASCII Art
36
+
37
+ ```python
38
+ from webscout import zeroart
39
+
40
+ # Generate ASCII art
41
+ art = zeroart.figlet_format("PYTHON", font='block')
42
+ print(art)
43
+
44
+ # Directly print ASCII art
45
+ zeroart.print_figlet("CODING", font='slant')
46
+ ```
47
+
48
+ ### Font Styles
49
+
50
+ ```python
51
+ from webscout import zeroart
52
+
53
+ # Different font styles
54
+ print(zeroart.figlet_format("AWESOME", font='block')) # Block style
55
+ print(zeroart.figlet_format("CODING", font='slant')) # Slant style
56
+ print(zeroart.figlet_format("NEON", font='neon')) # Neon style
57
+ print(zeroart.figlet_format("CYBER", font='cyber')) # Cyber style
58
+ ```
59
+
60
+ ### Text Effects
61
+
62
+ ```python
63
+ from webscout import zeroart
64
+
65
+ # Rainbow effect
66
+ print(zeroart.rainbow("COLORFUL", font='neon'))
67
+
68
+ # Glitch effect
69
+ print(zeroart.glitch("GLITCH", font='cyber'))
70
+
71
+ # Outline effect
72
+ print(zeroart.outline("BORDER", font='block'))
73
+ ```
74
+
75
+ ## 🎨 Available Fonts
76
+
77
+ 1. **Block Font**: Classic, bold block-style letters
78
+ 2. **Slant Font**: Elegant, slanted text
79
+ 3. **Neon Font**: Glowing, pixel-style art
80
+ 4. **Cyber Font**: Cyberpunk-inspired rendering
81
+
82
+ ## 🤝 Contributing
83
+
84
+ Contributions are welcome!
85
+
86
+ - Fork the repository
87
+ - Create a new font
88
+ - Add text effects
89
+ - Improve existing code
@@ -0,0 +1,135 @@
1
+ """
2
+ ZeroArt: A zero-dependency ASCII art text generator
3
+
4
+ Create awesome ASCII art text without external dependencies!
5
+ """
6
+
7
+ from typing import Dict, List, Literal, Optional, Union
8
+ from .base import ZeroArtFont
9
+ from .fonts import BlockFont, SlantFont, NeonFont, CyberFont, DottedFont, ShadowFont
10
+ from .effects import AsciiArtEffects
11
+
12
+ FontType = Literal['block', 'slant', 'neon', 'cyber', 'dotted', 'shadow']
13
+
14
+ def figlet_format(text: str, font: Union[str, ZeroArtFont] = 'block') -> str:
15
+ """
16
+ Generate ASCII art text
17
+
18
+ :param text: Text to convert
19
+ :param font: Font style (default: 'block')
20
+ :return: ASCII art representation of text
21
+ """
22
+ font_map: Dict[str, ZeroArtFont] = {
23
+ 'block': BlockFont(),
24
+ 'slant': SlantFont(),
25
+ 'neon': NeonFont(),
26
+ 'cyber': CyberFont(),
27
+ 'dotted': DottedFont(),
28
+ 'shadow': ShadowFont()
29
+ }
30
+
31
+ if isinstance(font, str):
32
+ selected_font: ZeroArtFont = font_map.get(font.lower(), BlockFont())
33
+ else:
34
+ selected_font = font
35
+ return selected_font.render(text)
36
+
37
+ def print_figlet(text: str, font: Union[str, ZeroArtFont] = 'block') -> None:
38
+ """
39
+ Print ASCII art text directly
40
+
41
+ :param text: Text to convert and print
42
+ :param font: Font style (default: 'block')
43
+ """
44
+ print(figlet_format(text, font))
45
+
46
+ # Expose additional effects with font handling
47
+ def rainbow(text: str, font: Union[str, ZeroArtFont] = 'block') -> str:
48
+ """
49
+ Apply a rainbow-like color effect to ASCII art
50
+
51
+ :param text: Text to render
52
+ :param font: Font style (default: 'block')
53
+ :return: Rainbow-styled ASCII art
54
+ """
55
+ font_map: Dict[str, ZeroArtFont] = {
56
+ 'block': BlockFont(),
57
+ 'slant': SlantFont(),
58
+ 'neon': NeonFont(),
59
+ 'cyber': CyberFont(),
60
+ 'dotted': DottedFont(),
61
+ 'shadow': ShadowFont()
62
+ }
63
+
64
+ if isinstance(font, str):
65
+ selected_font: ZeroArtFont = font_map.get(font.lower(), BlockFont())
66
+ else:
67
+ selected_font = font
68
+ return AsciiArtEffects.rainbow_effect(text, selected_font)
69
+
70
+ def glitch(text: str, font: Union[str, ZeroArtFont] = 'block', glitch_intensity: float = 0.1) -> str:
71
+ """
72
+ Apply a glitch-like distortion to ASCII art
73
+
74
+ :param text: Text to render
75
+ :param font: Font style (default: 'block')
76
+ :param glitch_intensity: Probability of character distortion
77
+ :return: Glitched ASCII art
78
+ """
79
+ font_map: Dict[str, ZeroArtFont] = {
80
+ 'block': BlockFont(),
81
+ 'slant': SlantFont(),
82
+ 'neon': NeonFont(),
83
+ 'cyber': CyberFont(),
84
+ 'dotted': DottedFont(),
85
+ 'shadow': ShadowFont()
86
+ }
87
+
88
+ if isinstance(font, str):
89
+ selected_font: ZeroArtFont = font_map.get(font.lower(), BlockFont())
90
+ else:
91
+ selected_font = font
92
+ return AsciiArtEffects.glitch_effect(text, selected_font, glitch_intensity)
93
+
94
+ wrap_text = AsciiArtEffects.wrap_text
95
+
96
+ def outline(text: str, font: Union[str, ZeroArtFont] = 'block', outline_char: str = '*') -> str:
97
+ """
98
+ Add an outline effect to ASCII art
99
+
100
+ :param text: Text to render
101
+ :param font: Font style (default: 'block')
102
+ :param outline_char: Character to use for outline
103
+ :return: ASCII art with outline
104
+ """
105
+ font_map: Dict[str, ZeroArtFont] = {
106
+ 'block': BlockFont(),
107
+ 'slant': SlantFont(),
108
+ 'neon': NeonFont(),
109
+ 'cyber': CyberFont(),
110
+ 'dotted': DottedFont(),
111
+ 'shadow': ShadowFont()
112
+ }
113
+
114
+ if isinstance(font, str):
115
+ selected_font: ZeroArtFont = font_map.get(font.lower(), BlockFont())
116
+ else:
117
+ selected_font = font
118
+ return AsciiArtEffects.outline_effect(text, selected_font, outline_char)
119
+
120
+ __all__ = [
121
+ 'figlet_format',
122
+ 'print_figlet',
123
+ 'rainbow',
124
+ 'glitch',
125
+ 'wrap_text',
126
+ 'outline',
127
+ 'BlockFont',
128
+ 'SlantFont',
129
+ 'NeonFont',
130
+ 'CyberFont',
131
+ 'DottedFont',
132
+ 'ShadowFont',
133
+ 'ZeroArtFont',
134
+ 'FontType'
135
+ ]
@@ -0,0 +1,66 @@
1
+ """
2
+ ZeroArt Base: Core classes and utilities for ASCII art generation
3
+ """
4
+ from typing import Dict, List, Optional, Union
5
+
6
+ class ZeroArtFont:
7
+ """Base class for ASCII art fonts"""
8
+ def __init__(self, name: str) -> None:
9
+ self.name: str = name
10
+ self.letters: Dict[str, List[str]] = {}
11
+ self.special_chars: Dict[str, List[str]] = {}
12
+
13
+ def add_letter(self, char: str, art_lines: List[str]) -> None:
14
+ """
15
+ Add a custom letter to the font
16
+
17
+ :param char: Character to add
18
+ :param art_lines: List of art lines representing the character
19
+ """
20
+ self.letters[char.upper()] = art_lines
21
+
22
+ def add_special_char(self, name: str, art_lines: List[str]) -> None:
23
+ """
24
+ Add a special ASCII art character or design
25
+
26
+ :param name: Name of the special character
27
+ :param art_lines: List of art lines representing the character
28
+ """
29
+ self.special_chars[name] = art_lines
30
+
31
+ def get_letter(self, char: str) -> List[str]:
32
+ """
33
+ Get ASCII art for a specific character
34
+
35
+ :param char: Character to retrieve
36
+ :return: List of art lines or default space
37
+ """
38
+ return self.letters.get(char.upper(), self.letters.get(' ', [' ']))
39
+
40
+ def render(self, text: str) -> str:
41
+ """
42
+ Render text as ASCII art
43
+
44
+ :param text: Text to render as ASCII art
45
+ :return: ASCII art representation of the text
46
+ """
47
+ if not text:
48
+ return ""
49
+ # Get the maximum height of any character in the font
50
+ max_height: int = max(len(self.get_letter(c)) for c in text)
51
+
52
+ # Initialize art_lines with empty strings
53
+ art_lines: List[str] = ["" for _ in range(max_height)]
54
+
55
+ # Process each character
56
+ for char in text:
57
+ char_art: List[str] = self.get_letter(char)
58
+ # Pad shorter characters with empty lines to match max_height
59
+ while len(char_art) < max_height:
60
+ char_art.append(" " * len(char_art[0]))
61
+
62
+ # Add character art to each line
63
+ for i in range(max_height):
64
+ art_lines[i] += char_art[i] + " "
65
+
66
+ return "\n".join(art_lines)
@@ -0,0 +1,101 @@
1
+ """
2
+ ZeroArt Effects: ASCII art text effects and transformations
3
+ """
4
+
5
+ import random
6
+ import textwrap
7
+ from typing import List, Optional, Union
8
+ from .base import ZeroArtFont
9
+
10
+ class AsciiArtEffects:
11
+ """Collection of ASCII art text effects"""
12
+
13
+ @staticmethod
14
+ def rainbow_effect(text: str, font: ZeroArtFont) -> str:
15
+ """
16
+ Apply a rainbow-like color effect to ASCII art
17
+
18
+ :param text: Text to render
19
+ :param font: Font to use
20
+ :return: Rainbow-styled ASCII art
21
+ """
22
+ colors: List[str] = [
23
+ '\033[91m', # Red
24
+ '\033[93m', # Yellow
25
+ '\033[92m', # Green
26
+ '\033[94m', # Blue
27
+ '\033[95m', # Magenta
28
+ ]
29
+
30
+ art: str = font.render(text)
31
+ art_lines: List[str] = art.split('\n')
32
+
33
+ colored_lines: List[str] = []
34
+ for line in art_lines:
35
+ colored_line: str = ''
36
+ for char in line:
37
+ color: str = random.choice(colors)
38
+ colored_line += color + char
39
+ colored_lines.append(colored_line + '\033[0m') # Reset color
40
+
41
+ return '\n'.join(colored_lines)
42
+
43
+ @staticmethod
44
+ def glitch_effect(text: str, font: ZeroArtFont, glitch_intensity: float = 0.1) -> str:
45
+ """
46
+ Apply a glitch-like distortion to ASCII art
47
+
48
+ :param text: Text to render
49
+ :param font: Font to use
50
+ :param glitch_intensity: Probability of character distortion
51
+ :return: Glitched ASCII art
52
+ """
53
+ art: str = font.render(text)
54
+ art_lines: List[str] = art.split('\n')
55
+
56
+ glitched_lines: List[str] = []
57
+ glitch_chars: List[str] = ['~', '^', '`', '¯', '±']
58
+
59
+ for line in art_lines:
60
+ glitched_line: str = ''
61
+ for char in line:
62
+ if random.random() < glitch_intensity:
63
+ glitched_line += random.choice(glitch_chars)
64
+ else:
65
+ glitched_line += char
66
+ glitched_lines.append(glitched_line)
67
+
68
+ return '\n'.join(glitched_lines)
69
+
70
+ @staticmethod
71
+ def wrap_text(text: str, width: int = 20) -> str:
72
+ """
73
+ Wrap ASCII art text to a specific width
74
+
75
+ :param text: Text to wrap
76
+ :param width: Maximum line width
77
+ :return: Wrapped text
78
+ """
79
+ return textwrap.fill(text, width=width)
80
+
81
+ @staticmethod
82
+ def outline_effect(text: str, font: ZeroArtFont, outline_char: str = '*') -> str:
83
+ """
84
+ Add an outline effect to ASCII art
85
+
86
+ :param text: Text to render
87
+ :param font: Font to use
88
+ :param outline_char: Character to use for outline
89
+ :return: ASCII art with outline
90
+ """
91
+ art: str = font.render(text)
92
+ art_lines: List[str] = art.split('\n')
93
+
94
+ outlined_lines: List[str] = []
95
+ for line in art_lines:
96
+ outlined_line: str = outline_char + line + outline_char
97
+ outlined_lines.append(outlined_line)
98
+
99
+ top_bottom_line: str = outline_char * (len(outlined_lines[0]))
100
+
101
+ return '\n'.join([top_bottom_line] + outlined_lines + [top_bottom_line])