
    F\h@l              
         % S SK Jr  S SKrS SKJr  S SKJrJrJr  S SK	J
r
Jr  SSKJrJrJr  SSKJrJrJr  SS	KJr  \R*                  rSS
KJrJrJrJr  \" S5      u  rrrSHS jrSIS jr \!" / SPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSP\RD                  S :X  a  S!OS"QS#PS$PS%PS&PS'PS(PS)PS*PS+PS,PS-PS.PS/PS0PS1PS2PS3PS4PS5PS6PS7PS8PS9PS:P\#" \$\" S;S<5      5       V s/ s H  o S=:w  d  M
  U S>4PM     sn -   \#" \$\" S?S@5      5       V s/ s H  o RK                  5       (       d  M  U S>4PM     sn -   / SAQ-   5      r&SB\'SC'   \" SDSE9 " SF SG5      5       r(gs  sn f s  sn f )J    )annotationsN)contextmanager)	dataclassfieldfields)can_colorize
ANSIColors   )commandsconsoleinput)wlen	unbracketdisp_str)trace)CallbackSimpleContextManagerKeySpecCommandName   c                    0 n [        [        [        S5      5       H  n[        X'   M     [        [        [        S5      5       Vs/ s H  o"R	                  5       (       d  M  UPM     sn H  n[
        X'   M     [        =U S'   U S'   U $ s  snf )N   
 )mapchrrangeSYNTAX_SYMBOLisalnumSYNTAX_WORDSYNTAX_WHITESPACE)stcas      %/usr/lib/python3.13/_pyrepl/reader.pymake_default_syntax_tabler&   .   sr    BeCj! "S%*-=-Aa-= >**BtHr#wI >s   B
"B
c                 N   0 n [        [        5      R                  5        H  n[        U[        5      (       d  M  [        U[        5      (       d  M1  UR                  S   R                  5       (       d  MU  XUR                  '   XUR                  R                  SS5      '   M     U $ )Nr   _-)
varsr   values
isinstancetype
issubclassCommand__name__islowerreplace)resultvs     r%   make_default_commandsr5   9   sy    /1F(^""$a:a#9#9ajjm>S>S>U>U!"1::341::%%c3/0 % M    )z\C-abeginning-of-line)z\C-bleft)z\C-c	interrupt)z\C-ddelete)z\C-eend-of-line)z\C-fright)z\C-gcancel)z\C-h	backspace)z\C-jaccept)z	\<return>r?   )z\C-kz	kill-line)z\C-lzclear-screen)z\C-mr?   )z\C-tztranspose-characters)z\C-uzunix-line-discard)z\C-wzunix-word-rubout)z\C-x\C-uzupcase-region)z\C-yyankwin32 ))z\C-zsuspend)z\M-bbackward-word)z\M-czcapitalize-word)z\M-dz	kill-word)z\M-fforward-word)z\M-lzdowncase-word)z\M-tztranspose-words)z\M-uzupcase-word)z\M-yzyank-pop)z\M--	digit-arg)z\M-0rF   )z\M-1rF   )z\M-2rF   )z\M-3rF   )z\M-4rF   )z\M-5rF   )z\M-6rF   )z\M-7rF   )z\M-8rF   )z\M-9rF   )z\M-\nr?   )z\\self-insert)z	\x1b[200~enable_bracketed_paste)z	\x1b[201~disable_bracketed_paste)z\x03zctrl-c       \rG      r   ))z\<up>up)z\<down>down)z\<left>r8   )z
\C-\<left>rD   )z\<right>r<   )z\C-\<right>rE   )z	\<delete>r:   )z\x1b[3~r:   )z\<backspace>r>   )z\M-\<backspace>zbackward-kill-word)z\<end>r;   )z\<home>r7   )z\<f1>help)z\<f2>zshow-history)z\<f3>z
paste-mode)z\EOFend)z\EOHhome'tuple[tuple[KeySpec, CommandName], ...]default_keymapT)slotsc                     \ rS rSr% SrS\S'   \" \S9rS\S'   Sr	S	\S
'   Sr
S\S'   SrS\S'   SrS\S'   SrS\S'   \" \S9rS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S '   \" \S9rS!\S"'   SrS#\S$'   \" \S9rS%\S&'   S'rS(\S)'   \" SS*9rS+\S,'   \" \S9rS-\S.'   \" \S9rS\S/'   \" SS*9rS0\S1'   \" SS*9rS2\S3'   \" SS*9r S2\S4'   \" \S9r!S\S5'   Sr"S\S6'   Sr#S7\S8'   \$ " S9 S:5      5       r%\" \%S9r&S:\S;'   S_S< jr'S`S= jr(SaS> jr)\*SbS? j5       r+ScSdS@ jjr,ScSdSA jjr-ScSdSB jjr.ScSdSC jjr/SeSD jr0SfSE jr1SgShSF jjr2SiSG jr3SjSH jr4S_SI jr5SkSJ jr6SlSK jr7SmSL jr8S_SM jr9SnSN jr:S_SO jr;SoSP jr<S_SQ jr=\>SpSR j5       r?S_SS jr@SqSrST jjrAS_SU jrBS_SV jrCSsSW jrDS_SX jrEStSuSY jjrFSvSZ jrGScSwS[ jjrHSxS\ jrISyS] jrJS^rKg)zReader   a`  The Reader class implements the bare bones of a command reader,
handling such details as editing and cursor motion.  What it does
not support are such things as completion or history support -
these are implemented elsewhere.

