
    dh}                     l   d dl mZmZmZmZ d dlm	Z
 d dlmZ d dlmZ edk(  rd dlmZmZmZmZmZ  G d de      Z G d	 d
      Z G d d      Z G d d      Z G d d      ZeZ G d d      Z G d d      Z G d d      Z G d d      Z  G d d      Z! G d d      Z"e"Z#ejI                          y)    )namesystemget_terminal_sizeterminal_size)stdout)sleep)Threadnt)c_intc_byte	Structurebyrefwindllc                       e Zd ZdefdefgZy)_CursorInfosizevisibleN)__name__
__module____qualname__r   r   _fields_     R/var/www/html/mms/fake-sms/my_env/lib/python3.12/site-packages/pystyle/__init__.pyr   r      s    UO')r   r   c                   N    e Zd ZdZedk(  Zd Zd ZdefdZ	de
de
fd	Zd
efdZy)Systema  
    1 variable:
        Windows      |      tells if the user is on Windows OS or not
    5 functions:
        Init()       |      initialize the terminal to allow the use of colors
        Clear()      |      clear the terminal
        Title()      |      set the title of terminal, only for Windows
        Size()       |      set the size of terminal, only for Windows
        Command()    |      enter a shell command
    r
   c                      t        d       y N _systemr   r   r   InitzSystem.Init)   s	    r   c                  D    t        t        j                  rd      S d      S )Nclsclear)r!   r   Windowsr   r   r   ClearzSystem.Clear,   s    u<<G<<r   titlec                 @    t         j                  rt        d|        S y )Nztitle r   r&   r!   )r(   s    r   TitlezSystem.Title/   s     >>VE7+,, r   xyc                 F    t         j                  rt        d|  d|       S y )Nzmode z, r*   )r,   r-   s     r   SizezSystem.Size3   s&    >>U1#Rs+,, r   commandc                     t        |       S Nr    )r0   s    r   CommandzSystem.Command7   s    wr   N)r   r   r   __doc___namer&   r"   r'   strr+   intr/   r3   r   r   r   r   r      sG    	 tmG=-S -- - -   r   r   c                   *    e Zd ZdZd Zd Z	 defdZy)Cursorz
    2 functions:
        HideCursor()      |      hides the white blinking in the terminal
        ShowCursor()      |      shows the white blinking in the terminal
    c                      t         dk(  rt        j                  d       y t         dk(  r*t        j                  d       t        j
                          y y )Nr
   Fposixz[?25lr5   r9   _cursor_stdoutwriteflushr   r   r   
HideCursorzCursor.HideCursorD   s7    D=NN5!gMM+&MMO r   c                      t         dk(  rt        j                  d       y t         dk(  r*t        j                  d       t        j
                          y y )Nr
   Tr;   z[?25hr<   r   r   r   
ShowCursorzCursor.ShowCursorK   s7    D=NN4 gMM+&MMO r   r   c                    t               }t        j                  j                  d      }t        j                  j	                  |t        |             | |_        t        j                  j                  |t        |             y )Ni)r   r   kernel32GetStdHandleGetConsoleCursorInfor   r   SetConsoleCursorInfo)r   cihandles      r   r=   zCursor._cursorT   sT    ]--c2,,VU2Y?
,,VU2Y?r   N)r   r   r   r4   rA   rC   boolr=   r   r   r   r9   r9   <   s$      @ @r   r9   c            	           e Zd ZdZdededefdZdedefdZdededefd	Zd
edefdZ	defdZ
dd
edededefdZdedefdZdefdZdedefdZddedededefdZy)_MakeColorsz ! developper area ! coltextreturnc                     d|  d| dS )N[38;2;m[38;2;255;255;255mr   )rN   rO   s     r   	_makeansiz_MakeColors._makeansi`   s    C5$'=>>r   c                     | j                  dd      j                  dd      j                  dd      j                  dd      S )NrR   r   rS   50mz[38)replacerN   s    r   _rmansiz_MakeColors._rmansic   s<    {{<,44S<DDUBOWWXaceffr   var1var2c                     t        | d d       }|d d D ]  }|j                  |        t        |      D ]  }|j                  |        |S )N   )listappendreversed)r[   r\   rN   _cols       r   _makergbcolz_MakeColors._makergbcolf   sV    49o"I 	DJJt	SM 	DJJt	
r   colorc                     d|  dS )NrR   rS   r   )rd   s    r   _startz_MakeColors._startn   s    E7!$$r   c                       y)NrT   r   r   r   r   _endz_MakeColors._endq   s    'r   endc                 B    |rt         j                         nd}| |z   |z   S r   )rM   rh   rd   rO   ri   s      r   	_maketextz_MakeColors._maketextt   s"    $'k RTz#~r   c                 L    t        |       t        | j                               z
  S r2   )lenlstriprO   s    r   
_getspacesz_MakeColors._getspacesx   s    4y3t{{}---r   c                  v    | D cg c]  }|d d 	 } }g }| D ]  }|D ]  }|j                  |         |S c c}w )N   )r`   )colorsrd   rainbowrN   s       r   _makerainbowz_MakeColors._makerainbow{   sV    *01%*11 	$E $s#$	$  2s   6rt   c                 ^    t        |       }t        |      D ]  }| j                  |        | S r2   )r_   ra   r`   )rt   _colorsrN   s      r   _reversez_MakeColors._reverse   s0    v,G$ 	CMM#	r   col1col2ry   c           	         t         j                  |       t         j                  |      }} t        j                  | |gd      }t        j                  ||gd      }t        j                  || gd      }t        j                  ||gd      }t        j                  ||gd      }t        j                  || gd      }t        j                  ||gd      }	| |||||	|||g	}
|rt         j	                  |
      S |
S )NrY   F)rf   rt   )rM   rZ   Colors	StaticMIXry   )rz   r{   ry   fade1fade2fade3fade4fade5fade6fade7mixeds              r   
_mixcolorsz_MakeColors._mixcolors   s	    ((T(2K4G4GD4G4Qd  $e <  %u =  %u =  %u =  % >  %u =  % >ueUE5%M5={##5#1H5Hr   N)FT)r   r   r   r4   r6   rU   rZ   r_   rc   rf   rh   rK   rl   r7   rq   rv   ry   r   r   r   r   rM   rM   \   s    ?s ?# ?# ?gS gS g$ d t %c %c %(# ( C d s . . .  $ 
I 
IC 
I4 
I4 
Ir   rM   c                   <   e Zd ZdZdedededefdZdeded	ed
edededefdZdNdede	defdZ
defdZ	 dOdedededededefdZ	 dgZdgZdgZdgZdgZdgZdgZdgZd gZd!gZd"gZd#gZd$gZd%gZd&gZd'gZd(gZd)gZd*gZd+gZ d,gZ!d-gZ"d.gZ#d/gZ$d0gZ%d1gZ&d2Z'd2Z(d2Z)d2Z*d2Z+d2Z,d2Z-	 e.j_                  d3      Z0e.j_                  d4      Z1e.j_                  d5      Z2e.j_                  d6      Z3e.j_                  d7      Z4e.j_                  d8      Z5e.j_                  d9      Z6e.j_                  d:      Z7e.j_                  d;      Z8e.j_                  d<      Z9e.j_                  d=      Z:e.j_                  d>      Z;e.j_                  d?      Z<e.j_                  d@      Z=e.j_                  dA      Z>e.j_                  dB      Z?e.j_                  dC      Z@e.j_                  dD      ZAe.j_                  dE      ZBe.j_                  dF      ZCe3ZD	 eefZEeeeeeeeeeeeeeeeeeeee e!e"e#e$e%e&gZFeFD ]  ZGdGZHdHZIdGZJdHZKeGdI   ZLeGj                  dI        eNdJ      D ]g  ZOdKeLv r*eLj                  dK eeH            ZQeGj                  eQ       n-dLeLv r)eLj                  dL eeI            ZQeGj                  eQ       eHdGz  ZHeIdGz  ZIi  eNdJ      D ]g  ZOdKeLv r*eLj                  dK eeK            ZQeGj                  eQ       n-dLeLv r)eLj                  dL eeJ            ZQeGj                  eQ       eJdGz  ZJeKdGz  ZKi  e.j                  ee$      Z'e.j                  ee"      Z(e.j                  ee&      Z)e.j                  ee!      Z*e.j                  e e#      Z+e.j                  ee%      Z,e.j                  e(e)e+      Z-e'e(e)e*e+e,fD ]  ZHeFj                  eH        eFj                  e-       e0e1e2e3e4e5e6e7e8e9e:e;e<e=e>e?e@eAeBeCeDgZUeFD  cg c]  }| c}} ZVeUD ]  ZGeVj                  eG        yMc c}} w )Pr~   a  
    54 variables (colors)
    
    3 lists:
        static_colors      |      colors that are static, ex: 'red' (can't be faded)
        dynamic_colors     |      colors that are dynamic, ex: 'blue_to_purple' (can be faded)
        all_colors         |      every color of static_colors and dynamic_colors
        
    3 functions:
        StaticRGB()        |      create your own fix/static color
        DynamicRGB()       |      create your own faded/dynamic color (soon...)
        StaticMIX()        |      mix two or more static colors
        DynamicMIX()       |      mix two or more dynamic colors
        Symbol()           |      create a colored symbol, ex: '[!]'
    rgbrP   c                 <    t         j                  |  d| d|       S )N;)rM   rf   )r   r   r   s      r   	StaticRGBzColors.StaticRGB   s#    !!QCq1QC.11r   r1g1b1r2g2b2c                      y r2   r   )r   r   r   r   r   r   s         r   
DynamicRGBzColors.DynamicRGB   s    .1r   rt   rf   c                 D   g }| D ]  }t         j                  |      }|j                  d      }t        t        |d               }t        t        |d               }t        t        |d               }|j	                  |||g        t        t        d |D              t        |      z        }t        t        d |D              t        |      z        }t        t        d |D              t        |      z        }| d| d| }|rt         j                  |      S |S )	NrY   r   r         c              3   &   K   | ]	  }|d      yw)r   Nr   .0rgbs     r   	<genexpr>z#Colors.StaticMIX.<locals>.<genexpr>        ,c!f,   c              3   &   K   | ]	  }|d      yw)r   Nr   r   s     r   r   z#Colors.StaticMIX.<locals>.<genexpr>   r   r   c              3   &   K   | ]	  }|d      yw)r   Nr   r   s     r   r   z#Colors.StaticMIX.<locals>.<genexpr>   r   r   )	rM   rZ   splitr7   r`   roundsumrn   rf   )rt   rf   r   rN   r   r   r   s          r   r   zColors.StaticMIX   s    	"C%%#%.C))C.CCAK ACAK ACAK AJJ1ay!	" #,,,s3x78#,,,s3x78#,,,s3x781QCqn*0{!!#&9c9r   c                 v   g }| D ]L  }| j                  |      t        |       dz
  k(  r n*|j                  || | j                  |      dz      g       N |D cg c]   }t        j	                  |d   |d   d      " } }g }| D ]  }|D ]  }|j                  |         t        j                  |      S c c}w )Nr   r   F)rz   r{   ry   r}   )indexrn   r`   rM   r   ry   )rt   rx   rd   finalrN   s        r   
