
    Vh?              	          d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ dZdZ ed      \	  ZZZZZZZZ Z! G d dejD                        Z#e#Z$ e edddd      ddd        eejJ                         G d dejL                               Z' G d de(      Z) G d de'      Z*g dZ+y)z<
Partial in-memory terminal emulator

@author: Jp Calderone
    N)implementer)Version)insults)deferprotocolreactor)Logger)_textattributes)	iterbytes)
deprecateddeprecatedModuleAttribute   (   	   c                   t    e Zd ZdZdZej                  ddddeedfdZ	 e
 edddd            d	        Zd
 Zy)_FormattingStatez
    Represents the formatting state/attributes of a single character.

    Character set, intensity, underlinedness, blinkitude, video
    reversal, as well as foreground and background colors made up a
    character's attributes.
    charsetbold	underlineblinkreverseVideo
foreground
background_subtractingFc	                 t    || _         || _        || _        || _        || _        || _        || _        || _        y Nr   )	selfr   r   r   r   r   r   r   r   s	            L/home/dcms/DCMS/lib/python3.12/site-packages/twisted/conch/insults/helper.py__init__z_FormattingState.__init__3   s>     	"
($$(    Twisted      r   c                 L    |j                         \  }}| j                  ||      S )a<  
        Add a character attribute to a copy of this formatting state.

        @param kw: An optional attribute name and value can be provided with
            a keyword argument.

        @return: A formatting state instance with the new attribute.

        @see: L{DefaultFormattingState._withAttribute}.
        )popitem_withAttribute)r   kwkvs       r   wantOnez_FormattingState.wantOneG   s&     zz|1""1a((r!   c                    g }| j                   r|j                  d       | j                  r|j                  t        j                         | j
                  r|j                  t        j                         | j                  r|j                  t        j                         | j                  r|j                  t        j                         | j                  t        k7  r"|j                  t        | j                  z          | j                  t        k7  r"|j                  t         | j                  z          |r%ddj#                  t%        t&        |            z   dz   S y)Nr   z[;m )r   appendr   r   BOLDr   	UNDERLINEr   BLINKr   REVERSE_VIDEOr   WHITE
FOREGROUNDr   BLACK
BACKGROUNDjoinmapstr)r   attrss     r   toVT102z_FormattingState.toVT102V   s     LLO99LL&>>LL**+::LL'LL../??e#LLdoo56??e#LLdoo56SXXc#uo66<<r!   N)__name__
__module____qualname____doc__compareAttributesr   G0r5   r7   r    r   r   r+   r=    r!   r   r   r      s[    	 

)( 	2q!,-) .)r!   r   r"   r#   r$   z=Use twisted.conch.insults.text.assembleFormattedText instead.ztwisted.conch.insults.helperCharacterAttributec                      e Zd ZdZdD ]   Zedz   Zej                  d      Z ee       " dZ	dZ
dZdZd	Z e       Z e       Zd
 Zd Zd Zd Zd Zd Zd Zd ZdAdZdAdZdAdZdAdZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd  Z(d! Z)d" Z*d# Z+d$ Z,d% Z-d& Z.d' Z/d( Z0d) Z1d* Z2d+ Z3d, Z4d- Z5d. Z6dAd/Z7dAd0Z8dAd1Z9d2 Z:d3 Z;d4 Z<d5 Z=d6 Z>d7 Z?d8 Z@d9 ZAd: ZBd; ZCd< ZDdBd=ZEd> ZFd? ZGy@)CTerminalBufferz)
    An in-memory terminal emulator.
    )s   UP_ARROWs
   DOWN_ARROWs   RIGHT_ARROWs
   LEFT_ARROWs   HOMEs   INSERTs   DELETEs   ENDs   PGUPs   PGDNs   F1s   F2s   F3s   F4s   F5s   F6s   F7s   F8s   F9s   F10s   F11s   F12s    = object()ascii   	   P          c                 &    | j                   |   |   S r   )lines)r   xys      r   getCharacterzTerminalBuffer.getCharacter   s    zz!}Qr!   c                 $    | j                          y r   )resetr   s    r   connectionMadezTerminalBuffer.connectionMade   s    

r!   c                 f    t        |j                  dd            D ]  }| j                  |        y)z
        Add the given printable bytes to the terminal.

        Line feeds in L{bytes} will be replaced with carriage return / line
        feed pairs.
           
