Ë
    oj  ã                   óê   — d Z ddlZddlmZ  e«       Z G d„ d«      Z G d„ d«      Zdj                   edj                  ej                  «      «      Z
i Zej                  D ]  ZeD ]  Zeee<   Œ	 Œ [y)	zGModule to parse ANSI escape sequences

Maintainer: Jean-Paul Calderone
é    N)ÚLoggerc                   ój   — e Zd ZdZdZ ed„ eD «       «      Z e ee«      «      \  Z	Z
ZZZZZZdZd„ Zy)Ú	ColorTextzb
    Represents an element of text along with the texts colors and
    additional attributes.
    )ÚbÚrÚgÚyÚlÚmÚcÚwc              #   ó<   K  — | ]  }|j                  «       –— Œ y ­w©N)Úupper)Ú.0Úxs     ú7/usr/lib/python3/dist-packages/twisted/conch/ui/ansi.pyú	<genexpr>zColorText.<genexpr>   s   è ø€ Ò2 a˜Ÿ™Ÿ	Ñ2ùs   ‚)ÚBlackÚRedÚGreenÚYellowÚBlueÚMagentaÚCyanÚWhitec	                 óÖ   — |||c| _         | _        | _        || _        || _        || _        || _        || _        | j                  r$| j                  | j                  c| _        | _        y y r   )ÚtextÚfgÚbgÚdisplayÚboldÚ	underlineÚflashÚreverse)	Úselfr   r   r    r!   r"   r#   r$   r%   s	            r   Ú__init__zColorText.__init__)   s_   € Ø&*¨B°Ð#ˆŒ	�4”7˜DœGØˆŒØˆŒ	Ø"ˆŒØˆŒ
ØˆŒØ�<Š<Ø#Ÿw™w¨¯©ÐˆDŒG�T•Wð ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCOLORSÚtupleÚBOLD_COLORSÚrangeÚlenÚBLACKÚREDÚGREENÚYELLOWÚBLUEÚMAGENTAÚCYANÚWHITEÚCOLOR_NAMESr'   © r(   r   r   r      sI   „ ñð 6€FÙÑ2¨6Ô2Ó2€KÙ<AÁ#ÀfÃ+Ó<NÑ9€Eˆ3��v˜t W¨d°Eð	€Kó0r(   r   c                   ó€   — e Zd ZdZdZdZdZdZdZeeeeefZ	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zej$                  fd„Zd„ Zy)Ú
AnsiParserz&
    Parser class for ANSI codes.
    )ÚHÚfÚAÚBÚCÚDÚRÚsÚuÚdÚG)ÚJÚKÚP)Úhr
   )Úp)r   c                 óº   — ||c| _         | _        | j                   | j                  c| _        | _        d\  | _        | _        | _        | _        d| _        d| _	        y )N©r   r   r   r   é   Ú )
