printcolored 2.0__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.
printColored/Fonter.py ADDED
@@ -0,0 +1,84 @@
1
+ """
2
+ credits to https://lingojam.com/FancyTextGenerator for all fonts
3
+ """
4
+ #also note that sometimes some characters are displayed on the same
5
+ #place for example the W&O and H&E in the san_andreas font
6
+
7
+
8
+ from random import *
9
+
10
+ fonts = {
11
+ "original": ("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
12
+
13
+ "san_andreas":("๐”ž","๐”Ÿ","๐” ","๐”ก","๐”ข","๐”ฃ","๐”ค","๐”ฅ","๐”ฆ","๐”ง","๐”จ","๐”ฉ","๐”ช","๐”ซ","๐”ฌ","๐”ญ","๐”ฎ","๐”ฏ","๐”ฐ","๐”ฑ","๐”ฒ","๐”ณ","๐”ด","๐”ต","๐”ถ","๐”ท","๐”„","๐”…","โ„ญ","๐”‡","๐”ˆ","๐”‰","๐”Š","โ„Œ","โ„‘","๐”","๐”Ž","๐”","๐”","๐”‘","๐”’","๐”“","๐””","โ„œ","๐”–","๐”—","๐”˜","๐”™","๐”š","๐”›","๐”œ","โ„จ"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
14
+
15
+ "san_andreas_bold":("๐–†","๐–‡","๐–ˆ","๐–‰","๐–Š","๐–‹","๐–Œ","๐–","๐–Ž","๐–","๐–","๐–‘","๐–’","๐–“","๐–”","๐–•","๐––","๐–—","๐–˜","๐–™","๐–š","๐–›","๐–œ","๐–","๐–ž","๐–Ÿ","๐•ฌ","๐•ญ","๐•ฎ","๐•ฏ","๐•ฐ","๐•ฑ","๐•ฒ","๐•ณ","๐•ด","๐•ต","๐•ถ","๐•ท","๐•ธ","๐•น","๐•บ","๐•ป","๐•ผ","๐•ฝ","๐•พ","๐•ฟ","๐–€","๐–","๐–‚","๐–ƒ","๐–„","๐–…"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
16
+
17
+ "fancy_bold": ("๐“ช","๐“ซ","๐“ฌ","๐“ญ","๐“ฎ","๐“ฏ","๐“ฐ","๐“ฑ","๐“ฒ","๐“ณ","๐“ด","๐“ต","๐“ถ","๐“ท","๐“ธ","๐“น","๐“บ","๐“ป","๐“ผ","๐“ฝ","๐“พ","๐“ฟ","๐”€","๐”","๐”‚","๐”ƒ","๐“","๐“‘","๐“’","๐““","๐“”","๐“•","๐“–","๐“—","๐“˜","๐“™","๐“š","๐“›","๐“œ","๐“","๐“ž","๐“Ÿ","๐“ ","๐“ก","๐“ข","๐“ฃ","๐“ค","๐“ฅ","๐“ฆ","๐“ง","๐“จ","๐“ฉ"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
18
+
19
+ "fancy":("๐’ถ","๐’ท","๐’ธ","๐’น","๐‘’","๐’ป","๐‘”","๐’ฝ","๐’พ","๐’ฟ","๐“€","๐“","๐“‚","๐“ƒ","๐‘œ","๐“…","๐“†","๐“‡","๐“ˆ","๐“‰","๐“Š","๐“‹","๐“Œ","๐“","๐“Ž","๐“","๐’œ","๐ต","๐’ž","๐’Ÿ","๐ธ","๐น","๐’ข","๐ป","๐ผ","๐’ฅ","๐’ฆ","๐ฟ","๐‘€","๐’ฉ","๐’ช","๐’ซ","๐’ฌ","๐‘…","๐’ฎ","๐’ฏ","๐’ฐ","๐’ฑ","๐’ฒ","๐’ณ","๐’ด","๐’ต"," ","๐Ÿข","๐Ÿฃ","๐Ÿค","๐Ÿฅ","๐Ÿฆ","๐Ÿง","๐Ÿจ","๐Ÿฉ","๐Ÿช","๐Ÿซ","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
20
+
21
+ "hollow": ("๐•’","๐•“","๐•”","๐••","๐•–","๐•—","๐•˜","๐•™","๐•š","๐•›","๐•œ","๐•","๐•ž","๐•Ÿ","๐• ","๐•ก","๐•ข","๐•ฃ","๐•ค","๐•ฅ","๐•ฆ","๐•ง","๐•จ","๐•ฉ","๐•ช","๐•ซ","๐”ธ","๐”น","โ„‚","๐”ป","๐”ผ","๐”ฝ","๐”พ","โ„","๐•€","๐•","๐•‚","๐•ƒ","๐•„","โ„•","๐•†","โ„™","โ„š","โ„","๐•Š","๐•‹","๐•Œ","๐•","๐•Ž","๐•","๐•","โ„ค"," ","๐Ÿ˜","๐Ÿ™","๐Ÿš","๐Ÿ›","๐Ÿœ","๐Ÿ","๐Ÿž","๐ŸŸ","๐Ÿ ","๐Ÿก","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
22
+
23
+ "large": ("๏ฝ","๏ฝ‚","๏ฝƒ","๏ฝ„","๏ฝ…","๏ฝ†","๏ฝ‡","๏ฝˆ","๏ฝ‰","๏ฝŠ","๏ฝ‹","๏ฝŒ","๏ฝ","๏ฝŽ","๏ฝ","๏ฝ","๏ฝ‘","๏ฝ’","๏ฝ“","๏ฝ”","๏ฝ•","๏ฝ–","๏ฝ—","๏ฝ˜","๏ฝ™","๏ฝš","๏ผก","๏ผข","๏ผฃ","๏ผค","๏ผฅ","๏ผฆ","๏ผง","๏ผจ","๏ผฉ","๏ผช","๏ผซ","๏ผฌ","๏ผญ","๏ผฎ","๏ผฏ","๏ผฐ","๏ผฑ","๏ผฒ","๏ผณ","๏ผด","๏ผต","๏ผถ","๏ผท","๏ผธ","๏ผน","๏ผบ"," ","๏ผ","๏ผ‘","๏ผ’","๏ผ“","๏ผ”","๏ผ•","๏ผ–","๏ผ—","๏ผ˜","๏ผ™","๏ผ","๏ผ„","๏ผ…","๏ผ†","๏ผ‡","๏ผˆ","๏ผ‰","๏ผŠ","๏ผ‹",",","๏ผ","๏ผŽ","๏ผ","๏ผš","๏ผ›","<","๏ผ",">","๏ผŸ","๏ผ ","[","\\","]","^","_","`","{","|","}","~"),
24
+
25
+ "small": ("แด€","ส™","แด„","แด…","แด‡","๊œฐ","ษข","สœ","ษช","แดŠ","แด‹","สŸ","แด","ษด","แด","แด˜","Q","ส€","๊œฑ","แด›","แดœ","แด ","แดก","x","ส","แดข","แด€","ส™","แด„","แด…","แด‡","๊œฐ","ษข","สœ","ษช","แดŠ","แด‹","สŸ","แด","ษด","แด","แด˜","Q","ส€","๊œฑ","แด›","แดœ","แด ","แดก","x","ส","แดข"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
26
+
27
+ "chinese": ("๊","๊Œƒ","๊‰“","๊€ธ","๊Ÿ","๊އ","๊…","๊ƒ…","๊€ค","๊€ญ","๊€˜","๊’’","๊‚ต","๊ˆค","๊‚ฆ","๊‰ฃ","๊†ฐ","๊‹ช","๊Œ—","๊“„","๊€Ž","๊ƒด","๊…","๊Šผ","๊Œฉ","๊ด","๊","๊Œƒ","๊‰“","๊€ธ","๊Ÿ","๊އ","๊…","๊ƒ…","๊€ค","๊€ญ","๊€˜","๊’’","๊‚ต","๊ˆค","๊‚ฆ","๊‰ฃ","๊†ฐ","๊‹ช","๊Œ—","๊“„","๊€Ž","๊ƒด","๊…","๊Šผ","๊Œฉ","๊ด"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
28
+
29
+ "squared": ("๐Ÿ…ฐ","๐Ÿ…ฑ","๐Ÿ…ฒ","๐Ÿ…ณ","๐Ÿ…ด","๐Ÿ…ต","๐Ÿ…ถ","๐Ÿ…ท","๐Ÿ…ธ","๐Ÿ…น","๐Ÿ…บ","๐Ÿ…ป","๐Ÿ…ผ","๐Ÿ…ฝ","๐Ÿ…พ","๐Ÿ…ฟ","๐Ÿ†€","๐Ÿ†","๐Ÿ†‚","๐Ÿ†ƒ","๐Ÿ†„","๐Ÿ†…","๐Ÿ††","๐Ÿ†‡","๐Ÿ†ˆ","๐Ÿ†‰","๐Ÿ…ฐ","๐Ÿ…ฑ","๐Ÿ…ฒ","๐Ÿ…ณ","๐Ÿ…ด","๐Ÿ…ต","๐Ÿ…ถ","๐Ÿ…ท","๐Ÿ…ธ","๐Ÿ…น","๐Ÿ…บ","๐Ÿ…ป","๐Ÿ…ผ","๐Ÿ…ฝ","๐Ÿ…พ","๐Ÿ…ฟ","๐Ÿ†€","๐Ÿ†","๐Ÿ†‚","๐Ÿ†ƒ","๐Ÿ†„","๐Ÿ†…","๐Ÿ††","๐Ÿ†‡","๐Ÿ†ˆ","๐Ÿ†‰"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
30
+
31
+ "pointed": ("aอŽ","bอŽ","cอŽ","dอŽ","eอŽ","fอŽ","gอŽ","hอŽ","iอŽ","jอŽ","kอŽ","lอŽ","mอŽ","nอŽ","oอŽ","pอŽ","qอŽ","rอŽ","sอŽ","tอŽ","uอŽ","vอŽ","wอŽ","xอŽ","yอŽ","zอŽ","AอŽ","BอŽ","CอŽ","DอŽ","EอŽ","FอŽ","GอŽ","HอŽ","IอŽ","JอŽ","KอŽ","LอŽ","MอŽ","NอŽ","OอŽ","PอŽ","QอŽ","RอŽ","SอŽ","TอŽ","UอŽ","VอŽ","WอŽ","XอŽ","YอŽ","ZอŽ"," อŽ","0อŽ","1อŽ","2อŽ","3อŽ","4อŽ","5อŽ","6อŽ","7อŽ","8อŽ","9อŽ","!อŽ","$อŽ","%อŽ","&อŽ",",","(อŽ",")อŽ","*อŽ","+อŽ",",","-อŽ",".อŽ","/อŽ",":อŽ",";อŽ","<อŽ","=อŽ",">อŽ","?อŽ","@อŽ","[อŽ","\อŽ","]อŽ","^อŽ","_อŽ","`อŽ","{อŽ","|อŽ","}อŽ","~อŽ"),
32
+
33
+ "power": ("แตƒ","แต‡","แถœ","แตˆ","แต‰","แถ ","แต","สฐ","โฑ","สฒ","แต","หก","แต","โฟ","แต’","แต–","q","สณ","หข","แต—","แต˜","แต›","สท","หฃ","สธ","แถป","แดฌ","แดฎ","แถœ","แดฐ","แดฑ","แถ ","แดณ","แดด","แดต","แดถ","แดท","แดธ","แดน","แดบ","แดผ","แดพ","Q","แดฟ","หข","แต€","แต","โฑฝ","แต‚","หฃ","สธ","แถป"," ","โฐ","ยน","ยฒ","ยณ","โด","โต","โถ","โท","โธ","โน","!","$","%","&",",","โฝ","โพ","*","โบ",",","โป",".","/",":",";","<","โผ",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
34
+
35
+ "weird": ("แ—ฉ","แ—ท","แ‘•","แ—ช","E","แ–ด","G","แ•ผ","I","แ’","K","แ’ช","แ—ฐ","แ‘Ž","O","แ‘ญ","แ‘ซ","แ–‡","แ”•","T","แ‘Œ","แฏ","แ—ฏ","แ™ญ","Y","แ˜”","แ—ฉ","แ—ท","แ‘•","แ—ช","E","แ–ด","G","แ•ผ","I","แ’","K","แ’ช","แ—ฐ","แ‘Ž","O","แ‘ญ","แ‘ซ","แ–‡","แ”•","T","แ‘Œ","แฏ","แ—ฏ","แ™ญ","Y","แ˜”"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&",",","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
36
+
37
+ "weird2": ("แ—ฉ","แ—ท","แ‘ข","แ•ฒ","แ˜ฟ","แ–ด","แ˜œ","แ•ผ","แ“ฐ","แ’š","แ–ฝแธ","แ’ช","แ˜ป","แ˜‰","แ“","แ•ต","แ•ด","แ–‡","S","แ–ถ","แ‘˜","แบ","แ˜บ","แ™ญ","แ–ป","แ—ฑ","แ—ฉ","แ—ท","แ‘ข","แ•ฒ","แ˜ฟ","แ–ด","แ˜œ","แ•ผ","แ“ฐ","แ’š","แ–ฝแธ","แ’ช","แ˜ป","แ˜‰","แ“","แ•ต","แ•ด","แ–‡","S","แ–ถ","แ‘˜","แบ","แ˜บ","แ™ญ","แ–ป","แ—ฑ"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&",",","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
38
+
39
+ "japanese":("ๅ‚","ไนƒ","ๅŒš","แ—ช","ไน‡","ๅƒ","แŽถ","ๅ„","ไธจ","๏พŒ","าœ","ใ„ฅ","็ˆช","ๅ‡ ","ใ„–","ๅฉ","ษŠ","ๅฐบ","ไธ‚","ใ„’","ใ„ฉ","แฏ","ๅฑฑ","ไน‚","ใ„š","ไน™","ๅ‚","ไนƒ","ๅŒš","แ—ช","ไน‡","ๅƒ","แŽถ","ๅ„","ไธจ","๏พŒ","าœ","ใ„ฅ","็ˆช","ๅ‡ ","ใ„–","ๅฉ","ษŠ","ๅฐบ","ไธ‚","ใ„’","ใ„ฉ","แฏ","ๅฑฑ","ไน‚","ใ„š","ไน™"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&",",","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
40
+
41
+ "japanese2":("๏พ‘","ไนƒ","แ„ƒ","ใ‚Š","ไน‡","๏ฝท","ใƒ ","ใ‚“","๏พ‰","๏พŒ","ใ‚บ","๏พš","๏พถ","ๅˆ€","ใฎ","๏ฝฑ","ใ‚","ๅฐบ","ไธ‚","๏ฝฒ","ใฒ","โˆš","W","๏พ’","๏พ˜","ไน™","๏พ‘","ไนƒ","แ„ƒ","ใ‚Š","ไน‡","๏ฝท","ใƒ ","ใ‚“","๏พ‰","๏พŒ","ใ‚บ","๏พš","๏พถ","ๅˆ€","ใฎ","๏ฝฑ","ใ‚","ๅฐบ","ไธ‚","๏ฝฒ","ใฒ","โˆš","W","๏พ’","๏พ˜","ไน™"," ","0","1","2","3","4","5","6","7","8","9","!","$","%","&",",","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_","`","{","|","}","~"),
42
+
43
+
44
+
45
+
46
+ }
47
+
48
+ random_decorators = {
49
+ "chess": ("โ™”","โ™•","โ™–","โ™—","โ™˜","โ™™","โ™š,","โ™›","โ™œ","โ™","โ™ž","โ™Ÿ"),
50
+ "cards": ("โ™ ","โ™ก","โ™ข","โ™ฃ","โ™ค","โ™ฅ","โ™ฆ","โ™ง","โ˜†","โ˜…")
51
+ }
52
+
53
+ decorators = {
54
+ "barrier": ("ใ€Ž","ใ€"),
55
+ "barrier2": ("ใ€","ใ€‘"),
56
+ "notes": ("ยท.ยธยธ.ยทโ™ฉโ™ชโ™ซ" , "โ™ซโ™ชโ™ฉยท.ยธยธ.ยท"),
57
+ "single_notes": ("โ™ช","โ™ซ"),
58
+ "transcending":("ยธ.-โ€ข~ยนยฐโ€ห†หœยจ'" , "'ยจหœห†โ€ยฐยน~โ€ข-.ยธ"),
59
+ "star": (".โ€ขยฐยค*(ยฏ`โ˜…ยดยฏ)*ยคยฐ", "ยฐยค*(ยฏยดโ˜…`ยฏ)*ยคยฐโ€ข."),
60
+ "curly": ("โˆ™โˆ™ยทโ–ซโ–ซแต’แดผแต’โ–ซโ‚’โ‚’โ–ซแต’แดผแต’โ–ซโ‚’โ‚’โ–ซแต’แดผแต’" , "แต’แดผแต’โ–ซโ‚’โ‚’โ–ซแต’แดผแต’โ–ซโ‚’โ‚’โ–ซแต’แดผแต’โ–ซโ–ซยทโˆ™โˆ™"), # TOO DAMN LONG
61
+ "short_curly": ("ยทโ–ซโ–ซแต’แดผแต’โ–ซโ‚’โ‚’" , "โ‚’โ‚’โ–ซแต’แดผแต’โ–ซโ–ซยท"), # better
62
+ "flower": ("โ—ฆโ€ขโ—โ—‰โœฟ", "โœฟโ—‰โ—โ€ขโ—ฆ"),
63
+ "dot": ("โ€ขยดยฏ`โ€ข." , ".โ€ขยดยฏ`โ€ข"),
64
+ "hearts": ("โฅ", "โฃโค"),
65
+ "crystal": ("โงฉโŸก", "โ–๏ปฟ"),
66
+ "rifle": ("หœโ€*ยฐโ€ข.หœโ€*ยฐโ€ข","โ€ขยฐ*โ€หœ.โ€ขยฐ*โ€หœ"),
67
+ "short_rifle": ("หœโ€*ยฐโ€ข.",".โ€ขยฐ*โ€หœ"),
68
+ "brackets": ("โฆ‘", "โฆ’"),
69
+ "chess": (choice(random_decorators["chess"]), choice(random_decorators["chess"])),
70
+ "cards": (choice(random_decorators["cards"]), choice(random_decorators["cards"])),
71
+
72
+ }
73
+
74
+
75
+
76
+ def Fonter(text, font, decorator=""):
77
+ original = fonts["original"]
78
+ fontedtext = []
79
+ for letter in text:
80
+ fontedtext.append(fonts[font][original.index(letter)] if letter in original else letter)
81
+ result = "".join(fontedtext)
82
+ if decorator == "":
83
+ return result
84
+ return f"{decorators[decorator][0]}{result}{decorators[decorator][1]}"
@@ -0,0 +1,3 @@
1
+ from .core import printColored, colorGen, printl, printRGB, printRGBV, Theme, ThemeRGBV, formatfinder
2
+
3
+ __all__ = ["printColored", "colorGen", "printl", "printRGB", "printRGBV", "Theme", "ThemeRGBV", "formatfinder"]
@@ -0,0 +1,163 @@
1
+ from .core import *
2
+
3
+ if __name__ == '__main__':
4
+ deco = Theme("green", "bold")
5
+ deco2 = Theme("bright_blue", "bold")
6
+ deco3 = Theme("bright_yellow")
7
+ border = "--------------------------------"
8
+ deco.print(border)
9
+
10
+ choice = True if input("Do you want to see all available formats?(Y/N): ").lower() == "y" else False
11
+ if choice:
12
+ print("All available formats:")
13
+ formatfinder("ย ","ย ")
14
+
15
+ deco.print(border)
16
+ choice = True if input("Do you want to see all existing formats in range 1-107?(Y/N): ").lower() == "y" else False
17
+ if choice:
18
+ print("All possible formats in range of 1-107:")
19
+ formatfinder("1","107")
20
+
21
+ deco.print(border)
22
+ choice = True if input("Do you want to see all Fonter and decorators in the extra file?(Y/N): ").lower() == "y" else False
23
+ if choice:
24
+ print("All Fonter + decorators available:")
25
+ formatfinder(" ","font")
26
+
27
+ deco.print(border)
28
+
29
+ deco2.print(border)
30
+ print("Guide for using the functions:")
31
+ deco2.print(border)
32
+
33
+ # main functions:
34
+
35
+ # printColored()
36
+ deco.print(border)
37
+ print("Page 1:")
38
+ printColored("Example use of printColored()".center(32), "green","bold","italic")
39
+ print("Main function, enter text, then formats, and the text will come formatted based on the provided formats")
40
+ print("Take a look at the dictionary and enter formats to use")
41
+ deco.print(border)
42
+ input("Press enter to continue...")
43
+
44
+
45
+ # colorGen()
46
+ deco.print(border)
47
+ print("Page 2:")
48
+ print(
49
+ f"{colorGen('red', 'bold')} Example use "
50
+ f"{colorGen('', 'strikethrough', 'blue')}of colorGen()"
51
+ f"{colorGen('')}"
52
+ )
53
+
54
+
55
+ genformat1 = colorGen("bright_white", "highlight_blue")
56
+ genformat2 = colorGen("", "yellow", "highlight_green", "underline")
57
+ print(f" {genformat1}Example 2 {genformat2}of colorGen(){colorGen('')}")
58
+ print("This is used to enter many formats in the same line")
59
+ deco.print(border)
60
+ input("Press enter to continue...")
61
+
62
+
63
+ # printl()
64
+ deco.print(border)
65
+ print("Page 3:")
66
+ printl(("Example", "use", "of", "printl()"),("green", ("36", "italic"), "yellow", "magenta"), sepr=" ")
67
+ print("Printl is used to print many text in same line each with their own formats")
68
+ deco.print(border)
69
+ input("Press enter to continue...")
70
+
71
+ # printRGB()
72
+ deco.print(border)
73
+ print("Page 4:")
74
+ printRGB("Example use of printRGB()".center(32), "255", "0", "255", "bold"," ")
75
+ printRGB("Example 2 of printRGB()".center(32), "0", "255", "255", "","bg")
76
+ print("Notice how it can only display either")
77
+ print("foreground or background at one time")
78
+ print("You can also add formats to it".center(32))
79
+ deco.print(border)
80
+ input("Press enter to continue...")
81
+
82
+
83
+ # printRGBV()
84
+ deco.print(border)
85
+ print("Page 5:")
86
+ printRGBV("Example use of printRGBV()".center(32), "0", "255", "0", "0", "0", "255", "")
87
+ printRGBV("Example 2 of printRGBV()".center(32), "0", "0", "0", "255", "0", "255", "italic")
88
+ print("It can display both foreground and background")
89
+ print("and also add formats".center(32))
90
+ print("Note that sometimes the background")
91
+ print("color blocks the foreground color")
92
+ deco.print(border)
93
+ input("Press enter to continue...")
94
+
95
+
96
+ # Theme
97
+ deco.print(border)
98
+ print("Page 6:")
99
+ deadly = Theme("brightred", "double_underline", "bold")
100
+ deadly.print("Example use of Theme class")
101
+ print("It can be used for formats that you use many times")
102
+
103
+ deadly.add("strikethrough")
104
+ deadly.print("Example of add(*formats)")
105
+
106
+ deadly.remove("double_underline", "strikethrough")
107
+ deadly.print("Example of remove(*formats)")
108
+
109
+ deadly.overwrite("highlight_brightred", "underline")
110
+ deadly.print("Example of overwrite(*formats)")
111
+
112
+ deadly.showUsed()
113
+ print("showUsed() displays the current formats")
114
+ deco.print(border)
115
+ input("Press enter to continue...")
116
+
117
+
118
+ # ThemeRGBV
119
+ deco.print(border)
120
+ print("Page 7:")
121
+ classified = ThemeRGBV("255", "255", "255", "0", "0", "0", "")
122
+ classified.print("Example of printRGBV(r,g,b,r2,g2,b2,*formats)")
123
+ print("It can change both foreground and background")
124
+ print("and you can choose to use one or both")
125
+
126
+ classified.add("bold", "underline")
127
+ classified.print("Example of add(*formats)")
128
+
129
+ classified.remove("underline")
130
+ classified.print("Example of remove(*formats)")
131
+ print("Adding/removing only affects formats")
132
+
133
+ classified.overwrite("0", "0", "0", "255", "255", "255", "strikethrough")
134
+ classified.print("Example of overwrite(r,g,b,r2,g2,b2,*new)")
135
+ print("Overwrite rewrites the whole object")
136
+
137
+ classified.showUsed()
138
+ print("showUsed() displays the current settings")
139
+ deco.print(border)
140
+ input("Press enter to continue...")
141
+
142
+
143
+ deco.print(border)
144
+ deco2.print(border)
145
+ print("Thanks for reading!")
146
+ deco2.print(border)
147
+
148
+ deco3.print(border)
149
+ print("BONUS: Custom formats using either ANSI or RGB")
150
+ key = "placeholder"
151
+ while key.lower() != "_exit_":
152
+ key = input("Enter new key (_exit_ to leave): ")
153
+ if key.lower() != "_exit_":
154
+ custom_formats[key] = input(f"Enter a value for {key}: ")
155
+ while custom_formats[key].replace(";", "").isdigit() == False:
156
+ print("Invalid code!")
157
+ print("The code must have digits only (; is an exception)")
158
+ custom_formats[key] = input(f"Enter a value for {key}: ")
159
+ else:
160
+ break
161
+ with open("custom.json", "w") as file:
162
+ json.dump(custom_formats, file, indent=4)
163
+ deco3.print(border)
printColored/core.py ADDED
@@ -0,0 +1,258 @@
1
+ """
2
+ https://github.com/Mr1Skeletoner/printColored
3
+ """
4
+
5
+
6
+ try:
7
+ from colorama import just_fix_windows_console
8
+ just_fix_windows_console()
9
+ except ImportError:
10
+ print("Colorama module not found, printColored will not work on CMD!")
11
+
12
+
13
+ from pathlib import Path
14
+ from os.path import exists
15
+ import json
16
+
17
+ script_dir = Path(__file__).parent
18
+ path = script_dir / "custom.json"
19
+ with open(path, "r") as file:
20
+ custom_formats = json.load(file)
21
+
22
+
23
+ from . import Fonter
24
+ from .formats import ansi_formats, html_colors
25
+
26
+ _default_source_order = ("ansi_format","rgb_format","custom_format")
27
+
28
+ def _font_check(text, *inputs):
29
+ changed = False
30
+ font = ""
31
+ decorator = ""
32
+ for request in inputs:
33
+ if request in Fonter.fonts:
34
+ font = request
35
+ changed = True
36
+ elif request in Fonter.decorators:
37
+ decorator = request
38
+ changed = True
39
+ return Fonter.Fonter(text, font, decorator) if changed == True else text
40
+
41
+ def _reset(reset):
42
+ if reset:
43
+ return "\033[0m"
44
+ else:
45
+ return ""
46
+
47
+ def _single_code(fformat, *, html_view="", source_order=()):
48
+ if fformat.replace(";", "").isdigit():
49
+ return fformat
50
+ for source in source_order:
51
+ if source == "ansi_format":
52
+ if fformat in ansi_formats:
53
+ return ansi_formats.get(fformat)
54
+ elif source == "rgb_format":
55
+ if fformat in html_colors:
56
+ return str("38;2;" if html_view != "bg" else "48;2;") + html_colors.get(fformat)
57
+ elif source == "custom_format":
58
+ if fformat in custom_formats:
59
+ return custom_formats.get(fformat)
60
+ else:
61
+ raise ValueError(f"{source}: Unknown Format Source!")
62
+ raise ValueError(f"{fformat}: Unknown Format!")
63
+
64
+ def _build_code(*formats_used, html_view="", source_order=()):
65
+ code_list = []
66
+ for name in formats_used:
67
+ name = _single_code(name, html_view=html_view, source_order=source_order)
68
+ if name != None:
69
+ code_list.append(name)
70
+
71
+ return ";".join(code_list)
72
+
73
+ def _rgb_validation(r,g,b):
74
+ if r == "" or g == "" or b == "":
75
+ raise ValueError("You cant enter an empty value!")
76
+ elif not r.isdigit() or not g.isdigit() or not b.isdigit():
77
+ raise ValueError("You cant enter a non-digit!")
78
+ elif int(r) > 255 or int(r) < 0 or int(g) > 255 or int(g) < 0 or int(b) > 255 or int(b) < 0:
79
+ raise ValueError("The RGB value must be greater than or equal 0, and lesser than or equal 255!")
80
+ return ";".join([r,g,b])
81
+
82
+
83
+ class Theme:
84
+ def __init__(self, *formats_used):
85
+ self.formats_used = formats_used
86
+
87
+ def print(self, text, *, reset=True, html_view="", source_order=_default_source_order):
88
+ text = _font_check(text, *self.formats_used)
89
+ self.format_code = _build_code(*self.formats_used, html_view=html_view, source_order=source_order)
90
+ reset = _reset(reset)
91
+ print(f"\033[{self.format_code}m{text}{reset}")
92
+
93
+ def overwrite(self, *new):
94
+ self.formats_used = new
95
+
96
+ def add(self, *new):
97
+ self.formats_used = self.formats_used + new
98
+
99
+ def remove(self, *removed):
100
+ self.formats_used = tuple(fformat for fformat in self.formats_used if fformat not in removed)
101
+
102
+ def showUsed(self):
103
+ print(self.formats_used)
104
+
105
+ def __str__(self):
106
+ return str(self.formats_used)
107
+
108
+
109
+ class ThemeRGBV(Theme):
110
+ def __init__(self, r="", g="", b="", r2="", g2="", b2="", *formats_used):
111
+ super().__init__(*formats_used)
112
+
113
+ self.fg = _rgb_validation(r,g,b)
114
+ self.bg = _rgb_validation(r2,g2,b2)
115
+
116
+ def print(self, text, *, reset=True, html_view="", source_order=_default_source_order):
117
+ text = _font_check(text, *self.formats_used)
118
+ self.format_code = _build_code(*self.formats_used, html_view=html_view, source_order=source_order)
119
+ reset = _reset(reset)
120
+
121
+ if self.format_code:
122
+ self.format_code += ";"
123
+
124
+ if self.fg == "":
125
+ if self.bg == "":
126
+ super().print(text, reset=reset, html_view=html_view, source_order=source_order)
127
+ else:
128
+ self.rgbcode = "48;2;" + self.bg
129
+ self.finalcode = self.format_code + self.rgbcode
130
+ print(f"\033[{self.finalcode}m{text}{reset}")
131
+ else:
132
+ if self.bg == "":
133
+ self.rgbcode = "38;2;" + self.fg
134
+ self.finalcode = self.format_code + self.rgbcode
135
+ print(f"\033[{self.finalcode}m{text}{reset}")
136
+ else:
137
+ self.rgbcode = "38;2;" + self.fg + ";48;2;" + self.bg
138
+ self.finalcode = self.format_code + self.rgbcode
139
+ print(f"\033[{self.finalcode}m{text}{reset}")
140
+
141
+ def overwrite(self, r,g,b, r2,g2,b2, *new):
142
+ super().overwrite(*new)
143
+
144
+ self.fg = _rgb_validation(r,g,b)
145
+ self.bg = _rgb_validation(r2,g2,b2)
146
+
147
+ def showUsed(self):
148
+ print(f"Foreground: {self.fg}")
149
+ print(f"Background: {self.bg}")
150
+ print(f"Formats: {self.formats_used}")
151
+
152
+ def __str__(self):
153
+ return self.fg +";"+ self.bg +" "+ self.formats_used
154
+
155
+
156
+ def printColored(text, *formats_used, reset= True, html_view="", source_order=_default_source_order):
157
+ text = _font_check(text, *formats_used)
158
+ code = _build_code(*formats_used, html_view=html_view, source_order=source_order)
159
+ reset = _reset(reset)
160
+
161
+ print(f"\033[{code}m{text}{reset}")
162
+
163
+
164
+ def colorGen(*formats_used, mode="", html_view="", source_order=_default_source_order):
165
+ code = _build_code(*formats_used, html_view=html_view, source_order=source_order)
166
+ if mode == "b":
167
+ return code
168
+ else:
169
+ return f"\033[{code}m"
170
+
171
+ # colorGen is the replacement of the legacy function
172
+ # its WAYYY simpler, but takes alot of space to write
173
+ # btw the legacy function was broken sooo
174
+ # now colorGen is also fixed
175
+
176
+
177
+ def printl(text=(), formats_used=(), *, sepr=""):
178
+
179
+ for i, (line, fformat) in enumerate(zip(text, formats_used)):
180
+ code = []
181
+ line = _font_check(line, fformat)
182
+ if type(fformat) == str:
183
+ fformat = _single_code(fformat)
184
+ if fformat != None:
185
+ code.append(fformat)
186
+
187
+ elif type(fformat) == tuple:
188
+ for name in fformat:
189
+ name = _single_code(name)
190
+ if name != None:
191
+ code.append(name)
192
+
193
+ code = ";".join(code)
194
+ print(f"\033[{code}m{line}\033[0m" + sepr, end="\n" if i == len(text) - 1 else "")
195
+
196
+ # printl is the replacement of colorGen
197
+ # its WAY WAYYYY simpler, and takes less space to write
198
+ # Dunno if i should keep colorGen, but ill just leave it there because
199
+ # it returns the color code itself
200
+
201
+ def printRGB(text, r,g,b, *formats_used, view="", html_view="",reset=True, source_order=_default_source_order):
202
+ text = _font_check(text, *formats_used)
203
+ code = _build_code(*formats_used, html_view=html_view, source_order=source_order)
204
+ reset = _reset(reset)
205
+ # if you dont want a format when using the rgb function,
206
+ # you can just not enter it
207
+ rgbvalue = _rgb_validation(r,g,b)
208
+ if rgbvalue != "":
209
+ viewvalue = "48;" if view.lower() == "bg" else "38;"
210
+ else:
211
+ viewvalue = ""
212
+
213
+ if code != "":
214
+ code = ";" + code
215
+
216
+
217
+ print(f"\033[{viewvalue}2;{rgbvalue}{code}m{text}{reset}")
218
+
219
+
220
+ def printRGBV(text, r,g,b, r2, g2, b2, *formats_used, reset=True, html_view="", source_order=_default_source_order):
221
+ text = _font_check(text, *formats_used)
222
+ code = _build_code(*formats_used, html_view=html_view, source_order=source_order)
223
+ reset = _reset(reset)
224
+
225
+ fg = _rgb_validation(r,g,b)
226
+ bg = _rgb_validation(r2,g2,b2)
227
+ if code != "":
228
+ code += ";"
229
+
230
+
231
+ if fg == "":
232
+ if bg == "":
233
+ print(f"\033[{code}m{text}{reset}")
234
+ else:
235
+ print(f"\033[{code}48;2;{bg}m{text}{reset}")
236
+ else:
237
+ if bg == "":
238
+ print(f"\033[{code}38;2;{fg}m{text}{reset}")
239
+ else:
240
+ print(f"\033[{code}38;2;{fg};48;2;{bg}m{text}{reset}")
241
+
242
+
243
+ def formatfinder(min, max): # made this to find new formats, theres nothing beyond 107
244
+ # btw use strings ("1","108") and not integers (1,108)
245
+ if min.isdigit() and max.isdigit():
246
+ min = int(min)
247
+ max = int(max)
248
+ for code in range(min, max+1):
249
+ print(f"At iteration {code}: \033[{code}mHello World!\033[0m")
250
+ elif min == "font" or max == "font":
251
+ for key, value in Fonter.fonts.items():
252
+ print(f"{key}: {value}")
253
+ for key, value in Fonter.decorators.items():
254
+ print(f"{key}: {value}")
255
+ else:
256
+ for key, value in ansi_formats.items():
257
+ print(f"\033[{value}m{key}\033[0m")
258
+
@@ -0,0 +1,205 @@
1
+ ansi_formats = { # i think the dictonary now contains every possible format
2
+ # Colors
3
+ "gray" : "30",
4
+ "red" : "31",
5
+ "green" : "32",
6
+ "yellow" : "33",
7
+ "blue" : "34",
8
+ "magenta": "35",
9
+ "cyan" : "36",
10
+
11
+ # slightly bright
12
+ # useless but i will leave it there
13
+ "bright_gray" : "90", # im sure this is just normal gray but
14
+ # i will leave it there
15
+ "bright_red" : "91",
16
+ "bright_green" : "92",
17
+ "bright_yellow" : "93",
18
+ "bright_blue" : "94",
19
+ "bright_magenta" : "95",
20
+ "bright_cyan" : "96",
21
+ "bright_white" : "97", # trust me, this is different than bold
22
+
23
+ # Highlight
24
+ "highlight_red" : "41",
25
+ "highlight_green" : "42",
26
+ "highlight_yellow" : "43",
27
+ "highlight_blue" : "44",
28
+ "highlight_magenta": "45",
29
+ "highlight_cyan" : "46",
30
+ "highlight_gray" : "100",
31
+ "highlight_black" : "40",
32
+ "highlight_white" : "47",
33
+
34
+ # bright highlight
35
+ # what am i even doing in life anymore
36
+ "highlight_bright_red" : "101",
37
+ "highlight_bright_green" : "102",
38
+ "highlight_bright_yellow" : "103",
39
+ "highlight_bright_blue" : "104",
40
+ "highlight_bright_magenta" : "105",
41
+ "highlight_bright_cyan" : "106",
42
+ "highlight_bright_white" : "107",
43
+
44
+ # Formats (like bold or italic)
45
+ "bold" : "1",
46
+ "foggygray" : "2",
47
+ "italic" : "3",
48
+ "underline" : "4",
49
+ "inverted" : "7", # inverted and highlight white are probably the same lol
50
+ "invisible" : "8",
51
+ "strikethrough" : "9",
52
+ "double_underline": "21",
53
+
54
+ "reset": "0", # placeholder or smth idk i dont even use it bc u can just type 0 but i will just keep it there
55
+ "" : "0"
56
+ }
57
+
58
+ html_colors = { # note that just like normal rgb, using two at same time,
59
+ # the last overwrites all before it.
60
+ # also note that the format keys are written in a different way
61
+ # than i write bc it was copypasted from html website
62
+ "IndianRed": "205;92;92",
63
+ "LightCoral": "240;128;128",
64
+ "Salmon": "250;128;114",
65
+ "DarkSalmon": "233;150;122",
66
+ "LightSalmon": "255;160;122",
67
+ "Crimson": "220;20;60",
68
+ "Red": "255;0;0",
69
+ "FireBrick": "178;34;34",
70
+ "DarkRed": "139;0;0",
71
+ "Pink": "255;192;203",
72
+ "LightPink": "255;182;193",
73
+ "HotPink": "255;105;180",
74
+ # ^ i am NOT the one in charge of writing these
75
+ # แต‡แต˜แต— โฑ แตƒแถœแต—แต˜แตƒหกหกสธ แต—สฐโฑโฟแต แต—สฐแตƒแต— แต—สฐโฑหข แต–โฑโฟแต โฑหข แตƒแต‡โฑแต— สฐโป
76
+ "DeepPink": "255;20;147",
77
+ "MediumVioletRed": "199;21;133",
78
+ "PaleVioletRed": "219;112;147",
79
+ "Coral": "255;127;80",
80
+ "Tomato": "255;99;71",
81
+ "OrangeRed": "255;69;0",
82
+ "DarkOrange": "255;140;0",
83
+ "Orange": "255;165;0",
84
+ "Gold": "255;215;0",
85
+ "Yellow": "255;255;0",
86
+ "LightYellow": "255;255;224",
87
+ "LemonChiffon": "255;250;205",
88
+ "LightGoldenrodYellow": "250;250;210",
89
+ "PapayaWhip": "255;239;213",
90
+ "Moccasin": "255;228;181",
91
+ "PeachPuff": "255;218;185",
92
+ "PaleGoldenrod": "238;232;170",
93
+ "Khaki": "240;230;140",
94
+ "DarkKhaki": "189;183;107",
95
+ "Lavender": "230;230;250",
96
+ "Thistle": "216;191;216",
97
+ "Plum": "221;160;221",
98
+ "Violet": "238;130;238",
99
+ "Orchid": "218;112;214",
100
+ "Fuchsia": "255;0;255",
101
+ "Magenta": "255;0;255",
102
+ "MediumOrchid": "186;85;211",
103
+ "MediumPurple": "147;112;219",
104
+ "RebeccaPurple": "102;51;153",
105
+ "BlueViolet": "138;43;226",
106
+ "DarkViolet": "148;0;211",
107
+ "DarkOrchid": "153;50;204",
108
+ "DarkMagenta": "139;0;139",
109
+ "Purple": "128;0;128",
110
+ "Indigo": "75;0;130",
111
+ "SlateBlue": "106;90;205",
112
+ "DarkSlateBlue": "72;61;139",
113
+ "MediumSlateBlue": "123;104;238",
114
+ "GreenYellow": "173;255;47",
115
+ "Chartreuse": "127;255;0",
116
+ "LawnGreen": "124;252;0",
117
+ "Lime": "0;255;0",
118
+ "LimeGreen": "50;205;50",
119
+ "PaleGreen": "152;251;152",
120
+ "LightGreen": "144;238;144",
121
+ "MediumSpringGreen": "0;250;154",
122
+ "SpringGreen": "0;255;127",
123
+ "MediumSeaGreen": "60;179;113",
124
+ "SeaGreen": "46;139;87",
125
+ "ForestGreen": "34;139;34",
126
+ "Green": "0;128;0",
127
+ "DarkGreen": "0;100;0",
128
+ "YellowGreen": "154;205;50",
129
+ "OliveDrab": "107;142;35",
130
+ "Olive": "128;128;0",
131
+ "DarkOliveGreen": "85;107;47",
132
+ "MediumAquamarine": "102;205;170",
133
+ "DarkSeaGreen": "143;188;139",
134
+ "LightSeaGreen": "32;178;170",
135
+ "DarkCyan": "0;139;139",
136
+ "Teal": "0;128;128",
137
+ "Aqua": "0;255;255",
138
+ "Cyan": "0;255;255",
139
+ "LightCyan": "224;255;255",
140
+ "PaleTurquoise": "175;238;238",
141
+ "Aquamarine": "127;255;212",
142
+ "Turquoise": "64;224;208",
143
+ "MediumTurquoise": "72;209;204",
144
+ "DarkTurquoise": "0;206;209",
145
+ "CadetBlue": "95;158;160",
146
+ "SteelBlue": "70;130;180",
147
+ "LightSteelBlue": "176;196;222",
148
+ "PowderBlue": "176;224;230",
149
+ "LightBlue": "173;216;230",
150
+ "SkyBlue": "135;206;235",
151
+ "LightSkyBlue": "135;206;250",
152
+ "DeepSkyBlue": "0;191;255",
153
+ "DodgerBlue": "30;144;255",
154
+ "CornflowerBlue": "100;149;237",
155
+ "RoyalBlue": "65;105;225",
156
+ "Blue": "0;0;255",
157
+ "MediumBlue": "0;0;205",
158
+ "DarkBlue": "0;0;139",
159
+ "Navy": "0;0;128",
160
+ "MidnightBlue": "25;25;112",
161
+ "Cornsilk": "255;248;220",
162
+ "BlanchedAlmond": "255;235;205",
163
+ "Bisque": "255;228;196",
164
+ "NavajoWhite": "255;222;173",
165
+ "Wheat": "245;222;179",
166
+ "BurlyWood": "222;184;135",
167
+ "Tan": "210;180;140",
168
+ "RosyBrown": "188;143;143",
169
+ "SandyBrown": "244;164;96",
170
+ "Goldenrod": "218;165;32",
171
+ "DarkGoldenrod": "184;134;11",
172
+ "Peru": "205;133;63",
173
+ "Chocolate": "210;105;30",
174
+ "SaddleBrown": "139;69;19",
175
+ "Sienna": "160;82;45",
176
+ "Brown": "165;42;42",
177
+ "Maroon": "128;0;0",
178
+ "White": "255;255;255",
179
+ "Snow": "255;250;250",
180
+ "HoneyDew": "240;255;240",
181
+ "MintCream": "245;255;250",
182
+ "Azure": "240;255;255",
183
+ "AliceBlue": "240;248;255",
184
+ "GhostWhite": "248;248;255",
185
+ "WhiteSmoke": "245;245;245",
186
+ "SeaShell": "255;245;238",
187
+ "Beige": "245;245;220",
188
+ "OldLace": "253;245;230",
189
+ "FloralWhite": "255;250;240",
190
+ "Ivory": "255;255;240",
191
+ "AntiqueWhite": "250;235;215",
192
+ "Linen": "250;240;230",
193
+ "LavenderBlush": "255;240;245",
194
+ "MistyRose": "255;228;225",
195
+ "Gainsboro": "220;220;220",
196
+ "LightGray": "211;211;211",
197
+ "Silver": "192;192;192",
198
+ "DarkGray": "169;169;169",
199
+ "Gray": "128;128;128",
200
+ "DimGray": "105;105;105",
201
+ "LightSlateGray": "119;136;153",
202
+ "SlateGray": "112;128;144",
203
+ "DarkSlateGray": "47;79;79",
204
+ "Black": "0;0;0",
205
+ }
@@ -0,0 +1,3 @@
1
+ Metadata-Version: 2.4
2
+ Name: printcolored
3
+ Version: 2.0
@@ -0,0 +1,9 @@
1
+ printColored/Fonter.py,sha256=HNXrBoBZQwPtmrNs8JLSZRi9N4C2Z1gZ0jti0MIMnEI,10248
2
+ printColored/__init__.py,sha256=QIRu0c6ZPvoWsH0gatnEwtICuh0BbT8RQIkOZoX9F6o,216
3
+ printColored/__main__.py,sha256=-gO6Nee9UXXeVgCoi99LU90FTogu7T9izmumojSR1PI,5869
4
+ printColored/core.py,sha256=WG6RpRIawW9s_arahAhOmuBUWU4sy7oO0wfXt3X9zpc,9081
5
+ printColored/formats.py,sha256=WRHqW5sH4J-XlJa-LV-dcCTIctr1JPvFZCNJRKFyiwE,6746
6
+ printcolored-2.0.dist-info/METADATA,sha256=x8XN_jFzJ4sa2SP2tbUM4xYZHv-6qpKnVyk5Mb_NyrQ,57
7
+ printcolored-2.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
8
+ printcolored-2.0.dist-info/top_level.txt,sha256=vyF7iPi9OQicDb1rXaJ3wMBLP90NkRxj-awWkl1Ckb8,13
9
+ printcolored-2.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ printColored