§
    ‹Ÿj�0  ã                  ó  — d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 erddlm
Z
  G d„ de¦  «        Z ej        d	¦  «        Z ej        d
¦  «        ZdZ G d„ de	¦  «        Z e¦   «         Zd"d„Zd#d„Zd$d„Zd%d„Zd&d„Zd'd!„ZdS )(as  
SGR (Select Graphic Rendition) state tracking for terminal escape sequences.

This module provides functions for tracking and propagating terminal styling (bold, italic, colors,
etc.) via public API propagate_sgr(), and its dependent functions, cut() and wrap(). It only has
attributes necessary to perform its functions, eg 'RED' and 'BLUE' attributes are not defined.
é    )ÚannotationsN)ÚIntEnum)ÚTYPE_CHECKINGÚIteratorÚ
NamedTuple)ÚSequencec                  óŠ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d S )!Ú_SGRzÆ
    SGR (Select Graphic Rendition) parameter codes.

    References:
    - https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
    - https://github.com/tehmaze/ansi/tree/master/ansi/colour
    r   é   é   é   é   é   é   é   é   é	   é   é   é   é   é   é   é   é   é   é%   é&   é'   é(   é/   é0   é1   éZ   éa   éd   ék   N)"Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRESETÚBOLDÚDIMÚITALICÚ	UNDERLINEÚBLINKÚRAPID_BLINKÚINVERSEÚHIDDENÚSTRIKETHROUGHÚDOUBLE_UNDERLINEÚBOLD_DIM_OFFÚ
ITALIC_OFFÚUNDERLINE_OFFÚ	BLINK_OFFÚINVERSE_OFFÚ
HIDDEN_OFFÚSTRIKETHROUGH_OFFÚFG_BLACKÚFG_WHITEÚFG_EXTENDEDÚ
FG_DEFAULTÚBG_BLACKÚBG_WHITEÚBG_EXTENDEDÚ
BG_DEFAULTÚFG_BRIGHT_BLACKÚFG_BRIGHT_WHITEÚBG_BRIGHT_BLACKÚBG_BRIGHT_WHITE© ó    ú^/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/wcwidth/sgr_state.pyr
   r
      s²   € € € € € ðð ð €EØ€DØ
€CØ€FØ€IØ€EØ€KØ€GØ€FØ€MØÐØ€LØ€JØ€MØ€IØ€KØ€JØÐØ€HØ€HØ€KØ€JØ€HØ€HØ€KØ€JØ€OØ€OØ€OØ€O€O€OrK   r
   z\x1b\[([\d;:]*)mz\x1b\[[\d;:]*mz[0mc                  ó¼   — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   dZ	ded<   dZ
ded	<   dZded
<   dZded<   dZded<   dZded<   dZded<   dZded<   dS )Ú	_SGRStateaú  
    Track active SGR terminal attributes by category (immutable).

    :param bold: Bold attribute (SGR 1).
    :param dim: Dim/faint attribute (SGR 2).
    :param italic: Italic attribute (SGR 3).
    :param underline: Underline attribute (SGR 4).
    :param blink: Slow blink attribute (SGR 5).
    :param rapid_blink: Rapid blink attribute (SGR 6).
    :param inverse: Inverse/reverse attribute (SGR 7).
    :param hidden: Hidden/invisible attribute (SGR 8).
    :param strikethrough: Strikethrough attribute (SGR 9).
    :param double_underline: Double underline attribute (SGR 21).
    :param foreground: Foreground color as tuple of SGR params, or None for default.
    :param background: Background color as tuple of SGR params, or None for default.
    FÚboolÚboldÚdimÚitalicÚ	underlineÚblinkÚrapid_blinkÚinverseÚhiddenÚstrikethroughÚdouble_underlineNútuple[int, ...] | NoneÚ
foregroundÚ
background)r(   r)   r*   r+   rP   Ú__annotations__rQ   rR   rS   rT   rU   rV   rW   rX   rY   r[   r\   rJ   rK   rL   rN   rN   K   së   € € € € € € ðð ð" €DÐÐÐÑØ€CÐÐÐÑØ€FÐÐÐÑØ€IÐÐÐÑØ€EÐÐÐÑØ€KÐÐÐÑØ€GÐÐÐÑØ€FÐÐÐÑØ€MÐÐÐÑØ"ÐÐ"Ð"Ð"Ñ"Ø)-€JÐ-Ð-Ð-Ñ-Ø)-€JÐ-Ð-Ð-Ñ-Ð-Ð-rK   rN   ÚstateÚreturnrO   c                ó²   — | j         pP| j        pI| j        pB| j        p;| j        p4| j        p-| j        p&| j        p| j        p| j	        p| j
        dup| j        duS )z•
    Return True if any attributes are set.

    :param state: The SGR state to check.
    :returns: True if any attribute differs from default.
    N)rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r[   r\   )r^   s    rL   Ú_sgr_state_is_activera   o   s˜   € ð ŒJð L˜%œ)ð L u¤|ð L°u´ð LØŒ{ðLØ#Ô/ðLØ38´=ðLØDIÄLðLàÔ"ðLà&+Ô&<ðLð Ô tÐ+ðLð 05Ô/?ÀtÐ/KðMrK   Ústrc                ó
  — t          | ¦  «        sdS | j        df| j        df| j        df| j        df| j        df| j        df| j        df| j        d	f| j	        d
f| j
        dfg
}d„ |D ¦   «         }| j        �7|                     d                     d„ | j        D ¦   «         ¦  «        ¦  «         | j        �7|                     d                     d„ | j        D ¦   «         ¦  «        ¦  «         dd                     |¦  «        › d�S )zÆ
    Generate minimal SGR sequence to restore this state from reset.

    :param state: The SGR state to convert.
    :returns: SGR escape sequence string, or empty string if no attributes set.
    Ú Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9Ú21c                ó   — g | ]	\  }}|¯|‘Œ
