§
    ‹Ÿj  ã                  ó^  — 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dS )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                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   dS )Ú
_FieldMetaÚstrÚnameÚintÚlowÚhighÚdefaultN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú`/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/wcwidth/text_sizing.pyr   r   *   s4   € € € € € € Ø€I€I�IØ€H€H�HØ€I€I�IØ€L€L�L€L€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dS )Ú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   Úreturnr   c                ó˜   ‡ — d                      ˆ fd„t                               ¦   «         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  — | ]A}t          ‰|j        ¦  «        |j        k    ¯ |j        › d t          ‰|j        ¦  «        › �V — ŒBdS )ú=N)Úgetattrr	   r   )Ú.0ÚfieldÚselfs     €r   ú	<genexpr>z,TextSizingParams.__repr__.<locals>.<genexpr>U   sh   øè è € ð Lð LØ!&Ý '¨¨e¬jÑ 9Ô 9¸U¼]Ò JÐ Jð !&¤
ÐHÐH­W°T¸5¼:Ñ-FÔ-FÐHÐHà JÐ JÐ JÐ JðLð Lr   ú(ú))Újoinr$   ÚvaluesÚ	__class__r   )r.   Úrepr_fmts   ` r   Ú__repr__zTextSizingParams.__repr__N   sq   ø€ ð —9’9ð Lð Lð Lð LÝ*<×*CÒ*CÑ*EÔ*EðLñ Lô Lñ Lô Lˆð ”.Ô)Ð7Ð7¨HÐ7Ð7Ð7Ð7r   c                óâ   — g }t                                ¦   «         D ]?\  }}t          | |j        ¦  «        x}|j        k    r|                     |› d|› �¦  «         Œ@d                     |¦  «        S )z0Build and return sub-part of an OSC 66 sequence.r*   ú:)r$   Úitemsr+   r	   r   Úappendr2   )r.   ÚpartsÚ	field_keyr-   Úvals        r   Úmake_sequencezTextSizingParams.make_sequenceZ   sv   € àˆå 2× 8Ò 8Ñ :Ô :ð 	3ð 	3ÑˆI�uÝ˜t U¤ZÑ0Ô0Ð0�°U´]ÒBÐBØ—’ 	Ð1Ð1¨CÐ1Ð1Ñ2Ô2Ð2øØ�xŠx˜‰ŒÐr   ÚparseÚrawÚcontrol_codesc                óÊ  — i }|s
 | ¦   «         S |                      d¦  «        D �]7}d|vr|dk    rt          d|›d|›�¦  «        ‚Œ#|                     d¦  «        \  }}}t                               |¦  «        }|€|dk    rt          d|› d|›�¦  «        ‚Œt	 t          |¦  «        }	n6# t          $ r)}
|dk    rt          d	|› d|›d
|
› �¦  «        |
‚Y d}
~
Œ³d}
~
ww xY w|dk    rF|	|j        k    s|	|j        k     r0t          d|› d|›d|› d|j        › d|j        › d|j        › �¦  «        ‚t          |j        t          |j        |	¦  «        ¦  «        ||j        <   �Œ9 | di |¤ŽS )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)
        r8   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)Úclsr@   rA   ÚkwargsÚpartÚkeyÚ_eqr=   r-   ÚvalueÚexcs              r   Úfrom_paramszTextSizingParams.from_paramsc   so  € ð$ )+ˆØð 	Ø�3‘5”5ˆLØ—I’I˜c‘N”Nð 	Hñ 	HˆDØ˜$ˆˆØ  HÒ,Ð,Ý$ð &QØ,0ð&Qð &QØILð&Qð &Qñ Rô Rð RàØ ŸNšN¨3Ñ/Ô/‰MˆC��cÝ&×*Ò*¨3Ñ/Ô/ˆEØˆ}Ø  HÒ,Ð,Ý$ð &DÀ3ð &Dð &DØ<?ð&Dð &Dñ Eô Eð Eð ðÝ˜C™œ��øÝð ð ð Ø  HÒ,Ð,Ý$ð &KÀ3ð &Kð &KØ<?ð&Kð &KØEHð&Kð &Kñ Lô LØQTðUð ����øøøøðøøøð  Ò(Ð(¨e°e´jÒ.@Ð.@ÀEÈEÌIÒDUÐDUÝ ð "CÀSð "Cð "CØ8;ð"Cð "Cà7:ð"Cð "Cà?D¼zð"Cð "Cð (-¤yð"Cð "Cð 7<´jð"Cð "Cñ Dô Dð Dõ "% U¤Yµ°E´JÀÑ0FÔ0FÑ!GÔ!GˆF�5”:ÑÑØˆsˆ}ˆ}�Vˆ}ˆ}Ðs   ÂB)Â)
