
    ^j                    "   d Z ddlmZ ddl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               Z' e%d g eeD              Z( e       d   Z)e
e)   Z* e%d eD              e'z  Z+dZ,ee)   Z-ee)   Z.ee)   Z/ddZ0ddZ1 G d de      Z2 e2dddddd      Z3 ed      d d       Z4 ed      d!d"d       Z5y)#zOShared data tables and constants for wcwidth.py, _wcwidth.py, and _wcswidth.py.    )annotationsN)	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              #  N   K   | ]  \  }}t        ||d z         D ]  }|   ywr   Nrange.0lohicps       K/opt/ringagent/.cad-venv/lib/python3.12/site-packages/wcwidth/_constants.py	<genexpr>r/   1   s:      2rBQ
    #%c              #  N   K   | ]  \  }}t        ||d z         D ]  }|   ywr&   r'   r)   s       r.   r/   r/   8   s6      2rU2rAv5F/1Br0   )i i c                 \    t        t        t        t        j                         z              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   keys     r.   r$   r$   B   s     ',,.89::r8   c                    g }| D ]  }|j                  |        |sy|j                  d        |d   g}|dd D ]=  \  }}|d   \  }}||k  r|d   d   t        ||      f|d<   +|j                  ||f       ? t	        |      S )zJMerge multiple sorted range tuples into one sorted, non-overlapping tuple.r7   c                    | d   S )Nr   r7   )rs    r.   <lambda>z_merge_ranges.<locals>.<lambda>T   s
    !A$ r8   )keyr   r   Nr1   )extendsortmaxappendr4   )tuples
all_rangestmergedr+   r,   _prev_his           r.   _merge_rangesrH   M   s    (*J !OOO'm_FQR. $BBZ
7= *Q-Wb)9:F2JMM2r(#$ =r8   c                  N    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<   y	)
TerminalOverridesz7Pre-merged override range tuples for a single terminal._RangeTuplenarrowervs16_narrower
vs15_widerzeroernarrow_widernarrow_zeroerN)__name__
__module____qualname____doc____annotations__r7   r8   r.   rJ   rJ   _   s)    Ar8   rJ   r7       )maxsizec                Z   t        t        j                  | i       j                  dd      t        j                  | i       j                  dd      t	        j                  | i       j                  dd            }t        j                  | i       j                  dd      }t        j                  | i       j                  dd      }t        t        j                  | i       j                  dd      t        j                  | i       j                  dd      t	        j                  | i       j                  dd            }t        j                  | i       j                  dd      }t        j                  | i       j                  dd      }|s|s|s|s
|s|st        S t        ||||||      S )zNReturn a TerminalOverrides, with all empty tuples when there are no overrides.rL   r7   widerrO   rQ   )
rH   r   getr   r   r   r   r   _EMPTY_OVERRIDESrJ   )term_canonicalrL   rM   rN   rO   rP   rQ   s          r.   r#   r#   m   sw    >2.22:rB."-11*bA."-11*bAH
 #&&~r:>>z2NM##NB7;;GRHJ>2.228R@."-11(B?."-11(B?F
 $'';??LL$((<@@RTUM v}X}j&)=: :r8   c                   | du ry| du rBt         j                  j                  dd      xs  t         j                  j                  dd      } | sy| j                         j	                         }t        j                  ||      }|t        vry|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environr[   striplowerr   r   )term_programr=   	canonicals      r.   r"   r"      s~     utzz~~nb9WRZZ^^FTV=W




$
$
&CC%I'r8   )returnztuple[str, ...])rB   rK   rh   rK   )r]   strrh   rJ   )F)rf   z
bool | strrh   z
str | None)6rU   
__future__r   rb   	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   intrK   __all__	frozensetr(   r   r   r   r   r   r   r   r    r!   r$   rH   rJ   r\   r#   r"   r7   r8   r.   <module>rx      sw   U " 
  $ " & ": : 10 0 , 9E#s(OS() $	
%a
(
+-H-KA-NQR-RS   :z:$9: 
  /"% 1  *  ( / &7 &7 ;$
  %RRR<  2: :: 2 r8   