S rJ   rJ   )Ú.0ÚactiveÚcodes      rL   ú
<listcomp>z*_sgr_state_to_sequence.<locals>.<listcomp>�   s!   € Ð<Ð<Ð<‘|�v˜t°VÐ<ˆdÐ<Ð<Ð<rK   Nú;c              3  ó4   K  — | ]}t          |¦  «        V — Œd S ©N©rb   ©rp   Úps     rL   ú	<genexpr>z)_sgr_state_to_sequence.<locals>.<genexpr>‘   ó(   è è € Ð@Ð@¨!�s 1™vœvÐ@Ð@Ð@Ð@Ð@Ð@rK   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rv   rw   rx   s     rL   rz   z)_sgr_state_to_sequence.<locals>.<genexpr>“   r{   rK   z[Úm)ra   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r[   ÚappendÚjoinr\   )r^   Ú
bool_attrsÚparamss      rL   Ú_sgr_state_to_sequencer‚   |   s)  € õ   Ñ&Ô&ð Øˆrð 
Œ�SÐ˜EœI sÐ+¨e¬l¸CÐ-@Ø	Œ˜#Ð ¤¨cÐ 2°UÔ5FÈÐ4LØ	Œ˜Ð˜uœ|¨SÐ1°EÔ4GÈÐ3MØ	Ô	 Ð&ð	€Jð =Ð< zÐ<Ñ<Ô<€Fð ÔÐ#Ø�Š�c—h’hÐ@Ð@¨uÔ/?Ð@Ñ@Ô@Ñ@Ô@ÑAÔAÐAØÔÐ#Ø�Š�c—h’hÐ@Ð@¨uÔ/?Ð@Ñ@Ô@Ñ@Ô@ÑAÔAÐAà&�3—8’8˜FÑ#Ô#Ð&Ð&Ð&Ð&rK   Úsequenceúlist[int | tuple[int, ...]]c                ó‚  — t                                | ¦  «        }|sg S |                     d¦  «        }|sdgS g }|                     d¦  «        D ]n}d|v rBd„ |                     d¦  «        D ¦   «         }|                     t          |¦  «        ¦  «         ŒH|                     |rt          |¦  «        nd¦  «         Œo|S )aº  
    Parse SGR sequence and return list of parameter values.

    Handles compound sequences like ``\x1b[1;31;4m`` -> [1, 31, 4].
    Empty params (e.g., ``\x1b[m``) are treated as [0] (reset).
    Colon-separated extended colors like ``\x1b[38:2::255:0:0m`` are returned
    as tuples: [(38, 2, 255, 0, 0)].

    :param sequence: SGR escape sequence string.
    :returns: List of integer parameters or tuples for colon-separated colors.
    r   r   rt   ú:c                ó4   — g | ]}|rt          |¦  «        nd ‘ŒS )r   )Úintrx   s     rL   rs   z%_parse_sgr_params.<locals>.<listcomp>¯   s'   € ÐBÐBÐB¨A˜qÐ'•S˜‘V”V�V aÐBÐBÐBrK   )Ú_SGR_PATTERNÚmatchÚgroupÚsplitr~   Útuplerˆ   )rƒ   rŠ   Ú
