Ë
    ^ãj3  ã                  ó  — 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d„Zy)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!y )!Ú_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© ó    úS/var/www/html/metafoliadorv2/venv/lib/python3.12/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Ø�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<   y)Ú	_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ˆDÓØ€IˆtÓØ€Eˆ4ÓØ€K�ÓØ€GˆTÓØ€FˆDÓØ€M�4ÓØ"Ð�dÓ"Ø)-€JÐ&Ó-Ø)-€JÐ&Ô-rK   rN   c                óV  — | j                   xsœ | j                  xsŽ | j                  xs€ | j                  xsr | j                  xsd | j
                  xsV | j                  xsH | j                  xs: | j                  xs, | j                  xs | j                  duxs | 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\   )Ústates    rL   Ú_sgr_state_is_activer`   o   sµ   € ð �J‰Jò L˜%Ÿ)™)ò L u§|¡|ò L°u·±ò LØ�{‰{òLØ#×/Ñ/òLØ38·=±=òLØDIÇLÁLòLà×"Ñ"òLà&+×&<Ñ&<òLð ×Ñ tÐ+òLð 05×/?Ñ/?ÀtÐ/KðMrK   c                óŽ   — t        | «      dkD  r | d   dk(  rdj                  d„ | D «       «      S dj                  d„ | D «       «      S )aÃ  
    Join color parameters, preserving the ITU T.416 colon form where it was used.

    ``38:2:<colour space id>:R:G:B`` carries a colour space element that the legacy
    ``38;2;R;G;B`` form has no slot for, so joining it with ``;`` would shift R, G and B
    one position and leave a trailing parameter.

    :param color: Color parameters as parsed by :func:`_parse_sgr_params`.
    :returns: Parameter string for embedding in an SGR sequence.
    r   r   r   ú:c              3  ó2   K  — | ]  }t        |«      –— Œ y ­w©N©Ústr©Ú.0Úps     rL   ú	<genexpr>z'_color_params_to_str.<locals>.<genexpr>ˆ   s   è ø€ Ò. 1œ˜AŸÑ.ùó   ‚ú;c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrd   re   rg   s     rL   rj   z'_color_params_to_str.<locals>.<genexpr>‰   s   è ø€ Ò*˜q”C˜—FÑ*ùrk   )ÚlenÚjoin)Úcolors    rL   Ú_color_params_to_strrq   |   sC   € ô ˆ5ƒz�A‚~˜% ™( aš-Ø�x‰xÑ.¨Ô.Ó.Ð.Ø�8‰8Ñ* EÔ*Ó*Ð*rK   c                óF  — t        | «      sy| 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 ��cg c]
  \  }}|sŒ	|‘Œ }}}| j                  �$|j                  t        | j                  «      «       | j                  �$|j                  t        | j                  «      «       ddj                  |«      › d�S c c}}w )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Ú21z[rl   Úm)r`   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r[   Úappendrq   r\   ro   )r_   Ú
