
    hl                    F   S r SSKJr  SSKrSSKJrJr  SSKJr	   " S S\
5      r " S S	5      r " S
 S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS rS rS r " S S \5      r " S! S"\5      r " S# S$\5      r " S% S&\5      r " S' S(\5      r " S) S*\5      r " S+ S,\5      r " S- S.\5      r  " S/ S0\ 5      r! " S1 S2\ 5      r" " S3 S4\5      r#S5 r$ " S6 S7\5      r%g)8z<
Simple insults-based widget library

@author: Jp Calderone
    )annotationsN)helperinsults)textc                      \ rS rSrSrSrg)
YieldFocus   z$
Input focus manipulation exception
 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r
       c/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/conch/insults/window.pyr   r      s    r   r   c                  ,    \ rS rSrS rS rS rS rSrg)BoundedTerminalWrapper   c                    X l         X0l        X@l        XPl        Xl        UR
                  U l        UR                  U l        UR                  U l        UR                  U l        UR                  U l	        g N)
widthheightxoffyoffterminalcursorForwardselectCharacterSetselectGraphicRendition
saveCursorrestoreCursor)selfr   r   r   r   r   s         r   __init__BoundedTerminalWrapper.__init__   s`    
		 %33"*"="=&.&E&E#"--%33r   c                    U R                   R                  U R                  [        U R                  U5      -   U R
                  [        U R                  U5      -   5      $ r   )r   cursorPositionr   minr   r   r   )r"   xys      r   r&   %BoundedTerminalWrapper.cursorPosition$   sF    }}++IIDJJ**DIIDKK8K,K
 	
r   c                b    U R                   R                  U R                  U R                  5      $ r   )r   r&   r   r   r"   s    r   
cursorHome!BoundedTerminalWrapper.cursorHome)   s!    }}++DIItyyAAr   c                8    U R                   R                  U5      $ r   )r   write)r"   datas     r   r0   BoundedTerminalWrapper.write,   s    }}""4((r   )
r   r   r!   r    r   r   r   r   r   r   N)	r   r   r   r   r#   r&   r-   r0   r   r
   r   r   r   r      s    
4

B)r   r   c                      \ rS rSr% SrSrSrSrS\S'   Sr	S\S'   S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rSrg)Widget0   FNz
int | Noner   r   c                    U R                   (       d  SU l         U R                  b7  U R                  R                   (       d  U R                  R                  5         g g g NT)dirtyparentrepaintr,   s    r   r:   Widget.repaint7   s>    zzDJ;;"4;;+<+<KK! ,="r   c                    SU l         g r7   )r8   r,   s    r   filthyWidget.filthy=   s	    
r   c                H    U R                  5         U R                  XU5        g r   )r=   drawr"   r   r   r   s       r   redrawWidget.redraw@   s    		%*r   c                    XR                   :w  d   X R                  :w  d  U R                  (       a&  Xl         X l        SU l        U R                  XU5        g g NF)r   r   r8   renderrA   s       r   r@   Widget.drawD   s@    JJ&KK"74::J KDJKKx0	 <Fr   c                    g r   r
   rA   s       r   rF   Widget.renderK       r   c                    g r   r
   r,   s    r   sizeHintWidget.sizeHintN   s    r   c                    US:X  a  U R                  U5        g US:X  a  U R                  5         g U[        R                  ;   a  U R	                  X5        g U R                  X5        g )N   	   )tabReceivedbackspaceReceivedr   FUNCTION_KEYSfunctionKeyReceivedcharacterReceivedr"   keyIDmodifiers      r   keystrokeReceivedWidget.keystrokeReceivedQ   sU    E>X&g""$g+++$$U5""53r   c                    [        5       er   r   r"   rX   s     r   rQ   Widget.tabReceived[   s
    lr   c                2    SU l         U R                  5         g)zl
Called when focus is being given to this widget.

May raise YieldFocus is this widget does not want focus.
TNfocusedr:   r,   s    r   focusReceivedWidget.focusReceived_   s     r   c                2    SU l         U R                  5         g rE   r`   r,   s    r   	focusLostWidget.focusLosth   s    r   c                    g r   r
   r,   s    r   rR   Widget.backspaceReceivedl   rJ   r   c                    Un[        U[        5      (       d  UR                  S5      nSUSS -   n[        XS 5      nUb	  U" U5        g g )Nutf-8func_   )
isinstancestrdecodegetattr)r"   rW   rX   name
methodNamefuncs         r   rT   Widget.functionKeyReceivedo   sR    %%%;;w'D tAbz)
t.N r   c                    g r   r
   rV   s      r   rU   Widget.characterReceived|   rJ   r   )r8   ra   r   r   )r   r   r   r   ra   r9   r8   r   __annotations__r   r:   r=   rB   r@   rF   rL   rY   rQ   rb   re   rR   rT   rU   r   r
   r   r   r4   r4   0   sf    GFEE:FJ"+14r   r4   c                  P    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
 rS rS rSrg)ContainerWidget   zN