params_strÚresultÚparamÚpartss         rL   Ú_parse_sgr_paramsr’   ˜   sÓ   € õ ×Ò˜xÑ(Ô(€EØð Øˆ	Ø—’˜Q‘”€JØð Øˆsˆ
Ø*,€FØ×!Ò! #Ñ&Ô&ð 6ð 6ˆØ�%ˆ<ˆ<ð CÐB°·²¸SÑ1AÔ1AÐBÑBÔBˆEØ�MŠM�% ™,œ,Ñ'Ô'Ð'Ð'à�MŠM¨Ð4�#˜e™*œ*˜*°1Ñ5Ô5Ð5Ð5Ø€MrK   r�   úIterator[int | tuple[int, ...]]Úbaserˆ   rZ   c                ó  — 	 t          | ¦  «        }t          |t          ¦  «        rdS |dk    r8t          | ¦  «        }t          |t          ¦  «        rdS t          |¦  «        d|fS |dk    r‚t          | ¦  «        t          | ¦  «        t          | ¦  «        }}}t          |t          ¦  «        s*t          |t          ¦  «        st          |t          ¦  «        rdS t          |¦  «        d|||fS n# t          $ r Y nw xY wdS )a9  
    Parse extended color (256-color or RGB) from parameter iterator.

    :param params: Iterator of remaining SGR parameters (semicolon-separated format).
    :param base: Base code (38 for foreground, 48 for background).
    :returns: Color tuple like (38, 5, N) or (38, 2, R, G, B), or None if malformed.
    Nr   r   )ÚnextÚ
isinstancer�   rˆ   ÚStopIteration)r�   r”   ÚmodeÚnÚrÚgÚbs          rL   Ú_parse_extended_colorrž   ¶   s  € ðÝ�F‰|Œ|ˆÝ�d�EÑ"Ô"ð 	Ø�4Ø�1Š9ˆ9Ý�V‘”ˆAÝ˜!�UÑ#Ô#ð Ø�tÝ˜‘I”I˜q !Ð$Ð$Ø�1Š9ˆ9Ý˜6‘l”l¥D¨¡L¤Lµ$°v±,´,�!ˆqˆAÝ˜!�UÑ#Ô#ð ¥z°!µUÑ';Ô';ð ½zÈ!ÍUÑ?SÔ?Sð Ø�tÝ˜‘I”I˜q ! Q¨Ð*Ð*ð	 øõ
 ð ð ð Øˆðøøøàˆ4s)   ‚$C/ ¨*C/ ÁC/ Á&A2C/ ÃC/ Ã/
C<Ã;C<c                ó(
  — t          |¦  «        }t          |¦  «        }|D �]ï}t          |t          ¦  «        r€t	          |¦  «        dk    r-|d         t
          j        k    r|                      |¬¦  «        } n?t	          |¦  «        dk    r,|d         t
          j        k    r|                      |¬¦  «        } Œ˜|t
          j	        k    rt          } Œ°|t
          j        k    r|                      d¬¦  «        } Œ×|t
          j        k    r|                      d¬¦  «        } Œþ|t
          j        k    r|                      d¬¦  «        } �Œ&|t
          j        k    r|                      d¬	¦  «        } �ŒN|t
          j        k    r|                      d¬
