o
    Œõ±j  ã                   @  sÌ  d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
m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 ddlmZ ddlmZmZmZmZmZmZ ddl m!Z! ddl"m#Z#m$Z$ e
e
e%e%f df Z&dZ'e(e)ed d ed d d ƒƒZ*e(dd„ g e¢e¢R D ƒƒZ+e!ƒ d Z,ee, Z-e(dd„ eD ƒƒe*B Z.dZ/ee, Z0ee, Z1ee, Z2d2dd„Z3d3dd„Z4G dd „ d eƒZ5e5d!d!d!d!d!d!ƒZ6ed"d#�d4d&d'„ƒZ7ed"d#�d5d6d,d-„ƒZ8d7d0d1„Z9dS )8zOShared data tables and constants for wcwidth.py, _wcwidth.py, and _wcswidth.py.é    )ÚannotationsN)Úindex)Ú	lru_cache)ÚTupleÚ
NamedTupleé   )ÚCATEGORY_MC)ÚWIDE_EASTASIAN)Ú
ZERO_WIDTH)Ú
ISC_VIRAMAÚEXTENDED_PICTOGRAPHICÚISC_INVISIBLE_STACKERÚGRAPHEME_REGIONAL_INDICATOR)ÚAMBIGUOUS_EASTASIAN)ÚSFZ_OVERRIDESÚSRI_OVERRIDESÚVS15_OVERRIDESÚVS16_OVERRIDESÚWIDE_OVERRIDESÚNARROW_OVERRIDES)Úlist_versions)ÚALIASESÚKNOWN_TERMINALS.)Ú_REGIONAL_INDICATOR_SETÚ_ISC_VIRAMA_SETÚ_LATEST_VERSIONÚ_CATEGORY_MC_TABLEÚ_EMOJI_ZWJ_SETÚ_FITZPATRICK_RANGEÚ_ZERO_WIDTH_TABLEÚ_WIDE_EASTASIAN_TABLEÚ_AMBIGUOUS_TABLEÚresolve_terminalÚget_term_overridesÚlist_term_programsc                 c  ó,   � | ]\}}t ||d  ƒD ]}|V  qqdS ©r   N©Úrange©Ú.0ÚloÚhiÚcp© r.   ú…/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/wcwidth/_constants.pyÚ	<genexpr>2   s   € þÿÿr0   éÿÿÿÿc                 c  r%   r&   r'   r)   r.   r.   r/   r0   9   s   € ÿÿ)iûó iÿó Úreturnútuple[str, ...]c                   C  s   t ttt ¡ B ƒƒS )z²
    Return all recognized values for the ``term_program`` argument.

    Includes canonical terminal names and their TERM/TERM_PROGRAM aliases.

    .. versionadded:: 0.8.0
    )ÚtupleÚsortedr   r   Úkeysr.   r.   r.   r/   r$   C   s   r$   ÚtuplesÚ_RangeTuplec                  G  s–   g }| D ]}|  |¡ q|sdS |jdd„ d� |d g}|dd… D ]#\}}|d \}}||kr?|d d t||ƒf|d< q#| ||f¡ q#t|ƒS )	zJMerge multiple sorted range tuples into one sorted, non-overlapping tuple.r.   c                 S  s   | d S )Nr   r.   )Úrr.   r.   r/   Ú<lambda>U   s    z_merge_ranges.<locals>.<lambda>)Úkeyr   r   Nr1   )ÚextendÚsortÚmaxÚappendr4   )r7   Ú
all_rangesÚtÚmergedr+   r,   Ú_Úprev_hir.   r.   r/   Ú_merge_rangesN   s   
rE   c                   @  sB   e Zd ZU dZded< ded< ded< ded< ded< ded< d	S )
ÚTerminalOverridesz7Pre-merged override range tuples for a single terminal.r8   ÚnarrowerÚvs16_narrowerÚ
vs15_widerÚzeroerÚnarrow_widerÚnarrow_zeroerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r.   r.   r.   r/   rF   `   s   
 rF   r.   é    )ÚmaxsizeÚterm_canonicalÚstrc                 C  sö   t t | i ¡ dd¡t | i ¡ dd¡t | i ¡ dd¡ƒ}t | i ¡ dd¡}t | i ¡ dd¡}t t | i ¡ dd¡t | i ¡ dd¡t | i ¡ dd¡ƒ}t | i ¡ dd¡}t | i ¡ dd¡}|sr|sr|sr|sr|sr|srtS t	||||||ƒS )zNReturn a TerminalOverrides, with all empty tuples when there are no overrides.rG   r.   ÚwiderrJ   rL   )
rE   r   Úgetr   r   r   r   r   Ú_EMPTY_OVERRIDESrF   )rT   rG   rH   rI   rJ   rK   rL   r.   r.   r/   r#   n   s.   ýýÿÿ
ÿr#   FÚterm_programú
bool | strú
str | Nonec                 C  s`   | du rdS | du rt j dd¡pt j dd¡} | sdS |  ¡  ¡ }t ||¡}|tvr.dS |S )aÖ  
    Resolve a terminal identifier to its canonical name.

    :param term_program: Terminal identifier.  ``False`` (default) disables override lookup.
        ``True`` reads the ``TERM_PROGRAM`` environment variable, falling back to ``TERM``.
        A string value is used directly (canonical name, alias, XTVERSION/ENQ result, etc.).
    :returns: Canonical terminal name if recognized, ``None`` otherwise.

    The auto-detection path (``term_program=True``) reads environment variables at call time
    and caches the result.  The environment is assumed immutable for the process lifetime;
    callers that change ``TERM`` or ``TERM_PROGRAM`` mid-process must call
    :func:`resolve_terminal.cache_clear` afterward.
    FNTÚTERM_PROGRAMÚ ÚTERM)ÚosÚenvironrW   ÚstripÚlowerr   r   )rY   r;   Ú	canonicalr.   r.   r/   r"   Œ   s   r"   Úambiguous_widthÚintc                 C  s$   t | ƒ}|dk r
dS |dkrdS |S )z"Clamp *ambiguous_width* to 1 or 2.r   é   )Ú_index)rd   Úvaluer.   r.   r/   Ú_clamp_ambiguous_width¨   s   ri   )r2   r3   )r7   r8   r2   r8   )rT   rU   r2   rF   )F)rY   rZ   r2   r[   )rd   re   r2   re   ):rP   Ú
__future__r   r_   Úoperatorr   rg   Ú	functoolsr   Útypingr   r   Útable_mcr   Ú
table_wider	   Ú
table_zeror
   Útable_graphemer   r   r   r   Útable_ambiguousr   Útable_overridesr   r   r   r   r   r   Úunicode_versionsr   Útable_term_programsr   r   re   r8   Ú__all__Ú	frozensetr(   r   r   r   r   r   r   r   r    r!   r$   rE   rF   rX   r#   r"   ri   r.   r.   r.   r/   Ú<module>   sT     ÿÿ
ÿþ

