Ë
    äU.j,  ã                  óD  — U d Z ddlmZ ddlZddlZddlmZ  G d„ dej                  «      Z eddd	d¬
«       eddd	d¬
«       edddd¬
«       edddd¬
«       edddd¬
«       edddd¬
«      dœZ	de
d<    G d„ dej                  «      Z G d„ dej                  «      Zy)aV  
`kitty text sizing protocol`_ (OSC 66) parsing and measurement.

The kitty text sizing protocol allows terminal apps to explicitly tell
terminals how many cells text occupies, using the escape sequence::

    ESC ] 66 ; metadata ; text BEL/ST

Metadata is colon-separated ``key=value`` pairs:

- ``s``: scale
- ``w``: width in cells
- ``n``: fractional numerator
- ``d``: fractional denominator
- ``v``: vertical alignment
- ``h``: horizontal alignment

Parsing is pretty straight-forward:

- When ``w > 0``, return ``s * w``.
- Otherwise ``w == 0``, ``s * wcswidth(inner_text_width)`` cells.

Numerator, denominator, and alignment codes and values are parsed but otherwise ignored
and have no effect on measurements made in this library.

.. _`kitty text sizing protocol`: https://sw.kovidgoyal.net/kitty/text-sizing-protocol/

.. versionadded:: 0.7.0
é    )ÚannotationsNé   )Úwcswidthc                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)Ú
_FieldMetaÚstrÚnameÚintÚlowÚhighÚdefaultN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úUC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\wcwidth/text_sizing.pyr   r   *   s   … Ø
ƒIØ	ƒHØ
ƒIØ„Lr   r   Úscaleé   )r	   r   r   r   ÚwidthÚ	numeratoré   ÚdenominatorÚvertical_aligné   Úhorizontal_align)ÚsÚwÚnÚdÚvÚhzdict[str, _FieldMeta]ÚTEXT_FIELD_MAPPINGc                  óŠ   — 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d„Zdd„Zeddd„«       Zy)ÚTextSizingParamsa/  
    Parsed parameters from a text sizing escape sequence (OSC 66).

    :param scale: Scale factor (1-7). Text occupies ``scale`` rows tall and ``scale * width``
        columns wide.
    :param width: Width in cells (0-7). When 0, width is auto-calculated from the inner text.
    :param numerator: Fractional scaling numerator (0-15).
    :param denominator: Fractional scaling denominator (0-15).
    :param vertical_align: Vertical alignment (0=top, 1=bottom, 2=center).
    :param horizontal_align: Horizontal alignment (0=left, 1=right, 2=center).
    r   r
   r   r   r   r   r   r   r   c                ó”   ‡ — dj                  ˆ fd„t        j                  «       D «       «      }‰ j                  j                  › d|› d�S )z—
        Return a compact representation including only non-default fields.

        This avoids verbose output when most fields are defaults.
        z, c              3  ó®   •K  — | ]L  }t        ‰|j                  «      |j                  k7  r'|j                  › d t        ‰|j                  «      › �–— ŒN y­w)Ú=N)Úgetattrr	   r   )Ú.0ÚfieldÚselfs     €r   Ú	<genexpr>z,TextSizingParams.__repr__.<locals>.<genexpr>U   sL   øè ø€ ð LÙ*E Ü '¨¨e¯j©jÓ 9¸U¿]¹]Ò Jð !&§
