
    AHj=                       U d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZmZmZ d dl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mZmZ d d
lmZ dZ  ejB                  d ejD                  d      z   dz         Z# ejB                  d ejD                  d      z   dz         Z$ ejB                  d      Z%dZ&de'd<   	 dZ(de'd<   	 dZ)de'd<   	 dZ*de'd<   	 e&e(e)e*hZ+	  ejB                  d      Z,de'd<    ejB                  d      Z-de'd<   ej\                  j_                  dd       d!k(  xs ej\                  j_                  d"d       d#k(  Z0 G d$ d%ee         Z1y)&    )annotationsN)Any	GeneratorIterable)Final)	constantseventsmessages)ANSI_SEQUENCES_KEYSIGNORE_SEQUENCE)FUNCTIONAL_KEYS)ParseEOFParserParseTimeoutPeek1Read1TokenCallback)KEY_NAME_REPLACEMENTSKeys_character_to_key)Message    ^z[z(<?[-\d;]+[mM]|M...)\Zz/\?(?P<mode_id>\d+);(?P<setting_parameter>\d)\$yz \x1b\[(?P<row>\d+);(?P<col>\d+)Rz[200~z
Final[str]BRACKETED_PASTE_STARTz[201~BRACKETED_PASTE_ENDz[IFOCUSINz[OFOCUSOUTz,\x1b\[(?:(\d+)(?:;(\d+))?)?([u~ABCDEFHPQRS])r   _re_extended_keyzI\x1b\[48;(\d+(?:\:.*?)?);(\d+(?:\:.*?)?);(\d+(?:\:.*?)?);(\d+(?:\:.*?)?)t_re_in_band_window_resizeLC_TERMINAL iTerm2TERM_PROGRAMz	iTerm.appc                  z     e Zd Z ej                  d      Zdd	 fdZd
dZd fdZddZ		 	 	 	 ddZ
ddZ xZS )XTermParserz"\x1b\[<(\d+);(-?\d+);(-?\d+)([Mm])c                    d| _         d| _        d| _        d | _        d | _        |rt        dd      nd | _        t        | !          | j                  d       y )Ng        Fzkeys.logatz---)
last_xlast_ymouse_pixelsterminal_sizeterminal_pixel_sizeopen_debug_log_filesuper__init__	debug_log)selfdebug	__class__s     M/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/_xterm_parser.pyr0   zXTermParser.__init__7   sS    !59;? 9>tJ5Du    c                    | j                   H| j                   j                  dj                  |      dz          | j                   j                          y y )N 
)r.   writejoinflush)r2   argss     r5   r1   zXTermParser.debug_logA   sF    +  &&sxx~'<=  &&( ,r6   c                J    | j                  d|       t        | 	  |      S )NzFEED )r1   r/   feed)r2   datar4   s     r5   r?   zXTermParser.feedF   s%    th'(w|D!!r6   c                   | j                   j                  |      }|r|j                         \  }}}}t        |      }t	        t        |      dz
        }t	        t        |      dz
        }	|dk  s|	dk  ry | j
                  rJ| j                  >| j                  2| j                  \  }
}| j                  \  }}|
|z  }||z  }||z  }|	|z  }	t        |      t        | j                        z
  }t        |	      t        | j                        z
  }|| _        |	| _	        |dz  rGt        j                  t        j                  t        j                  t        j                  g|dz     }d}nH|dz   dz  }|dz  s|dk(  rt        j                  }n%|dk(  rt        j                   nt        j"                  } |d ||	|||t%        |dz        t%        |dz        t%        |d	z        ||	
      }|S y )N   r   @      r   M         )screen_xscreen_y)_re_sgr_mousematchgroupsintfloatr*   r,   r+   r(   r)   r	   MouseScrollUpMouseScrollDownMouseScrollLeftMouseScrollRight	MouseMove	MouseDownMouseUpbool)r2   code	sgr_match_buttons_x_ystatebuttonsxypixel_widthpixel_heightwidthheightx_ratioy_ratiodelta_xdelta_yevent_classbuttonevents                        r5   parse_mouse_codezXTermParser.parse_mouse_codeJ   s   &&,,T2	&/&6&6&8#Hb"e(mGc"gk"Ac"gk"A1uA!!,,8&&2,0,D,D)\ $ 2 2v%-&/WW!fs4;;//G!fs4;;//GDKDK |((****++	
 A+ !A+* R<6Q;"("2"2K6;sl&"2"2KWq[!Wq[!Wr\"E Lr6   c              #     !"#$K   d} j                   } j                  $g }d}d fd!d! fd}d! $fd" j                  s|sQ|rOdj                  |d d       } !t	        j
                  |j                  dd                   |j                          	  |       }|r|j                  |        j                  d	|       ||k7  r|s $|      D ]
  }	 ||	        |sy |#d!"#fd
}
	 	  |t        j                        }||k(  r
 |
        |#)#|z  #t        #      t        kD  r
 "#       n j                  d#       #t         v ra#t"        k(  r !t	        j$                                n;#t&        k(  r !t	        j(                                n#t*        k(  rd}n#t,        k(  rd}n6t.        j1                  #      x}r|j3                         D cg c]  }|j5                  d      d    c}\  }}}}t        j6                  j9                  t;        |      t;        |      ft;        |      t;        |      f      }|j<                   _        |j@                   _!        d _"         !|       no|sjtF        jI                  #      }|ZtK        t:        |j3                               \  }}t;        |      dz
  }t;        |      dz
  } !t	        jL                  ||             ntO         $#            }|D ]
  } ||        |rntP        jI                  #      }|-|jS                  d      } jU                  |      }| !|       ntV        jI                  #      }|{|d   }t;        |d         }|dk(  r |dkD  r !tY        jZ                                nB|dk(  r=t        j\                  r-t^        s'tX        j`                  jc                  |      }  !|        n j                  s jd                  " jd                  jg                          d  _2        y y # t        $ r Y y w xY w# t        $ r
  |
        Y ^t        $ r
  |
        Y y w xY wc c}w w)NFc                    j                  t        |              t        | t        j                        r"| j
                  _        | j                  _         |        y)zHook to log events.N)	r1   str