s   
N)r   replaceinsertAtCursor)r   databs      r   writezTerminalBuffer.write   s1     4<<w78 	#A"	#r!   c                 B    t        | j                  fi | j                  S r   )r   activeCharsetgraphicRenditionrU   s    r   _currentFormattingStatez&TerminalBuffer._currentFormattingState   s     2 2Ld6K6KLLr!   c                    |dk(  rd| _         y|dk(  r| j                          y|t        j                  j	                  d      v r| j                   | j
                  k\  r| j                          || j                         f}| j                  j                  t        j                  j                        rY|g| j                  | j                     | j                   | j                    | j                  | j                     j                          n&|| j                  | j                     | j                   <   | xj                   dz  c_         yy)a  
        Add one byte to the terminal at the cursor and make consequent state
        updates.

        If b is a carriage return, move the cursor to the beginning of the
        current row.

        If b is a line feed, move the cursor to the next row or scroll down if
        the cursor is already in the last row.

        Otherwise, if b is printable, put it at the cursor position (inserting
        or overwriting as dictated by the current mode) and move the cursor.
           r   rX   rH   r$   N)rP   _scrollDownstring	printableencodewidthnextLinera   modesgetr   IRMrO   rQ   pop)r   r\   chs      r   rZ   zTerminalBuffer.insertAtCursor   s     :DF%Z&""))'22vv#T1134Bzz~~gmm//079d

466"466DFF3

466"&&(-/

466"466*FFaKF 3r!   c                 r    t        |      D cg c]  }| j                  | j                         f  c}S c c}w r   )rangevoidra   )r   rh   is      r   
_emptyLinezTerminalBuffer._emptyLine   s,    EJ5\RD88:;RRRs   #4c                    | xj                   dz  c_         | j                   | j                  k\  rW| xj                   dz  c_         | j                  d= | j                  j                  | j	                  | j
                               y y )Nr$   r   )rQ   heightrO   r0   rs   rh   rU   s    r   rd   zTerminalBuffer._scrollDown   s[    !66T[[ FFaKF

1JJdoodjj9: !r!   c                     | xj                   dz  c_         | j                   dk  rJd| _         | j                  d= | j                  j                  d| j                  | j                               y y )Nr$   r   )rQ   rO   insertrs   rh   rU   s    r   	_scrollUpzTerminalBuffer._scrollUp   sR    !66A:DF

2JJa!<= r!   c                 @    t        d| j                  |z
        | _        y Nr   )maxrQ   r   ns     r   cursorUpzTerminalBuffer.cursorUp       Q
#r!   c                 Z    t        | j                  dz
  | j                  |z         | _        y Nr$   )minru   rQ   r}   s     r   
cursorDownzTerminalBuffer.cursorDown   s     T[[1_dffqj1r!   c                 @    t        d| j                  |z
        | _        y r{   )r|   rP   r}   s     r   cursorBackwardzTerminalBuffer.cursorBackward   r   r!   c                 T    t        | j                  | j                  |z         | _        y r   )r   rh   rP   r}   s     r   cursorForwardzTerminalBuffer.cursorForward   s    TZZ!,r!   c                      || _         || _        y r   rP   rQ   )r   columnlines      r   cursorPositionzTerminalBuffer.cursorPosition   s    r!   c                 p    | j                   j                  | _        | j                   j                  | _        y r   )homerP   rQ   rU   s    r   
cursorHomezTerminalBuffer.cursorHome   s     r!   c                 $    | j                          y r   )rd   rU   s    r   indexzTerminalBuffer.index   s    r!   c                 $    | j                          y r   )ry   rU   s    r   reverseIndexzTerminalBuffer.reverseIndex   s    r!   c                 2    d| _         | j                          y)zW
        Update the cursor position attributes and scroll down if appropriate.
        r   N)rP   rd   rU   s    r   ri   zTerminalBuffer.nextLine   s     r!   c                 >    | j                   | j                  f| _        y r   )rP   rQ   _savedCursorrU   s    r   