bool_attrsÚactiveÚcodeÚparamss        rL   Ú_sgr_state_to_sequencer„   Œ   s  € ô   Ô&Øð 
�‰�SÐ˜EŸI™I sÐ+¨e¯l©l¸CÐ-@Ø	�‰˜#Ð §¡¨cÐ 2°U×5FÑ5FÈÐ4LØ	�‰˜Ð˜uŸ|™|¨SÐ1°E×4GÑ4GÈÐ3MØ	×	Ñ	 Ð&ð	€Jð (2×<‘|�v˜t²VŠdÐ<€FÑ<ð ×ÑÐ#Ø�‰Ô*¨5×+;Ñ+;Ó<Ô=Ø×ÑÐ#Ø�‰Ô*¨5×+;Ñ+;Ó<Ô=à�3—8‘8˜FÓ#Ð$ AÐ&Ð&ùó =s   Â
DÂ!Dc                ón  — t         j                  | «      }|sg S |j                  d«      }|sdgS g }|j                  d«      D ]j  }d|v rF|j                  d«      D �cg c]  }|rt	        |«      nd‘Œ }}|j                  t        |«      «       ŒM|j                  |rt	        |«      nd«       Œl |S c c}w )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   rl   rb   )Ú_SGR_PATTERNÚmatchÚgroupÚsplitÚintr   Útuple)Úsequencer‡   Ú
params_strÚresultÚparamri   Úpartss          rL   Ú_parse_sgr_paramsr‘   ¨   s³   € ô ×Ñ˜xÓ(€EÙØˆ	Ø—‘˜Q“€JÙØˆsˆ
Ø*,€FØ×!Ñ! #Ó&ò 6ˆØ�%‰<ð 27·±¸SÓ1AÖB¨A™q”S˜”V aÑ'ÐBˆEÐBØ�M‰Mœ% ›,Õ'à�M‰M©œ#˜eœ*°1Õ5ð6ð €Mùò	 Cs   ÁB2c                óŠ  — 	 t        | «      }t        |t        «      ry|dk(  r*t        | «      }t        |t        «      ryt        |«      d|fS |dk(  rbt        | «      t        | «      t        | «      }}}t        |t        «      s t        |t        «      st        |t        «      ryt        |«      d|||fS 	 y# t        $ r Y yw xY w)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ƒ   ÚbaseÚmodeÚnÚrÚgÚbs          rL   Ú_parse_extended_colorrœ   Æ   sÀ   € ðÜ�F‹|ˆÜ�dœEÔ"ØØ�1Š9Ü�V“ˆAÜ˜!œUÔ#ØÜ˜“I˜q !Ð$Ð$Ø�1Š9Ü˜6“l¤D¨£L´$°v³,�!ˆqˆAÜ˜!œUÔ#¤z°!´UÔ';¼zÈ!ÌUÔ?SØÜ˜“I˜q ! Q¨Ð*Ð*ð	 ð øô ò ØØðús(   ‚B6 ž B6 ¿B6 ÁAB6 Â$B6 Â6	CÃCc                óô	  — t        |«      }t        |«      }|D �]Û  }t        |t        «      rnt	        |«      dk\  r)|d   t
        j                  k(  r| j                  |¬«      } n6t	        |«      dk\  r(|d   t
        j                  k(  r| j                  |¬«      } Œ‚|t
        j                  k(  rt        } Œœ|t
        j                  k(  r| j                  d¬«      } ŒÂ|t
        j                  k(  r| j                  d¬«      } Œè|t
        j                  k(  r| j                  d¬«      } �Œ|t
        j                  k(  r| j                  d¬	«      } �Œ6|t
        j                  k(  r| j                  d¬
«      } �Œ]|t
        j                   k(  r| j                  d¬«      } �Œ„|t
        j"                  k(  r| j                  d¬«      } �Œ«|t
        j$                  k(  r| j                  d¬«      } �ŒÒ|t
        j&                  k(  r| j                  d¬«      } �Œù|t
        j(                  k(  r| j                  d¬«      } �Œ |t
        j*                  k(  r| j                  dd¬«      } �ŒH|t
        j,                  k(  r| j                  d¬«      } �Œo|t
        j.                  k(  r| j                  dd¬«      } �Œ—|t
        j0                  k(  r| j                  dd¬«      } �Œ¿|t
        j2                  k(  r| j                  d¬«      } �Œæ|t
        j4                  k(  r| j                  d¬«      } �Œ|t
        j6                  k(  r| j                  d¬«      } �Œ4t
        j8                  |cxk  rt
        j:                  k  s,n t
        j<                  |cxk  rt
        j>                  k  rn n| j                  |f¬«      } �Œœt
        j@                  |cxk  rt
        jB                  k  s,n t
        jD                  |cxk  rt
        jF                  k  rn n| j                  |f¬«      } �Œ|t
        jH                  k(  r| j                  d¬«      } �Œ+|t
        jJ                  k(  r| j                  d¬«      } �ŒR|t
        j                  k(  r2tM        |t
        j                  «      x}s�Œƒ| j                  |¬«      } �Œ—|t
        j                  k(  s�Œ¬tM        |t
        j                  «      x}s�ŒÊ| j                  |¬«      } �ŒÞ | 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‹   rn   r
   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ƒ   ri   rp   s         rL   Ú_sgr_state_updater¢   ã   s¸  € ô $ HÓ-€KÜ�+Ó€FØó A9ˆä�aœÔÜ�1‹v˜Š{˜q ™t¤t×'7Ñ'7Ò7àŸ™°!˜Ó4‘Ü�Q“˜1’  1¡¬×)9Ñ)9Ò!9àŸ™°!˜Ó4�ØØ”—
