o
    Œõ±jE  ã                   @  sÈ   d Z ddlmZ ddlmZ g d¢ZddlmZ ddlm	Z	 ddl
m
Z
 dd	lmZmZmZmZmZmZmZmZ dd
lmZ ddlmZ ddlmZ d#dd„Z			d$d%dd„Z				d&d'd!d"„ZdS )(z.This is a python implementation of wcswidth().é    )Úannotations)ÚOptional)zwcwidth._constantszwcwidth._wcwidthzwcwidth.bisearchzwcwidth.table_graphemezwcwidth.table_vs16é   )Útable_grapheme_overrides©Úwcwidth)Úbisearch)Ú_EMOJI_ZWJ_SETÚ_ISC_VIRAMA_SETÚ_CATEGORY_MC_TABLEÚ_FITZPATRICK_RANGEÚ_REGIONAL_INDICATOR_SETÚresolve_terminalÚget_term_overridesÚ_clamp_ambiguous_width)ÚVS15_WIDE_TO_NARROW)ÚVS16_NARROW_TO_WIDE)ÚGRAPHEME_EXTENDÚtextÚstrÚstartÚintÚendÚreturnc                 C  sÒ   |d }||k r"t t| | ƒtƒr"|d7 }||k r"t t| | ƒtƒs||k rgt| | ƒdkr1	 |S |d7 }||k rdt| | ƒtv rd|d7 }||k rct t| | ƒtƒrc|d7 }||k rct t| | ƒtƒsRq"	 |S |S )zÖ
    Scan forward from *start* (base character) to end of a ZWJ grapheme cluster.

    Follows the UAX #29 GB11 pattern (ExtPict Extend* ZWJ x ExtPict) chained repeatedly until no
    more ZWJ joins are found.
    r   é   )r   Úordr   r	   )r   r   r   Úidx© r   ú„/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/wcwidth/_wcswidth.pyÚ_scan_zwj_cluster_end   s"   ÿôÿr   NÚautoÚpwcsÚnúOptional[int]Úunicode_versionÚambiguous_widthc                   s¨  |du r|   ¡ r|  ¡ rt| ƒS tˆ ƒ‰ ˆ dkrtn‡ fdd„}|du r(t| ƒnt|t| ƒƒ}d}d}d}d}	d}
d}d}td	 }td	 }t}||k �rK| | }t	|ƒ}|d
kru|r_|d7 }n|d |k rnd}
d}|d7 }nd}|d7 }qG|dkr‹|dkr‹||	|ƒr„d}d}|d7 }qG|dkr§|dkr§t|	|ƒr |
dkr |d8 }d}|d7 }qG|dkrü|t
v rãd}|d }|dkrÕt	| | ƒt
v rÕ|d7 }|d8 }|dkrÕt	| | ƒt
v sÁ|d dkrâ|}	|d7 }qGntd |  krñtd krün n	|	tv rü|d7 }qG||ƒ}|dk �rdS |dk�r'|�rd}n|�r||7 }|}n|}|}|}	|}
d}n|tv �r/d}n|dk�rA||tƒ�rAd}d}d}nd}|d7 }||k sL|�rR||7 }|S )aî  
    Given a unicode string, return its printable length on a terminal.

    See :ref:`Specification` for details of cell measurement.

    This implementation differs from Markus Khun's original POSIX C implementation, in that this
    ``wcswidth()`` processes graphemes strings yielded by :func:`wcwidth.iter_graphemes` defined by
    `Unicode Standard Annex #29`_. POSIX wcswidth(3) is not grapheme-aware and does not measure many
    kinds of Emojis or complex scripts correctly.

    :param pwcs: Measure width of given unicode string.
    :param n: When ``n`` is None (default), return the length of the entire
        string, otherwise only the first ``n`` characters are measured.
    :param unicode_version: Ignored. Retained for backwards compatibility.

        .. deprecated:: 0.3.0
           Only the latest Unicode version is now shipped.

    :param ambiguous_width: Width to use for East Asian Ambiguous (A)
        characters. Default is ``1`` (narrow). Set to ``2`` for CJK contexts.
    :returns: The width, in cells, needed to display the first ``n`` characters
        of the unicode string ``pwcs``.  Returns ``-1`` for C0 and C1 control
        characters!

    .. _`Unicode Standard Annex #29`: https://www.unicode.org/reports/tr29/
    Nr   c                   ó   t | dˆ ƒS ©Nr    r   ©Úc©r%   r   r   Ú<lambda>f   ó    zwcswidth.<locals>.<lambda>r   éþÿÿÿéÿÿÿÿFú9.0.0r   é   éþ  éþ  éÿÿ  T)ÚisasciiÚisprintableÚlenr   r   Úminr   r   r   r   r   r   r	   r
   r   )r!   r"   r$   r%   Ú_wcwidthr   Útotal_widthr   Úlast_measured_idxÚlast_measured_ucsÚlast_measured_wÚprev_was_viramaÚcluster_widthÚvs16_nw_tableÚvs15_wn_tableÚ	_bisearchÚcharÚucsÚ	ri_beforeÚjÚwr   r*   r   Úwcswidth=   s¦   $



