From ccfcf320e9bac5f3950b87287c001ed077622d74 Mon Sep 17 00:00:00 2001 From: croketillo Date: Sat, 11 Nov 2023 06:10:54 +0100 Subject: [PATCH] Version 1.3 --- README.md | 60 ++++++++++++++---- README.rst | 55 +++++++++++++--- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 141 bytes .../__pycache__/colorpattern.cpython-310.pyc | Bin 0 -> 3080 bytes colorpattern/colorpattern.py | 18 +++++- dist/colorpattern-1.3-py3-none-any.whl | Bin 0 -> 16646 bytes dist/colorpattern-1.3.tar.gz | Bin 0 -> 17551 bytes setup.py | 4 +- test/colorpattern_test.py | 48 ++++++++++++-- 9 files changed, 152 insertions(+), 33 deletions(-) create mode 100644 colorpattern/__pycache__/__init__.cpython-310.pyc create mode 100644 colorpattern/__pycache__/colorpattern.cpython-310.pyc create mode 100644 dist/colorpattern-1.3-py3-none-any.whl create mode 100644 dist/colorpattern-1.3.tar.gz diff --git a/README.md b/README.md index 162b9f0..b6a36f0 100644 --- a/README.md +++ b/README.md @@ -11,19 +11,55 @@ You can install ColorPattern using pip: ## Usage -```python -from colorpattern import SetPattern, start_color - -# Define color patterns -pattern1 = SetPattern(r'\d+', color='green', back='black', style='bright', underline=True) -pattern2 = SetPattern(r'error', color='red', back='yellow', style='dim', underline=False) -pattern3 = SetPattern(r'pattern', back='blue', style='reset_all', underline=True) +Use start_color() for initialize the color print, and end_color() for stop colorization. -# Initialize color for patterns -start_color([pattern1, pattern2, pattern3]) - -# Your code with colorized output -print("123 error 456 pattern") +```python +from colorpattern.colorpattern import * + +def main(): + # Define your color patterns + pattern1 = SetPattern(r'\d+', color=Fore.GREEN) + pattern2 = SetPattern(r'Colorpattern', color=Fore.LIGHTRED_EX, underline=True) + pattern3 = SetPattern(r'Croketillo', color=Fore.RED, back=Back.LIGHTYELLOW_EX, style=Style.BRIGHT) + email = SetPattern(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b', color=Fore.LIGHTCYAN_EX) + + # Initialize colorization and get the original print function and applied patterns + print("\nSTART COLORIZED PRINT") + print('-----------------------') + start_color([pattern1, pattern2, pattern3, email]) + + # Use the custom print function with colorization + print('Colorpattern v1.3') + print('By Croketillo - croketillo@gmail.com') + + # End colorization and restore the original print function + end_color() + print("\nNORMAL PRINT") + # Now, printing returns to normal + + print('-----------------------') + print('Colorpattern v1.3') + print('By Croketillo - croketillo@gmail.com') + + # You can re-enable colorization with new patterns if necessary + new_pattern = SetPattern(r'new pattern', color=Fore.LIGHTCYAN_EX) + + # Use the custom print function with new patterns + print("\nSTART COLORIZED PRINT AGAIN") + start_color([pattern1, new_pattern]) + + print('-----------------------') + print('This is a new pattern. 123456') + + # End colorization and restore the original print function + end_color() + print("\nNORMAL PRINT AGAIN") + # Now, printing returns to normal even with the new patterns + print('-----------------------') + print('This is a normal message again.') + +if __name__ == "__main__": + main() ``` ## Patterns diff --git a/README.rst b/README.rst index fb36b17..f7b69b9 100644 --- a/README.rst +++ b/README.rst @@ -16,20 +16,57 @@ You can install ColorPattern using pip: Usage ----- +Use start_color() for initialize the color print, and end_color() for +stop colorization. + .. code:: python - from colorpattern import SetPattern, start_color + from colorpattern.colorpattern import * + + def main(): + # Define your color patterns + pattern1 = SetPattern(r'\d+', color=Fore.GREEN) + pattern2 = SetPattern(r'Colorpattern', color=Fore.LIGHTRED_EX, underline=True) + pattern3 = SetPattern(r'Croketillo', color=Fore.RED, back=Back.LIGHTYELLOW_EX, style=Style.BRIGHT) + email = SetPattern(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b', color=Fore.LIGHTCYAN_EX) + + # Initialize colorization and get the original print function and applied patterns + print("\nSTART COLORIZED PRINT") + print('-----------------------') + start_color([pattern1, pattern2, pattern3, email]) + + # Use the custom print function with colorization + print('Colorpattern v1.3') + print('By Croketillo - croketillo@gmail.com') + + # End colorization and restore the original print function + end_color() + print("\nNORMAL PRINT") + # Now, printing returns to normal + + print('-----------------------') + print('Colorpattern v1.3') + print('By Croketillo - croketillo@gmail.com') + + # You can re-enable colorization with new patterns if necessary + new_pattern = SetPattern(r'new pattern', color=Fore.LIGHTCYAN_EX) + + # Use the custom print function with new patterns + print("\nSTART COLORIZED PRINT AGAIN") + start_color([pattern1, new_pattern]) - # Define color patterns - pattern1 = SetPattern(r'\d+', color='green', back='black', style='bright', underline=True) - pattern2 = SetPattern(r'error', color='red', back='yellow', style='dim', underline=False) - pattern3 = SetPattern(r'pattern', back='blue', style='reset_all', underline=True) + print('-----------------------') + print('This is a new pattern. 123456') - # Initialize color for patterns - start_color([pattern1, pattern2, pattern3]) + # End colorization and restore the original print function + end_color() + print("\nNORMAL PRINT AGAIN") + # Now, printing returns to normal even with the new patterns + print('-----------------------') + print('This is a normal message again.') - # Your code with colorized output - print("123 error 456 pattern") + if __name__ == "__main__": + main() Patterns -------- diff --git a/colorpattern/__pycache__/__init__.cpython-310.pyc b/colorpattern/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..443c5aede4b40a26a4378be1a55732b0b3bbe990 GIT binary patch literal 141 zcmd1j<>g`kg2NAdQyGEuV-N=!fCL?YxR?bZ2>5uLC7;AllV79lt=>~vxS(K_U=EIC0S2!a)w5(p40LZlDbAQ;Tf^zJq} zGrjKaA-%-vWC2nx`2&Ih3dn`OCD)whnp6IQPkGfta!JUB2k4san(pdXRj;c@-ne7@){Feq-A0LCS(DZYN)EPRdn|hf$bn*5xFZYLj9t?xLF>JW?x8|_<)JcQ1 z@zO~f-+RMW+Duz7onbp|rz?1`@a93to6(Kb+jF{M{GY&a!u_exY%DU)@V+Azo5jj7 zIqtH}XFJcH?>^q&-+De^M_=^rg`09VS7I_X?B3mb_cz$4l84-gER*bEa@qfClE)(J zB{F}+rpC(ZEo-GZ$BG62(N9o!M4U@sZ7STW{E7c1VF>T zGZm_A}4U_U6`LZ;Nf< z`_sWU?CI{##{IC4i4;J(!jYnLm*XL7{N(D zFZ`xR@uiR~5h^KjZOCIpVj5?eMI4t%sj`d6ubPolnPHh` zBMv{}5$FQ`*nN{M7P(#z(>RYOv^n%NMP!1&AR|JP`ydOLRv^cex{C-?lIqA^$wn{S z9} zriD0nNog?P39RRmPDp``@)}J%qMQ@N%c+*$!T>lCcAd>Kj|vbKq4YqoJt-G%$sT{w}q@KUFA zRcGN9p79R?=o$;(>TWN5=$cm7S_D?d76EkagB8pR7Y)c8sk7&txr1(}^59d8XoI3% zwa$y3@~~~yc)qo_wO=)CkyI$}P8E#cwjyBFiv1cr-r1=d+QwwXCKczNcbiq9c{Wxn zn5k}%z@_AVZge=2j{KaiUDXSTNX?QXR^M{{k^o6W0s6p2EZDEbsO zG+lfhZ_QhC*WA!OxwVXG?_yp;h%X-MH_+&WN#Y6oT+ATDF2ZBt#v5T$r-r!DMIH&$wXj9Jw2aPw*4=r%OADjdq{q4(~ zH{VpU_JWI3}DS2tn!%&i(Y7s>R@RqtbL!>B$$uWCQc;(V0GkNOyC%HSR6 z+L@2GOU8a~?%i7)7`+%Z&P+DEhXHv-*o7ztzViEdHe+7>XkEJ2bm_+X>y( z6|1`zLdpPf%<}9LbY3~H+_6`)>xFB;w|_Vbyd(EDjw7g$VAAD7=Z*IH4VwNlMCzV8 z#x>r;`QCf$zVKeVUps$qz3>)5V`08TJN0x~v;i!GRP- z<>&DX;Wo;;N9tHjbk#h>jXKflBkW{Ta^_X5_&1se)bwbkL}9A-#lO%psZ}RIS(kY| z<4=UO4e`F$_B-yHfAU*gxXMH}ZA;2sUDNfd_NWw@5rwWAcB8JRx&-5M5;pX|r=DfN zjVlKK2(8_2)opf~Zs4g6Xs$&OV}}y4iKeLrQP>f3RM2z2f^~m@zWN}FuDcsWiU{^o z1gKVck=9OalVRGS<0(3LD5 https://github.com/croketillo DESCIPTION: @@ -41,19 +41,20 @@ def __init__(self, pattern, color=None, back=None, style=None, underline=False): self.style = style if style is not None else Style.RESET_ALL self.underline = underline - def colorize_text(self, text): + def colorize_text(self, text, stop=None): # Apply color, background, style, and underline to matched text if self.underline: return self.pattern.sub(lambda match: f"{self.style}{self.color}{self.back}\033[4m{match.group()}\033[0m{Style.RESET_ALL}", text) else: return self.pattern.sub(lambda match: f"{self.style}{self.color}{self.back}{match.group()}{Style.RESET_ALL}", text) + # Function to initialize colorization def start_color(patterns): def custom_print(*args, **kwargs): # Convert print arguments to a string text = " ".join(map(str, args)) - + # Apply colorization to the text for pattern in patterns: text = pattern.colorize_text(text) @@ -64,3 +65,14 @@ def custom_print(*args, **kwargs): # Replace the print function with the custom version original_print = builtins.print builtins.print = custom_print + + return original_print # Return the original print function + + +# Function to end colorization and restore the original print function +def end_color(): + # Restore the original print function + builtins.print = builtins.__original_print__ + +# Save the original print function +builtins.__original_print__ = builtins.print \ No newline at end of file diff --git a/dist/colorpattern-1.3-py3-none-any.whl b/dist/colorpattern-1.3-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0d38041411864f4d3eaeb13f5b714d55006e2c0c GIT binary patch literal 16646 zcmaL9V~{A#)~4OIt=+b5+qP}n-MeiYyKURHZQHhIpPBgPocD?OPDQM!s2_Q)jL6D6 zS7hZ~@>0McC;$Ke5CAf~mTHM$D~!N@p8)>`#@{fqv$k`zH*j_~akQn=)3dO(aMshK zwf8sx0+9c|4GqYw)F_H=p)W!HVqgFOaQ@lwKPi73H>vj799bA2F1wHj=_fgM8KS{EKm(5M% z^V4;EeilR}@3f|h4rFk}1JYWOU22dzmfiUcb)lW{rKtZ1l>QM5C99{ao<8Mu&w4qoq)(FItf(rA;WClj&1c5_zZ6 zUuwr7J(raI?mSY}XAO~$&0|iVd@rB2_KlsfH1j{WGJ=H1;dKo7N)JH!z zpQjBjj6wwnmFyTjp05>Csq*ohWXbP{_k9djv?`&q3;o4xP-Wb)MN8qFjiHsrMta>@ zisIQL&f2X!_Cai85`yF4M!Lnm%iJ__`0Q^+y`l@Xz5@|uBj8;{EfM8HHX$hyPjVSK zeH+ahCz-ii^pM05vSwcdWT;!9gdH_sO~@vimmbJMGP)9h)IeZc-b%fdX3}{G3OeG$ zNtjGbUmE6|#LF0!T&!S}P;HVX95LA?$zssLaT&j#z!zScD=j3!Ip0*XiEU7XCw8!| zz+<%ife@q6`T|NaY}_soRaVXfB4Y=;tc{2b7|6O9$~L`-Rzb{?t}hHM+TfE0scn{C zNK%hgZU;Y_vzhPu>mDGE$}DV&b5xMUjht!N7KQ`vDg5_%SV)b;gD%i-&@-J$JD6mo z)eiN1)k79S{t$Px3&fxLX3@D1w57Y-0hKWf>|J#uby;@4S(=F|ii6c&Ab(Rl2csLB zFWtQZw?Dj1U>BN{bWKJu7hqIQ6rY6Ci4qtD?8f>{37YRqmZw4EBUhc6Blv1=q6IT7 z@75_X`OFu+gsd5@?E;2F=JQiU$Z3WYv-qTFmE@K~9bg2ine^F!pmG^9t%A^4HHZ4E z)-k$o!^{wzHOZkgYAh-8xbNVIVzt365Y+Z^Oi_*GfYELxOSJq)V-BCrO?CUmZ0|}(-M zRqR*!o#hLH?Ea9#V$m$`q&FP%j>}v&oF0`Ly}!VHY`mxXy=9o#FhXa{>c`W9?^=+S z@FO%ayq;OzjtLvQwq69Ob%kJ06814%JURhl#3C*?rQ{|R@irnXM;$b$ZGHu^J3{il zMV5AaW~WMVhZxb=RSBZkMV6=_lXqe*;`C#S`FST2)v#Up&8U_?s%}t6y@v(1r9bZp}rnct$&)d`2CXNTz&)0QEb1Buw!Q%HV{D&R-Swkyky{39FHBUZZgYKjz}6KbB0LeQ31 zqdiTdi>52qM^lYT?Iq64l?vaBa$CzYkB)WYB_jo%_56W*m94c(>I<_}y)>nhqaR!B zRGZYI0VQ~BGIOV7tNQuvXQ}lm-LsfRThkTiYYHLlb{F(qjg@E%9#;FL_KntIU#jv> z(9;>0hpMjI%u_8I-G+_!tIK#dH<{-12-LnlI;~F@H=8^4woQcP_DgJ@@2snYA2bvyM9|22C7-X$p|#?hWKel@((fHkPfNKdq&lYDbQ8u|CVjj}6#2=5VgWhX+ss za^BxjF-m-_YtK(sn&!~68-H~3E-W`$sZJ@V(H$Tr_2cucYm6p56UfJS?dRu_f(yFX0^r2m! zdSkX0FjH^ahopO%f|5F(p63Bjh^;m%K0=>jnnV9e>x?i%VuagRxM;NrupyZ>h#yzI zUZc-K-0^3keyJ+Y8EE&2W=S`N=o!yp(Y@L%N2WAuTe-JUmbGuS+C-MX&4WRp-J^C} z!gUK08qK&T+?`yvdnY@d?zZSvgv}BA)2`pf&!%&*e}_*yRH?myXov8={)<7ej(R+Q zz=S*_c3Ux`h@zQpIhUXCy;D7q*pEXywzvPr{xk`pm(W{ucoJN5;w#?9jil-W3B;yn zT{wnp(FRAA;ZaGAUNo)aYW>Whh3D>o*6Pd-Ro`H+RYd?=HAs+Gq1i=r&k`PjN^SZe zSd>`S?k4@L_}d~e?vFl|JV_N3ks~C36E-1wu{8MmU~cL``-bEU*clJ70oS>eh)MZBoQzl`IB9?{_? z#L<<_r-4!joiJkrZf=EAq;n%3ATxk`6xz60IPyvP^A~y8yX1n@*o&F4TT*sbc3gm=y#_BBDu5 zg%23jqnA(I6)r4?6F*5fVckKdxILdiB}9e1qpZM8-G}sKxx_|KZ_HFb0Fv&qUBk%` zJ?cq_H0`B0(#z2WYM?laL{C6KpeeS?2dz_gG*aGG|Hu zAfQNnd;uFS9*<}l%~7%bM*Aq|3SPH>`q+=>d3ji`@S6xGRH0kFHwg?_ec z6^yY17ElymPSBX?UO}?i0|@f^)@-!vBj$TaQ1{sc_sZ_a-x6b=G(cDcax_*1QfYv5 z-Iqm}DU+$j&8K0YPatP7M26~^7g=VjJZQ#Bb%vfZjV0%t5Iuo7TC}x=Bdjq#l!xE& zoFQbe93EV64gM6iHt^w?2n`I2r?5kU&z1$77!@_Ji}=-`EjRyl9J zrQXI6^tGy@-4j+lpd?qg+B1}!LoFioC%r`NB|fK~!jGyw;3KWloUzv>7x`xDwJtbXd)QBfeuKOtvp1 z8t-{h9jJd<4KKP>$*#;iI&^#8Lp1Y@Xdm;KL&sx+a#&XUNcOZWynA;YQg4hHiv>Br z8s1Xe1gB4`+ffzuCsD*3IbBAWWPuPU6Mx)m+S;!_cf8?O!!O@e6Pc46z#9xh%>0MS zt=$M=1HnSE3qmY#r6GEQE=8AqFzV0N@i@p5dZq%qso-%2 zaBTPbGJf?5VTL0S(hD*lPlL+%uw=KSos3nk_GOYW4m50a)cFb_3qr&O8mcK|5ZmBy( zP_UdelX6gXRJ2;#O4Jh}3Z6AZBIuA1R1+}0<3X)HSG}Ir>K4v6f{~_>91x#@sCje5 z2RFx>zn=hFM&KqXwuhXcQ8V&aKt;Qu*H?SU*qm(CyRh{yh@QJg4u)1terZuV{imq$ozfi9==tx1}3jp*gIbKn3ely!pg#g-6 z?Gf-2BLZkFv_YKwiaaW{VidyJkQ-VU_owpq?ankuKI~+y8qxSzAAt?_W2RLH2VJ{9i~+sHBdr$G?p~gpL&mX#{Ig) z!%wZ6ehJf+=Al$eR}VKRP@UvTc?=*n{ZP>}C0K6;#geT5e!oQQi<9hS3fo4^OZH+I zuD6ky5rI#Qok~y{iqs?Ap5y6Y6PBMK4V2Feb5$>ig03xlRA zC3r|;*0t{ozE?#%OsGRj37ygaWL(V=BANgcv4<}U`229CbcJlDlU#9c;olm^XiPl` zizM8DYKccU-S<*o7_m+hq`MH^_vYwD7GOdk8?u)nr4&)r$WYLyb|4>OyFdU*3JXS> z(cFzPGhy(V_BUv9W{MeG=3PXIr39IICDv#&8kw{2&Zk{EigX3m`5Jl0)V)ACr?1II zXg}fTxvW@@T1$@SbY<*lM6Cy%fU_q>}OW z7)=4X8X}+fyu_7}{|YBS{ABK+m256w_XLgp1Kn|MGmgh%SYw`w(1y*FYMkJxXcWOZ zHh)!N9XY7n#%7{GP`Ug(;g4m93S!sG1Wm*o9bmC)YuU*u!Wx|B2u(#i!)Y30qvt`E zvZX^1%wh;F#WAYN}CwB_orJA*%ROG)sZ6cVs@Bh)4{0oXL`!OBnEc+8KE zC*N5&&;`DMxpr-$9#YAf;)Rq$02npu&bFedbH^qWk9J)>a~b>?T*Y_iCj4BVW^EjF zQgZQge3ZNRddd+}1vgv_s?JUs4K6xfPArP63SXkr=joyGa7p;`VHSGALO{_N2*|hl zxa8c7jqsTx-y`H(0LPDj>3xdO0e_Sy(EcJ^uOuV+;W}X|`LN5a*#bRsSvS(NLb2PP z(>BZjQ@&D0zev>Yun?yNTr8G#vCI_$w_@hyWqi!|0SFV@dNKn}r1i^wSR0Ld^6~EE zT$~jAR`qHsS~kc0y4kppMQKqOp`^6mVzo^a9j<=#9>qmD+O2J#T7A zf%u!4(F8zA6ikdcGJ*vXyy!! z`f52n9(ce#v{vDQ91r8Qgk1r5W6|S?cyI1B?s4~%b|43Q0X$6$t911kN5g=PmZ(fd zE-GgOqKf+ERV8U(Ie-c6)u%M(i|WJ#279Q*L!(+S zcPHP!F6oW?(S~}AT8%j$BWuj^%jc4tVX!FmM zP3j0AVt}<+2IPItP3!c?SvkJeRpP2Ig%iX>@3J#mtuv*Aw@6CXA(9bSx)qJj$ADPj zX{T^TNO!h(Xpy?VwpPq^B>8EU_&qxckZAqrmu70#e@hUJ553a=lH^CIBRxcHK>2!Z zO{-r2#qpVtbo6NtV?>|>OfhTAzXo^bS;geVu==#@?PME@EtJHSs7!xiPhc28z|NeZ z|E=s52ob?1_eXG=RPBdHtLl6>bDuK6H%0=Mpy(460L5=DfqNwxd94nfp``_8n1~6! z%}(NN@D2lmN9Du(nH>w4RecXheu53C8wT!t*ZS*4^M!BU;6tGd>3GJdHPG?~qIv$Et*>WU= zSwQ%1&9mJIx$1(p>;kiQo=y3vZ#;~S>-2Di@K^4oT2QSIk}u|{Llmn*2w3&b8URpv@HFsa9n2>T&ti?*a^yjAU$O6Jz}I(G$0?^j}!UqvZLZD&_z8GbnI5a`*w%mk4CgiO}Dfkdh6} z&S9>z--5=P6G*Gqi`lX_gq)eFyGlVAAY8oGky39lgL@?U7}mjguq2N}X)kFD)Y{js znjwkBjF}yuf*xVd~ZDlS9g%@0lF(VP>`T zBt%kbNRA{;c!n2D8_*tvg=x7m*)CEek)<>6_AKOfXAE)uok9zK4p5fc!pj$0e;Y zT>XqA3>#{2;!1G=UFEAEy_u|Vd8^$XHA7HY8Y!Q;XL0z%GXP(Kucd91=pfrfF<~dt zJ2E@zYhf)GMMIi2i707EY6*EFoZv~wLbtd9d9np72bC>Li^8;dX;SpVaS{-t_oCJ+ z^Vdg5AW(8)OR;PiUfI}%K%5}N@0BxybEZP;whFYJWkuLr1tP<)=IX{>VWeGOxmQIC zS)r?Rj4vot1|?L<1S5@#c5pfcKI!X8HFa^YgtCJ2CD3rRta&FwozQI)PZ!O(cOCjk;jl$8pV<$4p+YjVZ&QGNVceAJX%g}R7XsuGgR zkv{ZaSZQRh@s3CyhG(#YIVp3roPDoSPs3^1M=>a03F&+6JW3Yfh4X8zrh3;0+R{>e z`caBxE#LdW6=EdmkudzMdCuv66q!t*x0Dy%@u#`+f#l`-WMxM5=9sTk&TRMo$jlNF zbYy=pk)G&36ND7jac8d|i76ltB#v@w-2ibM!z4$)r3r-y;nlYRuNX2K_)b{V-Aik& z7N}+gtBLQkPxTx|_Xttf`Ut?)8P{t@WqSTTVtuUN}3t{98Q{~;+?3q>> z=Y?#=dmHJxc~!On8hKkOM6t$(<%dzaW{DLhEQv~^(pqc<#u997!MBYov=3w*Wo8`u zvYnlJ9He?@t&eF97cI6Wo6j1N}lzhPaL~?hkDfpw2_#3}lhbWd0Dhlz5cgx+djCoE$Lt3E`sO%6ngFA1O&BO!ff%f(0e6z4$Td93okjx##|<$uzrRyvxbhl< zeknba>7hbnEdEPsa%CT2VBxPp;SK;vo*M%h=yC)RIBbYkpCPFR8vmVHU(M=KOo(Pu zej}X4q}ucaAkkO?KeXx~J@Ks=_EG2*pABf`WhGB%d;=u^Ebdd7Q?`&iYU#*1~P>p zv{Yjrku~~%3P4Auaa0T(uMNC6h?0fErBdI!M7{rh@fn#7*s%hlh&B%uhaYi<;Q&vj zWZiU8kpg0`13tTo$?PMh05P)5xnB+=Z93DWz5yI=v!_eSEb3Dpa4vz4xNhxubH*J{ zQG7+_J71iGr+Q>$((HHAXwPyxGvIRMXrIAl5P0DViYsCjbmE(Ah_?a4%{V0Yl=@v= zEGc;m!1FsJl1~dIf{>j*{f_r{#z)&h?dZd>3b+J01f^QF5J9k<*>RkSY($>AR$Xgs znNd8iFHyizS*eum;K9ICQPQOYyjho^%YkOHLuL7ds?1jNnV@F=9S~iZGP}pjHrBDf zcE$_$IQM+|AYEu$*lPVCxbGymK@2#Yx$j_%Wr!R)Os2zL)_Zkl#|w^x_=m1QV;&!{ zz95PPQ*n5=pk@&A4TQYq-?COSsw#)>lKR*LHw(U0HeqKN1bn>@D>Y@?f4E8a9l!Hz zW17D~GnVKV>O9EkQ%G`Ran7(u6S|Tu`Y}5~y;CtJ`4r1rJ>*#Un=^Q3JTYvcsc^=o zVFyF{)Vy>eT1Cn4N&y>3C}edR_)4D6!CPQZnz z!GkBw%Z}*>8?WB3%NCJHgE-*caf|4Un6gq?*||s}e_}I++I6PTmu8^Ay1>a~%~ZpF z?k?fk%OAVhW5>YY>e7&Rg=9x9ZV(0Ii0r${)p5Gz^4AqMV z{UXL@(O8S+1UG|S zm0YzlN^-jmq2-W#QVN4JsBULLqmNh8#PHr~`&X6QfRWX$iw&QyAGEKR z%#>qTna1M$_q78=&MjxYAMJ_yLm)(4RsR4*FBkt;ea>9H7t zwN|d-=83!+izxnx{MO83Oq}L`-VN$)4aBD5u!U$`SeY&>(#@3|)u3ED|`L zVtBF7-IKeiygWNkMlt-d5aHvA`^C-##>V=q(o=?hSOwVEPx{WPaX+wk4Rl1qKVerl z3I6p0Fcub=gP;<<4G9BUI%Ky-_RybY$XA0um~ICG`&PgqL&&!K){}&L(#k=Y_A=Y* zOe9s;MG$bI@M`LtZB6bnb=g2r{OC_8u%?en0Hmg?d>4!r82iTvsMwF|W;=+SP_%*! zo^Mi2vqDEuO}2C*5o3q7IE*%Vx>Q>PcoGPy+Z!xpg5k?SrDpu*WMLAQv=j$5$DuiI z=43|jsCPu9{(Ux>UjhIdq&gIQ2wPno{NmmKm`1PSd@t-nKtoaBoR9?|BXN`cVeRK@ z8d!YBg93K(f~@r&j>)cU|A%jWk@Ll`wxB&?4v>TXs9zR5D8zWoX|hfD{#Q^c>WJXr z-gE~cjhpBx_mftK#smtXFkHBRaz2xr5zF`sD=1SL|*4uvXbB&9c@{CTX0B+FuvJwCD_cPH2lij*0hGR}a zig&5^wHKd>IJ~G(sgn8p7tx4eyRFhqgCdiOi=rUemKI_P15Sx4)zt#B(K-k_j)|#Y zjj25KWO&iaJQ&5x3~JdY6PeGf;yRIXz~fqh+rErp>BWG8{s{v#BWjhfp-8!Dab11< zNS#^HG~c$POQLAke4hO(85*yJ+E^wV`tx#Z(<9LdWjN>Z)FAqHl(gura@eV(TrVP< zZ((6#pL3uELyH3tSxa5`KEt@354IWduqcFHey%CZ$QYMYAGNs4aMevb4|7M%fAq#-9<3zQf_QT~ed!fHrK+ z{wag8M^9-S9NHvY3z^91ct)16@lt_PrUl2vM0|(+aB%-<7?PQf5lzq7OBx)T`CckK zayX~-bCKmEVmR-}U{v1DawpL|w}32DT;xKD(dr{H!M+Q8<=(Q8_~$GsFS8&{hJMBv ztDrmJG|$x}j$%vDvIkAmV;Jpg;YaxJTM*d(R(i(yfQx$j)bUfrt7&aoYTS|TQRN79 zX{0qBc;5(m;<%#@K7}(H!JyC~PnV&&lCj%3LgMl+_*e|jMGI%i`5O_kJGLu2AqW1d z>j`D;GR-U8k!>0>*_r;;w(%NoedvoM!=ISTm&0;tERHuL*skHPqj2Zv!?viV>{}kW ze*Bj`SVxCIb#w#%;%V(v%_rm%9`;nS=*INy6&}?iW=1^*(cs+U>Rv_b+j9WrGes_q ztPCs|U-7}(s5B)2(n-k^hQ89wN1wU3oMvJTy^TMZdJA#ZjFuh{k{J~+x5TN5C=7%8 z?Q!xV_RJJMPq2n$(~@TVlZXrPE)VLZ5yra(?6`0ZfCKf1?({wBd{hgfqm0wSG&~3v?U0^1MlZh`X!28+Q*4a z6w>^6YfxONR1pKbQBe%eajM#ak38uN)aq64Zcf=WlUnkw(oBM1xfCT&(-DMA_Ff(gO9g1>s6`YS=l`Oy&2+w)-gsPZIjOOK+%R%LBsO| zvVR(OdE|^1ze0a%bLvBEq48uMo5=;IaIvs7h6YP~Yf9>JITRPB6Qd+jSeZZV14Z?G#@yZ7mw zj-Hk`>mkn%@eWYc*bz6oL*E<6~c3Ym~T7=XNNn<8L?;XUf0Ox}DWjVM~Wa_q#y zg4&0=30R%qw<67b$IY-ib1}^7g;jS$_*co7TD` z{V8e@@3lrwwi7K%TQADbsYq1U=g0Ot7E^=5Ysb*1Xx+^+S7*~VESr90u^c$AbIzE{ z#G{j+`&A|FooWaMU+;VNfbvrz*sCueBUY%qqfBTZJS^bbZ&lEjO4i8xbZW+;3$kO$ zmA-0DI(-z@pu4aKT>#H+ZZ~;{WGp*WBJv&xiK1PKta%C-RC(vp)V=&ZyZHlMl9>_b z{tl$X2&X z6Gnl~)fS)#1#v$Z=NAcypO6@@S-)0LELOM-j5C=Bsob9+?DVMdVc^oTl7a)>Ph^$Y zzJR>@iJ*PQD!`{@eR6^n^pIaVMB3?y)udRlCKIuJXD&hKN02mIZ!X^I9xGG> zDF*6m3=~=NDQMor4Ig#4ASK;henMW}lvo^x(9fr;>>>1@6pTnMnvAyw&$SbmzsR11 zRCwHp7*Iryk=j$50NQyK_xe+Qi{I_a-qtk&s6k{_rUEKN)P8)3ki()YzUL3^5$^L& z-yFL-*wxrwrmk&mUB2&CeAzpN@~v)kWbRy><`h5gh4}sX`7rSP(ziQt%Rz&Oe|UM` zQe*1q>eAGn-qxAATDpYp&U(C=c)JSxx_9ukv8(+|9s1hb=9|3j-(UA_)8eMC_B#Nj zv$O5lrt$rF)#u&T?#kJ@Loe?x*m@K3;_C2HpS%GaxruyvKq2Ky-$GtR{xG?_y*qvo z0@&X4&K2oi_oJ!ak-PHlgP!{F@nY-gApM<9hh3wXY*OEfzvntl6&ZwhCNVnV3@U|fwRaCLE6%;UJ13Jhcn7;TE>WctrSdFj_`{V5RYah5;1oGtX37wa>6|Y3Y;9DFC z*XL`nFb^?*Y7E=}0QLT^t{k6?FV-G8a$qm4ukq)_?VV{l^jGk&?9+INT}gQtA33w3 zrFlAMM6Lp^VJLjrHnE3v3_uX~E6C92;TuK$nf>ihVT&5uYk}X#UzY}^n1=5=Zcf}j zY(1pH46#$RbbLFAJ$sOy0<)Wbq;T5W6E?e@llze!FT+fj3s<3Q`{xf^X}7fxuz3hl zjDVzU1ag}>a#@$LH^+~wmtQx~rea&6{@UcSr_P-L`wFEu zC(v)r5WL}t(}J!wfO2_6Tf=_nz{;zWcq(RM9HcAiQ)K0tn?L(@#LZz1H7A;B=lEs< z6Nf(iqjkAaO@Kb)(-(pV_Zr%pb zArAcTjyhzSMB|g3cwXoKZYz7N7*|pP*dz$d-@Mn--Qx5}UQS>>CN5+U%sFv8<`_w3 zbS!^L?ZkLWm1JOAaHSgr^>@LFEec_l9uGxK!|-L(93%MIBIhZ*{TaL!>inK4C+Io! zG5U#Tu13tvFXdd&*JsxAxlpeC^pV*OIGD9*9-aemaQC{vBaM`7r)do%r)WsMX=)6l zGsJ4{Va`aGX2F3YIZk$m{Ng6x*!F$L?%+$*Uy$CVwo)Iwwsbuw?%pjqsr;bdNaizv z-cSy|$l)jJxiRY`Iq_R^5vW99A1tWnT2xsQ^y{nKVxmR6YJ8JtPD_;1LSp6@J8$97iBMw`N;QzBgy%y&M;Vvb-}-v#T_l$P6P z^|ot&ZnYmxkrNUcFjg`=CP)G9T0OW!5EenzauF5%CWW zK&oBr!>kv`dq#WzD!Df`@kX9=FkGtTxXyW)Wx7kcs8+G=LY`wPPB+^6iqV zXW_h`RKBnyqz`dp$KIXJfLf>12)MkUmNVB1H46M7@1PXck6-)I zS#*tiOhLH3Aq1UOAg6q4InA8#Wc`02+%>%#Or?m8n+s+iwK8e+07W(2N1m(7Uv_xu z_Fs*@Vt|1coof4JM-2(v)tCLG1@{UACWnekn+|n;F}QY#Nd$sb9+)9~l6`4AO^fK* z+evVC1q!?~%UxnI+vq3OAmXCtO|}HRk-PUD4gR zGQOpAa}AKd#3sybYZk{BAlKq-JBZ1kK4(TK)0>(b@)4H8I9pRA;OtQVNax#<-6ZeTkqh&YwAIrL!qlTrKG?!B3eo@uK!fAq=sKhNXC zpfgaQfB^s~AOZjo{rB_uG9t|RFIdTGp7zvdr^~72onDp`^3djX9 z$g9)s%@jDA`8L%^Me)iyZg{6g)-@|+Yw-!>W>jQJ?2IBPGV-waqM5`u&6(SdK=sFcNu0nDiu(slVa%6a44 z$e@(&qQuek)Q%Ft=yMzg{HY-%rZ{?4ON>XnoN~zLCdPo7bjjn!AG`W}i;OvM1{pX( zgg!#3kq3{tdzx(EHh|yjFC-HMkOp-h`(uJmjV#Ri1V>1&?YO+yy1aP#X3kxbBE%Dc zYH+IHLTU^O_Unbqr$fS$tY#>z@UL2=ihty*?K`5qiV~>iPa^IiVz#G8=gC9;J2qxnHW`(2<#lRal7{R@0)6Q)Vt|?Rdk&@L z&$1cI#v@4~1xicQ)J*tYvP#~dn8GEFBn-Lx5R?ldD&>xvbrnXvjD1T!&suLFO-;RpghXN^4m$`lZ;8r6(Mw@@}i+*2?> z5tF_!2f0vAq8aVKof0hMh?O5ou!I$Fj-tIS3+pRfTt?3CFX90;E_Ll;kBXJgkrLTo zHDX!HjdS1Jpnq zm=M~-T5k{Sk9y$sVIy;X0tiyqmf?~SX-W~FEG>bz4~MIy(%(SlYL_3{Q6*UNz>K=c zhYi|i?T0`!`8qBx8^nXtN;6>v^&)I7eTadVS$l=3gSWljk5tIA^40Ft|n%-?Btm;8a+*W zi_^eJ; z>kL6};*?Qkt`{p@&t4`r$16?a^Onqw+;S@%$mQ0Wl$%Z{5Wg+7EqNPM^?43{i-6+E z7258=#GHs*ZTJH)x3pT7pd>nmfJ(I#;UWXvSH|FJH{1PAp3;(-0M9t&;sdGbaW}gT z$HE-WDFPUES_>r;K7G~Z`Y5T`%S6H<^!~`x$%G?-+f4h{-t-CKCPygp!b@l27?Nkb z#Y9XFFE2Oe_j8BXkCd_PpYMjdaD#J-x@B8$tQ$XI$vUBYB8Xv@dVkxa)LMRPnGzh+ zuQL=kPIoiTr7mmEt-7hoQyT~!mA?lpZ= zPZ_$aVWtgnR4rGKC@t2RV5PZ?$yZ~B#TS)36QwL(OOzMWPqG(Vk1QPzw;vVuE^WO$ zFT*e-`@=y4BQ|CNWgA{5xz}VU81%1py9Y%jCRa{7$9))mFua&R^^N6jc$rd|AG_Lw zz)GRgY$K!+q&7rE%v4L&@47oxGaj9fwnmyFRICy>s()($lt3>B|k=tpY2 zHxJQS=_OityR;SP<47Yo?w9tfHe3%c3#>{DqZtS#Lu59Itje?W7is>kCBO-S)giEk zh_vVNZ-ZFb#M;X^A@m*rXt7u()Mm)ffuWSSb05%pi|oEbj(Y$YyTmHYNN@50OkAYegXM36PHF#MbpP3#?dXpl!2ayI`A@uS^8Nf))l73L#Xi?y16InWms|= z$*D2vdPQ;yN|_@l3F#I^@>1sIsfih>C7H>J!~Op>>Hf=pwzz_lP5ZY;0)K<*zxT|< z*4fcR&)&|$*4c^H+1)u(c6x?tdPX9ePL_6@nw%o$NOF2+jE+*AnnHqRT&Y%t|M;B1 zsnQXd>7ljtKfJ;JN{j7YjtBoY9qivA|Lrjs z5r1vUsXzb#1pghXC?X`MDC{#U;U**x5VGgvH<6q%mJe-6O%fu{8be4DLZz+b>!Zd& zwx#ZydBSrtp${C&D^iNl{z6>V4n;DSx6`X$Og!KV!Pix6+H(xA+Hp{_P7|SBkdcY& zW1Yjuuy0O{^w0;fh=^dfR`JZKI~cV;5!A&C+jgz_26nNF{3wrk)35& zCV|es$NddI6b9@vT7hVw;ud^U?3+L%=R5!0lFrg9=gHt_%f>jiVai$zq~g?(?Nm&1 zoz{M|N)%1V&j8}H+0bLG7YCx}zTX}$!A3XD=Ayx;loBkV9~si>ZrFw-1v8Kk=v$hG zUI)f3qu}LQI#&M{q!O@X{(Bz!v@x4U7?20G&eFZ5{=7%+JN|CVS$Wa)8>u&b(>QuvADL_5m1oK_RP8+r-Dva6LQ(-wx>6fp$key2Q=zR=}etH*BfX_UN z(_H8MS#MNDP$-s|(3>I{M!(J8Fi8mMP8zMcjujO6)}>P@_~12NwRgP^q<_ob8VnE! z1^EBpbpCfV|M%7S`(L;JG>`wM1^quM|1Ssn|6u?CH2&uJC*?npfBoqHN&45T^-q`P zze#$a|Fb{;Z_nmGdH<|3|INE${;$0Mujc$G@Sh6vZ=f*Oe+B+;z4<5YpQ`Y0+V+2^ z{Zk|U3I6B2|2J5L`@eScf2hDessEh#|Cb6_{@rr}|N7qn1c1+9?Qr7# H*VF$3vc(o3 literal 0 HcmV?d00001 diff --git a/dist/colorpattern-1.3.tar.gz b/dist/colorpattern-1.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3253266644a9bec46ac809d7a38b1dc6fef065fb GIT binary patch literal 17551 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 VOmflB{I7rN+hwlbW0=6m007hhY0Cfr literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index a17ad7f..0ee30d6 100644 --- a/setup.py +++ b/setup.py @@ -84,7 +84,7 @@ def read(file_name=None, is_encoding=True, ignore_raises=False): setup( name='colorpattern', - version='1.2', + version='1.3', author='croketillo', author_email='croketillo@gmail.com', License="GNU-GPL 3", @@ -92,7 +92,7 @@ def read(file_name=None, is_encoding=True, ignore_raises=False): install_requires=[ 'colorama', ], - description='Effortless console text colorization based on user-defined patterns in Python."', + description='Effortless console text colorization based on user-defined patterns in Python.', long_description=read("README.rst"), url='https://github.com/croketillo/colorpattern', classifiers=[ diff --git a/test/colorpattern_test.py b/test/colorpattern_test.py index 29ecd81..bfe26b8 100644 --- a/test/colorpattern_test.py +++ b/test/colorpattern_test.py @@ -1,12 +1,46 @@ from colorpattern.colorpattern import * +def main(): + # Define your color patterns + pattern1 = SetPattern(r'\d+', color=Fore.GREEN) + pattern2 = SetPattern(r'Colorpattern', color=Fore.LIGHTRED_EX, underline=True) + pattern3 = SetPattern(r'Croketillo', color=Fore.RED, back=Back.LIGHTYELLOW_EX, style=Style.BRIGHT) + email = SetPattern(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b', color=Fore.LIGHTCYAN_EX) -pattern1 = SetPattern(r'\d+',color=Fore.GREEN) -pattern2 = SetPattern(r'Colorpattern',color=Fore.LIGHTRED_EX, underline=True) -pattern3 = SetPattern(r'Croketillo',color=Fore.RED,back=Back.LIGHTYELLOW_EX, style=Style.BRIGHT) -email = SetPattern(r'\b[A-Za-z0.9._%+-]+@[A-Za-z0.9.-]+\.[A-Z|a-z]{2,7}\b', color=Fore.LIGHTCYAN_EX) + # Initialize colorization and get the original print function and applied patterns + print("\nSTART COLORIZED PRINT") + print('-----------------------') + start_color([pattern1, pattern2, pattern3, email]) -start_color([pattern1,pattern2,pattern3, email]) + # Use the custom print function with colorization + print('Colorpattern v1.3') + print('By Croketillo - croketillo@gmail.com') -print('2133 Colorpattern 432423') -print('By Croketillo - croketillo@gmail.com') + # End colorization and restore the original print function + end_color() + print("\nNORMAL PRINT") + # Now, printing returns to normal + + print('-----------------------') + print('Colorpattern v1.3') + print('By Croketillo - croketillo@gmail.com') + + # You can re-enable colorization with new patterns if necessary + new_pattern = SetPattern(r'new pattern', color=Fore.LIGHTCYAN_EX) + + # Use the custom print function with new patterns + print("\nSTART COLORIZED PRINT AGAIN") + start_color([pattern1, new_pattern]) + + print('-----------------------') + print('This is a new pattern. 123456') + + # End colorization and restore the original print function + end_color() + print("\nNORMAL PRINT AGAIN") + # Now, printing returns to normal even with the new patterns + print('-----------------------') + print('This is a normal message again.') + +if __name__ == "__main__": + main()