HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/twisted/conch/insults/__pycache__/window.cpython-38.pyc
U


W[�l�@s�dZddlZddlmZmZddlmZddlm	Z	m
ZGdd�de�Z
Gdd	�d	e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Zdd�Zdd�Zd d!�ZGd"d#�d#e�ZGd$d%�d%e�ZGd&d'�d'e�ZGd(d)�d)e�ZGd*d+�d+e�Z Gd,d-�d-e �Z!Gd.d/�d/e�Z"Gd0d1�d1e�Z#Gd2d3�d3e#�Z$Gd4d5�d5e#�Z%Gd6d7�d7e�Z&d8d9�Z'Gd:d;�d;e�Z(dS)<z<
Simple insults-based widget library

@author: Jp Calderone
�N)�insults�helper)�text)�_PY3�	_bytesChrc@seZdZdZdS)�
YieldFocusz,
    Input focus manipulation exception
    N)�__name__�
__module__�__qualname__�__doc__�rr�>/usr/lib/python3/dist-packages/twisted/conch/insults/window.pyrsrc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BoundedTerminalWrappercCsJ||_||_||_||_||_|j|_|j|_|j|_|j|_|j	|_	dS�N)
�width�height�xoff�yoff�terminal�
cursorForward�selectCharacterSet�selectGraphicRendition�
saveCursor�
restoreCursor)�selfrrrrrrrr
�__init__szBoundedTerminalWrapper.__init__cCs*|j�|jt|j|�|jt|j|��Sr)r�cursorPositionr�minrrr)r�x�yrrr
r$s�z%BoundedTerminalWrapper.cursorPositioncCs|j�|j|j�Sr)rrrr�rrrr
�
cursorHome+s�z!BoundedTerminalWrapper.cursorHomecCs|j�|�Sr)r�write)r�datarrr
r"0szBoundedTerminalWrapper.writeN)rr	r
rrr!r"rrrr
rs
rc@s�eZdZdZdZdZdZZdd�Zdd�Z	dd�Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�WidgetFNcCs,|jsd|_|jdk	r(|jjs(|j��dS�NT)�dirty�parent�repaintr rrr
r(;szWidget.repaintcCs
d|_dSr%)r&r rrr
�filthyBsz
Widget.filthycCs|��|�|||�dSr)r)�draw�rrrrrrr
�redrawFsz
Widget.redrawcCs>||jks||jks|jr:||_||_d|_|�|||�dS�NF)rrr&�renderr+rrr
r*Ks
zWidget.drawcCsdSrrr+rrr
r.Ssz
Widget.rendercCsdSrrr rrr
�sizeHintWszWidget.sizeHintcCsN|dkr|�|�n6|dkr&|��n$|tjkr>|�||�n|�||�dS)N�	�)�tabReceived�backspaceReceivedrZ
FUNCTION_KEYS�functionKeyReceived�characterReceived�r�keyID�modifierrrr
�keystrokeReceived[s

zWidget.keystrokeReceivedcCs
t��dSr�r�rr8rrr
r2fszWidget.tabReceivedcCsd|_|��dS)z�
        Called when focus is being given to this widget.

        May raise YieldFocus is this widget does not want focus.
        TN��focusedr(r rrr
�
focusReceivedkszWidget.focusReceivedcCsd|_|��dSr-r<r rrr
�	focusLostuszWidget.focusLostcCsdSrrr rrr
r3zszWidget.backspaceReceivedcCs<|}t|t�s|�d�}t|d|d�}|dk	r8||�dS)N�utf-8Zfunc_)�
isinstance�str�decode�getattr)rr7r8�name�funcrrr
r4~s

zWidget.functionKeyReceivedcCsdSrrr6rrr
r5�szWidget.characterReceived)rr	r
r=r'r&rrr(r)r,r*r.r/r9r2r>r?r3r4r5rrrr
r$5s"
	r$c@sXeZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dS)�ContainerWidgetzZ
    @ivar focusedChild: The contained widget which currently has
    focus, or None.
    NFcCst�|�g|_dSr)r$r�childrenr rrr