þý 


±QrG   TÚterm_programú
bool | strc           )        s  |du r|   ¡ r|  ¡ rt| ƒS tˆ ƒ‰ t|ƒ}|r6t|ƒ}|j}|j}|j}	|j	}
|j
}|j}t |¡}nd}d}d}	d}
d}d}i }ˆ dkrJtn‡ fdd„}|du rXt| ƒnt|t| ƒƒ}d}d}d}d}d}d	}d}d}d}td
 }td
 }t}||k �rb| | }t|ƒ}|dkrÛ|r“|d7 }nG|d |k rÔ|rË|dkrË|tv rËt| ||ƒ}| ||… }| |¡} | durË|| | 7 }d}d}d}d	}d}|}q{d}d	}|d7 }nd	}|d7 }q{|dkrù|dkrù|rë|||ƒrën|||ƒròd}d}|d7 }q{|dk�r(|dk�r(|}!t|!|ƒ}"|	�rt|!|	ƒ�rd	}"|"�r!|dk�r!|d8 }d}|d7 }q{|dk�r‡|tv �rkd}#|d }$|$dk�r\t| |$ ƒtv �r\|#d7 }#|$d8 }$|$dk�r\t| |$ ƒtv �sF|#d dk�rj|}|d7 }q{ntd |  k�r{td k�r‡n n
|tv �r‡|d7 }q{||ƒ}%|%dk �r’dS |%dk�r£|�r£t||ƒ�r£d}%n|%dk�r³|
�r³t||
ƒ�r³d}%|%dk�rÄ|�rÄt||ƒ�rÄd}%n|%dk�rÔ|�rÔt||ƒ�rÔd}%|%dk�r>|�rßd}nV|�r/d	}&|�r!|dk�r!| ||d … }'| |'¡} | du�r||  }d}&d}n| ||… }(| |(¡} | du�r||  }n	||7 }n||7 }|&�s.|%}|}|}n|%}|}|}|}|}|%}d	}n|tv �rFd}n|dk�rX||tƒ�rXd}d}d	}nd	}|d7 }||k s€|�r�|�r‰|dk�r‰| ||… }(| |(¡} | du�rƒ||  }|S ||7 }|S ||7 }|S )a  
    Given a unicode string, return its printable length on a terminal given by ``term_program``.

    See :ref:`Specification` for details of cell measurement.

    Unlike :func:`wcswidth`, this function applies per-terminal correction tables for
    emoji presentation and grapheme clusters.

    :param pwcs: Measure width of given unicode string.
    :param n: When ``n`` is None (default), return the length of the entire
        string, otherwise only the first ``n`` characters are measured.
    :param unicode_version: Ignored. Retained for backwards compatibility.
    :param ambiguous_width: Width to use for East Asian Ambiguous (A)
        characters. Default is ``1`` (narrow). Set to ``2`` for CJK contexts.
    :param term_program: Terminal software identifier for table correction.
        ``True`` (default) reads the ``TERM_PROGRAM`` or ``TERM`` environment
        variable for auto-detection.  ``False`` disables override lookup.
        Accepts a canonical terminal name matching :func:`list_term_programs`,
        such as from XTVERSION_, ENQ_, or ``TERM_PROGRAM``.

        .. versionadded:: 0.8.0
    :returns: The width, in cells, needed to display the first ``n`` characters
        of the unicode string ``pwcs``.  Returns ``-1`` for C0 and C1 control
        characters!
    Nr   r   c                   r&   r'   r   r(   r*   r   r   r+     r,   zwcstwidth.<locals>.<lambda>r   r-   r.   Fr/   r   r0   r1   r2   r3   T)r4   r5   r6   r   r   r   ÚnarrowerÚvs16_narrowerÚ
vs15_widerÚzeroerÚnarrow_widerÚnarrow_zeroerr   Úgetr   r7   r   r   r   r   r	   r   r   r   r
   r   ))r!   r"   r$   r%   rH   Úterm_canonicalÚ	overridesÚ	_narrowerÚ_vs16_narrowerÚ_vs15_widerÚ_zeroerÚ_narrow_widerÚ_narrow_zeroerÚ_grapheme_overridesr8   r   r9   r   r:   r;   r<   r=   Úcluster_startÚtotal_before_clusterr>   r?   r@   rA   rB   rC   Úcluster_endÚclusterÚ
override_wÚbase_ucsÚvs15_narrowrD   rE   rF   ÚflushedÚ	candidateÚcluster_textr   r*   r   Ú	wcstwidthË   s@  %







þý$








€
 �ï 

ýÿrd   )r   r   r   r   r   r   r   r   )Nr    r   )
r!   r   r"   r#   r$   r   r%   r   r   r   )Nr    r   T)r!   r   r"   r#   r$   r   r%   r   rH   rI   r   r   )Ú__doc__Ú
__future__r   Útypingr   Ú__lazy_modules__Ú r   r8   r   r   Ú
_constantsr	   r
   r   r   r   r   r   r   Ú
table_vs15r   Ú
table_vs16r   Útable_graphemer   r   rG   rd   r   r   r   r   Ú<module>   s,    (
 ü û