@ivar focusedChild: The contained widget which currently has
focus, or None.
NFc                <    [         R                  U 5        / U l        g r   )r4   r#   childrenr,   s    r   r#   ContainerWidget.__init__   s    r   c                   UR                   b   eXl         U R                  R                  U5        U R                  c(  U R                  (       a   UR                  5         Xl        U R                  5         g ! [         a     Nf = fr   )r9   r}   appendfocusedChildra   rb   r   r:   r"   childs     r   addChildContainerWidget.addChild   sq    ||###U#$*##% %*!	  s   A7 7
BBc                    UR                   U L d   eS Ul         U R                  R                  U5        U R                  5         g r   )r9   r}   remover:   r   s     r   remChildContainerWidget.remChild   s6    ||t###U#r   c                t    U R                    H  nUR                  5         M     [        R                  U 5        g r   )r}   r=   r4   )r"   chs     r   r=   ContainerWidget.filthy   s%    --BIIK  dr   c                N    U R                    H  nUR                  XU5        M     g r   )r}   r@   )r"   r   r   r   r   s        r   rF   ContainerWidget.render   s    --BGGE8,  r   c                   U R                  5         U R                  bM  U R                  R                  5         U R                  nS U l         U R                  R	                  U5      S-   nOSnU[        U R                  5      :  a3   U R                  U   R                  5         U R                  U   U l        g [        5       e! [
         a    [        5       ef = f! [         a    US-  n Of = fU[        U R                  5      :  a  M  NS)Nrl   r   )	r:   r   re   r}   index
ValueErrorr   lenrb   )r"   r   curFocuss      r   changeFocusContainerWidget.changeFocus   s    (''),,L $D#==..|<q@ HT]]++h'557 %)MM($;!l  # l"#  A T]]++s   C C CC-,C-c                2    U R                  5         SU l        g r7   )r   ra   r,   s    r   rb   ContainerWidget.focusReceived   s    r   c                    U R                   b   U R                   R                  X5        g [
        R                  XU5        g ! [         a#    U R                  5         U R	                  5          g f = fr   )r   rY   r   r   r:   r4   rV   s      r   rY   !ContainerWidget.keystrokeReceived   s_    (!!33ED
 $$T(;	    "s   A *A/.A/)r}   ra   r   )r   r   r   r   r   r   ra   r#   r   r   r=   rF   r   rb   rY   r   r
   r   r   rz   rz      s;    
 LG
-0<r   rz   c                  >    \ rS rSrSrSrS rSrS rS r	S r
S	 rS
rg)	TopWindow   a  
A top-level container object which provides focus wrap-around and paint
scheduling.

@ivar painter: A no-argument callable which will be invoked when this
widget needs to be redrawn.

@ivar scheduler: A one-argument callable which will be invoked with a
no-argument callable and should arrange for it to invoked at some point in
the near future.  The no-argument callable will cause this widget and all
its children to be redrawn.  It is typically beneficial for the no-argument
callable to be invoked at the end of handling for whatever event is
currently active; for example, it might make sense to call it at the end of
L{twisted.conch.insults.insults.ITerminalProtocol.keystrokeReceived}.
Note, however, that since calls to this may also be made in response to no
apparent event, arrangements should be made for the function to be called
even if an event handler such as C{keystrokeReceived} is not on the call
stack (eg, using
L{reactor.callLater<twisted.internet.interfaces.IReactorTime.callLater>}
with a short timeout).
Tc                F    [         R                  U 5        Xl        X l        g r   )rz   r#   painter	scheduler)r"   r   r   s      r   r#   TopWindow.__init__   s      &"r   Nc                    U R                   c*  [        5       U l         U R                  U R                  5        [        R                  U 5        g r   )
_paintCallobjectr   _paintrz   r:   r,   s    r   r:   TopWindow.repaint   s3    ??"$hDONN4;;'%r   c                2    S U l         U R                  5         g r   )r   r   r,   s    r   r   TopWindow._paint   s    r   c                     [         R                  U 5        g ! [         a*     [         R                  U 5         g ! [         a      g f = ff = fr   )rz   r   r   r,   s    r   r   TopWindow.changeFocus   sI    	''- 	++D1 	s$    
A:
AAAAc                r     [         R                  XU5        g ! [         a    U R                  5          g f = fr   )rz   rY   r   r   rV   s      r   rY   TopWindow.keystrokeReceived  s2    	--d8D 		s    66)r   r   r   )r   r   r   r   r   ra   r#   r   r:   r   r   rY   r   r
   r   r   r   r      s.    , G#
 J&r   r   c                       \ rS rSrS rS rSrg)AbsoluteBoxi
  c                    [        [        U R                  5      5       H+  nU R                  U   S   UL d  M  XU4U R                  U'     g    [        SU5      e)Nr   zNo such child)ranger   r}   r   )r"   r   r(   r)   ns        r   	moveChildAbsoluteBox.moveChild  sT    s4==)*A}}Q"e+$)a=a  +
 _e44r   c                x    U R                    H*  u  pEn[        X1U-
  X&-
  XV5      nUR                  XU5        M,     g r   )r}   r   r@   )r"   r   r   r   r   r(   r)   wraps           r   rF   AbsoluteBox.render  s6    HB1)(AIvz1PDGGE4( &r   r
   N)r   r   r   r   r   rF   r   r
   r   r   r   r   
  s    5)r   r   c                  D    \ rS rSr\" S5      u  rrr\4S jrS r	S r