isinstancer	   Resizesizer+   
pixel_sizer,   )tokenr2   token_callbacks    r5   on_tokenz#XTermParser.parse.<locals>.on_token   sC    NN3u:&%/%*ZZ"+0+;+;(5!r6   c                    | j                   t        j                  k(  rj                  d| j                         y |        y)a  Token callback wrapper for handling keys.

            Args:
                event: The key event to send to the callback.

            This wrapper looks for keys that should be ignored, and filters
            them out, logging the ignored sequence when it does.
            zignored=N)keyr   Ignorer1   	character)rk   rw   r2   s    r5   on_key_tokenz'XTermParser.parse.<locals>.on_key_token   s4     yyDKK'%//)<=>r6   c                    | r_j                  dt        |              | D ]>  } |      }|D ]/  }|j                  dk(  rt        j                  dd      } |       1 @ yy)zCalled when an escape sequence hasn't been understood.

            Args:
                reissue_sequence: Key sequence to report to the app.
            REISSUEescapecircumflex_accentr   N)r1   reprry   r	   Key)reissue_sequencer{   
key_eventsrk   rw   r2   sequence_to_key_eventss       r5   reissue_sequence_as_keysz3XTermParser.parse.<locals>.reissue_sequence_as_keys   sm      y$/?*@A!1 (I!7	!BJ!+ ( 990$*JJ/BC$HE ((  r6   r!    z
character=c                 T      t        j                  dd              dd        y)z%Send escape key and reissue sequence.r   rn   rB   N)r	   r   )rw   r   sequences   r5   send_escapez&XTermParser.parse.<locals>.send_escape   s$    Hf56(!"6r6   Tz	sequence=:r   rB   mode_idsetting_parameter20262048)ru   r   returnNone)rk   z
events.Keyr   r   )r   rp   r   r   )r   r   )4read1_sequence_to_key_eventsis_eofr;   r	   Pastereplaceclearr   appendr1   r   ESCAPE_DELAYr   len_MAX_SEQUENCE_SEARCH_THRESHOLDSPECIAL_SEQUENCESr   AppFocusr   AppBlurr   r   r   	fullmatchrM   	partitionrr   from_dimensionsrN   rs   r+   rt   r,   r*   _re_cursor_positionrL   mapCursorPositionlist_re_mouse_eventgrouprl   _re_terminal_mode_responser
   "TerminalSupportsSynchronizedOutputSMOOTH_SCROLLIS_ITERMInBandWindowResizefrom_setting_parameterr.   close)%r2   rv   ESCr   paste_bufferbracketed_paster|   pasted_textr{   rk   r   new_characterrL   r   rd   rc   rb   ra   resize_eventcursor_position_matchrowcolumnr_   r`   r   	key_eventmouse_match