saveCursorzTerminalBuffer.saveCursor  s    !VVTVV,r!   c                 :    | j                   \  | _        | _        | ` y r   )r   rP   rQ   rU   s    r   restoreCursorzTerminalBuffer.restoreCursor	  s    **r!   c                 0    |D ]  }d| j                   |<    y )NT)rj   r   rj   r.   s      r   setModeszTerminalBuffer.setModes  s     	!A DJJqM	!r!   c                 L    |D ]  }	 | j                   |=  y # t        $ r Y w xY wr   )rj   KeyErrorr   s      r   
resetModeszTerminalBuffer.resetModes  s5     	AJJqM	     	##c                 0    |D ]  }d| j                   |<    y)aH  
        Enable the given modes.

        Track which modes have been enabled so that the implementations of
        other L{insults.ITerminalTransport} methods can be properly implemented
        to respect these settings.

        @see: L{resetPrivateModes}
        @see: L{insults.ITerminalTransport.setPrivateModes}
        TN)privateModesr   s      r   setPrivateModeszTerminalBuffer.setPrivateModes  s#      	(A#'Da 	(r!   c                 L    |D ]  }	 | j                   |=  y# t        $ r Y w xY w)z
        Disable the given modes.

        @see: L{setPrivateModes}
        @see: L{insults.ITerminalTransport.resetPrivateModes}
        N)r   r   r   s      r   resetPrivateModesz TerminalBuffer.resetPrivateModes&  s:      	A%%a(	  r   c                     d| _         y )Napp
keypadModerU   s    r   applicationKeypadModez$TerminalBuffer.applicationKeypadMode3  	    r!   c                     d| _         y )Nnumr   rU   s    r   numericKeypadModez TerminalBuffer.numericKeypadMode6  r   r!   c                 "    || j                   |<   y r   )charsets)r   charSetwhichs      r   selectCharacterSetz!TerminalBuffer.selectCharacterSet9  s    &er!   c                 .    t         j                  | _        y r   )r   rC   r_   rU   s    r   shiftInzTerminalBuffer.shiftIn<      $ZZr!   c                 .    t         j                  | _        y r   )r   G1r_   rU   s    r   shiftOutzTerminalBuffer.shiftOut?  r   r!   c                       j                   t        j                   _          j                   fd}| _        y )Nc                 (     |        ` _        y r   rZ   r_   r\   foldActiveCharsetr   s    r   rZ   z3TerminalBuffer.singleShift2.<locals>.insertAtCursorG      aD#!1Dr!   )r_   r   G2rZ   r   rZ   r   r   s   ` @@r   singleShift2zTerminalBuffer.singleShift2B  5    --$ZZ	2
 -r!   c                       j                   t        j                   _          j                   fd}| _        y )Nc                 (     |        ` _        y r   r   r   s    r   rZ   z3TerminalBuffer.singleShift3.<locals>.insertAtCursorS  r   r!   )r_   r   G3rZ   r   s   ` @@r   singleShift3zTerminalBuffer.singleShift3N  r   r!   c                     |D ]K  }|t         j                  k(  rddddt        t        d| _        .|t         j
                  k(  rd| j                  d<   Q|t         j                  k(  rd| j                  d<   t|t         j                  k(  rd| j                  d<   |t         j                  k(  rd| j                  d<   	 t        |      }t        |cxk  rt        t        z   k  rn n|t        z
  | j                  d<   t        |cxk  rt        t        z   k  rn n|t        z
  | j                  d	<   /| j                  j                  d
|       N y # t        $ r! | j                  j                  d
|       Y yw xY w)NFr   r   r   r   r   r   Tr   r   r   r   r   r   z-Unknown graphic rendition attribute: {attr!r})attr)r   NORMALr5   r7   r`   r1   r2   r3   r4   intr6   N_COLORSr8   _logerror
ValueError)r   
attributesar*   s       r   selectGraphicRenditionz%TerminalBuffer.selectGraphicRenditionZ  sQ    !	AGNN"!!&"$)"'"')% gll"04%%f-g'''59%%k2gmm#15%%g.g+++8<%%n5AA "Q?*x*??>?*n--l;#qAJ,AA>?*n--l;		KRS ( ?!	* " IIOOGa $ s   >E&E=<E=c                 h    | j                  | j                        | j                  | j                  <   y r   )rs   rh   rO   rQ   rU   s    r   	eraseLinezTerminalBuffer.eraseLine~  s!    !__TZZ8

466r!   c                     | j                   | j                  z
  }| j                  |      | j                  | j                     | j                  d  y r   )rh   rP   rs   rO   rQ   )r   rh   s     r   eraseToLineEndzTerminalBuffer.eraseToLineEnd  s:    

TVV#'+u'=

4664668$r!   c                     | j                  | j                  dz         | j                  | j                     d | j                  dz    y r   )rs   rP   rO   rQ   rU   s    r   eraseToLineBeginningz#TerminalBuffer.eraseToLineBeginning  s4    +/??466A:+F

466<TVVaZ(r!   c                     t        | j                        D cg c]  }| j                  | j                         c}| _        y c c}w r   )rp   ru   rs   rh   rO   r   rr   s     r   eraseDisplayzTerminalBuffer.eraseDisplay  s-    ;@;MNadoodjj1N
Ns   "Ac                     | j                          | j                  | j                  z
  dz
  }t        |      D cg c]  }| j	                  | j
                         c}| j                  | j                  dz   d  y c c}w r   )r   ru   rQ   rp   rs   rh   rO   )r   ru   rr   s      r   eraseToDisplayEndz TerminalBuffer.eraseToDisplayEnd  s\    tvv%)INv#WADOODJJ$?#W

466A:< #Ws   "A:c                     | j                          t        | j                        D cg c]  }| j                  | j                         c}| j
                  d | j                   y c c}w r   )r   rp   rQ   rs   rh   rO   r   s     r   eraseToDisplayBeginningz&TerminalBuffer.eraseToDisplayBeginning  sE    !!#EJ466]S

 ;S

8TVVSs   "A%c                    | j                   | j                     | j                  | j                  |z   = | j                   | j                     j                  | j	                  t        | j                  | j                  z
  |                   y r   )rO   rQ   rP   extendrs   r   rh   r}   s     r   deleteCharacterzTerminalBuffer.deleteCharacter  s`    JJtvvtvv
23

466!!$//#djj4666I12M"NOr!   c                     t        |      D cg c]  }| j                  | j                         c}| j                  | j                  | j                   | j                  | j
                  d = y c c}w r   )rp   rs   rh   rO   rQ   ru   r   r~   rr   s      r   