Srg)_Boxi     c                :    [         R                  U 5        Xl        g r   )rz   r#   gravity)r"   r   s     r   r#   _Box.__init__  s      &r   c                D   SnSnU R                    H  nUR                  5       nUc  SnU R                  S:X  a2  US   c  S nO
Ub  X$S   -  nUS   c  S nME  Ub  [        XS   5      nMX  MZ  US   c  S nOUb  [        X$S   5      nUS   c  S nM~  Uc  M  XS   -  nM     X!4$ )Nr   NNrl   )r}   rL   variableDimensionmax)r"   r   r   r   hints        r   rL   _Box.sizeHint   s    --B;;=D|#%%*7? E&!W$E7?!F' a1F ( 7? E&Aw/E7?!F'1g%F-  0 }r   c                D   U R                   (       d  g Sn/ nU R                    HI  nUR                  5       nUc  SnXpR                     c  US-  nUR                  XpR                     5        MK     X4U R                     n[	        S U 5       5      n	U(       a  [        X-
  U-  5      n
S=p[        XPR                   5       H\  u  pUc  W
nXpU R                  S:X  a  UnOUn[        UUUUU5      nUR                  XU5        U R                  S:X  a  X-  nMX  X-  nM^     g )Nr   r   rl   c              3  .   #    U  H  oc  M  Uv   M     g 7fr   r
   ).0ws     r   	<genexpr>_Box.render.<locals>.<genexpr>L  s     :5a5s   	)	r}   rL   r   r   sumintzipr   r@   )r"   r   r   r   greedywantsr   r   length	totalWantleftForGreedywidthOffsetheightOffsetwantsubWidth	subHeightr   s                    r   rF   _Box.render=  s*   }}--B;;=D|#**+3!LL4456   !7!78:5::	!3v =>M%&&E==1HD|$"'i%%* 	)D GGH.%%*#$+ 2r   )r   N)r   r   r   r   r   TOPCENTERBOTTOMr#   rL   rF   r   r
   r   r   r   r     s$    (C% :*%r   r   c                      \ rS rSrSrSrg)HBoxij  r   r
   Nr   r   r   r   r   r   r
   r   r   r   r   j      r   r   c                      \ rS rSrSrSrg)VBoxin  rl   r
   Nr   r
   r   r   r   r   n  r   r   r   c                      \ rS rSrS rSrg)Packerir  c                   U R                   (       d  g [        [        U R                   5      S-  S-   5      n[        U5       Vs/ s H  n[	        5       PM     nn[        U R                   5       H$  u  pWXe[        U5      -     R                  U5        M&     [        5       n[        UR                  U5        UR                  XU5        g s  snf )Ng      ?)
r}   r   r   r   r   	enumerater   r   maprF   )	r"   r   r   r   rootr   boxesr   hs	            r   rF   Packer.renders  s    }}3t}}%,s23!&t-A-t}}-EAc%j.!**2. .FAJJ	) .s   C
r
   N)r   r   r   r   rF   r   r
   r   r   r   r   r  s    
*r   r   c                  @    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
rg)Canvasi  FNc                R    [         R                  U 5        U R                  SS5        g Nrl   )r4   r#   resizer,   s    r   r#   Canvas.__init__  s    Aqr   c                   [         R                   " SSU-  U-  5      nU R                  bX  [        [        XR                  5      5       H6  n[        [        X R
                  5      5       H  nXU4   X1U-  U-   '   M     M8     X0l        Xl        X l        U R                  U:  a
  US-
  U l        U R                  U:  a  US-
  U l        g g )NB    rl   )arraycontentsr   r'   _width_heightr(   r)   )r"   r   r   r   r(   r)   s         r   r   Canvas.resize  s    ;;sD5L6$9:==$3ukk23s6<<89A.2a4jHQY]+ : 4 !66U?QYDF66VaZDF r   c                H    Uu  p#U R                   U R                  U-  U-      $ r   r   r   )r"   r   r(   r)   s       r   __getitem__Canvas.__getitem__  s%    }}dkkAo233r   c                H    Uu  p4X R                   U R                  U-  U-   '   g r   r   )r"   r   valuer(   r)   s        r   __setitem__Canvas.__setitem__  s"    /4t{{Q!+,r   c                h    [         R                   " SS[        U R                  5      -  5      U l        g )Nr   r   )r   r   r   r,   s    r   clearCanvas.clear  s"    CDMM0B)BCr   c                |   U(       a  U(       d  g XR                   :w  d  X R                  :w  a  U R                  X5        [        U5       Ho  nUR	                  SU5        U R
                  U R                   U-  U R                   U-  U R                   -    R                  5       nUS U nUR                  U5        Mq     g Nr   )r   r   r   r   r&   r   tobytesr0   )r"   r   r   r   ir   s         r   rF   Canvas.render  s    FKK6\\#9KK&vA##Aq)==a$++/DKK"?gi  <DNN4  r   )r   r   r   r(   r)   )r   r   r   r   ra   r   r#   r   r   r   r   rF   r   r
   r   r   r   r     s+    GH 45D!r   r   c                
   U R                  [        R                  [        R                  5        U R	                  X!5        U R                  SX2-
  -  5        U R                  [        R                  [        R                  5        g )N   q)r   r   
CS_DRAWINGG0r&   r0   CS_US)r   r)   leftrights       r   horizontalLiner    sU     2 2GJJ?D$NN7el+,wzz:r   c                $   U R                  [        R                  [        R                  5        [	        X#5       H%  nU R                  X5        U R                  S5        M'     U R                  [        R                  [        R                  5        g )N   x)r   r   r  r	  r   r&   r0   r
  )r   r(   topbottomr   s        r   verticalLiner    s_     2 2GJJ?3%w   wzz:r   c                   Uu  p4Uu  pVU R                  [        R                  [        R                  5        U R	                  X45        U R                  S5        U R                  SUS-
  -  5        U R                  S5        [        US-
  5       HP  nU R	                  XCU-   S-   5        U R                  S5        U R                  US-
  5        U R                  S5        MR     U R	                  SX6-   S-
  5        U R                  S5        U R                  SUS-
  -  5        U R                  S	5        U R                  [        R                  [        R                  5        g
)z
Draw a rectangle

@type position: L{tuple}
@param position: A tuple of the (top, left) coordinates of the rectangle.
@type dimension: L{tuple}
@param dimension: A tuple of the (width, height) size of the rectangle.
   lr        krl   r  r      m   jN)	r   r   r  r	  r&   r0   r   r   r
  )r   position	dimensionr  r  r   r   r   s           r   	rectangler    s    KSOU 2 2GJJ?C&NN7NN7eai()NN76A:Agk2wuqy)w	 
 As|a/0NN7NN7eai()NN7wzz:r   c                  >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)Borderi  c                Z    [         R                  U 5        Xl        X R                  l        g r   )r4   r#   	containeer9   r"   r  s     r   r#   Border.__init__  s    " $r   c                6    U R                   R                  5       $ r   )r  rb   r,   s    r   rb   Border.focusReceived  s    ~~++--r   c                6    U R                   R                  5       $ r   )r  re   r,   s    r   re   Border.focusLost  s    ~~''))r   c                8    U R                   R                  X5      $ r   )r  rY   rV   s      r   rY   Border.keystrokeReceived  s    ~~//@@r   c                    U R                   R                  5       nUc  SnUS   c  S nOUS   S-   nUS   c  S nX#4$ US   S-   nX#4$ )Nr   r   r  rl   )r  rL   )r"   r   r(   r)   s       r   rL   Border.sizeHint  sf    ~~&&(<D7?AQ!A7?A t Q!Atr   c                b    U R                   R                  5         [        R                  U 5        g r   r  r=   r4   r,   s    r   r=   Border.filthy      dr   c                   U R                   R                  (       a  UR                  S5        [        USX45        UR                  S5        [	        X1S-
  US-
  SS5      nU R                   R                  US-
  US-
  U5        g )N   [31m)r   r      [0mr  rl   )r  ra   r0   r  r   r@   )r"   r   r   r   r   s        r   rF   Border.render  sk    >>!!NN;'(FUO4z"%h	6A:q!LEAIvz48r   )r  N)r   r   r   r   r#   rb   re   rY   rL   r=   rF   r   r
   r   r   r  r    s&    %