DynamicMIXzColors.DynamicMIX   s     	EE||E"c&kAo5NNE6&,,u*=*A#BCD	E ell[`+((eAhU1XPU(Vll 	"C "S!"	" ##5#11 ms   %B6symbolrN   col_left_rightleftrightc                 >    | | | |  | | t         j                   S r2   )Colreset)r   rN   r   r   r   s        r   SymbolzColors.Symbol   s+     !$uVH^4DUGCII;WWr   zm;m;mzm;0;0z0;m;0z0;0;mzn;n;nz255;n;nzn;255;nzn;n;255zn;0;0z255;m;mz255;m;0z255;0;mz0;n;0zm;255;mzm;255;0z0;255;mz0;0;nzm;m;255z0;m;255zm;0;255z255;n;0zn;255;0z255;0;nzn;0;255z0;255;nz0;n;255.z255;0;0z0;255;0z0;0;255z255;255;255z0;0;0z150;150;150z	255;255;0z	255;0;255z	0;255;255z	255;150;0z	255;0;150z	0;150;255z200;200;200z100;100;100z255;100;100z100;255;100z100;100;255z100;0;0z0;100;0z0;0;100      r   r^   rS   nNr   )[])Wr   r   r   r4   r7   r6   r   r_   r   rK   r   r   r   black_to_whiteblack_to_redblack_to_greenblack_to_bluewhite_to_blackwhite_to_redwhite_to_greenwhite_to_bluered_to_blackred_to_whitered_to_yellowred_to_purplegreen_to_blackgreen_to_whitegreen_to_yellowgreen_to_cyanblue_to_blackblue_to_whiteblue_to_cyanblue_to_purpleyellow_to_redyellow_to_greenpurple_to_redpurple_to_bluecyan_to_greencyan_to_bluered_to_bluered_to_greengreen_to_bluegreen_to_redblue_to_redblue_to_greenru   rM   rf   redgreenbluewhiteblackgrayyellowpurplecyanorangepink	turquoise
light_gray	dark_gray	light_redlight_green
light_bluedark_red
dark_green	dark_bluer   rN   dynamic_colorsrd   rb   reversed_coldbl_coldbl_reversed_colcontentpoprange_rX   resultr`   rc   rv   static_colors
all_colors)r   rd   s   00r   r~   r~      s    2S 2S 2S 2S 22s 2 2 2# 22 #2(,2:$ : : :24 2  Xs X Xc X XSV Xad X YN9LYNIMYN;L[NKM9L;LKMKMYN[N kOKMIMKM;L[NKM kOKM[NKM;L KLMLKMG


Y
'Cy)Ei(D}-Ew'Em,D,F,Fk*D,Fk*D"";/I##M2J""=1I""=1I$$]3K##M2J!!),H##I.J""9-IE+C 	nmnmlM=}lN~|N   "#(		!r 	Ag~ c$i8V$ c,.?@V$BJDBL	 r 	#Ag~ c2B.CDV$ c'l;V$rMG"	#/"#H ))-HK**=/JL++M<HM**?MJL)).-HK++L-HM&&m[2G 	\|] # T"	# '" 	UDudiI;
*i	M &44E%4J !% ! 5s   2	Pr~   c                   "   e Zd ZdZ	 ddedededefdZej                  dd	ddfdededed
edede	defdZ
	 ddedede	de	de	de	dedefdZddedede	de	def
dZddedede	de	def
dZddedede	de	def
dZdededej                   defdZy)Coloratea  
    6 functions:
        Static colors:
            Color()                 |            color a text with a static color
            Error()                 |            make an error with red text and advanced arguments
            Format()                |            set different colors for different parts of a text
        Dynamic colors:
            Vertical()              |           fade a text vertically
            Horizontal()            |           fade a text horizontally
            Diagonal()              |           fade a text diagonally
            DiagonalBackwards()     |           fade a text diagonally but backwards
    Trd   rO   ri   rP   c                 2    t         j                  | ||      S )Nrk   )rM   rl   rk   s      r   ColorzColorate.Color  s    $$5t$EEr   Fr   spacesenterwaitc                     t         j                  |d|z  | z   |      }|rt        |      }nt        |       d }|du rt	                |S |durt        |       |S )N
rk   TF)rM   rl   inputprintexit_sleep)rO   rd   ri   r   r   r   r   vars           r   ErrorzColorate.Error  sh    ''dVmd2 ( =.C'NC4<F 
 4L
r   speedstartstopcutfillc                 *   | |d  } |j                         }d}d}	d}
|D ]  }| |
   |rH|dt        j                  |      z  dj                  fd|j	                         D              z   dz   z  }nC|dt        j                  |      z  t        j                  |j	                               z   dz   z  }|	|k7  r|	dz  }	|j                         s|dk(  r|
|z   t        |       k  s|dk7  r|
|z   |k  r|
|z  }
|dk(  rd}
|}
 |j                         S )Nr   r    c              3   J   K   | ]  }t         j                  |        y wr2   )rM   rU   )r   r,   colorRs     r   r   z$Colorate.Vertical.<locals>.<genexpr>  s     &]A{'<'<VQ'G&]s    #r   r   )
splitlinesrM   rq   joinstriprU   rstriprn   )rd   rO   r  r  r	  r
  r  linesr   nstartcolor_nlinr  s               @r   VerticalzColorate.Vertical  sM   cd! 	#C7^F#**!ww&]QTQZQZQ\&]]^`de e #***44VSYY[IJLPQ Q !zz|AI%#e*4qy%$.u$GQYG"G5	#8 }}r   c           	      L   | |d  } |j                         }d}|D ]y  }t        |      }d}|D ]`  }	| |   }
