+
     BiH                       a  R t0 t R t^ RIHtHt ^ RIt^ RIt^ RIHt ^ RI	t	^ RI
t
RtRtRtRtRtRtRtRt] ^ k R= R> ltR? R@ ltRA RB ltRC/ RRDbR,REbR*RFbR-RGbR.RHbRRIbRRJbRRKbRRLbR
RMbR	RNbRRObRRPbR)RQbRRRbR+RSbRRTb/ RRUbRRVbR/RJbR0RWbR'RXbR&RYbR(RTbRRZbRR[bR1R\bR2R]bRR^bR R_bR!R`bR"RabR#RbbR$RcbC/ R%RdbRRebRRfbRRgbRRhbRRibRRjbRRkbRRlbRRmbRRnbR3RobR4RpbR5RqbR6RrbR7RsbR8RtbCR9RuR:RvR;RwR<Rx/CRyRRDRRJR/RJ/Rz/ RRDbR,REbR*RFbR-RGbR.RHbRRIbRRJbRRKbRRLbR
RMbR	RNbRR{bRRPbR)RQbRRRbR+RSbRR|b/ RR}bRR~bR/RJbR0RWbR'RXbR&RYbRRZbRRbR1RbRRbR R_bR!RbR"RabR#RbbR$RKbR%RLbRRbC/ RRbRRbRRbRRbRRjbRRkbRRlbRRmbRRnbR3RobR4RpbR5RbR6RbR7RbR8RbR9RbR:RbCR;RR<R/C/tRRCRRCRRCRRCRRCRRCRRCRRCRRCRRCRRCRRCRRy/t] ! R R4      4       tR R ltR# )z4Pure Python curses-like terminal capability queries.)	dataclassfieldN)Pathi  i  belclearelhpacupcud1civiscub1cnormcuf1cuu1dch1ich1kdch1kcud1kf1kf10kf2kf3kf4kf5kf6kf7kf8kf9khomekich1kcub1knpkppkcuf1kcuu1rmkxsmkxpaddchcudichcubcufcuuindrikendkentkf11kf12kf13kf14kf15kf16kf17kf18kf19kf20c                :    V ^8  d   QhR\         \        ,          /# )   return)listr   )formats   "'/usr/lib/python3.14/_pyrepl/terminfo.py__annotate__rB   L   s     '7 '7DJ '7    c                 d   . p \         P                  P                  R4      pV'       d   V P                  V4        \        P
                  ! 4       pV P                  \        VR,          4      4       \         P                  P                  RR4      pV'       d4   VP                  R4       F  pV'       g   K  V P                  V4       K   	  V P                  . RO4       V  Uu. uF/  p\	        V4      P                  4       '       g   K$  \	        V4      NK1  	  up#   \         d     Li ; iu upi )zGet list of directories to search for terminfo files.

Based on ncurses behavior in:
- ncurses/tinfo/db_iterator.c:_nc_next_db()
- ncurses/tinfo/read_entry.c:_nc_read_entry()
TERMINFOz	.terminfoTERMINFO_DIRS :)z/etc/terminfoz/lib/terminfoz/usr/lib/terminfoz/usr/share/terminfoz/usr/share/lib/terminfoz/usr/share/misc/terminfoz/usr/local/lib/terminfoz/usr/local/share/terminfo)osenvirongetappendr   homestrRuntimeErrorsplitextendis_dir)dirsterminforM   terminfo_dirsds        rA   _get_terminfo_dirsrW   L   s     Dzz~~j)HHyy{C{*+,
 JJNN?B7M$$S)AqA * 	KK		
 "6TT!W^^%5GDGT66/  . 7s   6D $!D-
D-D*)D*c                (    V ^8  d   QhR\         RR/# r=   terminal_namer>   NrN   )r@   s   "rA   rB   rB   v   s     K KC KD KrC   c                     \        V \        4      '       g   \        R 4      hV '       g   \        R4      hRV 9   d   \        R4      h\	        V 4      p\        VP                  4      ^8  d   \        R4      hR# )z `terminal_name` must be a stringz`terminal_name` cannot be empty z&NUL character found in `terminal_name`z.`terminal_name` cannot contain path separatorsN)
isinstancerN   	TypeError
ValueErrorr   lenparts)rZ   ts   & rA    _validate_terminal_name_or_raiserd   v   si    mS)):;;:;;ABB]A
177|aIJJ rC   c                0    V ^8  d   QhR\         R\        /# )r=   rZ   r>   rN   bytes)r@   s   "rA   rB   rB      s     O Os Ou OrC   c                   \        V 4       V ^ ,          P                  4       pT p\        4        F  pW1,          V,          pVP                  4       '       d   VP	                  4       u # R\        V4      ,          pW5,          V,          pVP                  4       '       g   Ks  VP	                  4       u # 	  \        \        P                  \        P                  ! \        P                  4      V4      h)zFind and read terminfo file for given terminal name.