r�s
zContainerWidget.__init__cCsd|jdkst�||_|j�|�|jdkrX|jrXz|��Wntk
rPYnX||_|��dSr)	r'�AssertionErrorrH�append�focusedChildr=r>rr(�r�childrrr
�addChild�szContainerWidget.addChildcCs,|j|kst�d|_|j�|�|��dSr)r'rIrH�remover(rLrrr
�remChild�szContainerWidget.remChildcCs"|jD]}|��qt�|�dSr)rHr)r$)r�chrrr
r)�s

zContainerWidget.filthycCs|jD]}|�|||�qdSr)rHr*)rrrrrQrrr
r.�s
zContainerWidget.rendercCs�|��|jdk	rZ|j��|j}d|_z|j�|�d}Wq^tk
rVt��Yq^Xnd}|t|j�kr�z|j|��Wntk
r�|d7}Yq^X|j||_dSq^t��dS)N�r)	r(rKr?rH�index�
ValueErrorr�lenr>)rrKZcurFocusrrr
�changeFocus�s$

zContainerWidget.changeFocuscCs|��d|_dSr%)rVr=r rrr
r>�szContainerWidget.focusReceivedcCsV|jdk	rDz|j�||�WqRtk
r@|��|��YqRXnt�|||�dSr)rKr9rrVr(r$r6rrr
r9�s
z!ContainerWidget.keystrokeReceived)rr	r
rrKr=rrNrPr)r.rVr>r9rrrr
rG�srGc@s@eZdZdZdZdd�ZdZdd�Zdd	�Zd
d�Z	dd
�Z
dS)�	TopWindowaM
    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).
    TcCst�|�||_||_dSr)rGr�painter�	scheduler)rrXrYrrr