¡
˜|¨1¬W°T¸5¿:¹:Ó-FÐ,GÔHÙ*Eùs   ƒAAÚ(Ú))Újoinr$   ÚvaluesÚ	__class__r   )r-   Úrepr_fmts   ` r   Ú__repr__zTextSizingParams.__repr__N   sL   ø€ ð —9‘9ó LÜ*<×*CÑ*CÔ*EóLó Lˆð —.‘.×)Ñ)Ð*¨!¨H¨:°QÐ7Ð7r   c                óØ   — g }t         j                  «       D ]A  \  }}t        | |j                  «      x}|j                  k7  sŒ,|j                  |› d|› �«       ŒC dj                  |«      S )z0Build and return sub-part of an OSC 66 sequence.r)   Ú:)r$   Úitemsr*   r	   r   Úappendr1   )r-   ÚpartsÚ	field_keyr,   Úvals        r   Úmake_sequencezTextSizingParams.make_sequenceZ   sb   € àˆä 2× 8Ñ 8Ö :ÑˆI�uÜ˜t U§Z¡ZÓ0Ð0�°U·]±]ÓBØ—‘ 	˜{¨!¨C¨5Ð1Õ2ð !;ð �x‰x˜‹Ðr   c                ó¸  — i }|s | «       S |j                  d«      D �]  }d|vr|dk(  rt        d|›d|›�«      ‚Œ|j                  d«      \  }}}t        j	                  |«      }|€|dk(  rt        d|› d|›�«      ‚Œb	 t        |«      }	|dk(  rY|	|j                  kD  s|	|j                  k  r;t        d|› d|›d|› d|j                  › d|j                  › d|j                  › �«      ‚t        |j                  t        |j                  |	«      «      ||j                  <   �Œ  | di |¤ŽS # t        $ r%}
|dk(  rt        d	|› d|›d
|
› �«      |
‚Y d}
~
�Œ7d}
~
ww xY w)aˆ  
        Parse colon-separated ``key=value`` metadata string.

        :param raw: Metadata string, e.g. ``'s=2:w=3'``.
        :param control_codes: 'parse' or 'strict'.
        :raises ValueError: If ``control_codes='strict'`` unrecognized text sizing parameters raise
            ValueError.
        :returns: Parsed parameters with values clamped to valid ranges.
            Unknown keys are ignored. Non-integer values use defaults.

        Example::

            >>> TextSizingParams.from_params('s=2:w=3')
            TextSizingParams(scale=2, width=3, numerator=0, denominator=0,             vertical_align=0, horizontal_align=0)
        r7   r)   Ústrictz5Expected '=' in text sizing parameter (key=val), got z in OSC 66 sequence, NzUnknown text sizing field 'z' in OSC 66 sequence, zIllegal text sizing value 'z: z!Out of bounds text sizing value 'z: allowed range for 'z' (z) is z to r   )ÚsplitÚ
ValueErrorÚ	partitionr$   Úgetr
   r   r   r	   ÚmaxÚmin)ÚclsÚrawÚcontrol_codesÚkwargsÚpartÚkeyÚ_eqr<   r,   ÚvalueÚexcs              r   Úfrom_paramszTextSizingParams.from_paramsc   s¿  € ð$ )+ˆÙÙ“5ˆLØ—I‘I˜c—NˆDØ˜$‰Ø  HÒ,Ü$ð (,Ø,0¨8Ð3HÈÈð&Qó Rð RàØ ŸN™N¨3Ó/‰MˆC��cÜ&×*Ñ*¨3Ó/ˆEØˆ}Ø  HÒ,Ü$Ð'BÀ3À%ð H<Ø<?¸7ð&Dó Eð Eð ðÜ˜C›�ð  Ò(¨e°e·j±jÒ.@ÀEÈEÏIÉIÒDUÜ Ð#DÀSÀEð J8Ø8;°wð ?7Ø7:°e¸3¸u¿z¹z¸lð K'Ø',§y¡y k°°e·j±j°\ð"Có Dð Dô "% U§Y¡Y´°E·J±JÀÓ0FÓ!GˆF�5—:‘:Óð7 #ñ8 ‰}�V‰}Ðøô ò Ø  HÒ,Ü$Ð'BÀ3À%ð H<Ø<?¸7À"ÀSÀEð&Kó LØQTðUõ ûðús   Â D+Ä+	EÄ4EÅEN©Úreturnr   ©Úparse)rG   r   rH   r   rQ   r&   )r   r   r   Ú__doc__r   r   r   r   r   r   r   r5   r=   ÚclassmethodrO   r   r   r   r&   r&   :   sb   … ñ
ð €Eˆ3ƒNØ€Eˆ3ƒNØ€IˆsÓØ€K�ÓØ€N�CÓØÐ�cÓó
8óð ó0ó ñ0r   r&   c                  óV   — e Zd ZU dZded<   ded<   ded<   eddd„«       Zddd„Zdd	„Zy
)Ú
TextSizingzBBasic horizontal width measurement for kitty text sizing protocol.r&   Úparamsr   ÚtextÚ
terminatorc                óœ   —  | t         j                  |j                  d«      |¬«      |j                  d«      |j                  d«      ¬«      S )a.  
        Parse using matching OSC 66 Sequence.

        :param match: match object from :attr:`wcwidth.escape_sequences.TEXT_SIZING_PATTERN`.
        :param control_codes: 'parse' or 'strict', same meaning as delegated by
            :func:`wcwidth.width`.
        :raises ValueError: When ``control_codes='strict'`` for unrecognized, invalid, or out of
            bounds text sizing parameters.
        :returns: TextSizing object from parsed sequence

        Example::

            from wcwidth.escape_sequences import TEXT_SIZING_PATTERN
            >>> TextSizing.from_match(TEXT_SIZING_PATTERN.match('\x1b]66;w=2;XY\x07'))
            TextSizing(params=TextSizingParams(scale=1, width=2, numerator=0, denominator=0, \
            vertical_align=0, horizontal_align=0), text='XY', terminator='\x07')
        r   )rH   r   é   )rX   rY   rZ   )r&   rO   Úgroup)rF   ÚmatchrH   s      r   Ú
from_matchzTextSizing.from_matchž   sC   € ñ& Ô*×6Ñ6°u·{±{À1³~ÐUbÐ6ÓcØŸ™ A›Ø#Ÿk™k¨!›nô.ð 	.r   c                óü   — | j                   j                  dkD  r-| j                   j                  | j                   j                  z  S t        | j                  |¬«      }|dk  rd}| j                   j                  |z  S )a  
        Calculate the display width of a text sizing sequence.

        :param ambiguous_width: Width for East Asian Ambiguous characters.
        :returns: Display width in terminal cells. When ``width > 0``, returns
            ``params.scale * params.width``. When ``width == 0``, returns
            ``params.scale * measured_inner_width``.

        .. note: Fractional scaling (numerator/denominator) does not affect the
            cell count, it adjusts only the font size within the cells allocated by 'w'.
        r   )Úambiguous_width)rX   r   r   r   rY   )r-   ra   r   s      r   Údisplay_widthzTextSizing.display_widthµ   sf   € ð �;‰;×Ñ˜qÒ Ø—;‘;×$Ñ$ t§{¡{×'8Ñ'8Ñ8Ð8Ü�T—Y‘Y°Ô@ˆØˆqŠ5ØˆAØ�{‰{× Ñ  1Ñ$Ð$r   c                ón   — d| j                   j                  «       › d| j                  › | j                  › �S )z3Build and return complete OSC 66 Terminal Sequence.z]66;Ú;)rX   r=   rY   rZ   )r-   s    r   r=   zTextSizing.make_sequenceÈ   s0   € à˜$Ÿ+™+×3Ñ3Ó5Ð6°a¸¿	¹	°{À4Ç?Á?ÐBSÐTÐTr   NrR   )r^   zre.Match[str]rH   r   rQ   rW   )r   )ra   r
   rQ   r
   rP   )	r   r   r   rT   r   rU   r_   rb   r=   r   r   r   rW   rW   —   s2   … ÙLàÓØ
ƒIØƒOàó.ó ð.ô,%ô&Ur   rW   )rT   Ú
__future__r   ÚreÚtypingÚ	_wcswidthr   Ú
NamedTupler   r$   r   r&   rW   r   r   r   Ú<module>rj      sÁ   ðòõ< #ó 
ã õ  ô�×"Ñ"ô ñ 
˜ a¨a¸Ô	;Ù	˜ a¨a¸Ô	;Ù	˜¨!°"¸aÔ	@Ù	˜¨A°BÀÔ	BÙ	Ð)¨q°qÀ!Ô	DÙ	Ð+°¸ÀAÔ	Fñ-HÐ Ð)ó HôZ�v×(Ñ(ô Zôz3U�×"Ñ"õ 3Ur   