
    ij                    6   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               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,   Z0ee,   Z1ee,   Z2d dZ3d!dZ4 G d de      Z5 e5dddddd      Z6 ed      d"d       Z7 ed      d#d$d       Z8d%dZ9y)&zOShared 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              #  N   K   | ]  \  }}t        ||d z         D ]  }|   ywr   Nrange.0lohicps       [/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/wcwidth/_constants.py	<genexpr>r0   2   s:      2rBQ
    #%c              #  N   K   | ]  \  }}t        ||d z         D ]  }|   ywr'   r(   r*   s       r/   r0   r0   9   s6      2rU2rAv5F/1Br1   )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%   C   s     ',,.89::r9   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.r8   c                    | d   S )Nr   r8   )rs    r/   <lambda>z_merge_ranges.<locals>.<lambda>U   s
    !A$ r9   )keyr   r   Nr2   )extendsortmaxappendr5   )tuples
all_rangestmergedr,   r-   _prev_his           r/   _merge_rangesrI   N   s    (*J !OOO'm_FQR. $BBZ
7= *Q-Wb)9:F2JMM2r(#$ =r9   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__r8   r9   r/   rK   rK   `   s)    Ar9   rK   r8       )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.rM   r8   widerrP   rR   )
rI   r   getr   r   r   r   r   _EMPTY_OVERRIDESrK   )term_canonicalrM   rN   rO   rP   rQ   rR   s          r/   r$   r$   n   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&)=: :r9   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'r9   c                4    t        |       }|dk  ry|dkD  ry|S )z"Clamp *ambiguous_width* to 1 or 2.r      )_index)ambiguous_widthvalues     r/   _clamp_ambiguous_widthrn      s'     ?#EqyqyLr9   )returnztuple[str, ...])rC   rL   ro   rL   )r^   strro   rK   )F)rg   z
bool | strro   z
str | None)rl   intro   rq   ):rV   
__future__r   rc   operatorr   rk   	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   rq   rL   __all__	frozensetr)   r   r   r   r   r   r   r    r!   r"   r%   rI   rK   r]   r$   r#   rn   r8   r9   r/   <module>r      s   U " 
 $  $ " & ": : 10 0 , 9E#s(OS() $	
%a
(
+-H-KA-NQR-RS   :z:$9: 
  /"% 1  *  ( / &7 &7 ;$
  %RRR<  2: :: 2 6	r9   