¦  «        } �Œv|t
          j        k    r|                      d¬¦  «        } �Œž|t
          j        k    r|                      d¬¦  «        } �ŒÆ|t
          j        k    r|                      d¬¦  «        } �Œî|t
          j        k    r|                      d¬¦  «        } �Œ|t
          j        k    r|                      d¬¦  «        } �Œ>|t
          j        k    r|                      dd¬¦  «        } �Œg|t
          j        k    r|                      d¬¦  «        } �Œ�|t
          j        k    r|                      dd¬¦  «        } �Œ¸|t
          j        k    r|                      dd¬¦  «        } �Œá|t
          j        k    r|                      d¬¦  «        } �Œ	|t
          j        k    r|                      d¬¦  «        } �Œ1|t
          j        k    r|                      d¬¦  «        } �ŒYt
          j        |cxk    rt
          j        k    s&n t
          j        |cxk    rt
          j        k    rn n|                      |f¬¦  «        } �Œ¹t
          j         |cxk    rt
          j!        k    s&n t
          j"        |cxk    rt
          j#        k    rn n|                      |f¬¦  «        } �Œ|t
          j$        k    r|                      d¬¦  «        } �ŒA|t
          j%        k    r|                      d¬¦  «        } �Œi|t
          j        k    r4tM          |t
          j        ¦  «        x}r|                      |¬¦  «        } �Œ­|t
          j        k    r2tM          |t
          j        ¦  «        x}r|                      |¬¦  «        } �Œñ| S )zÏ
    Parse SGR sequence and return new state with updates applied.

    :param state: Current SGR state.
    :param sequence: SGR escape sequence string.
    :returns: New SGRState with updates applied.
    r   r   )r[   )r\   T)rP   )rQ   )rR   )rS   )rT   )rU   )rV   )rW   )rX   )rY   F)rP   rQ   )rS   rY   )rT   rU   N)'r’   Úiterr—   r�   Úlenr
   r@   Ú_replacerD   r,   Ú_SGR_STATE_DEFAULTr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rF   rG   rB   rC   rH   rI   rA   rE   rž   )r^   rƒ   Úparams_listr�   ry   Úcolors         rL   Ú_sgr_state_updater¦   Ó   sŒ  € õ $ HÑ-Ô-€KÝ�+ÑÔ€FØð A9ñ A9ˆå�a�ÑÔð 	Ý�1‰vŒv˜Š{ˆ{˜q œt¥tÔ'7Ò7Ð7àŸš°!˜Ñ4Ô4��Ý�Q‘”˜1’�  1¤­Ô)9Ò!9Ð!9àŸš°!˜Ñ4Ô4�ØØ•”
Š?ˆ?Ý&ˆEˆEà•$”)Š^ˆ^Ø—N’N¨�NÑ-Ô-ˆEˆEØ•$”(Š]ˆ]Ø—N’N t�NÑ,Ô,ˆEˆEØ•$”+ÒÐØ—N’N¨$�NÑ/Ô/ˆE‰EØ•$”.Ò Ð Ø—N’N¨T�NÑ2Ô2ˆE‰EØ•$”*Š_ˆ_Ø—N’N¨�NÑ.Ô.ˆE‰EØ•$Ô"Ò"Ð"Ø—N’N¨t�NÑ4Ô4ˆE‰EØ•$”,ÒÐØ—N’N¨4�NÑ0Ô0ˆE‰EØ•$”+ÒÐØ—N’N¨$�NÑ/Ô/ˆE‰EØ•$Ô$Ò$Ð$Ø—N’N°�NÑ6Ô6ˆE‰EØ•$Ô'Ò'Ð'Ø—N’N°D�NÑ9Ô9ˆE‰Eà•$Ô#Ò#Ð#Ø—N’N¨°5�NÑ9Ô9ˆE‰EØ•$”/Ò!Ð!Ø—N’N¨%�NÑ0Ô0ˆE‰EØ•$Ô$Ò$Ð$Ø—N’N¨UÀU�NÑKÔKˆE‰EØ•$”.Ò Ð Ø—N’N¨¸E�NÑBÔBˆE‰EØ•$Ô"Ò"Ð"Ø—N’N¨5�NÑ1Ô1ˆE‰EØ•$”/Ò!Ð!Ø—N’N¨%�NÑ0Ô0ˆE‰EØ•$Ô(Ò(Ð(Ø—N’N°�NÑ7Ô7ˆE‰EåŒm˜qÐ1Ð1Ò1Ð1¥D¤MÒ1Ð1Ð1Ð1ÝÔ%¨ÐBÐBÒBÐB­dÔ.BÒBÐBÐBÐBÐBØ—N’N¨q¨d�NÑ3Ô3ˆE‰EÝŒm˜qÐ1Ð1Ò1Ð1¥D¤MÒ1Ð1Ð1Ð1ÝÔ%¨ÐBÐBÒBÐB­dÔ.BÒBÐBÐBÐBÐBØ—N’N¨q¨d�NÑ3Ô3ˆE‰EØ•$”/Ò!Ð!Ø—N’N¨d�NÑ3Ô3ˆE‰EØ•$”/Ò!Ð!Ø—N’N¨d�NÑ3Ô3ˆE‰Eà•$Ô"Ò"Ð"Ý-¨fµdÔ6FÑGÔGÐGˆuð 9ØŸš°%˜Ñ8Ô8�ùØ•$Ô"Ò"Ð"Ý-¨fµdÔ6FÑGÔGÐGˆuð 9ØŸš°%˜Ñ8Ô8�ùØ€LrK   ÚlinesúSequence[str]ú	list[str]c                ó€  — t          d„ | D ¦   «         ¦  «        r| st          | ¦  «        S g }t          }| D ]‡}t          |¦  «        }t                               |¦  «        D ]$}t          ||                     ¦   «         ¦  «        }Œ%|r||z   n|}t          |¦  «        r
|t          z   }| 
                    |¦  «         Œˆ|S )a'  
    Propagate SGR codes across wrapped lines.

    When text with SGR styling is wrapped across multiple lines, each line
    needs to be self-contained for proper display. This function:

    - Ends each line with ``\x1b[0m`` if styles are active (prevents bleeding)
    - Starts each subsequent line with the active style restored

    :param lines: List of text lines, possibly containing SGR sequences.
    :returns: List of lines with SGR codes propagated.

    Example::

        >>> propagate_sgr(['\x1b[31mhello', 'world\x1b[0m'])
        ['\x1b[31mhello\x1b[0m', '\x1b[31mworld\x1b[0m']

    This is useful in cases of making special editors and viewers, and is used for the
    default modes (propagate_sgr=True) of :func:`wcwidth.wrap` and :func:`wcwidth.clip`.

    When wrapping and clipping text containing SGR sequences, maybe a previous line enabled the BLUE
    color--if we are viewing *only* the line following, we would want the carry over the BLUE color,
    and all lines with sequences should end with terminating reset (``\x1b[0m``).
    c              3  óJ   K  — | ]}t                                |¦  «        V — Œd S rv   )Ú_SGR_QUICK_CHECKÚsearch)rp   Úlines     rL   rz   z propagate_sgr.<locals>.<genexpr>>  s1   è è € Ð?Ð?°Õ×&Ò& tÑ,Ô,Ð?Ð?Ð?Ð?Ð?Ð?rK   )ÚanyÚlistr£   r‚   r‰   Úfinditerr¦   r‹   ra   Ú