|dt        j                  |	      z  t        j	                  |
|	j                               z   z  }||z   t        |       k  r||z  }_d}b |dz  }{ |j                         S Nr   r   r  r   r  r_   rM   rq   rU   r  rn   r  )rd   rO   r  r
  r  r   r  caracr  carr  s              r   
HorizontalzColorate.Horizontal  s    cd! 	CIEG  w#***44VSYY[IJ J U?SZ/u$GG  dNF	 }}r   c           	      L   | |d  } |j                         }d}d}|D ]w  }t        |      }|D ]`  }	| |   }
|dt        j                  |	      z  t        j	                  |
|	j                               z   z  }||z   t        |       k  r||z  }_d}b |dz  }y |j                         S )Nr   r   r  r   r   r  )rd   rO   r  r
  r  r   r  r  r  r  r  s              r   DiagonalzColorate.Diagonal  s    cd! 	CIE  w#***44VSYY[IJ J U?SZ/u$GG  dNF	 }}r   c                 z   | |d  } |j                         }d}d}d}|D ]  }t        |      }	|	j                          d}|	D ]`  }
| |   }dt        j	                  |
      z  t        j                  ||
j                               z   |z   }||z   t        |       k  r||z  }_d}b |dz   |z   } |j                         S r  )r  r_   reverserM   rq   rU   r  rn   )rd   rO   r  r
  r  r   resultLr  r  r  r  r  s               r   DiagonalBackwardszColorate.DiagonalBackwards  s    cd! 	-CIEMMOG  w***44VSYY[IJLST U?SZ/u$GG  d]W,F	- ||~r   second_charsprincipal_col