.*A9r   r  c                  ,    \ rS rSrS rS rS rS rSrg)Buttoni  c                F    [         R                  U 5        Xl        X l        g r   )r4   r#   labelonPress)r"   r5  r6  s      r   r#   Button.__init__	  s    
r   c                0    [        U R                  5      S4$ r   )r   r5  r,   s    r   rL   Button.sizeHint  s    4::!!r   c                2    US:X  a  U R                  5         g g N   )r6  rV   s      r   rU   Button.characterReceived  s    E>LLN r   c                    UR                  SS5        U R                  (       a"  UR                  SU R                  -   S-   5        g UR                  U R                  5        g )Nr   s   [1mr0  )r&   ra   r0   r5  rA   s       r   rF   Button.render  sC    1%<<NN:

2Z?@NN4::&r   )r5  r6  N)	r   r   r   r   r#   rL   rU   rF   r   r
   r   r   r3  r3    s    
"'r   r3  c                  J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)	TextInputi  c                b    [         R                  U 5        X l        Xl        SU l        SU l        g )Nr   r   )r4   r#   onSubmitmaxwidthbuffercursor)r"   rD  rC  s      r   r#   TextInput.__init__  s&      r   c                    US U R                    U l        [        U R                  5      U l        U R	                  5         g r   )rD  rE  r   rF  r:   r"   r   s     r   setTextTextInput.setText%  s-    ?T]]+$++&r   c                p    U R                   S:  a&  U =R                   S-  sl         U R                  5         g g Nr   rl   )rF  r:   r]   s     r   func_LEFT_ARROWTextInput.func_LEFT_ARROW*  s)    ;;?KK1KLLN r   c                    U R                   [        U R                  5      :  a&  U =R                   S-  sl         U R                  5         g g r   )rF  r   rE  r:   r]   s     r   func_RIGHT_ARROWTextInput.func_RIGHT_ARROW/  s3    ;;T[[))KK1KLLN *r   c                    U R                   S:  aa  U R                  S U R                   S-
   U R                  U R                   S  -   U l        U =R                   S-  sl         U R                  5         g g rM  )rF  rE  r:   r,   s    r   rR   TextInput.backspaceReceived4  sX    ;;?++&7a84;;t{{};UUDKKK1KLLN r   c                P   US:X  a  U R                  U R                  5        g [        U R                  5      U R                  :  aa  U R                  S U R                   U-   U R                  U R                  S  -   U l        U =R                  S-  sl        U R                  5         g g )Nr<  rl   )rC  rE  r   rD  rF  r:   rV   s      r   rU   TextInput.characterReceived:  s~    E>MM$++&4;;$--/KK$++.6T[[]9SS  q  0r   c                $    U R                   S-   S4$ r   )rD  r,   s    r   rL   TextInput.sizeHintE  s    }}q !##r   c                   U R                  5       nUR                  SS5        U R                  (       a  UR                  US U R                   5        [	        X4U R                  U R                  S-    =(       d    S5        UR                  X@R                  S-   S  5        UR                  SU R
                  [        U5      -
  S-   -  5        g U R
                  [        U5      -
  nUR                  USU-  -   5        g )Nr   rl   r      _)_renderTextr&   ra   r0   rF  rD  r   )r"   r   r   r   currentTextmores         r   rF   TextInput.renderH  s    &&(1%<<NN;}568t{{QGO4PNN;{{Q'89:NN44==3{3C#Ca#GHI==3{#33DNN;45r   c                    U R                   $ r   )rE  r,   s    r   r[  TextInput._renderTextT  s    {{r   )rE  rF  rD  rC  N)r   r   r   r   r#   rJ  rN  rQ  rR   rU   rL   rF   r[  r   r
   r   r   rA  rA    s/    


	$