insertLinezTerminalBuffer.insertLine  sO    LQRSH&Uqttzz'B&U

466DFF#JJt{{}% 'Vs   "A.c                     | j                   | j                  | j                  |z   = | j                   j                  t        |      D cg c]  }| j	                  | j
                         c}       y c c}w r   )rO   rQ   r   rp   rs   rh   r   s      r   
deleteLinezTerminalBuffer.deleteLine  sP    JJtvv
*+

aI14??4::6IJIs   	"A3c                 2    | j                   | j                  fS r   r   rU   s    r   reportCursorPositionz#TerminalBuffer.reportCursorPosition  s    r!   c                 z   t        j                  dd      | _        dx| _        | _        i | _        i | _        | j                  t         j                  j                  t         j                  j                  g       d| _
        t         j                  | _        ddddt        t        d| _        t         j                  t         j                   t         j"                  t         j                   t         j$                  t         j&                  t         j(                  t         j*                  i| _        | j/                          y )Nr   r   Fr   )r   Vectorr   rP   rQ   rj   r   r   	AUTO_WRAPCURSOR_MODEnumericKeypadrC   r_   r5   r7   r`   CS_USr   r   CS_ALTERNATEr   CS_ALTERNATE_SPECIALr   r   rU   s    r   rT   zTerminalBuffer.reset  s    NN1a(	
!!++W-A-A-M-MN	
 #$ZZ!!
 JJJJJJ,,JJ44	
 	r!   c                 .    t        dt        |             y )NzCould not handle)printrepr)r   bufs     r   unhandledControlSequencez'TerminalBuffer.unhandledControlSequence  s     $s),r!   c                 8   g }| j                   D ]y  }g }d}|D ]K  \  }}|| j                  ur|j                  |       t        |      }1|j                  | j                         M |j                  dj                  |d |              { dj                  |      S )Nr   r!   rX   )rO   rq   r0   lenfillr9   )r   rO   Lr   lengthrn   r   s          r   	__bytes__zTerminalBuffer.__bytes__  s     		1ACF *DTYY&JJrN XFJJtyy)* LL#gv,/0		1 zz%  r!   c                     t        d      )Nz%Unimplemented: TerminalBuffer.getHostNotImplementedErrorrU   s    r   getHostzTerminalBuffer.getHost      !"IJJr!   c                     t        d      )Nz%Unimplemented: TerminalBuffer.getPeerr  rU   s    r   getPeerzTerminalBuffer.getPeer  r  r!   c                     t        d      )Nz,Unimplemented: TerminalBuffer.loseConnectionr  rU   s    r   loseConnectionzTerminalBuffer.loseConnection  s    !"PQQr!   c                     t        d      )Nz+Unimplemented: TerminalBuffer.writeSequencer  r   r[   s     r   writeSequencezTerminalBuffer.writeSequence  s    !"OPPr!   c                     t        d      )Nz5Unimplemented: TerminalBuffer.horizontalTabulationSetr  rU   s    r   horizontalTabulationSetz&TerminalBuffer.horizontalTabulationSet  s    !C
 	