r�s
zTopWindow.__init__NcCs,|jdkrt�|_|�|j�t�|�dSr)�
_paintCall�objectrY�_paintrGr(r rrr
r(s
zTopWindow.repaintcCsd|_|��dSr)rZrXr rrr
r\
szTopWindow._paintcCsLzt�|�Wn8tk
rFzt�|�Wntk
r@YnXYnXdSr)rGrVrr rrr
rVszTopWindow.changeFocuscCs4zt�|||�Wntk
r.|��YnXdSr)rGr9rrVr6rrr
r9szTopWindow.keystrokeReceived)rr	r
rr=rrZr(r\rVr9rrrr
rW�s
rWc@seZdZdd�Zdd�ZdS)�AbsoluteBoxcCsHtt|j��D]*}|j|d|kr|||f|j|<qDqtd|��dS)Nrz
No such child)�rangerUrHrT)rrMrr�nrrr
�	moveChild"s
zAbsoluteBox.moveChildcCs<|jD]0\}}}t|||||||�}|�|||�qdSr)rHrr*)rrrrrQrr�wraprrr
r.+szAbsoluteBox.renderN)rr	r
r`r.rrrr
r]!s	r]c@s6eZdZed�\ZZZefdd�Zdd�Zdd�Z	dS)	�_Box�cCst�|�||_dSr)rGr�gravity)rrdrrr
r5s
z
_Box.__init__cCs�d}d}|jD]�}|��}|dkr&d}|jdkr�|ddkrBd}n|dk	rV||d7}|ddkrhd}q�|dk	r�t||d�}q|ddkr�d}n|dk	r�t||d�}|ddkr�d}q|dk	r||d7}q||fS)Nr�NNrR)rHr/�variableDimension�max)rrrrQ�hintrrr
r/:s0

z
_Box.sizeHintcCs|js
dSd}g}|jD]>}|��}|dkr0d}||jdkrF|d7}|�||j�q||f|j}tdd�|D��}	|r�t||	|�}
d}}t||j�D]n\}
}|
dkr�|
}
||}}|jdkr�|
}n|
}t|||||�}|�|||�|jdk�r||
7}q�||
7}q�dS)NrrerRcSsg|]}|dk	r|�qSrr)�.0�wrrr
�
<listcomp>gsz_Box.render.<locals>.<listcomp>)	rHr/rfrJ�sum�int�ziprr*)rrrrZgreedyZwantsrQrhZlengthZ	totalWantZ
leftForGreedyZwidthOffsetZheightOffsetZwantZsubWidthZ	subHeightrarrr
r.XsD


�
z_Box.renderN)
rr	r
r^ZTOPZCENTERZBOTTOMrr/r.rrrr
rb2srbc@seZdZdZdS)�HBoxrN�rr	r
rfrrrr
ro�sroc@seZdZdZdS)�VBoxrRNrprrrr
rq�srqc@seZdZdd�ZdS)�Packerc	Cs�|js
dStt|j�dd�}dd�t|�D�}t|j�D]\}}||t|��|�q<t�}t|j|�|�|||�dS)Ng�?cSsg|]
}t��qSr)rq)rir_rrr
rk�sz!Packer.render.<locals>.<listcomp>)	rHrmrUr^�	enumeraterNro�mapr.)	rrrr�rootZboxesr_rQ�hrrr
r.�sz
Packer.renderN)rr	r
r.rrrr
rr�srrc@sDeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dS)�CanvasFNcCst�|�|�dd�dS�NrR)r$r�resizer rrr
r�s
zCanvas.__init__cCs�t�dd||�}|jdk	rbtt||j��D]2}tt||j��D]}|||f||||<qBq.||_||_||_|j|kr�|d|_|j|kr�|d|_dS)N�B� rR)�array�contentsr^r�_width�_heightrr)rrrr}rrrrr
ry�s



z
Canvas.resizecCs|\}}|j|j||Sr�r}r~)rrSrrrrr
�__getitem__�szCanvas.__getitem__cCs |\}}||j|j||<dSrr�)rrS�valuerrrrr
�__setitem__�szCanvas.__setitem__cCst�ddt|j��|_dS)Nrzr{)r|rUr}r rrr
�clear�szCanvas.clearcCs�|r|sdS||jks ||jkr,|�||�t|�D]t}|�d|�trn|j|j||j||j���}n$|j|j||j||j���}|d|�}|�	|�q4dS�Nr)
r~rryr^rrr}�tobytesZtostringr")rrrr�irrrr
r.�s��
z
Canvas.render)rr	r
r=r}rryr�r�r�r.rrrr
rw�srwcCsF|�tjtj�|�||�|�td�||�|�tjtj�dS)N�q)rr�
CS_DRAWING�G0rr"�chr�CS_US)rr�left�rightrrr
�horizontalLine�sr�cCsN|�tjtj�t||�D]}|�||�|�td��q|�tjtj�dS)N�x)	rrr�r�r^rr"r�r�)rr�topZbottomr_rrr
�verticalLine�s
r�cCs|\}}|\}}|�tjtj�|�||�|�td��|�td�|d�|�td��t|d�D]B}|�|||d�|�td��|�|d�|�td��qj|�d||d�|�td��|�td�|d�|�td	��|�tj	tj�d
S)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���krRr�r�m�jN)
rrr�r�rr"r�r^rr�)rZpositionZ	dimensionr�r�rrr_rrr
�	rectangle�s"	r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�BordercCst�|�||_||j_dSr)r$r�	containeer'�rr�rrr
rs
zBorder.__init__cCs
|j��Sr)r�r>r rrr
r>szBorder.focusReceivedcCs
|j��Sr)r�r?r rrr
r?szBorder.focusLostcCs|j�||�Sr)r�r9r6rrr
r9szBorder.keystrokeReceivedcCsZ|j��}|dkrd}|ddkr(d}n|dd}|ddkrFd}n|dd}||fS)Nrerr�rR)r�r/)rrhrrrrr
r/s
zBorder.sizeHintcCs|j��t�|�dSr�r�r)r$r rrr
r),s
z
Border.filthycCs`|jjr|�d�t|d||f�|�d�t||d|ddd�}|j�|d|d|�dS)N�)rr�r�rR)r�r=r"r�rr*)rrrrrarrr
r.1s