6r   rA  c                      \ rS rSrS rSrg)PasswordInputiX  c                2    S[        U R                  5      -  $ )N*)r   rE  r,   s    r   r[  PasswordInput._renderTextY  s    S%%%r   r
   N)r   r   r   r   r[  r   r
   r   r   rb  rb  X  s    &r   rb  c                  :    \ rS rSrSrS
S jrS rS rS rS r	S	r
g)
TextOutputi]  r   Nc                :    [         R                  U 5        Xl        g r   )r4   r#   size)r"   ri  s     r   r#   TextOutput.__init__`  s    	r   c                    U R                   $ r   )ri  r,   s    r   rL   TextOutput.sizeHintd  s    yyr   c                    UR                  SS5        U R                  S U nUR                  USU[        U5      -
  -  -   5        g Nr   r   )r&   r   r0   r   )r"   r   r   r   r   s        r   rF   TextOutput.renderg  sA    1%yy% tdec$i&7889r   c                0    Xl         U R                  5         g r   )r   r:   rI  s     r   rJ  TextOutput.setTextl  s    	r   c                    [        5       er   r\   r,   s    r   rb   TextOutput.focusReceivedp  s
    lr   )ri  r   r   )r   r   r   r   r   r#   rL   rF   rJ  rb   r   r
   r   r   rg  rg  ]  s     D:
