B
    ÀÔx[ƒ  ã               @   sX   d Z ddlZddlZddlZddddddd	d
ddddddddddœZG dd„ deƒZdS )z
Style module
é    NZ00Z01Z02Z03Z04Z05Z06Z07Z08Z09Z10Z11Z12Z13Z14Z15)ZwhiteZblackÚblueZgreenÚredZbrownZpurpleZorangeZyellowZlimeZtealÚcyanZlblueZpinkZgreyZgrayZsilverc                   sŠ   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	eddd„ƒZ
dd„ Zdd„ Zdd„ Zdd„ Z‡ fdd„Z‡  ZS )ÚStylerz
 A styler c             C   s   t  ddd„ |¡d S )Nz\S+c             S   s   ddt |  d¡ƒ  S )Nz%sú r   )ÚlenÚgroup)Úm© r
   ú$/home/sam/code/Infobot/core/style.pyÚ<lambda>"   s    zStyler.sopa.<locals>.<lambda>z #fightsopa)ÚreÚsub)ÚselfÚstringr
   r
   r   Úsopa    s    zStyler.sopac             C   s   d|  S )Nz%sr
   )r   r
   r
   r   Úbold$   s    zStyler.boldc             C   s   d|  S )Nz%sr
   )r   r
   r
   r   Ú	underline(   s    zStyler.underlinec             C   s   d  dd„ | D ƒ¡S )NÚ c             S   s   g | ]}d | ‘qS )u   Ì…r
   )Ú.0Úxr
   r
   r   ú
<listcomp>.   s    z#Styler.overline.<locals>.<listcomp>)Újoin)Útextr
   r
   r   Úoverline,   s    zStyler.overlinec             C   s   d  dd„ | D ƒ¡S )Nr   c             S   s   g | ]}d | ‘qS )u   Ì¶r
   )r   r   r
   r
   r   r   2   s    z(Styler.strikethrough.<locals>.<listcomp>)r   )r   r
   r
   r   Ústrikethrough0   s    zStyler.strikethroughr   Nc             C   s*   |rdt | t | | f S dt | | f S )Nz	%s,%s%sz%s%s)Úcolors)r   ÚcolorZ
backgroundr
   r
   r   r   4   s    zStyler.colorc             C   s2  |  d¡}d}d|kr*| dd¡d }d}t d|¡}t dd|¡}d t|ƒ¡}t dd|¡}|r*d	d
„ |D ƒ}d\}}xR|D ]J}|dkr˜d\}}q‚d|kr¦|}q‚| d¡r¾|dd… }q‚| d¡\}}q‚W ||  krädkrîn nd}n4|dkrd| }n |dkrd| }nd||f }|| }|| S )z1 Reduce a set of control codes to simplest form. r   r   úé   éÿÿÿÿz\x03\d?\d?(?:,\d\d?)?z(\x03\d?\d?(?:,\d\d?)?)z([\x1d\x02\x1f\x16])\1c             S   s   g | ]}|d d… ‘qS )r   Nr
   )r   Úir
   r
   r   r   N   s    z)Styler.control_reduce.<locals>.<listcomp>)NNú,Núz,z%s,%s)	r   Úrsplitr   Úfindallr   r   ÚsortedÚ
startswithÚsplit)r   ÚdataÚresetr   ZfgZbgr!   r   r
   r
   r   Úcontrol_reduce:   s:    







zStyler.control_reducec             C   s¦  d|kr d  t| j| d¡ƒ¡S t d| j|¡}d}ttddƒƒ}g }x$t d|¡D ]}t 	d|¡st| 
|¡ qV||kr–||  ||< | 
|¡ qV|dkr¾t| ¡ ƒs¾t|ƒs¾| 
|¡ qV| d¡rV|d	d
…  d¡}|dkröt|ƒrö| 
|¡ qVt|ƒd	kr"|d |d kr"| 
|¡ qVt|ƒdkrVdd„ |D ƒ}dd„ t||ƒD ƒ}| 
dd  |¡ d¡ ¡ qVW d  |¡}t dd|¡}t dd|¡}t dd|¡}|S )z= Rearrange and rewrite control codes to shorten the message. Ú
z-([\x1d\x02\x1f\x0f\x16]|\x03\d?\d?(,\d\d?)?)+)NNz)FFFFz.([\x1d\x02\x1f\x0f\x16]|\x03\d?\d?(?:,\d\d?)?)r   r#   r   Nr"   )r   r   é   c             S   s   g | ]}|r|nd ‘qS )Nr
   )r   r!   r
   r
   r   r   ‚   s    z!Styler.minify.<locals>.<listcomp>c             S   s    g | ]\}}||krd n|‘qS )r   r
   )r   r   Úyr
   r
   r   r   ƒ   s    r   z
\x030(\d),z\x03\1,z(\x03(?:\d?\d?,)?)0(\d[^\d])z\1\2z.([\x1d\x02\x1f\x0f\x16]|\x03\d?\d?(,\d\d?)?)+$)r   ÚmapÚminifyr(   r   r   r+   ÚdictÚzipÚmatchÚappendÚanyÚvaluesr'   r   Úrstrip)r   r)   r   ZtogglesZreducedr!   Zcodesr
   r
   r   r0   f   s:    
 
zStyler.minifyc             C   sD   |  ¡ }g }dd„ }x |D ]}| d|ƒ |f ¡ qW d |¡}|S )Nc               S   s   t  dd¡S )Nr   é   )ÚrandomZrandintr
   r
   r
   r   r   —   s    zStyler.random.<locals>.<lambda>z%.2d%sr   )r(   r4   r   )r   ÚmsgZwordsZ
done_wordsZrandZwordr
   r
   r   r9   ”   s    

zStyler.randomc             C   s   |   |  |¡¡S )N)r0   r9   )r   r:   r
   r
   r   Úrandom_slowž   s    zStyler.random_slowc                s$   |t krtj| j|dS tƒ  |¡S )N)r   )r   Ú	functoolsÚpartialr   ÚsuperÚ__getattribute__)r   Úname)Ú	__class__r
   r   r?   ¡   s    zStyler.__getattribute__)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r   r   r   r   r+   r0   r9   r;   r?   Ú__classcell__r
   r
   )rA   r   r      s   ,.
r   )rE   r   r9   r<   r   Úobjectr   r
   r
   r
   r   Ú<module>   s*   