Ú	defaultFGÚ	defaultBGÚ	currentFGÚ	currentBGr"   r$   r#   r%   r!   Úprepend)r&   rR   rS   s      r   r'   zAnsiParser.__init__J   sN   € Ø)2°IÐ&ˆŒ˜œØ)-¯©¸¿¹Ð&ˆŒ˜œØ>HÑ;ˆŒ	�4”:˜tœ~¨t¬|ØˆŒØˆ�r(   c                 óÊ   — d}d}d}t        |«      }||k  rL|dk(  r||   t        v rd}n.|r, |j                  d|«      }|dk(  r|||d z   S |||| z   }|}d}|dz   }||k  rŒL|S )zF
        Remove all ANSI color escapes from the given string.
        rQ   rP   r   úéÿÿÿÿN)r1   Ú_setsÚfind)r&   ÚstringÚresultÚshowÚiÚLÚns          r   ÚstripEscapeszAnsiParser.stripEscapesQ   sš   € ð ˆØˆØˆÜ�‹KˆØ�!ŠeØ�qŠy˜V A™Y¬%Ñ/Ø‘ÙØ�F—K‘K ¨Ó*�Ø˜’7Ø! F¨1¨2 JÑ.Ð.à# f¨Q¨q kÑ1�FØ�AØ�DØ�A‘ˆAð �!‹eð ˆr(   c                  ó   — y r   r;   )r&   Úcolorstrs     r   ÚwriteStringzAnsiParser.writeStringg   ó   € Ør(   c                 óž  — | j                   r| j                   |z   }d| _         |j                  d«      }t        |«      dk(  r$| j                  | j	                  |d   «      «       y| j                  | j	                  |d   «      «       |dd D �]<  }t        |«      }d}d}||k  r$||   t
        j                  dz   vrn|dz  }||k  rŒ$|s	d| _          y|d   dk7  r'| j                  | j	                  ||dz   d «      «       Œv|dd }|dz  }||dz
  k(  r	d| _          yt        j                  ||   d«      }|€Œ­|t        j                  k(  rA| j                  |d|dz    «       ||dz   d }| j                  | j	                  |«      «       �Œ|t        j                  k(  rC|d|dz    ||dz   d }}| j                  |«       | j                  | j	                  |«      «       �ŒW|t        j                  k(  rC|d|dz    ||dz   d }}| j                  |«       | j                  | j	                  |«      «       �Œ­|t        j                   k(  r*||dz   d }| j                  | j	                  |«      «       �Œê||k(  rd|z   | _         �Œût"        j%                  d	||   ¬
«       ||dz   d }| j                  | j	                  |«      «       �Œ? y)zK
        Turn a string input into a list of L{ColorText} elements.
        rQ   rX   rP   r   Nz[;?ú[z[z+Unhandled ANSI control type: {control_type})Úcontrol_type)rV   Úsplitr1   re   Ú
formatTextr\   ÚdigitsÚ_setmapÚgetr=   Ú	COLOR_SETÚ
parseColorÚ
CURSOR_SETÚparseCursorÚ	ERASE_SETÚ
parseEraseÚMODE_SETÚ_logÚwarn)	r&   ÚstrÚpartsrE   r`   r_   ÚtypeÚcursorÚerases	            r   ÚparseStringzAnsiParser.parseStringj   s¿  € ð
 �<Š<Ø—,‘, Ñ$ˆCØˆDŒLØ—	‘	˜&Ó!ˆäˆu‹:˜Š?Ø×Ñ˜TŸ_™_¨U°1©XÓ6Õ7à×Ñ˜TŸ_™_¨U°1©XÓ6Ô7Ø˜1˜2�Yó /9�Ü˜“F�Ø�Ø�Ø˜!’eØ˜‘t¤6§=¡=°5Ñ#8Ñ8ØØ˜‘F�Að ˜!“eñ Ø#)�D”LÙØ�Q‘4˜3’;Ø×$Ñ$ T§_¡_°Q°q¸1±u°w°ZÓ%@ÔAØà˜!˜"˜�AØ˜‘F�AØ˜˜A™’:Ø#*�D”LÙÜ—{‘{ 1 Q¡4¨Ó.�Ø�<Øàœ:×/Ñ/Ò/Ø—O‘O A g¨¨A© JÔ/Ø˜!˜a™%˜'˜
�AØ×$Ñ$ T§_¡_°QÓ%7Ö8ØœZ×2Ñ2Ò2Ø ! ' A¨¡E 
¨A¨a°!©e¨g¨J˜A�FØ×$Ñ$ VÔ,Ø×$Ñ$ T§_¡_°QÓ%7Ö8ØœZ×1Ñ1Ò1Ø   1 q¡5˜z¨1¨Q°©U¨W¨:˜1�EØ—O‘O EÔ*Ø×$Ñ$ T§_¡_°QÓ%7Ö8ØœZ×0Ñ0Ò0Ø˜!˜a™%˜'˜
�Aà×$Ñ$ T§_¡_°QÓ%7Ö8Ø˜!’VØ#*¨Q¡;�D–Lä—I‘IØEÐTUÐVWÑTXð ô ð ˜!˜a™%˜'˜
�AØ×$Ñ$ T§_¡_°QÓ%7Ö8ñ_/9r(   c                 óŠ  — |dd }|sd}	 t        t        |j                  d«      «      }|D �]K  }|dk(  rF| j                  | j                  c| _        | _	        d\  | _
        | _        | _        | _        d	| _        ŒO|d	k(  rd	| _
        Œ\d
|cxk  rdk  rn n|d
z
  | _        Œud|cxk  rdk  rn n|dz
  | _	        ŒŽ|dk(  r| j                  | _        Œ¥|dk(  r| j                  | _	        Œ¼|dk(  rd	| _        ŒÉ|dk(  rd	| _        ŒÖ|dk(  rd	| _        Œã|dk(  rd| _        Œð|dk(  rd| _
        Œý|dk(  r	d| _        �Œ|dk(  r	d| _        �Œ|dk(  r	d| _        �Œ'|dk(  r	d	| _        �Œ5t        j                  d|¬«       �ŒN y# t        $ r= t        j                  d|¬«       | j                  | j                  c| _        | _	        Y yw xY w)z5
        Handle a single ANSI color sequence
        NrY   Ú0ú;z)Invalid ANSI color sequence: {sequence!r})Úsequencer   rO   rP   é   é%   é(   é/   é'   é1   é   é   é   é   é   é   é   é   é   z*Unrecognised ANSI color command: {command})Úcommand)ÚmapÚintrj   Ú
ValueErrorrv   ÚerrorrR   rS   rT   rU   r"   r$   r#   r%   r!   Úblink)r&   rx   ry   r   s       r   rp   zAnsiParser.parseColor©   s«  € ð
 �#�2ˆhˆáØˆCð	Üœ˜SŸY™Y s›^Ó,ˆEð ó "	TˆAØ�AŠvØ15·±ÀÇÁÐ.�” ¤ØFPÑC�”	˜4œ: t¤~°t´|Ø �•Ø�a’Ø�•	Ø�q”˜B•Ø!" R¡�•Ø�q”˜B•Ø!" R¡�•Ø�b’Ø!%§¡�•Ø�b’Ø!%§¡�•Ø�a’Ø!"�•Ø�a’Ø�•
Ø�a’Ø �•Ø�a’Ø �•Ø�b’Ø�•	Ø�b’Ø!"�–Ø�b’Ø�–
Ø�b’Ø �–Ø�b’Ø �–ä—
‘
ÐGÐQR�
ÖSñE"	Tøô ò 	Ü�J‰JÐBÈSˆJÔQØ-1¯^©^¸T¿^¹^Ð*ˆDŒN˜DœNÙð	ús   ‹E< Å<AGÇGc                  ó   — y r   r;   )r&   r{   s     r   rr   zAnsiParser.parseCursorÞ   rf   r(   c                  ó   — y r   r;   )r&   r|   s     r   rt   zAnsiParser.parseEraseá   rf   r(   c                 ó|   — |rt         j                  |   S | j                  xr ||   xs t         j                  |   S r   )r   r-   r"   )r&   ÚvalueÚmodeÚBOLDs       r   Ú	pickColorzAnsiParser.pickColorä   s9   € ÙÜ×#Ñ# EÑ*Ð*à—9‘9Ò,  e¡ÒG´	×0@Ñ0@ÀÑ0GÐGr(   c           
      óò   — t        || j                  | j                  d«      | j                  | j                  d«      | j                  | j
                  | j                  | j                  | j                  «      S )Nr   rP   )	r   r�   rT   rU   r!   r"   r#   r$   r%   )r&   r   s     r   rk   zAnsiParser.formatTextê   sY   € ÜØØ�N‰N˜4Ÿ>™>¨1Ó-Ø�N‰N˜4Ÿ>™>¨1Ó-Ø�L‰LØ�I‰IØ�N‰NØ�J‰JØ�L‰Ló	
ð 		
r(   N)r)   r*   r+   r,   rq   rs   ru   Ú
ASSIGN_SETro   ÚSETSr'   rb   re   r}   rp   rr   rt   r   r/   r�   rk   r;   r(   r   r=   r=   4   sw   „ ñð
 I€Jð  €Ið €Hð €Jð €Ià˜	 8¨Z¸ÐC€Dòòò,ò=9ò~3Tòjòð +4×*?Ñ*?ó Hó

r(   r=   rQ   )r,   r\   Útwisted.loggerr   rv   r   r=   Újoinr’   r    rZ   rm   rE   r   r;   r(   r   ú<module>r£      s‡   ðñ
ó
 õ "áƒx€÷0ñ 0÷D@
ñ @
ðF 	�‰‘�B—G‘G˜ZŸ_™_Ó-Ó.€à
€Ø	�‰ò €AØò ˆØˆ�Š
ñðñ r(   