z
Border.renderN)
rr	r
rr>r?r9r/r)r.rrrr
r�
sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�ButtoncCst�|�||_||_dSr)r$r�label�onPress)rr�r�rrr
r<s
zButton.__init__cCst|j�dfSrx)rUr�r rrr
r/BszButton.sizeHintcCs|dkr|��dS�N�
)r�r6rrr
r5FszButton.characterReceivedcCs8|�dd�|jr(|�d|jd�n|�|j�dS)Nrsr�)rr=r"r�r+rrr
r.Ksz
Button.renderN)rr	r
rr/r5r.rrrr
r�;sr�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�	TextInputcCs&t�|�||_||_d|_d|_dS)N�r)r$r�onSubmit�maxwidth�buffer�cursor)rr�r�rrr
rUs

zTextInput.__init__cCs(|d|j�|_t|j�|_|��dSr)r�r�rUr�r(�rrrrr
�setText]szTextInput.setTextcCs$|jdkr |jd8_|��dS�NrrR)r�r(r;rrr
�func_LEFT_ARROWcs
zTextInput.func_LEFT_ARROWcCs*|jt|j�kr&|jd7_|��dSrx)r�rUr�r(r;rrr
�func_RIGHT_ARROWiszTextInput.func_RIGHT_ARROWcCsJ|jdkrF|jd|jd�|j|jd�|_|jd8_|��dSr�)r�r�r(r rrr
r3os
&zTextInput.backspaceReceivedcCsf|dkr|�|j�nLt|j�|jkrb|jd|j�||j|jd�|_|jd7_|��dS)Nr�rR)r�r�rUr�r�r(r6rrr
r5vs&zTextInput.characterReceivedcCs|jddfSrx)r�r rrr
r/�szTextInput.sizeHintcCs�|��}|�dd�|jr�|�|d|j��t|||j|jd�pHd�|�||jdd��|�d|jt|�d�n |jt|�}|�|d|�dS)NrrRr{�_)�_renderTextrr=r"r�r�rU)rrrrZcurrentTextZmorerrr
r.�szTextInput.rendercCs|jSr)r�r rrr
r��szTextInput._renderTextN)rr	r
rr�r�r�r3r5r/r.r�rrrr
r�Ts

r�c@seZdZdd�ZdS)�
PasswordInputcCsdt|j�S)N�*)rUr�r rrr
r��szPasswordInput._renderTextN)rr	r
r�rrrr
r��sr�c@s:eZdZdZd
dd�Zdd�Zdd�Zd	d
�Zdd�ZdS)�
TextOutputr�NcCst�|�||_dSr)r$r�size)rr�rrr
r�s
zTextOutput.__init__cCs|jSr)r�r rrr
r/�szTextOutput.sizeHintcCs8|�dd�|jd|�}|�|d|t|��dS�Nrr{)rrr"rU)rrrrrrrr
r.�szTextOutput.rendercCs||_|��dSr)rr(r�rrr
r��szTextOutput.setTextcCs
t��dSrr:r rrr
r>�szTextOutput.focusReceived)N)	rr	r
rrr/r.r�r>rrrr
r��s
r�c@s.eZdZed�\ZZdefdd�Zdd�ZdS)�TextOutputArear�NcCst�||�||_dSr)r�r�	longLines)rr�r�rrr
r�szTextOutputArea.__init__cCs�d}|j��}g}|r�|j|jkr�|�d�}t|t�s@|�d�}g}t�	||�D]"}	t|	t
�sh|	�d�}	|�|	�qP|�
|p�dg�n|�|�d�d|��t|�|krq�qt|d|��D]\}}
|�d|�|�|
�q�dS)Nrr@r�)r�
splitlinesr��WRAP�poprArBrC�tptextZ
greedyWrap�bytes�encoderJ�extendrUrsrr")rrrrr_Z
inputLinesZoutputLines�lineZwrappedLinesZwrappedLine�Lrrr
r.�s(





zTextOutputArea.render)rr	r
r^r�ZTRUNCATErr.rrrr
r��sr�c@sXeZdZdZdZdd�Zee��Zdd�Zee��ZdZdZ	dd	�Z
d
d�Zdd
�ZdS)�ViewportrcCsdd�}dd�}||fS)NcSs|jSr)�_xOffsetr rrr
�get�szViewport.xOffset.<locals>.getcSs|j|kr||_|��dSr)r�r(�rr�rrr
�set�s
zViewport.xOffset.<locals>.setr�r�r�rrr
�xOffset�szViewport.xOffsetcCsdd�}dd�}||fS)NcSs|jSr)�_yOffsetr rrr
r��szViewport.yOffset.<locals>.getcSs|j|kr||_|��dSr)r�r(r�rrr
r��s
zViewport.yOffset.<locals>.setrr�rrr
�yOffset�szViewport.yOffset��cCsDt�|�||_||j_t��|_|j|j_|j	|j_
|j��dSr)r$rr�r'rZTerminalBuffer�_bufr~rrrZconnectionMader�rrr
r�s