‘
Š?Ü&‰Eà”$—)‘)Š^Ø—N‘N¨�NÓ-‰EØ”$—(‘(Š]Ø—N‘N t�NÓ,‰EØ”$—+‘+ÒØ—N‘N¨$�NÓ/ŠEØ”$—.‘.Ò Ø—N‘N¨T�NÓ2ŠEØ”$—*‘*Š_Ø—N‘N¨�NÓ.ŠEØ”$×"Ñ"Ò"Ø—N‘N¨t�NÓ4ŠEØ”$—,‘,ÒØ—N‘N¨4�NÓ0ŠEØ”$—+‘+ÒØ—N‘N¨$�NÓ/ŠEØ”$×$Ñ$Ò$Ø—N‘N°�NÓ6ŠEØ”$×'Ñ'Ò'Ø—N‘N°D�NÓ9ŠEà”$×#Ñ#Ò#Ø—N‘N¨°5�NÓ9ŠEØ”$—/‘/Ò!Ø—N‘N¨%�NÓ0ŠEØ”$×$Ñ$Ò$Ø—N‘N¨UÀU�NÓKŠEØ”$—.‘.Ò Ø—N‘N¨¸E�NÓBŠEØ”$×"Ñ"Ò"Ø—N‘N¨5�NÓ1ŠEØ”$—/‘/Ò!Ø—N‘N¨%�NÓ0ŠEØ”$×(Ñ(Ò(Ø—N‘N°�NÓ7ŠEä�m‰m˜qÔ1¤D§M¡MÔ1Ü×%Ñ%¨ÔB¬d×.BÑ.BÕBØ—N‘N¨q¨d�NÓ3ŠEÜ�m‰m˜qÔ1¤D§M¡MÔ1Ü×%Ñ%¨ÔB¬d×.BÑ.BÕBØ—N‘N¨q¨d�NÓ3ŠEØ”$—/‘/Ò!Ø—N‘N¨d�NÓ3ŠEØ”$—/‘/Ò!Ø—N‘N¨d�NÓ3ŠEà”$×"Ñ"Ò"Ü-¨f´d×6FÑ6FÓGÐGˆuÒGØŸ™°%˜Ó8’Ø”$×"Ñ"Ô"Ü-¨f´d×6FÑ6FÓGÐGˆuÒGØŸ™°%˜Ó8’ðCA9ðD €LrK   c                ó<  — t        d„ | D «       «      r| st        | «      S g }t        }| D ]o  }t        |«      }t        j                  |«      D ]  }t        ||j                  «       «      }Œ |r||z   n|}t        |«      r	|t        z   }|j                  |«       Œq |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  óF   K  — | ]  }t         j                  |«      –— Œ y ­wrd   )Ú_SGR_QUICK_CHECKÚsearch)rh   Úlines     rL   rj   z propagate_sgr.<locals>.<genexpr>N  s   è ø€ Ò?°Ô×&Ñ& t×,Ñ?ùs   ‚!)ÚanyÚlistr    r„   r†   Úfinditerr¢   rˆ   r`   Ú
_SGR_RESETr   )ÚlinesrŽ   r_   r§   Úprefixr‡   Úoutput_lines          rL   Úpropagate_sgrr¯   4  s£   € ô4 Ñ?¸Ô?Ô?ÁuÜ�E‹{Ðà€FÜ€Eàò #ˆä'¨Ó.ˆô "×*Ñ*¨4Ó0ò 	<ˆEÜ% e¨U¯[©[«]Ó;‰Eð	<ñ (.�f˜t’m°4ˆÜ Ô&Ø%¬
Ñ2ˆKà�‰�kÕ"ð#ð €MrK   )r_   rN   ÚreturnrO   )rp   ztuple[int, ...]r°   rf   )r_   rN   r°   rf   )rŒ   rf   r°   zlist[int | tuple[int, ...]])rƒ   zIterator[int | tuple[int, ...]]r–   rŠ   r°   rZ   )r_   rN   rŒ   rf   r°   rN   )r¬   zSequence[str]r°   z	list[str])r+   Ú
__future__r   ÚreÚenumr   Útypingr   r   r   r   r
   Úcompiler†   r¥   r«   rN   r    r`   rq   r„   r‘   rœ   r¢   r¯   rJ   rK   rL   ú<module>r¶      s³   ðñõ #ó 
Ý ç 6Ñ 6áÝô&ˆ7ô &ðZ ˆr�z‰zÐ-Ó.€ð �2—:‘:Ð/Ó0Ð ð €
ô.�
ô .ñB “[Ð ó
Mó+ó 'ó8ð<Ø+ðØ36ðàóó:Nôb/rK   