Instance variables of note include:

  * buffer:
    A *list* (*not* a string at the moment :-) containing all the
    characters that have been entered.
  * console:
    Hopefully encapsulates the OS dependent stuff.
  * pos:
    A 0-based index into `buffer' for where the insertion point
    is.
  * screeninfo:
    Ahem.  This list contains some info needed to move the
    insertion point around reasonably efficiently.
  * cxy, lxy:
    the position of the insertion point in screen ...
  * syntax_table:
    Dictionary mapping characters to `syntax class'; read the
    emacs docs to see what this means :-)
  * commands:
    Dictionary mapping command names to command classes.
  * arg:
    The emacs-style prefix argument.  It will be None if no such
    argument has been provided.
  * dirty:
    True if we need to refresh the display.
  * kill_ring:
    The emacs-style kill-ring; manipulated with yank & yank-pop
  * ps1, ps2, ps3, ps4:
    prompts.  ps1 is the prompt for a one-line input; for a
    multiline input it looks like:
        ps2> first line of input goes here
        ps3> second and further
        ps3> lines get ps3
        ...
        ps4> and the last one gets ps4
    As with the usual top-level, you can set these to instances if
    you like; str() will be called on them (once) at the beginning
    of each command.  Don't put really long or newline containing
    strings here, please!
    This is just the default policy; you can change it freely by
    overriding get_prompt() (and indeed some standard subclasses
    do).
  * finished:
    handle1 will set this to a true value if a command signals
    that we're done.
zconsole.Consoler   default_factory	list[str]bufferr   intposz->> strps1z/>> ps2z|.. ps3z\__ ps4zlist[list[str]]	kill_ring msgN
int | NoneargFbooldirtyfinished
paste_modein_bracketed_pastezdict[str, type[Command]]r   ztype[Command] | Nonelast_commanddict[str, int]syntax_tablerB   ztuple[tuple[str, str], ...]keymapinitinput.KeymapTranslatorinput_transzlist[input.KeymapTranslator]input_trans_stackscreenlist[tuple[int, list[int]]]
screeninfotuple[int, int]cxylxyscheduled_commandsr   Callback | Nonethreading_hookc                      \ rS rSr% SrS\S'   \" \S9rS\S'   \" SS9r	S	\S
'   \" \S9r
S\S'   \" SS9rS\S'   \" SS9rS\S'   \" SS9rS\S'   SrS\S'           SS jrSS jrSS jrSrg)Reader.RefreshCache   Fri   rm   rY   r[   rw   rr   rx   ry   z	list[int]line_end_offsetsr]   r^   rz   r{   
dimensionsinvalidatedc                .   UR                   U l         UR                  5       U l        UR                  5       U l        UR                  U l        UR
                  U l        UR                  R                  UR                  R                  4U l	        SU l
        g NF)rm   copyrw   ry   r^   r{   r   widthheightr   r   )selfreaderrw   ry   s       r%   update_cache Reader.RefreshCache.update_cache   sk    
 '-&?&?D# ++-DK(oo/DOzzDHzzDH$nn22FNN4I4IIDO$Dr6   c                    U R                   (       a  gUR                  R                  UR                  R                  4nX R                  :g  nUR
                  U R
                  :g  nU=(       d    U(       + $ r   )r   r   r   r   r   rm   )r   r   r   dimensions_changedpaste_changeds        r%   validReader.RefreshCache.valid   s]    --v~~/D/DDJ!+!>"559P9PPM*;m<<r6   c                   U R                   (       a  [        S5      eSn[        UR                  U R                  5      n[	        U R
                  5      nUS:  a(  U R
                  US-
     nX2:  a   X$4$ US-  nUS:  a  M(  SnX$4$ )NzCache is invalidatedr   r
   )r   