r   rg  c                  >    \ rS rSr\" S5      u  rrS\4S jrS rSr	g)TextOutputAreait  r  Nc                :    [         R                  X5        X l        g r   )rg  r#   	longLines)r"   ri  rw  s      r   r#   TextOutputArea.__init__w  s    D'"r   c                   SnU R                   R                  5       n/ nU(       a  U R                  U R                  :X  a  UR	                  S5      n[        U[        5      (       d  UR                  S5      n/ n[        R                  " Xq5       H:  n	[        U	[        5      (       d  U	R                  S5      n	UR                  U	5        M<     UR                  U=(       d    S/5        O#UR                  UR	                  S5      S U 5        [        U5      U:  a  O	U(       a  M  [        US U 5       H(  u  pJUR!                  SU5        UR#                  U
5        M*     g )Nr   rj   r   )r   
splitlinesrw  WRAPpoprn   ro   rp   tptext
greedyWrapbytesencoder   extendr   r   r&   r0   )r"   r   r   r   r   
inputLinesoutputLineslinewrappedLineswrappedLineLs              r   rF   TextOutputArea.render{  s"   YY))+
~~*!~~a(!$,,;;w/D!#)#4#4T#AK%k599&1&8&8&A ''4 $B ""<#8C59"":>>!#4Ve#<=;6) j k'623DA##Aq)NN1 4r   )rw  )
r   r   r   r   r   r{  TRUNCATEr#   rF   r   r
   r   r   ru  ru  t  s    1XND( D #r   ru  c                      \ rS rSrSrSr\S 5       r\R                  S 5       r\S 5       r	\	R                  S 5       r	Sr
SrS	 rS
 rS rSrg)Viewporti  r   c                    U R                   $ r   )_xOffsetr,   s    r   xOffsetViewport.xOffset      }}r   c                R    U R                   U:w  a  Xl         U R                  5         g g r   )r  r:   r"   r   s     r   r  r    !    ==E!!MLLN "r   c                    U R                   $ r   )_yOffsetr,   s    r   yOffsetViewport.yOffset  r  r   c                R    U R                   U:w  a  Xl         U R                  5         g g r   )r  r:   r  s     r   r  r    r  r         c                .   [         R                  U 5        Xl        X R                  l        [        R
                  " 5       U l        U R                  U R                  l        U R                  U R                  l
        U R                  R                  5         g r   )r4   r#   r  r9   r   TerminalBuffer_bufr   r   r   r   connectionMader   s     r   r#   Viewport.__init__  s\    " $))+	++		<<				  "r   c                b    U R                   R                  5         [        R                  U 5        g r   r+  r,   s    r   r=   Viewport.filthy  r-  r   c                   U R                   R                  U R                  U R                  U R                  5        [        U R                  R                  U R                  U R                  U-    5       H  u  pEUR                  SU5        Sn[        XPR                  U R                  U-    5       H3  u  nu  pxXpR                  R                  L a  SnUR                  U5        M5     Xa:  d  M{  UR                  SX-
  S-
  -  5        M     g )Nr   r   rl   )r  r@   r   r   r  r   linesr  r&   r  voidr0   )	r"   r   r   r   r)   r  r   r   attrs	            r   rF   Viewport.render  s    DKKtyyA !IIOODMMDMMF,BC
GA ##Aq)A!*4PU@U+V!W:B'Br" "X ytuy1}56
r   )r  r  r  r  N)r   r   r   r   r  r  propertyr  setterr  r   r   r#   r=   rF   r   r
   r   r   r  r    s}    HH  ^^ 
   ^^ 
 FG#7r   r  c                  &    \ rS rSrS rS rS rSrg)
_Scrollbari  c                H    [         R                  U 5        Xl        SU l        g )N        )r4   r#   onScrollpercent)r"   r  s     r   r#   _Scrollbar.__init__  s     r   c           	     x    [        S[        SU R                  S5      5      5      U l        U R	                  5         g )N      ?r  rm   r'   r   r  r  r:   r,   s    r   smaller_Scrollbar.smaller  )    3Cr): ;<r   c           	     x    [        S[        SU R                  S5      5      5      U l        U R	                  5         g )Nr  r  rl   r  r,   s    r   bigger_Scrollbar.bigger  r  r   )r  r  N)r   r   r   r   r#   r  r  r   r
   r   r   r  r    s    