r!   c                     t        d      )Nz-Unimplemented: TerminalBuffer.tabulationClearr  rU   s    r   tabulationClearzTerminalBuffer.tabulationClear      !"QRRr!   c                     t        d      )Nz0Unimplemented: TerminalBuffer.tabulationClearAllr  rU   s    r   tabulationClearAllz!TerminalBuffer.tabulationClearAll  s    !"TUUr!   c                     t        d      )Nz.Unimplemented: TerminalBuffer.doubleHeightLiner  )r   tops     r   doubleHeightLinezTerminalBuffer.doubleHeightLine  s    !"RSSr!   c                     t        d      )Nz-Unimplemented: TerminalBuffer.singleWidthLiner  rU   s    r   singleWidthLinezTerminalBuffer.singleWidthLine  r  r!   c                     t        d      )Nz-Unimplemented: TerminalBuffer.doubleWidthLiner  rU   s    r   doubleWidthLinezTerminalBuffer.doubleWidthLine  r  r!   N)r$   )T)Hr>   r?   r@   rA   keyID	execBytesdecodeexecStrexecTAB	BACKSPACErh   ru   r   objectrq   r	   r   rR   rV   r]   ra   rZ   rs   rd   ry   r   r   r   r   r   r   r   r   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   r  r  r  r  r  r  r  r  r  r  rD   r!   r   rG   rG   x   s    0 N*	""7+W58 CIEFD8D8D #M:S;>$2$--!(  '((
-
-"H9>GOX
TP&K 4-!KKRQ
SVTSSr!   rG   c                       e Zd Zy)ExpectationTimeoutN)r>   r?   r@   rD   r!   r   r#  r#    s    r!   r#  c                   :    e Zd ZdZd Zd Zd Zd Zd Zde	fdZ
y)	ExpectableBufferr   c                 <    t         j                  |        g | _        y r   )rG   rV   
_expectingrU   s    r   rV   zExpectableBuffer.connectionMade   s    %%d+r!   c                 P    t         j                  | |       | j                          y r   )rG   r]   _checkExpectedr
  s     r   r]   zExpectableBuffer.write  s    T4(r!   c                 <    t         j                  |        d| _        y r{   )rG   r   _markrU   s    r   r   zExpectableBuffer.cursorHome  s    !!$'
r!   c                 V    |j                  t                      | j                          y r   )errbackr#  r)  )r   ds     r   _timeoutExpectedz!ExpectableBuffer._timeoutExpected  s    			$&'r!   c                    | j                         | j                  d  }| j                  r| j                  d   \  }}}|r|j                         s| j                  d= ?|j	                  |      D ]i  }|r|j                          | j                  d= | xj                  |j                         z  c_        ||j                         d  }|j                  |        n y | j                  ry y r{   )r   r+  r'  activefinditercancelendcallback)r   sexprtimerdeferredmatchs         r   r)  zExpectableBuffer._checkExpected  s    NNTZZ\*oo$(OOA$6!D%U\\^OOA&q) 	LLNOOA&

eiik)
eiikm$!!%(	  oor!   Nc                     t        j                         }d }|r|j                  || j                  |      }| j                  j                  t        j                  |      ||f       | j                          |S r   )	r   Deferred	callLaterr/  r'  r0   recompiler)  )r   
expressiontimeout	schedulerr.  r8  s         r   expectzExpectableBuffer.expect"  sc    NN''1F1FJE

: 6qABr!   )r>   r?   r@   r+  rV   r]   r   r/  r)  r   rC  rD   r!   r   r%  r%    s,    E$ *. r!   r%  )rE   rG   r%  ),rA   r>  re   zope.interfacer   incrementalr   twisted.conch.insultsr   twisted.internetr   r   r   twisted.loggerr	   twisted.pythonr
   twisted.python.compatr   twisted.python.deprecater   r   r6   r8   rp   r7   REDGREENYELLOWBLUEMAGENTACYANr5   r   _FormattingStateMixinr   rE   ITerminalTransportProtocolrG   	Exceptionr#  r%  __all__rD   r!   r   <module>rW     s   
 
  &  ) 5 5 ! * + J

BG( ?sE64$xK<< K\ &  Ir1a C"	 W''(}SX&& }S )}S@	 	,~ ,^ Gr!   