ValueErrorminr^   lenr   )r   r   offsetearliest_common_posnum_common_liness        r%   get_cached_location'Reader.RefreshCache.get_cached_location   s     !788F"%fjj$((";"4#8#89"Q&../?!/CD&/ ++ !A% 	 #Q& ++r6   )r{   r   rm   r   r^   rw   ry   N)r   rW   rw   r[   ry   rx   returnNone)r   rW   r   ri   )r   rW   r   rz   )r0   
__module____qualname____firstlineno__rm   __annotations__r   listrw   ry   r   r^   r{   r   r   r   r   r   __static_attributes__rB   r6   r%   RefreshCacher      s    #(D(!$7	727U2C
/C&+D&A)Ae$S$$%0_0&+&7
O7!T!	%!'	%!*	% &A	% 		%	=	,r6   r   last_refresh_cachec                   U R                  5       U l        [        R                  " U R                  SSS9U l        S/ 4/U l        U R                  5       U l        U R                  S4U l	        [        5       U l
        U R
                  U R                  l        U R                  U R                  l        U R                  U R                  l        SU R                  l        g )Ninvalid-keyrG   invalid_clscharacter_clsr   r   r   )collect_keymaprq   r   KeymapTranslatorru   ry   pos2xyr{   r^   r|   r   r   r   r   s    r%   __post_init__Reader.__post_init__  s     ))+ 11KK]-
 r7);;=HHa=(N-1__*&*hh#&*hh#-3*r6   c                    [         $ N)rT   r   s    r%   r   Reader.collect_keymap!  s    r6   c                   SnSnU R                   R                  U 5      (       a  U R                   R                  U 5      u  p!U R                   R                  nX1S2	 U R                   R                  nXAS2	 U R                   R
                  nXQS2	 U R                  nXb-  nU=(       a    U R                  US-
     S:g  nSR                  U R                  US 5      R                  S5      nSn	Sn
[        X5       GHo  u  p[        U5      nSUs=::  a  U::  a  O  OXk4U l        Sn	O(U	(       a!  U
S-  n
XR                  R                  :  a    GO U(       a  SnSnO$U R                  XUs=:  =(       a    S:  Os  5      nSU;   aR  UR!                  S5      u  nnnUR#                  U5        UR#                  U5        UR#                  S/ 45        SU;   a  MR  XmS-   -  nU R%                  U5      u  nn['        U5      u  nn[)        U5      U-   U R                  R*                  -  n[-        SUS	9  US:X  d  U(       dQ  X-S-   -  nUR#                  U5        UR#                  USR                  U5      -   5        UR#                  UU45        GM  UnUn[/        US-   5       H  nSnSnU H/  nUU-   U-   U R                  R*                  :  a    OUS-  nUU-  nM1     [        U5      U:  a  UU-  nS
nS/nOUUS-   -  nSn/ nUR#                  U5        USR                  USU 5      -   U-   nUSU U-   nUR#                  U5        UR#                  UU45        UUS nUUS nSnSnM     GMr     X@l        U R1                  5       U l        U R4                  (       aF  U R4                  R                  S5       H'  nUR#                  U5        UR#                  S/ 45        M)     U R                   R7                  XU5        U$ )zETranslate changes in self.buffer into changes in self.console.screen.r   Nr
   r   re   FTzwrapcount = {wrapcount})	wrapcountrL   )r   r   r   rw   ry   r   r^   r\   joinsplit	enumerater   r|   r   r   
get_prompt	partitionappendprocess_promptr   sumr   r   r   r   r{   rf   r   ) r   r   r   rw   ry   last_refresh_line_end_offsetsr^   prompt_from_cachelinescursor_foundlines_beyond_cursorlnlineline_lenprompt
pre_promptr(   
prompt_lencharschar_widthsr   preprelenwrapindex_to_wrap_beforecolumn
char_widthpostafterrenderrender_widthsmlines                                    r%   calc_screenReader.calc_screen$  s    ""((..'+'>'>'R'RSW'X$F((//$%,,77
()(,(?(?(P(P%)*;<hh#GFQJ(?4(GFG,-33D9!%:HB4yHC#8#7##q(#&)<)<<  $)!-A-A-AB&.(.(8(8(>%
Av-44V<j)!!1b'*	 &.
 a<C!%!4!4V!<FJ!)$E;[)J64<<;M;MMI+yAA~[Q,&-44V<frwwu~56!!:{";<#!)a-0D+,(F&1
!J.74<<;M;MM!,1,*,	 '2
 5z$88"66#!""6"::! "188@ 27751F2F+G#HH4OF$/0E1E$F$NMMM&)%%v}&=>!"6"78E"-.B.C"DKCF1 1G ;x %;;=88-e$!!1b'* . 	,,T:Fr6   c                D    [        U SS9n[        U SS9nU[        U5      4$ )zReturn a tuple with the prompt string and its visible length.

The prompt string has the zero-width brackets recognized by shells
(\x01 and \x02) removed.  The length ignores anything between those
brackets as well as any ANSI escape sequences.
F)including_contentT)r   r   )r   
out_promptvisible_prompts      r%   r   Reader.process_prompt  s,     v?
"6TB4///r6   c                   Uc  U R                   nU R                  nU R                  nUS-  nUS:  aM  UR                  X1   [        5      [        :w  a-  US-  nUS:  a"  UR                  X1   [        5      [        :w  a  M-  US:  aM  UR                  X1   [        5      [        :X  a-  US-  nUS:  a"  UR                  X1   [        5      [        :X  a  M-  US-   $ )zReturn the 0-based index of the word break preceding p most
immediately.

p defaults to self.pos; word boundaries are determined using
self.syntax_table.r
   r   )r^   rp   r\   getr    r   pr"   bs       r%   bow
Reader.bow  s     9AKK	Q1fk2kAFA 1fk2kA1fk2kAFA 1fk2kA1ur6   c                   Uc  U R                   nU R                  nU R                  nU[        U5      :  aV  UR	                  X1   [
        5      [
        :w  a6  US-  nU[        U5      :  a"  UR	                  X1   [
        5      [
        :w  a  M6  U[        U5      :  aV  UR	                  X1   [
        5      [
        :X  a6  US-  nU[        U5      :  a"  UR	                  X1   [
        5      [
        :X  a  M6  U$ )zReturn the 0-based index of the word break following p most
immediately.

p defaults to self.pos; word boundaries are determined using
self.syntax_table.r
   )r^   rp   r\   r   r   r    r   s       r%   eow
Reader.eow  s     9AKK#a&jRVVAD+6+EFA #a&jRVVAD+6+E#a&jRVVAD+6+EFA #a&jRVVAD+6+Er6   c                    Uc  U R                   nU R                  nUS-  nUS:  a  X!   S:w  a  US-  nUS:  a
  X!   S:w  a  M  US-   $ )zaReturn the 0-based index of the line break preceding p most
immediately.

p defaults to self.pos.r
   r   r   )r^   r\   r   r   r   s      r%   bol
Reader.bol  sV    
 9AKK	Q1fFA 1f1ur6   c                    Uc  U R                   nU R                  nU[        U5      :  a&  X!   S:w  a  US-  nU[        U5      :  a
  X!   S:w  a  M  U$ )zaReturn the 0-based index of the line break following p most
immediately.

p defaults to self.pos.r   r
   )r^   r\   r   r   s      r%   eol
Reader.eol  sQ    
 9AKK#a&jQTT\FA #a&jQTT\r6   c                ^    U R                   U   S   [        U R                   U   S   5      -   $ )z#Return the last x-offset for line yr   r
   )ry   r   )r   ys     r%   
max_columnReader.max_column  s.    q!!$s4??1+=a+@'AAAr6   c                2    [        U R                  5      S-
  $ )Nr
   )r   ry   r   s    r%   max_rowReader.max_row  s    4??#a''r6   c                8    U R                   c  U$ U R                   $ )zmReturn any prefix argument that the user has supplied,
returning `default' if there is None.  Defaults to 1.
)rh   )r   defaults     r%   get_argReader.get_arg  s     88Nxxr6   c                   U R                   b  U(       a  SU R                    S3nOU R                  (       a  U R                  (       d  SnOxSU R                  ;   a\  US:X  a  U R                  nOUU R
                  (       a+  XR                  R                  S5      :X  a  U R
                  nOU R                  nOU R                  nU R                  (       a$  [        R                   U [        R                   3nU$ )z@Return what should be in the left-hand margin for line
`lineno'.z(arg: z) z(paste) r   r   )rh   rl   rm   r\   ra   rc   countrb   r`   r   r	   BOLD_MAGENTARESET)r   linenocursor_on_liner   s       r%   r   Reader.get_prompt  s     88NdhhZr*F__T%<%<FT[[ {f(9(9$(??XXF"//09I9I8JKFr6   c                Z    U R                   R                  U R                  5        Xl        g r   )rv   r   ru   )r   itranss     r%   push_input_transReader.push_input_trans  s"    %%d&6&67!r6   c                B    U R                   R                  5       U l        g r   )rv   popru   r   s    r%   pop_input_transReader.pop_input_trans  s    11557r6   c                   SnSnXB:  ac  U R                   U   u  pV[        U5      nU[        U5      -   U R                  R                  :  nU(       a  X7S-
  -  nOX7S-   -  nUS-  nXB:  a  Mc  Sn	U R                   U   S   n
X:  aH  U R                   U   S   U	   S:X  a  U	S-  n	M%  XR                   U   S   U	   -  n
U	S-  n	US-  nX:  a  MH  X0l        g)z%Set pos according to coordinates x, yr   r
   N)ry   r   r   r   r   r^   )r   xr   r^   ir   r   r   in_wrapped_linejcur_xs              r%   setpos_from_xyReader.setpos_from_xy  s    e&*ooa&8#J%F(3{+;;t||?Q?QQOz!z!FA e "1%iq!!$Q'1,Q__Q'*1--EFA1HC i r6   c                F   Su  p/ nU R                   nSUs=::  a  [        U R                  5      ::  d   e   eU[        U R                  5      :X  aR  [        U R                  5      S:  a9  [        U R                  5      S-
  nU R                  U   u  pU[	        U5      -   U4$ U R                   H]  u  p[        U5      nU[	        U5      -   U R
                  R                  :  nU(       a  US-  nXT:  a    OU(       d  US-  nXE-  nUS-  nM_     U[	        USU 5      -   U4$ )z.Return the x, y coordinates of position 'pos'.r   r   r
   N)r^   r   r\   ry   r   r   r   )r   r   r   r   r^   r   r  s          r%   r   Reader.pos2xy  s    
!#hhC+3t{{++++++ #dkk""s4??';a'?DOO$q(A&*ooa&8#JK 00!33'+#J%F(3{+;;t||?Q?QQO!}"!MCFA (7 CDS 122A55r6   c                    [        U5      U R                  U R                  U R                  & U =R                  [        U5      -  sl        SU l        g)z%Insert 'text' at the insertion point.TN)r   r\   r^   r   rj   )r   texts     r%   insertReader.insert1  s7    +/:DHHtxx(CI
r6   c                t    U R                  5       U l        U R                  R                  " U R                  6   g)z.Move the cursor to reflect changes in self.posN)r   r{   r   move_cursorr   s    r%   update_cursorReader.update_cursor7  s%    ;;=  $((+r6   c                `    [        USS5      (       a  U R                  b  SU l        SU l        gg)z6This function is called to allow post command cleanup.kills_digit_argTN)getattrrh   rj   r   cmds     r%   after_commandReader.after_command<  s/    3)400xx#!
DH 1r6   c                    U R                   R                  5         SU l        SU l        U R                  SS2	 SU l        SU l        SU l        U R                  5         U R                  (       aA  U R                  R                  5       nU R                  U/ 45        U R                  (       a  M@  gg! [         a    U R                  5         e f = f)z~Get ready to run.  Call restore when finished.  You must not
write to the console in between the calls to prepare and
restore.NFr   T)r   preparerh   rk   r\   r^   rj   rn   r   BaseExceptionrestorer}   r  do_cmdr  s     r%   r$  Reader.prepareC  s    	LL  "DH!DMADHDJ $D
 %%))--/CKKb	" %%%	  	LLN	s   AB1 1Cc                P    U R                   (       d  g[        XR                   5      $ r   )rn   r.   )r   clss     r%   last_command_isReader.last_command_isX  s      #0011r6   c                8    U R                   R                  5         g)zClean up after a run.N)r   r&  r   s    r%   r&  Reader.restore]  s    r6   c           	   #  V  #    [        U 5       Vs0 s H"  oR                  [        XR                  5      _M$     nn U R                  5         Sv   S H  n[	        XX#   5        M     U R                  5         gs  snf ! S H  n[	        XX#   5        M     U R                  5         f = f7f)z0A context manager to delegate to another reader.N)rf   r`   ra   rb   rc   rl   )r   namer  r&  setattrr$  )r   f
prev_staterh   s       r%   rC   Reader.suspenda  s      >DD\J\ffgdFF33\
J	LLNH:?3 ILLN K
 I:?3 ILLNs&   B))A8B)A= -B)=)B&&B)c                    g)z2Called when a command signals that we're finished.NrB   r   s    r%   finishReader.finishm  s    r6   c                `    SU-   S-   U l         SU l        U R                  R                  5         g )Nz! r   T)rf   rj   r   beep)r   rf   s     r%   errorReader.errorq  s)    #:#
r6   c                H    U R                   (       a  U R                  5         g g r   )rj   refreshr   s    r%   update_screenReader.update_screenv  s    ::LLN r6   c                   U R                   (       a%  U R                  (       a  U R                  S   S:X  d  gU R                  5       U l        U R                  R                  U R                  U R                  5        SU l        g)z#Recalculate and refresh the screen.r   NF)rm   r\   r   rw   r   r=  r{   rj   r   s    r%   r=  Reader.refreshz  sX    ""t{{4;;r?d;R &&(T[[$((3
r6   c                   [        SUS9  [        US   [        5      (       a.  U R                  R	                  US   [        R
                  5      nO[        US   [        5      (       a  US   nOgU" U /UQ76 nUR                  5         U R                  U5        U R                  (       a  U R                  5         OU R                  5         [        U[        R                  5      (       d  X l        [        UR                  5      U l        U R                   (       a+  U R"                  R                  5         U R                  5         gg)z`cmd` is a tuple of "event_name" and "event", which in the current
implementation is always just the "buffer" which happens to be a list
of single-character strings.zreceived command {cmd})r   r   N)r   r,   r_   r   r   invalid_commandr-   dor!  rj   r=  r  	digit_argrn   ri   r6  rk   r   )r   r   command_typecommands       r%   r'  Reader.do_cmd  s    
 	&C0c!fc""==,,SVX5M5MNLA%%q6Lt*c*

7#::LLN #x1122 ,W^^,==LL!KKM r6   c                   U R                   nUc"  S[        R                  ;   a  SSKJn  U" U 5        Ub   U" 5         U R                  R                  nU(       a	   U" 5         g g ! [
         a     N3f = f! [
         a     g f = f)N	threadingr
   )install_threading_hook)r   sysmodules_threading_handlerrL  	Exceptionr   
input_hook)r   r   rL  rQ  s       r%   	run_hooksReader.run_hooks  s    ,,!kS[[&@B"4(%  \\,,
 	    s#   A$ A4 $
A10A14
B Bc                   U R                   (       a  SU l         SU l         U R                  5         U R                  R	                  S5        U R                  R                  SS9nU(       d
  U(       a  MU  gSnUR                  S:X  a  U R                  R                  U5        ODUR                  S:X  a  U R                  5         O#UR                  S:X  a  U R                  5         OSnU(       a  U R                  R                  5       nOUR                  UR                  /nUc  U(       a  GM  gU R                  U5        g)	zHandle a single event.  Wait as long as it takes if block
is true (the default), otherwise return False if no event is
pending.re   Td   Fblockkeyscrollresize)rf   rj   rR  r   wait	get_eventevtru   pushr=  r   datar'  )r   rW  event	translater   s        r%   handle1Reader.handle1  s    
 88DHDJNNLLc"LL***7EIyyE!  %%e,h&h&!	&&**,yy%**-{KKr6   c                X    U R                   R                  U5        U R                  SS9  g )NFrV  )r   	push_charrb  )r   chars     r%   re  Reader.push_char  s"    t$5!r6   c                *   U R                  5          Ub  U" 5         U R                  5         U R                  (       d#  U R                  5         U R                  (       d  M#  U R	                  5       U R                  5         $ ! U R                  5         f = f)z|Read a line.  The implementation of this method also shows
how to drive Reader if you want more control over the event
loop.)r$  r=  rk   rb  get_unicoder&  )r   startup_hooks     r%   readlineReader.readline  sb     			'LLNmm mmm##% LLNDLLNs   AB   B   Bc                z    U R                   X44-   U l         [        R                  " U R                   SSS9U l        g )Nr   rG   r   )rq   r   r   ru   )r   specrH  s      r%   bindReader.bind  s5    kkd_$66 11KK]-
r6   c                8    SR                  U R                  5      $ )z.Return the current buffer as a unicode string.re   )r   r\   r   s    r%   ri  Reader.get_unicode  s    wwt{{##r6   )rh   r   r{   rj   rk   ru   rq   rn   r|   rf   r^   rw   ry   )r   r   )r   rS   )r   r[   )r   r_   r   ztuple[str, int]r   )r   rg   r   r]   )r   r]   r   r]   )r   r]   )r
   )r   r]   r   r]   )r   r]   r   ri   r   r_   )r  rt   r   r   )r  r]   r   r]   r   r   )r   rz   )r  zstr | list[str]r   r   )r   r/   r   r   )r*  r-   r   ri   )r   r   )none)rf   r_   r   r   )r   ztuple[str, list[str]]r   r   )T)rW  ri   r   ri   )rf  zint | bytesr   r   )rj  r~   r   r_   )rn  r   rH  r   r   r   )r   r_   )Lr0   r   r   r   __doc__r   r   r   r\   r^   r`   ra   rb   rc   rd   rf   rh   rj   rk   rl   rm   r5   r   rn   r&   rp   rq   ru   rv   rw   ry   r{   r|   r}   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r  r  r  r   r  r  r!  r$  r+  r&  r   rC   r6  r:  r>  r=  r'  rR  rb  re  rk  ro  ri  r   rB   r6   r%   rW   rW      sN   2h  d3FI3CLCCCC!&t!<I<CMCE4HdJ$$).?T)UH&U)-L&-#(9R#SL.S*,F',*/U*;K';6;D6Q3Qd3FI3.3.?J+? e,C, e,C,$)$$?	?L$&*NO* ,, ,, ,,\ (-\'JJ4$bH 	0 	0" 
B(*"846<,
#*2
 	 	
>$)V" 
$r6   rW   )r   ro   )r   z dict[CommandName, type[Command]]))
__future__r   rM  
contextlibr   dataclassesr   r   r   	_colorizer   r	   re   r   r   r   utilsr   r   r   r   r/   typesr   r   r   r   r   r!   r    r   r&   r5   tupleplatformr   r   isalpharT   r   rW   )r#   s   0r%   <module>r     s  , # 
 % 0 0 . ' & , ,  

 G G
 16a - ; ;@,&,, 	, 		,
 	!, 	, 	, 	, 	, 	!, 	, 	", 	, 	*, 	',  	&!," 	'#,$ 	%,& '"-E',( 	#),* 	%+,, 	-,. 	"/,0 	#1,2 	%3,4 	!5,6 	7,8 	9,: 	;,< 	=,> 	?,@ 	A,B 	C,D 	E,F 	G,H 	I,J 	K,L 	M,N 	O,P 	 Q,R 	1S,T 	2U,V 	W,Z $'sE"cN#;I#;aDy=#;I[-J\ $'sE#sO#<L#<a		=#<L].M^_BD;7 DN r	$ r	$ r	$5 JLs   )	E
6E
E$
0E$