second_colc                     |t         j                  k(  r ||| d      }n	 |||       }d}|D ]!  }||v rt         j                  ||      }||z  }# |S )NT)r  r   )r   r  r   )rO   r%  moder&  r'  ctextntextr,   s           r   FormatzColorate.Format  sf    8$$$48E-E 	AL NN:q1QJE	 r   Nr   )r   r   r   r   F)r   r   )r   r   r   r4   r6   rK   r   r~   r   r7   r  r_   r  r  r   r$  rN   r,  r   r   r   r   r   }  sl    FS F F$ F# F '-jjeTUeiw| C  t T ^b qt   BE    # #C # # #s #]` #lp #  ~A #J$ c #  C ( C  c # * S  s SV .
S 
 
6:: 
[^ 
r   r   c                       e Zd ZdZddedededefdZddedededefd	Zd
de	j                  ej                  ddddfdededededededefdZddZ	 dededefdZdefdZy)Animea  
    2 functions:
        Fade()                  |            make a small animation with a changing color text, using a dynamic color
        Move()                  |            make a small animation moving the text from left to right
        Bar()                   |            a fully customizable charging bar
        Anime()                 |            a mix between Fade() and Move(), available soon
    TFrO   rd   hide_cursorr   c                    |rt         j                          t        |      t        k(  r|dz  }da|r*t        t        j                        }|j                          |du r>	 t        durnt        j                  | |||       |dd  }|j                  |d          |}=t        |      D ]?  }	t        dur n5t        j                  | |||       |dd  }|j                  |d          |}A |rt         j                          y y )N   FtargetTr   r   )r9   rA   typer7   passed_threadr.  _inputr  _animer`   r   rC   )
rO   rd   r)  timeintervalr/  r   thncolorr   s
             r   Fadez
Anime.Fade  s    :BJD -BHHJ4<&T5$9qreAh'  4[ &T5$9qreAh'  r   c                   
 |rt         j                          t        |      t        k(  r|dz  }dat               j                  }|r*t        t        j                        }|j                          d
d}|du rt        s/|dk(  r1
|t        d | j                         D              dz   z
  k\  rd}
dz  
n|dk(  r
dk  rd}
dz  
t        j                  d	j                  
fd
| j                         D              |xs g d |       t        snt        |      D ]  }	t        r n|dk(  r,
|t        d | j                         D              dz   z
  k\  rd}n|dk(  r
dk  rd}t        j                  d	j                  
fd| j                         D              |xs g d |       
dz  
 |rt         j!                          y y )Nr1  Fr2  r   r   Tc              3   2   K   | ]  }t        |        y wr2   rn   r   txts     r   r   zAnime.Move.<locals>.<genexpr>X       /VSC/V   r   r   c              3   .   K   | ]  }d z  |z     ywr  Nr   r   linecounts     r   r   zAnime.Move.<locals>.<genexpr>_       &Zet';&Z   c                     |S r2   r   ar   s     r   <lambda>zAnime.Move.<locals>.<lambda>_      vw r   c              3   2   K   | ]  }t        |        y wr2   r@  rA  s     r   r   zAnime.Move.<locals>.<genexpr>e  rC  rD  c              3   .   K   | ]  }d z  |z     ywrF  r   rG  s     r   r   zAnime.Move.<locals>.<genexpr>j  rJ  rK  c                     |S r2   r   rM  s     r   rO  zAnime.Move.<locals>.<lambda>j  rP  r   )r9   rA   r4  r7   r5  _terminal_sizecolumnsr6  r.  r7  r  maxr  r8  r  r   rC   )rO   rd   r9  r:  r/  r   rU  r;  r)  r   rI  s             @r   Movez
Anime.MoveB  s   :BJD  "**%,,/BHHJ4<19C/VDOODU/V,VYZ,Z![\ QJEQYz QJETYY&ZHY&ZZ\a\gegiw  zB  C  4[ 19C/VDOODU/V,VYZ,Z![\ QYz TYY&ZHY&ZZ\a\gegiw  zB  C
  r   z[ ]z[0]g      ?carac_0carac_1r:  centerc	           	         |rt         j                          t        |      t        k(  r@| t	        |      k  s2t        |      }	|	D ]  }
|j                  |
        | t	        |      k  s2da|r*t        t        j                        }|j                          t        | dz         D ]  }||z  || |z
  z  z   }t        r nt        |      t        k(  r;|r&t        t        j                   |||                   nEt         |||             n2|r"t        t        j                  ||z                nt        ||z          t        |       t         j#                           |rt         j%                          y y )NFr2  r   )r9   rA   r4  r_   rn   r`   r5  r6  r.  r7  r  r   r  CenterXCenterr  r   r'   rC   )lengthrX  rY  rd   r)  r:  r/  r   rZ  r<  rN   r;  ibars                 r   Barz	Anime.Barr  s2   ;$E