zViewport.__init__cCs|j��t�|�dSrr�r rrr
r)s
zViewport.filthyc	Cs�|j�|j|j|j�t|jj|j|j|��D]v\}}|�d|�d}t||j	|j	|��D]&\}\}}||jj
kr~d}|�|�qb||kr2|�d||d�q2dS)Nrr{rR)r�r*r~rr�rs�linesr�rr�Zvoidr")	rrrrrr�r_rQ�attrrrr
r.	s$$zViewport.renderN)
rr	r
r�r�r��propertyr�r~rrr)r.rrrr
r��s

r�c@s$eZdZdd�Zdd�Zdd�ZdS)�
_ScrollbarcCst�|�||_d|_dS)N�)r$r�onScroll�percent)rr�rrr
rs
z_Scrollbar.__init__cCs$tdtd|�d���|_|��dS)N��?r�����rrgr�r�r(r rrr
�smaller sz_Scrollbar.smallercCs$tdtd|�d���|_|��dS)Nr�r�rRr�r rrr
�bigger%sz_Scrollbar.biggerN)rr	r
rr�r�rrrr
r�sr�c@s<eZdZdd�Zdd�Zdd�ZdZdZd	Zd
Z	dd�Z
d
S)�HorizontalScrollbarcCsdS)Nrxrr rrr
r/,szHorizontalScrollbar.sizeHintcCs|��dSr�r�r;rrr
r�0sz#HorizontalScrollbar.func_LEFT_ARROWcCs|��dSr�r�r;rrr
r�4sz$HorizontalScrollbar.func_RIGHT_ARROWu◀u▶�░�▓cCsd|�dd�|d}t||j�}||}|j|j||j|j||j}|�|�d��dS)Nrrcr@)	rrmr��_left�_bar�_slider�_rightr"r�)rrrrr_ZbeforeZafter�merrr
r.=s&zHorizontalScrollbar.renderN)rr	r
r/r�r�r�r�r�r�r.rrrr
r�+sr�c@s<eZdZdd�Zdd�Zdd�ZdZdZd	Zd
Z	dd�Z
d
S)�VerticalScrollbarcCsdS)N)rRNrr rrr
r/HszVerticalScrollbar.sizeHintcCs|��dSrr�r;rrr
�
func_UP_ARROWLszVerticalScrollbar.func_UP_ARROWcCs|��dSrr�r;rrr
�func_DOWN_ARROWPsz!VerticalScrollbar.func_DOWN_ARROWu▲u▼r�r�cCs�|�dd�t|j|d�}|�|j�d��td|d�D]B}|�d|�||dkrn|�|j�d��q>|�|j�d��q>|�d|d�|�|j	�d��dS)Nrr�r@rR)
rrmr�r"�_upr�r^r�r��_down)rrrrZknobr�rrr
r.YszVerticalScrollbar.renderN)rr	r
r/r�r�r�r�r�r�r.rrrr
r�Gsr�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�ScrolledAreaz�
    A L{ScrolledArea} contains another widget wrapped in a viewport and
    vertical and horizontal scrollbars for moving the viewport around.
    cCsLt�|�t|�|_t|j�|_t|j�|_	|j|j|j	fD]
}||_
q<dSr)r$rr��	_viewportr��_horizScroll�_horizr��_vertScroll�_vertr')rr�rjrrr
rms