CÂ3CÃCN©r'   r   ©r?   )r@   r   rA   r   r'   r&   )r   r   r   Ú__doc__r   r   r   r   r   r   r   r6   r>   ÚclassmethodrQ   r   r   r   r&   r&   :   sÎ   € € € € € € ð
ð 
ð €E€N€N€N�NØ€E€N€N€N�NØ€IÐÐÐÑØ€KÐÐÐÑØ€NÐÐÐÑØÐÐÐÐÑð
8ð 
8ð 
8ð 
8ðð ð ð ð ð0ð 0ð 0ð 0ñ „[ð0ð 0ð 0r   r&   c                  ó^   — 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dS )Ú
TextSizingzBBasic horizontal width measurement for kitty text sizing protocol.r&   Úparamsr   ÚtextÚ
terminatorr?   Úmatchúre.Match[str]rA   r'   c                óÄ   —  | t                                |                     d¦  «        |¬¦  «        |                     d¦  «        |                     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   )rA   r   é   )rX   rY   rZ   )r&   rQ   Úgroup)rJ   r[   rA   s      r   Ú
from_matchzTextSizing.from_matchž   sX   € ð& ˆsÕ*×6Ò6°u·{²{À1±~´~ÐUbÐ6ÑcÔcØŸš A™œØ#Ÿkšk¨!™nœnð.ñ .ô .ð 	.r   r   Úambiguous_widthr
   c                óº   — | j         j        dk    r| j         j        | j         j        z  S t          | j        |¬¦  «        }| j         j        t          d|¦  «        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   )ra   )rX   r   r   r   rY   rH   )r.   ra   r   s      r   Údisplay_widthzTextSizing.display_widthµ   sU   € ð Œ;Ô˜qÒ Ð Ø”;Ô$ t¤{Ô'8Ñ8Ð8Ý�T”Y°Ð@Ñ@Ô@ˆØŒ{Ô ¥3 q¨!¡9¤9Ñ,Ð,r   c                óX   — d| 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Æ   s/   € àT˜$œ+×3Ò3Ñ5Ô5ÐTÐT¸¼	ÐTÀ4Ä?ÐTÐTÐTr   NrS   )r[   r\   rA   r   r'   rW   )r   )ra   r
   r'   r
   rR   )	r   r   r   rT   r   rU   r`   rc   r>   r   r   r   rW   rW   —   s�   € € € € € € ØLÐLàÐÐÑØ€I€I�IØ€O€O�Oàð.ð .ð .ð .ñ „[ð.ð,-ð -ð -ð -ð -ð"Uð Uð Uð Uð Uð Ur   rW   )rT   Ú
__future__r   ÚreÚtypingÚ	_wcswidthr   Ú
NamedTupler   r$   r   r&   rW   r   r   r   ú<module>rk      s£  ððð ð ð< #Ð "Ð "Ð "Ð "Ð "ð 
€	€	€	à €€€ð  Ð Ð Ð Ð Ð ðð ð ð ð �Ô"ñ ô ð ð 
ˆ˜ a¨a¸Ð	;Ñ	;Ô	;Ø	ˆ˜ a¨a¸Ð	;Ñ	;Ô	;Ø	ˆ˜¨!°"¸aÐ	@Ñ	@Ô	@Ø	ˆ˜¨A°BÀÐ	BÑ	BÔ	BØ	ˆÐ)¨q°qÀ!Ð	DÑ	DÔ	DØ	ˆÐ+°¸ÀAÐ	FÑ	FÔ	Fð-Hð -HÐ ð Hð Hð Hñ HðZð Zð Zð Zð Z�vÔ(ñ Zô Zð Zðz1Uð 1Uð 1Uð 1Uð 1U�Ô"ñ 1Uô 1Uð 1Uð 1Uð 1Ur   