r   r  c                  <    \ rS rSrS rS rS rSrSrSr	Sr
S	 rS
rg)HorizontalScrollbari  c                    g)Nr   r
   r,   s    r   rL   HorizontalScrollbar.sizeHint      r   c                $    U R                  5         g r   r  r]   s     r   rN  #HorizontalScrollbar.func_LEFT_ARROW      r   c                $    U R                  5         g r   r  r]   s     r   rQ  $HorizontalScrollbar.func_RIGHT_ARROW      r   u   ◀u   ▶   ░   ▓c                4   UR                  SS5        US-
  n[        X@R                  -  5      nXE-
  nU R                  U R                  U-  -   U R
                  -   U R                  U-  -   U R                  -   nUR                  UR                  S5      5        g )Nr   r   rj   )	r&   r   r  _left_bar_slider_rightr0   r  )r"   r   r   r   r   beforeaftermes           r   rF   HorizontalScrollbar.render  s    1%AIQ%&
JJyy6!#ll yy5 " kk	 	 	ryy)*r   r
   N)r   r   r   r   rL   rN  rQ  r  r  r  r  rF   r   r
   r   r   r  r    s,     /E0FDG+r   r  c                  <    \ rS rSrS rS rS rSrSrSr	Sr
S	 rS
rg)VerticalScrollbari  c                    g)N)rl   Nr
   r,   s    r   rL   VerticalScrollbar.sizeHint  r  r   c                $    U R                  5         g r   r  r]   s     r   func_UP_ARROWVerticalScrollbar.func_UP_ARROW  r  r   c                $    U R                  5         g r   r  r]   s     r   func_DOWN_ARROW!VerticalScrollbar.func_DOWN_ARROW  r  r   u   ▲u   ▼r  r  c                <   UR                  SS5        [        U R                  US-
  -  5      nUR                  U R                  R                  S5      5        [        SUS-
  5       Hs  nUR                  SU5        XTS-   :w  a,  UR                  U R                  R                  S5      5        MI  UR                  U R                  R                  S5      5        Mu     UR                  SUS-
  5        UR                  U R                  R                  S5      5        g )Nr   r  rj   rl   )
r&   r   r  r0   _upr  r   r  r  _down)r"   r   r   r   knobr  s         r   rF   VerticalScrollbar.render	  s    1%4<<6A:./txxw/0q&1*%A##Aq)AXtyy//89t||227;< & 	6A:.tzz((12r   r
   N)r   r   r   r   rL   r  r  r  r  r  r  rF   r   r
   r   r   r  r    s,     +C.EDG3r   r  c                  N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)ScrolledAreai  z
A L{ScrolledArea} contains another widget wrapped in a viewport and
vertical and horizontal scrollbars for moving the viewport around.
c                   [         R                  U 5        [        U5      U l        [	        U R
                  5      U l        [        U R                  5      U l	        U R                  U R                  U R                  4 H	  nXl
        M     g r   )r4   r#   r  	_viewportr  _horizScroll_horizr  _vertScroll_vertr9   )r"   r  r   s      r   r#   ScrolledArea.__init__  s`    !),)$*;*;<&t'7'78
djj8AH 9r   c                    U R                   =R                  U-  sl        [        SU R                   R                  5      U R                   l        U R                   R                  S-  $ Nr   g      9@)r  r  r   r"   r   s     r   r  ScrolledArea._horizScroll&  I    !#!$Q(>(>!?~~%%,,r   c                    U R                   =R                  U-  sl        [        SU R                   R                  5      U R                   l        U R                   R                  S-  $ r  )r  r  r   r  s     r   r  ScrolledArea._vertScroll+  r  r   c                8    U R                   R                  5         g r   )r  r  r]   s     r   r  ScrolledArea.func_UP_ARROW0  s    

r   c                8    U R                   R                  5         g r   )r  r  r]   s     r   r  ScrolledArea.func_DOWN_ARROW3  s    

r   c                8    U R                   R                  5         g r   )r  r  r]   s     r   rN  ScrolledArea.func_LEFT_ARROW6  s    r   c                8    U R                   R                  5         g r   )r  r  r]   s     r   rQ  ScrolledArea.func_RIGHT_ARROW9  s    r   c                    U R                   R                  5         U R                  R                  5         U R                  R                  5         [        R                  U 5        g r   )r  r=   r  r  r4   r,   s    r   r=   ScrolledArea.filthy<  s>    