zScrolledArea.__init__cCs.|jj|7_td|jj�|j_|jjdS�Nrg9@)r�r�rg�rr_rrr
r�wszScrolledArea._horizScrollcCs.|jj|7_td|jj�|j_|jjdSr�)r�r�rgr�rrr
r�}szScrolledArea._vertScrollcCs|j��dSr)r�r�r;rrr
r��szScrolledArea.func_UP_ARROWcCs|j��dSr)r�r�r;rrr
r��szScrolledArea.func_DOWN_ARROWcCs|j��dSr)r�r�r;rrr
r��szScrolledArea.func_LEFT_ARROWcCs|j��dSr)r�r�r;rrr
r��szScrolledArea.func_RIGHT_ARROWcCs,|j��|j��|j��t�|�dSr)r�r)r�r�r$r rrr
r)�s


zScrolledArea.filthycCs�t||d|ddd�}|j�|d|d|�|jr@|�d�t|dd|d�t|dd|d�|j�d|dt|d|d|dd��|j�|dt||dd|d��|�d�dS)Nr�rRr�rr�)	rr�r*r=r"r�r�r�r�)rrrr�wrapperrrr
r.�s
( zScrolledArea.renderN)
rr	r
rrr�r�r�r�r�r�r)r.rrrr
r�hs
r�cCs6|��|�ttj��|�|�|��|��dSr)rrrBr�
REVERSE_VIDEOr"rr)rrQrrr
r��s

r�c@sVeZdZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�ZdS)�	SelectionrNcCs:t�|�||_||_||_|dk	r6ttt|j��|_dSr)	r$r�sequence�onSelect�
minVisiblergrtrUr~)rr�r�r�rrr
r�s
zSelection.__init__cCs|jdk	r|j|jfSdSr)r�r~r rrr
r/�s
zSelection.sizeHintcCs<|jdkr8|jd8_|jdkr0|jd8_|��dSr�)�focusedIndex�renderOffsetr(r;rrr
r��s


zSelection.func_UP_ARROWcCsB|jdkr"|j|j8_d|_ntd|j|j�|_|��dSr�)r�r�rgrr(r;rrr
�	func_PGUP�s

zSelection.func_PGUPcCsL|jt|j�dkrH|jd7_|j|jdkr@|jd7_|��dSrx)r�rUr�r�rr(r;rrr
r��s
zSelection.func_DOWN_ARROWcCs�|j|jdkrd|j|jd}||jt|j�krHt|j�|jd}|j|7_|jd|_ntt|j�d|j|j�|_|��dSrx)r�rr�rUr�rr()rr8Zchangerrr
�	func_PGDN�szSelection.func_PGDNcCs|dkr|�|j|j�dSr�)r�r�r�r6rrr
r5�szSelection.characterReceivedc
Cs�||_|j|j}|t|j�|kr8tdt|j�|�}|j|||�}t|�D]�\}}|�d|�||jkr�|��|j	r�t
tj�t
tj
�f}nt
tj�f}|j|�|d|�}	|�|	d|t|	��||jkrR|��qRdSr�)rr�r�rUr�rgrsrrr=rBrr�ZBOLDrr"r)
rrrr�start�elementsr_ZeleZmodesrrrr
r.�s"


zSelection.render)N)
rr	r
r�r�rr/r�r�r�r�r5r.rrrr
r��s
		r�))rr|Ztwisted.conch.insultsrrZtwisted.pythonrr�Ztwisted.python.compatrrr��	Exceptionrr[rr$rGrWr]rbrorqrrrwr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
�<module>s>WW>T<1B!=!?