_SGR_RESETr~   )r§   r�   r^   r®   ÚprefixrŠ   Úoutput_lines          rL   Úpropagate_sgrrµ   $  sÜ   € õ4 Ð?Ð?¸Ð?Ñ?Ô?Ñ?Ô?ð Àuð Ý�E‰{Œ{Ðà€FÝ€Eàð #ð #ˆå'¨Ñ.Ô.ˆõ "×*Ò*¨4Ñ0Ô0ð 	<ð 	<ˆEÝ% e¨U¯[ª[©]¬]Ñ;Ô;ˆEˆEð (.Ð7�f˜t‘m�m°4ˆÝ Ñ&Ô&ð 	3Ø%­
Ñ2ˆKà�Š�kÑ"Ô"Ð"Ð"à€MrK   )r^   rN   r_   rO   )r^   rN   r_   rb   )rƒ   rb   r_   r„   )r�   r“   r”   rˆ   r_   rZ   )r^   rN   rƒ   rb   r_   rN   )r§   r¨   r_   r©   )r+   Ú
__future__r   ÚreÚenumr   Útypingr   r   r   r   r
   Úcompiler‰   r¬   r²   rN   r£   ra   r‚   r’   rž   r¦   rµ   rJ   rK   rL   ú<module>r»      s—  ððð ð #Ð "Ð "Ð "Ð "Ð "ð 
€	€	€	Ø Ð Ð Ð Ð Ð à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6àð  ØÐÐÐÐÐð&ð &ð &ð &ð &ˆ7ñ &ô &ð &ðZ ˆrŒzÐ-Ñ.Ô.€ð �2”:Ð/Ñ0Ô0Ð ð €
ð.ð .ð .ð .ð .�
ñ .ô .ð .ðB �Y‘[”[Ð ð
Mð 
Mð 
Mð 
Mð'ð 'ð 'ð 'ð8ð ð ð ð<ð ð ð ð:Nð Nð Nð Nðb/ð /ð /ð /ð /ð /rK   