dr   c                   [        X1S-
  US-
  SS5      nU R                  R                  US-
  US-
  U5        U R                  (       a  UR	                  S5        [        USSUS-
  5        [        USSUS-
  5        U R                  R                  SUS-
  [        USUS-
  US-
  S5      5        U R                  R                  US[        X1SSUS-
  5      5        UR	                  S5        g )Nr  rl   r/  r   r0  )	r   r  r@   ra   r0   r  r  r  r  )r"   r   r   r   wrappers        r   rF   ScrolledArea.renderB  s    (19fqj!QOEAIvz7;<<NN;'xAuqy1Xq!VaZ0

vz1(Avz5ST9VWX	
 	1,XaFQJO	
 	z"r   )r  r  r  N)r   r   r   r   r   r#   r  r  r  r  rN  rQ  r=   rF   r   r
   r   r   r  r    s4    
-
-
#r   r  c                    U R                  5         U R                  [        [        R                  5      5        U R                  U5        U R                  5         U R                  5         g r   )r    r   ro   r   REVERSE_VIDEOr0   r!   r   )r   r   s     r   rF  rF  R  sK    ##C(=(=$>?NN2r   c                  P    \ rS rSrSrSrSS jrS rS rS r	S r
S	 rS
 rS rSrg)	SelectioniZ  r   Nc                    [         R                  U 5        Xl        X l        X0l        Ub)  [        [        [        U R                  5      5      U l        g g r   )	r4   r#   sequenceonSelect
minVisibler   r   r   r   )r"   r  r  r  s       r   r#   Selection.__init__a  s?      $!c#t}}56DK "r   c                N    U R                   b  U R                  U R                   4$ g r   )r  r   r,   s    r   rL   Selection.sizeHinti  s$    ??&;;// 'r   c                    U R                   S:  aK  U =R                   S-  sl         U R                  S:  a  U =R                  S-  sl        U R                  5         g g rM  )focusedIndexrenderOffsetr:   r]   s     r   r  Selection.func_UP_ARROWm  sN    q "  1$!!Q&!LLN	 !r   c                    U R                   S:w  a'  U =R                  U R                   -  sl        SU l         O([        SU R                  U R                  -
  5      U l        U R	                  5         g r  )r
  r	  r   r   r:   r]   s     r   	func_PGUPSelection.func_PGUPt  sV    !!2!22 !D #At'8'84;;'F GDr   c                    U R                   [        U R                  5      S-
  :  aX  U =R                   S-  sl         U R                  U R                  S-
  :  a  U =R                  S-  sl        U R                  5         g g r   )r	  r   r  r
  r   r:   r]   s     r   r  Selection.func_DOWN_ARROW|  sd    s4==1A55"  4;;?2!!Q&!LLN	 6r   c                   U R                   U R                  S-
  :w  a  U R                  U R                   -
  S-
  nX R                  -   [        U R                  5      :  a%  [        U R                  5      U R                  -
  S-
  nU =R                  U-  sl        U R                  S-
  U l         O>[        [        U R                  5      S-
  U R                  U R                  -   5      U l        U R                  5         g r   )r
  r   r	  r   r  r'   r:   )r"   rX   changes      r   	func_PGDNSelection.func_PGDN  s    a/[[4#4#44q8F)))S-??T]]+d.?.??!C' $aD #DMM"Q&(9(9DKK(G!D 	r   c                b    US:X  a)  U R                  U R                  U R                     5        g g r;  )r  r  r	  rV   s      r   rU   Selection.characterReceived  s)    E>MM$--(9(9:; r   c           	        X l         U R                  U R                  -
  nU[        U R                  5      U-
  :  a"  [        S[        U R                  5      U-
  5      nU R                  XDU-    n[        U5       H  u  pgUR                  SU5        X`R                  :X  a}  UR                  5         U R                  (       a3  [        [        R                  5      [        [        R                  5      4nO[        [        R                  5      4nUR                  " U6   US U n	UR                  U	SU[        U	5      -
  -  -   5        X`R                  :X  d  M  UR!                  5         M     g rn  )r   r	  r
  r   r  r   r   r&   r    ra   ro   r   r  BOLDr   r0   r!   )
r"   r   r   r   startelementsr   elemodesr   s
             r   rF   Selection.render  s    !!D$5$553t}}%..3t}}-67E==8)FA##Aq)%%%##%<< 5 56GLL8IIE !6!679E//7v;DNN4453t9+<#=>?%%%&&( *r   )r   r	  r   r  r  r
  r  r   )r   r   r   r   r	  r
  r#   rL   r  r  r  r  rU   rF   r   r
   r   r   r   r   Z  s6    L L70<)r   r   )&r   
__future__r   r   twisted.conch.insultsr   r   twisted.pythonr   r}  	Exceptionr   r   r4   rz   r   r   r   r   r   r   r   r  r  r  r  r3  rA  rb  rg  ru  r  r  r  r  r  rF  r   r
   r   r   <module>r"     sM   #  1 ) ) )2M M`M<f M<`7 7t)/ )N%? N%b4 4 *_ *.!V .!b;;;<'9V '9T'V '*8 8v&I &
 .Z >77v 77t +* +<3
 3:8#6 8#vN) N)r   