Terminfo files are stored in directories using the first character
of the terminal name as a subdirectory.
z%02x)rd   lowerrW   is_file
read_bytesordFileNotFoundErrorerrnoENOENTrI   strerror)rZ   
first_charfilename	directorypathhex_dirs   &     rA   _read_terminfo_filerv      s     %]3q!'')JH')	%0<<>>??$$ 3z?*"X-<<>>??$$ * ELL"++ell*CX
NNrC   ansi   s   [%p1%dDs   [%p1%dBs   [%p1%dCs   [%p1%dA      
s   [Cs   [As   [%i%p1%d;%p2%dHs
   [%i%p1%dGs   [H[2Js   [Ks   [%p1%dPs   [Ps   [%p1%d@rC   s   [?25ls   [?12l[?25hs   Ms   [?1h=s   [?1l>s   [3~s   OBs   OFs   OMs   OHs   [2~s   ODs   [6~s   [5~s   OCs   OAs   OPs   OQs   ORs   OSs   [15~s   [17~s   [18~s   [19~s   [20~s   [21~s   [23~s   [24~s   [1;2Ps   [1;2Qs   [1;2Rs   [1;2Ss   [15;2~s   [17;2~s   [18;2~s   [19;2~dumblinuxs   [H[Js   [@s   [?25l[?1cs   [?25h[?0cs   [Bs   [4~s   [1~s   [Ds   [[As   [[Bs   [[Cs   [[Ds   [[Es   [25~s   [26~s   [28~s   [29~s   [31~s   [32~s   [33~s   [34~xtermzxterm-colorzxterm-256colorscreenzscreen-256colortmuxztmux-256colorvt100vt220rxvtzrxvt-unicodezrxvt-unicode-256colorunknownc                   x   a  ] tR tRt o Rt]! ]R7      tV 3R lR ltV 3R lR lt	V 3R lR	 lt
V 3R
 ltRtV tR# )TermInfoi?  T)default_factoryc                   < V ^8  d   QhRR/# )r=   r>   N )r@   __classdict__s   "rA   rB   TermInfo.__annotate__F  s     J Jt JrC   c                B   V P                   '       g/   \        P                  P                  R4      ;'       g    RV n         \	        V P                   \
        4      '       d!   V P                   P                  R4      V n          V P                  V P                   4       R#   \        \        3 do    T P                  '       g   h \        P                  T P                   T P                   4      pT\        9  d   Rp\        T,          P                  4       T n         R# i ; i)av  Initialize terminal capabilities for the given terminal type.

Based on ncurses implementation in:
- ncurses/tinfo/lib_setup.c:setupterm() and _nc_setupterm()
- ncurses/tinfo/lib_setup.c:TINFO_SETUP_TERM()

This version first attempts to read terminfo database files like ncurses,
then, if `fallback` is True, falls back to hardcoded capabilities for
common terminal types.
TERMANSIasciir{   N)rZ   rI   rJ   rK   r^   rg   decode_parse_terminfo_fileOSErrorr`   fallback_TERM_ALIASES_TERMINAL_CAPABILITIEScopy_capabilities)self	term_types   & rA   __post_init__TermInfo.__post_init__F  s     !!!!#!7!A!A6Dd((%00!%!3!3!:!:7!CD	J%%d&8&89$ 		J===%))""D$6$6I  66"	!7	!B!G!G!ID		Js   B "DADDc                $   < V ^8  d   QhRS[ RR/# rY   r[   )r@   r   s   "rA   rB   r   e  s     I* I*# I*$ I*rC   c                n   \        V4      pRV: R2p^p\        V4      V8  d   \        V4      h\        P                  ! RVRV 4      w  rVrxrV\
        8X  d   ^pMV\        8X  d   ^pM\        RV: R24      hWF,          pWG,          pV^,          '       d
   V^,          pWHV,          ,          pV\        V4      8  d   \        V4      hV^V	,          ,           pV\        V4      8  d   \        V4      hW$V p\        P                  ! RV4       Uu. uF  w  qNK  	  ppTpWJ,           \        V4      8  d   \        V4      hW$WJ,            p/ p\        \        V4       FD  w  ppV^ 8  d   K  V\        V4      8  g   K!  VP                  ^ V4      pV^ 8  g   K<  VVV VV&   KF  	  VV n        R# u upi )zParse a terminfo file.

Populate the _capabilities dict for easy retrieval

Based on ncurses implementation in:
- ncurses/tinfo/read_entry.c:_nc_read_termtype()
- ncurses/tinfo/read_entry.c:_nc_read_file_entry()
- ncurses/tinfo/lib_ti.c:tigetstr()
zTermInfo file for z
 too shortz<HhhhhhNz uses unknown magicz<h)rv   ra   r`   structunpackMAGIC16MAGIC32iter_unpackzip_STRING_NAMESfindr   )r   rZ   data	too_shortoffsetmagic	name_size
bool_count	num_count	str_countstr_sizenumber_size
end_offsetstring_offset_dataoffstring_offsetsstring_tablecapabilitiescapends   &&                  rA   r   TermInfo._parse_terminfo_filee  s    #=1((9D	t9vY'' MM)T'6]3 	E* GKgK$]$55HI  	A::aKFk))CIY'' a)m+
CIY''!4#//6HI
IESCI 	 
  s4y(Y''V%67 M>:HCQws<(("''3/!8(4S(=L% ; *5
s   F2c                4   < V ^8  d   QhRS[ RS[R,          /# )r=   r   r>   Nrf   )r@   r   s   "rA   rB   r     s     + +s +ut| +rC   c                    \        V\        4      '       g   \        R\        V4       24      hV P                  P                  V4      # )z0Get terminal capability string by name.
        z`cap` must be a string, not )r^   rN   r_   typer   rK   )r   r   s   &&rA   rK   TermInfo.get  s?     #s##:49+FGG!!%%c**rC   c                r   < V ^8  d   Qh/ S[ S[,          R,          ;R&   S[;R&   S[S[ S[3,          ;R&   # )r=   NrZ   r   r   )rN   rg   booldict)r@   r   s   "rA   rB   r   ?  s<     ;%%   
 U
#A rC   )r   rZ   N)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   rK   __annotate_func____static_attributes____classdictcell__)r   s   @rA   r   r   ?  sA      H&+D&AMJ J>I* I*V+ +c  rC   r   c                <    V ^8  d   QhR\         R\        R\         /# )r=   	cap_bytesparamsr>   )rg   int)r@   s   "rA   rB   rB     s!     / /U /S /U /rC   c                *   \        V \        4      '       g   \        R\        V 4       24      hT pRV9   pV'       d   VP	                  RR4      p\        \        V4      4       F^  pRV^,           ,          pWR9   g   K  W,          pV'       d
   V^,          pVP	                  V\        V4      P                  R4      4      pK`  	  \        P                  ! R4      p\        VP                  V4      4      p\        V4       F  p	\        V	P                  ^4      4      p
\        V	P                  ^4      4      pW,          V,           pVRV	P!                  4        \        V4      P                  R4      ,           W)P#                  4       R ,           pK  	  V# )a  Parameterize a terminal capability string.

Based on ncurses implementation in:
- ncurses/tinfo/lib_tparm.c:tparm()
- ncurses/tinfo/lib_tparm.c:tparam_internal()

The ncurses version implements a full stack-based interpreter for
terminfo parameter strings. This pure Python version implements only
the subset of parameter substitution operations needed by PyREPL:
- %i (increment parameters for 1-based indexing)
- %p[1-9]%d (parameter substitution)
- %p[1-9]%{n}%+%d (parameter plus constant)
z`cap` must be bytes, not s   %irC   s   %%p%d%%dr   s   %p(\d)%\{(\d+)\}%\+%dN)r^   rg   r_   r   replacerangera   rN   encoderecompiler?   finditerreversedr   groupstartr   )r   r   result	incrementipatternvalue
pattern_rematchesmatch	param_idxconstants   &*          rA   tparmr     sS    i''3DO3DEFFF Is+ 3v;Q'IE
^^GSZ->->w-GHF   56J:&&v./G'"A'	u{{1~&!H,?U[[]#%j()YY[]#$ 		 # MrC   c                Z    V ^8  d   Qh/ ^ \         9   d   \        \        R3,          ;R&   # )r=   .r   )__conditional_annotations__tuplerN   )r@   s   "rA   rB   rB      s&     : :2. .uS#X .3 ;rC   (  cbtr   crcsrtbcr   r   edr   cmdchr	   r
   rM   r   r   mrcupr   r   llr   cvvisr   dl1dslhdsmacsblinkboldsmcupsmdcdimsmirinvisprotrevsmsosmulechrmacssgr0rmcuprmdcrmirrmsormulflashfffslis1is2is3ifr   il1ipkbsktbckclrkctabr   kdl1r   krmirkelkedkf0r   r   r   r   r   r   r   r   r   r   r   r   kil1r    kllr!   r"   r#   kindkrikhtsr$   r%   r&   lf0lf1lf10lf2lf3lf4lf5lf6lf7lf8lf9rmmsmmnelr'   r(   dlr)   r*   indnilr+   r,   rinr-   pfkeypflocpfxmc0mc4mc5reprs1rs2rs3rfrcvpascr.   r/   sgrhtswindhttsluchuiprogka1ka3kb2kc1kc3mc5prmpacscplnkcbtsmxonrmxonsmamrmamxoncxoffcenacssmlnrmlnkbegkcankclokcmdkcpykcrtr0   r1   kextkfndkhlpkmrkkmsgkmovknxtkopnkoptkprvkprtkrdokrefkrfrkrplkrstkresksavkspdkundkBEGkCANkCMDkCPYkCRTkDCkDLksltkENDkEOLkEXTkFNDkHLPkHOMkICkLFTkMSGkMOVkNXTkOPTkPRVkPRTkRDOkRPLkRITkRESkSAVkSPDkUNDrfir2   r3   r4   r5   r6   r7   r8   r9   r:   r;   kf21kf22kf23kf24kf25kf26kf27kf28kf29kf30kf31kf32kf33kf34kf35kf36kf37kf38kf39kf40kf41kf42kf43kf44kf45kf46kf47kf48kf49kf50kf51kf52kf53kf54kf55kf56kf57kf58kf59kf60kf61kf62kf63el1mgcsmglsmgrflnsclkdclkrmclkcwinwingohupdialqdialtonepulsehookpausewaitu0u1u2u3u4u5u6u7u8u9opocinitcinitpscpsetfsetbcpilpichrcvrdefcswidmsdrfqsitmslmsmicmsnlqsnrmqsshmssubmssupmsumrwidmritmrlmrmicmrshmrsubmrsupmrummhpamcud1mcub1mcuf1mvpamcuu1pordermcudmcubmcufmcuuscssmgbsmgbpsmglpsmgrpsmgtsmgtpsbimscsdrbimrcsdsubcssupcsdocrzeromcsnmkmousminforeqmpgetmsetafsetabpfxldevtcsins0dss1dss2dss3dssmglrsmgtbbirepbinelbicrcolornmdefbiendbisetcolorslinesdispcsmpchrmpchsmscrmscpctrmscescscesaehhlmelhlmelohlmerhlmethlmevhlmsgr1slengthOTi2OTrsOTnlOTbcOTkoOTmaOTG2OTG3OTG1OTG4OTGROTGLOTGUOTGDOTGHOTGVOTGCmemlmemubox1)r   __doc__dataclassesr   r   rn   rI   pathlibr   r   r   r   r   ABSENT_BOOLEANABSENT_NUMERICCANCELLED_NUMERICABSENT_STRINGCANCELLED_STRINGr   rW   rd   rv   r   r   r   r   rB   )r   s   @rA   <module>rR     s   : (  	  	  
   ." .d'7TKO8  BwB 	~	B
 	~B 	~B 	~B 	B 	B 		B 		B 	%B 	B 	!B  	i!B$ 	~%B& 		'B( 	~)B* 	+B. 	/B0 	&1B4 	u5B6 	h7B: 	 ;B< 	 =B@ 	sABD 	EBF 	GBH 		IBJ 		KBL 	MBN 	OBP 	QBR 	zSBT 	zUBV 	WBX 	YB\ 	y]B^ 	y_B` 	yaBb 	ycBd 	{eBf 	{gBh 	{iBj 	{kBl 	{mBn 	oBp 	qBr 	sBt 	uBv 	wBx 	yBz 	{B| 	CBH wu  ?w? 	~	?
 	~? 	~? 	~? 	? 	? 		? 		? 	%? 	? 	?  	i!?$ 	~%?& 		'?( 	~)?* 		+?. 	%/?0 	%1?4 	u5?6 	h7?: 	 ;?< 	 =?@ 	A?B 	C?D 	
E?F 	G?H 	I?J 	K?L 	zM?N 	zO?P 	Q?R 	S?V 	zW?X 	zY?Z 	z[?\ 	z]?^ 	z_?` 	{a?b 	{c?d 	{e?f 	{g?h 	i?j 	k?l 	m?n 	o?p 	q?r 	s?t 	u?v 	w?x 	y?z 	}?YL ` V6ffv
FVVV
FFVv" v+ v+ v+r/rC   