î
_ó¤Wƒ  ã               @   sÁ   d  Z  d d l Z d d l Z d d l Z i d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d d! 6d" d# 6Z Gd$ d% „  d% e ƒ Z d S)&z
Style module
é    NZ00ZwhiteZ01ZblackZ02ÚblueZ03ZgreenZ04ÚredZ05ZbrownZ06ZpurpleZ07ZorangeZ08ZyellowZ09ZlimeZ10ZtealZ11ÚcyanZ12ZlblueZ13ZpinkZ14ZgreyZgrayZ15Z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 d „ ƒ Z
 d d „  Z d d „  Z d d „  Z d d „  Z ‡  f d d †  Z ‡  S)ÚStylerz
 A styler c             C   s   t  j d d d „  | ƒ d S)Nz\S+c             S   s   d d t  |  j d ƒ ƒ S)Nz%sú r   )ÚlenÚgroup)Úm© r
   ú/opt/Infobot/utils/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 j  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 j  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   s1   | r d t  | t  | |  f Sd t  | |  f S)Nz	%s,%s%sz%s%s)Úcolors)r   ÚcolorZ
backgroundr
   r
   r   r   4   s    zStyler.colorc             C   sª  | j  d ƒ } d } d | k r@ | j d d ƒ d } d } n  t j d | ƒ } t j d d | ƒ } d j t | ƒ ƒ } t j d d | ƒ } | r¢d d	 „  | Dƒ } d \ } } xu | D]m } | d k rÞ d \ } } q½ d | k ró | } q½ | j d ƒ r| d d
 … } q½ | j d ƒ \ } } q½ W| | k oEd
 k n rSd } nB | d
 k rld | } n) | d
 k r…d | } n d | | f } | | } n  | | 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>Nú,úz,z%s,%séÿÿÿÿ)NN)NN)	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   sO  d | k r. d j  t |  j | j d ƒ ƒ ƒ St j d |  j | ƒ } d } t t d d ƒ ƒ } g  } x“t j d | ƒ D]} t j	 d | ƒ s¢ | j
 | ƒ qz | | k rÍ | | | | <| j
 | ƒ qz | d k r	t | j ƒ  ƒ r	t | ƒ r	| j
 | ƒ qz | j d ƒ rz | d	 d … j d
 ƒ } | d k rYt | ƒ rY| j
 | ƒ qùt | ƒ d	 k r| d | d k r| j
 | ƒ qùt | ƒ d k rùd d „  | Dƒ } d d „  t | | ƒ Dƒ } | j
 d d
 j  | ƒ j d
 ƒ ƒ qùqz qz Wd j  | ƒ } t j d d | ƒ } t j d d | ƒ } t j d d | ƒ } | S)z= Rearrange and rewrite control codes to shorten the message. Ú
z-([\x1d\x02\x1f\x0f\x16]|\x03\d?\d?(,\d\d?)?)+NzFz.([\x1d\x02\x1f\x0f\x16]|\x03\d?\d?(?:,\d\d?)?)r   r"   r   r!   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   	 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?)?)+$)NN)FFFF)r   )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   s\   | j  ƒ  } g  } d d „  } x( | D]  } | j d | ƒ  | f ƒ q% Wd j | ƒ } | S)Nc               S   s   t  j 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   |  j  |  j | ƒ ƒ S)N)r0   r9   )r   r:   r
   r
   r   Úrandom_slowž   s    zStyler.random_slowc                s2   | t  k r" t j |  j d | ƒSt ƒ  j | ƒ S)Nr   )r   Ú	functoolsÚpartialr   ÚsuperÚ__getattribute__)r   Úname)Ú	__class__r
   r   r?   ¡   s    zStyler.__getattribute__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r   r   r   r   r+   r0   r9   r;   r?   r
   r
   )rA   r   r      s   ,.
r   )rE   r   r9   r<   r   Úobjectr   r
   r
   r
   r   Ú<module>   s,   