*e! &CLL%& E
* -BHHJvz" 	AA+6A: 66CE{d"&..eS)9:;$uc*+&..56%#+&8LLN	   r   rP   Nc                       y r2   r   r   r   r   r.  zAnime.Anime  s    r   c                     t        j                   |||              t        j                          t        |       t        j                          y r2   )r>   r?   r@   r  r   r'   )rO   rd   r)  r:  s       r   r8  zAnime._anime  s/    d5$'(xr   c                  "    t               at        S r2   )r  r5  r   r   r   r7  zAnime._input  s    r   )T皙?TF)Tg{Gz?TF)rP   N)r   r   r   r4   r6   r_   rK   r=  rW  r~   r   r   r  r7   ra  r.  r8  r7  r   r   r   r.  r.    s    ! 3 ! t ! RV ! fj ! F- 3 - t - PT - dh - ` $)fllaiatat  GJ  `d  ty  JO " S " 3 " t "   AD "   Y] "   mq "   CG " H S  s C r   r.  c                       e Zd ZdZddej
                  fdededededd	f
d
Z	ddej
                  ej
                  e
fdedededededefdZ	 dedefdZy	)Writez
    2 functions:
        Print()         |          print a text to the terminal while coloring it and with a fade and write effect
        Input()         |          same than Print() but adds an input to the end and returns its valor
    re  TrO   rd   r/  ri   rP   Nc                     |rt         j                          t        j                  | ||       t	        j
                  |       t	        j                          |rt         j                          y y N)rO   rd   r:  r9   rA   rg  _writer>   r?   r@   rC   )rO   rd   r:  r/  ri   s        r   PrintzWrite.Print  sL    $eh?c r   input_colorc                     |rt         j                          t        j                  | ||        ||      }t	        j
                  |       t	        j                          |rt         j                          |S ri  rj  )rO   rd   r:  r/  rm  ri   funcvalors           r   InputzWrite.Input  sV    $eh?[!cr   r:  c                    t        |       }t        |      t         k(  rRt        |      t        |      k  s;t        |      }|D ]  }|j                  |        t        |      t        |      k  s;d}|D ]  }t        |      t         k(  r-t	        j
                  t        j                  ||   |             nt	        j
                  ||z          t	        j                          t        |       |j                         s|dz  } y )Nr   r   )r_   r4  rn   r`   r>   r?   rM   rU   r@   r  r  )rO   rd   r:  r  r<  rN   r   rH  s           r   rk  zWrite._write  s    T
;$%jCJ.e! &CLL%& %jCJ.
  	DE{d"k33E!HdCDedl+MMO8zz|Q	r   )r   r   r   r4   r~   r   r6   r_   rK   rl  r  rq  r7   rk  r   r   r   rg  rg    s     04Z`ZfZf 
 C 
  
 $ 
 TW 
 ko 
  04bhbnbn  |B  |H  |H  QV C  $ \_ ux   [^   S 3 r   rg  c                       e Zd ZdZdZdZdZddededefd	Z	ddededefd
Z
ddedededededefdZefdedefdZefdedefdZ	 defdZdefdZ G d de      Zy)r\  a  
    2 functions:
        XCenter()                  |             center the given text in X cords
        YCenter()                  |             center the given text in Y cords
        Center()                   |             center the given text in X and Y cords
        GroupAlign()               |             align the given text in a group
        TextAlign()                |             align the given text per lines

    NOTE: the functions of the class can be broken if the text argument has colors in it
    CENTERLEFTRIGHTNrO   r   iconc                     t         j                  |       dj                  fd| j                         D              S )Nrp   r   c              3   .   K   | ]  }z  |z     y wr2   r   )r   rO   rw  r   s     r   r   z!Center.XCenter.<locals>.<genexpr>  s     ND$-4/NrK  )r\  _xspacesr  r  rO   r   rw  s    ``r   r]  zCenter.XCenter  s4    >__$_/FyyNDOO<MNNNr   c                 |    |t         j                  |       }||z  dj                  | j                               z   S )Nrp   r   )r\  _yspacesr  r  r{  s      r   YCenterzCenter.YCenter  s6    >__$_/Ff}tyy):;;;r   xspacesyspacesxiconyiconrP   c                    t         j                  |       |t         j                  |       }||z  dj                  | j	                               z   } dj                  fd| j	                         D              S )Nrp   r   c              3   .   K   | ]  }z  |z     y wr2   r   )r   rO   r  r  s     r   r   z Center.Center.<locals>.<genexpr>  s     Pd%'/T1PrK  )r\  rz  r}  r  r  )rO   r  r  r  r  s    ` ` r   r\  zCenter.Center  sg    ?oo4o0G?oo4o0Gw4??+<!==yyPdoo>OPPPr   alignc                    |j                         }|t        j                  k(  rt        j                  |       S |t        j                  k(  r| S |t        j
                  k(  r]t               j                  t        d | j                         D              dj                  fd| j                         D              S t        j                         )Nc              3   2   K   | ]  }t        |        y wr2   r@  )r   rH  s     r   r   z$Center.GroupAlign.<locals>.<genexpr>  s     FDc$iFrD  r   c              3   4   K   | ]  }d z
  z  |z     ywrF  r   )r   rH  r^  maxLineSizes     r   r   z$Center.GroupAlign.<locals>.<genexpr>  s      atcVk%9:dBas   )upperr\  rZ  r]  r   r   rT  rU  rV  r  r  BadAlignment)rO   r  r^  r  s     @@r   