mouse_codemouse_eventmode_report_matchr   r   in_band_eventrw   r   r   r   s%   ``                               @@@@r5   parsezXTermParser.parse   s_     

!%!=!="$	"	 	( ++"| !ggl3B&78k&9&9&"&EFG""$"''M	 ##I.NNZ	}56C&!7	!B ,$U+,   H7
 */	0F0F*G$GM !C'M(H-H8}'EE0:8,78007* !23!X- !12!%::*.!%88*/5??II5I=B\\^@49,Q/@<FE< $*==#@#@US[1[)3|+<=$L
 *6):):D&/;/F/FD,(,D%\*&,?,E,Eh,O),8&)#/D/K/K/M&NVK!OHqL !6!6q!!<= "&&<X&F!GJ%/ 0	$Y/0!"1"7"7"AK".%0%6%6q%9
&*&;&;J&G&2$[1 )C(H(H(R%(4"3I">,/0ABU0V,W)"f,1BQ1F$X%P%P%RS#v- ) 7 7$, !) ; ; R R$5!" *
 %]3w M ++F +  &&(#'D  ,i  4 $ M M4@so   BQ-	P2 'AQ-:Q CQ-(Q(G>Q-/Q-2	P>;Q-=P>>Q-Q%Q-Q%"Q-$Q%%Q-c              #    K   t         j                  |      x}|j                         \  }}}|xs d}t        j                  | | d      x}s	 t        t        t        |                  }g }|r=t        |      dz
  }d}	t        |	      D ]  \  }
}|d|
z  z  s|j                  |       ! |j                          |j                  |       t        j                  dj                  |      t        |      dk(  r|nd       yt!        j                  |      }|t"        u r't        j                  t$        j&                  |       yt)        |t*              r:|D ]4  }t        j                  |j,                  t        |      dk(  r|nd       6 yt)        |t.              r|}t        |      dk(  rN	 |j1                         st        |      }n|}t3        j                  ||      }t        j                  ||       yy# t        $ r t        t        |            }Y w xY w# t        $ r t        j                  ||       Y yw xY ww)zMap a sequence of code points on to a sequence of keys.

        Args:
            sequence: Sequence of code points.

        Returns:
            Keys
        NrB   r!   )shiftaltctrlr/   hypermeta+)r   r   rM   r   getr   chrrN   	Exception	enumerater   sortr	   r   r;   r   r   r   r   rz   rq   tuplevaluerp   isalnumr   )r2   r   rL   number	modifiersendry   
key_tokensmodifier_bits	MODIFIERSbitmodifierkeysnames                 r5   r   z#XTermParser._sequence_to_key_events<  s)     &//99EF%*\\^"FIs[qF*..&#/?DDCD++CF,<=C %'J #I 2N	%.y%9 4MC$S1"))(34 OOc"**$#h-12Dh$  "&&x0?"
 **T[[(33dE"  VjjH8JHPTUUV dC H x=A5''),X6D#D,00t<jjx00 S ! +c&k*C+b  5jj8445sV   AIH .-IDI7AH) IH&"I%H&&I)!I
III)F)r3   rW   r   r   )r=   r   r   r   )r@   rp   r   zIterable[Message])rX   rp   r   zMessage | None)rv   r   r   z#Generator[Read1 | Peek1, str, None])r   rp   r   zIterable[events.Key])__name__
__module____qualname__recompilerK   r0   r1   r?   rl   r   r   __classcell__)r4   s   @r5   r%   r%   4   sH    BJJDEM)
";zs(+s(	,s(jB5r6   r%   )2
__future__r   osr   typingr   r   r   typing_extensionsr   textualr   r	   r
   textual._ansi_sequencesr   r   textual._keyboard_protocolr   textual._parserr   r   r   r   r   r   textual.keysr   r   r   textual.messager   r   r   r   r   r   r   r   __annotations__r   r   r   r   r   r   environr   r   r%    r6   r5   <module>r      se   " 	 	 + + # / / H 6 W W G G #
 "$ "**S9299W#558QQR'RZZ)"))G
QQ  !bjj!DE $/ z / <"- Z - :  9*  =*,?(S  $"**%TU % U#-2::P$ 5  JJNN="%1 9	zz~~nb)[8 	J5&/ J5r6   