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     