GroupAlignzCenter.GroupAlign  s    FMM!>>$''fkk!Kfll"#%--FFDOO4EFFK99atO`aaa%%''r   c                    |j                         }t        d | j                         D              |t        j                  k(  r(dj                  fd| j                         D              S |t        j                  k(  r| S |t        j                  k(  r*dj                  fd| j                         D              }|S t        j                         )Nc              3   2   K   | ]  }t        |        y wr2   r@  )r   r_  s     r   r   z#Center.TextAlign.<locals>.<genexpr>  s     5a3q65rD  r   c              3   d   K   | ]'  }d t        dz  t        |      dz  z
        z  |z    ) yw)r  r   N)r7   rn   r   r  mlens     r   r   z#Center.TextAlign.<locals>.<genexpr>  s1     acCQS!(;$<<Cas   -0c              3   F   K   | ]  }d t        |      z
  z  |z     ywrF  r@  r  s     r   r   z#Center.TextAlign.<locals>.<genexpr>  s#     YcTCH_5;Ys   !)	r  rV  r  r\  rZ  r  r   r   r  )rO   r  r+  r  s      @r   	TextAlignzCenter.TextAlign  s    54??#455FMM!99atO`aaafkk!Kfll"IIYtGXYYEL%%''r   c                     	 t               j                  }| j                         }t	        d |D        d      }t        ||z
  dz        S # t        $ r Y yw xY w)Nr   c              3   T   K   | ]   }|j                         st        |       " y wr2   )r  rn   )r   vs     r   r   z"Center._xspaces.<locals>.<genexpr>)  s     9qwwyc!f9s   (()defaultr   )rT  rU  OSErrorr  rV  r7   )rO   rN   textlntextls       r   rz  zCenter._xspaces#  s]    	 "**C !9e9QGC&LA%&&	  		s   A 	AAc                     	 t               j                  }| j                         }t	        |      }t        ||z
  dz        S # t        $ r Y yw xY w)Nr   r   )rT  r  r  r  rn   r7   )rO   r  r  r  s       r   r}  zCenter._yspaces,  sT    	 "((C !UC&LA%&&	  		s   A 	AAc                        e Zd Z fdZ xZS )Center.BadAlignmentc                 $    t         |   d       y )NzFChoose a correct alignment: Center.center / Center.left / Center.rightsuper__init__)self	__class__s    r   r  zCenter.BadAlignment.__init__6  s    Gefr   )r   r   r   r  __classcell__r  s   @r   r  r  5  s    	g 	gr   r  Nr  )Nr   )NNr  r   )r   r   r   r4   rZ  r   r   r6   r7   r]  r~  r\  r  r  rz  r}  	Exceptionr  r   r   r   r\  r\    s    	 FDEOc O3 OS O
<c <3 <S <QS Q3 Q Q3 Q]` Qlo Q ,2 ( (S ( +1 ( (C (  's ''s 'gy gr   r\  c                   <    e Zd ZdZddZ	  G d de      Zd Zd Zy)	Addzp
    1 function:
        Add()           |           allow you to add a text to another, and even center it
    c                 j   |rPt        | j                               }t        |j                               }||kD  r	||z
  dz  }n||kD  r	||z
  dz  }nd}|t        t        | j                               t        |j                                     kD  r:t        t        | j                               t        |j                                     }| j                         }|j                         }t        |      }t        |      }	t        j	                  |      }
t        j                  ||
      }d}d}d}t        |      D ].  }||	k\  r||   }d}|dz  }nd|
z  }||   }|dz  }||z   |z   dz   }0 ||k  s||	k  r<||k  r||   nd|
z  }||	k  r||   nd}||z   |z   dz   }|dz  }|dz  }||k  r6||	k  r<|S )Nr   r   r   r   r  r   )rn   r  rV  r  _length_editr   )banner1banner2r   rZ  split1split2ban1ban2	ban1count	ban2countr   ban1lineban2linerO   r   ban1databan2datas                    r   r  zAdd.Add@  s   ++-.F++-.F 6/a/& 6/a/CG..013w7I7I7K3LMMW//12C8J8J8L4MNF!!#!!#I	I	{{4 yyt$v 	5AI%>A :>A(?X-4D	5 "h&:)1I)=tH~3:H)1I)=tH~2H(?X-4DMHMH "h&: r   c                   $     e Zd Zdef fdZ xZS )Add.MaximumSpacesr   c                 ,    t         |   d| d       y )NzToo much spaces [z].r  )r  r   r  s     r   r  zAdd.MaximumSpaces.__init__y  s    G0;<r   )r   r   r   r6   r  r  r  s   @r   MaximumSpacesr  x  s    	=3 	= 	=r   r  c                 L    d}| D ]  }t        |      |kD  st        |      } |S )Nr   r@  )r  
bigestlinerH  s      r   r  zAdd._length|  s3    
 	'D4y:% Y
	' r   c                 P    | D cg c]  }||t        |      z
  dz  z    c}S c c}w r  r@  )r  r   rH  s      r   r  z	Add._edit  s)    <@ADs4y(C//AAAs   #N)r   F)	r   r   r   r4   r  r  r  r  r  r   r   r   r  r  9  s)    
4l  =	 =Br   r  c                       e Zd ZdZdededededededed	ed
edefdZdedefdZdedefdZdej                  ddfdedefdZ
ddedededefdZy)Bannera  
    2 functions:
        SimpleCube()                  |             create a simple cube with the given text
        Lines()                       |             create a text framed by two lines
        Arrow()                       |             create a custom arrow
    r   up_leftup_right	down_left
down_right	left_lineup_line
right_line	down_linerP   c	           
      0   d}	| j                         }
|
D ]  }t        |      |	kD  st        |      }	 |	dz  dk(  r|	dz  }	|||	z  z   |z   dz   }|
D ]1  }||dz   |z   dt        |	t        |      z
        z  z   dz   |z   dz   z  }3 ||||	z  z   |z   dz   z  }|S )Nr   r   r   r   r  r  rn   r7   )r   r  r  r  r  r  r  r  r  lr  rN  boxrH  s                 r   Boxz
Banner.Box  s    ""$ 	A1vzF	 q5A:FA1%047 	cD9s?T)S3CI3G-GH3NQ[[^bbbC	cyIM*Z7$>>
r   c           
      j   d}| j                         }|D ]  }t        |      |kD  st        |      } |dz  dk(  r|dz  }dd|z  z   dz   }|ddt        |dz        z  z   dt        |dz        z  z   d	z   z  }|D ](  }|d|z   dt        |t        |      z
        z  z   d	z   z  }* |d
d|z  z   dz   z  }|S )Nr   r   r   __r   z__
z| r  z |
z|_z_|
r  )r   r  r  rN  r  rH  s         r   
SimpleCubezBanner.SimpleCube  s    ""$ 	A1vzF	 q5A:FAcAg'tsSQZ'(C#a!e*,<=FF 	GD4$;#QT](<"<=FFC	GtsQw&((
r   c                 <    t         j                  | dddddddd	      S )Nu   ╔═u   ═╗u   ╚═u   ═╝u   ║   ═)r  )r   s    r   
DoubleCubezBanner.DoubleCube  s#    www(HhuV[]bccr   Nr  u   ቐc                 H   d}| j                         D ]  }t        |      |kD  st        |      } |t        j                  nd } |d||z   |dz   ||z   d|      }|dz   | z   dz   |z   }d}	|j                         D ]  }
|	t        j                  |
      dz   z  }	 |	S )Nr   c                      | d   S )NrO   r   )kws    r   rO  zBanner.Lines.<locals>.<lambda>  s
    2f: r   u   ─r   )rO   rd   r   r   )r  rn   r   r  r\  r]  )r   rd   r)  rH  pepiter  cr  assemblyr   r  s              r   LineszBanner.Lines  s    ##% 	A1vzF	 ',&7x"">UCQx
|DF83?O:'$.4((* 	2EV^^E*T11E	2r   rw  r   numberc                    d|dz   z  }d}|dz   |dz  |dz  gf}d}|dk(  rt        |d   d         D ]0  }|d   | z  }	|d|z  |j                  |	g|z        z   dz   z  }|dz  }2 t        |d   d   dz         D ]0  }|d   | z  }	|d|z  |j                  |	g|z        z   dz   z  }|dz  }2 |S |dk(  rt        |d   d         D ]  }|dz  }	 t        |d   d         D ]0  }|d   | z  }	|d|z  |j                  |	g|z        z   dz   z  }|dz  }2 t        |d   d   dz         D ]0  }|d   | z  }	|d|z  |j                  |	g|z        z   dz   z  }|dz  }2 |S )	Nr  r   r   r   r   r   r   r   )r   r  )
rw  r   r  	directionr   _arrow	structurerI  r_  rH  s
             r   ArrowzBanner.Arrow  s   q!AXq$(34	9Q<?+ !!t+3;&++tf6G*HH4OO

 9Q<?Q./ !!t+3;&++tf6G*HH4OO
"  & 9Q<?+ 
 9Q<?+ !!t+3;&++tf6G*HH4OO

 9Q<?Q./ !!t+3;&++tf6G*HH4OO
 r   )rN  r   r   r   )r   r   r   r4   r6   r  r  r  r   r  r  r7   r  r   r   r   r  r    s    S 3 # # SV cf qt   CF   SV   [^  C C  dC dC d %)1D1DU]b s gj C S c WZ r   r  N)%osr   r5   r   r!   r   rT  r   sysr   r>   r9  r   r  	threadingr	   r6  ctypesr   r   r   r   r   r   r   r9   rM   r~   r   r   r.  rg  r\  r  r  r  r"   r   r   r   <module>r     s    d c !   ' 	D=>>)i )
   D@ @@7I 7Irb! b!J U UpN Nb6 6rXg XgtLB LB^U Up  r   