Your IP : 216.73.216.196


Current Path : /opt/alt/python35/lib64/python3.5/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/__pycache__/turtle.cpython-35.opt-2.pyc



���]1�O@sdZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZddlm
Z
ddlmZdddd	d
ddd
dg	Zdddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-gZd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|gOZd}d~gZeeeedgZdd/d2d?dLdPdTdZd\dadbdddedpdudxdygZdyd�d�d�d�d�d�d�d�dd�ddd�dd�dd�d�d�djd�dVd�d@d�d`d�d�d�d�d�d�d�d�d�d(d�d�d�iZd�d��Zd�d��Zyee�Wnek
r!ed��YnXGd�d�de�Zd�d��Zd�d��Zd�d�Zfd�d��ZGd�d�dej �Z!ee!ej"d��Gd�d��d�ej#�Z$ej"Z"Gd�d��d�e%�Z&Gd�d�de�Z'Gd�d��d�e�Z(Gd�d
�d
e%�Z)Gd�d��d�e%�Z*Gd�d�de&�Z+Gd�d��d�e%�Z,Gd�d��d�e%�Z-Gd�d��d�e%�Z.Gd�d	�d	e-e,�Z/e/Z0d�d�Z1Gd�d��d�e+�Z2Gd�d
�d
e/�Z3e3Z4d�d�d}�Z5d�d��Z6ed�Z7ye7d�kre6e7�Wn>e8k
r:ed�e7�Yn ek
rYed�e7�YnXd�d��Z9d�d��Z:d�d��Z;d�Z<d�d��Z=e=ee2d�d�e;�e=ee3d�d�e:�e>Z?e@d�krd�d��ZAd�d��ZBd�d��ZCeB�eC�eD�dS)�z-turtle 1.1b- - for Python 3.1   -  4. 5. 2009�N)�isfile�split�join)�deepcopy)�simpledialog�ScrolledCanvas�TurtleScreen�Screen�	RawTurtle�Turtle�RawPen�Pen�Shape�Vec2D�addshape�bgcolor�bgpic�bye�clearscreen�	colormode�delay�exitonclick�	getcanvas�	getshapes�listen�mainloop�mode�numinput�onkey�
onkeypress�onkeyrelease�
onscreenclick�ontimer�register_shape�resetscreen�
screensize�setup�setworldcoordinates�	textinput�title�tracer�turtles�update�
window_height�window_width�back�backward�
begin_fill�
begin_poly�bk�circle�clear�
clearstamp�clearstamps�clone�color�degrees�distance�dot�down�end_fill�end_poly�fd�	fillcolor�filling�forward�get_poly�getpen�	getscreen�
get_shapepoly�	getturtle�goto�heading�
hideturtle�home�ht�isdown�	isvisible�left�lt�onclick�ondrag�	onrelease�pd�pen�pencolor�pendown�pensize�penup�pos�position�pu�radians�right�reset�
resizemode�rt�seth�
setheading�setpos�setposition�settiltangle�
setundobuffer�setx�sety�shape�	shapesize�shapetransform�shearfactor�
showturtle�speed�st�stamp�tilt�	tiltangle�towards�
turtlesize�undo�undobufferentries�up�width�write�xcor�ycor�write_docstringdict�done�
Terminatorg�?�heightg�?�	canvwidthi��
canvheighti,�	leftright�	topbottom�standardg�?�
�undobuffersizei��classic�black�noresize�visibleT�language�english�
exampleturtle�turtle�
examplescreen�screenzPython Turtle Graphics�
using_IDLEFcCs't|d��}|j�}WdQRXi}x�|D]�}|j�}|s2|jd�r]q2y|jd�\}}Wn)tk
r�td||f�w2YnX|j�}|j�}|dkr�t|�}n@y+d
|kr�t|�}nt	|�}Wntk
rYnX|||<q2W|S)N�r�#�=zBad line in config-file %s:
%s�True�False�None�''�""�.)r�r�r�r�r�)
�open�	readlines�strip�
startswithr�
ValueError�print�eval�float�int)�filename�fZcfglines�cfgdict�line�key�value�r��+/opt/alt/python35/lib64/python3.5/turtle.py�config_dict�s0


r�cCs�d}i}i}t|�r*t|�}d|krDd|d}y%tt�\}}t||�}Wntk
r�d}YnXt|�r�t|�}tj|�tj|�dS)Nz
turtle.cfgZimportconfigz
turtle_%s.cfg�)rr�r�__file__r�	Exception�_CFGr,)r�Zdefault_cfgZcfgdict1Zcfgdict2�head�tailZ	cfg_file2r�r�r��
readconfig�s 


r�z"No configfile read, reason unknownc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)rcCstj|||f�S)N)�tuple�__new__)�cls�x�yr�r�r�r��sz
Vec2D.__new__cCs%t|d|d|d|d�S)Nr�)r)�self�otherr�r�r��__add__�sz
Vec2D.__add__cCsLt|t�r/|d|d|d|dSt|d||d|�S)Nrr�)�
isinstancer)r�r�r�r�r��__mul__�s z
Vec2D.__mul__cCs?t|t�st|t�r;t|d||d|�SdS)Nrr�)r�r�r�r)r�r�r�r�r��__rmul__szVec2D.__rmul__cCs%t|d|d|d|d�S)Nrr�)r)r�r�r�r�r��__sub__sz
Vec2D.__sub__cCst|d|d�S)Nrr�)r)r�r�r�r��__neg__sz
Vec2D.__neg__cCs|dd|dddS)Nr�r�g�?r�)r�r�r�r��__abs__	sz
Vec2D.__abs__cCs}t|d|d�}|tjd}tj|�tj|�}}t|d||d||d||d|�S)Nr�rg�f@)r�math�pi�cos�sin)r��angleZperp�c�sr�r�r��rotateszVec2D.rotatecCs|d|dfS)Nrr�r�)r�r�r�r��__getnewargs__szVec2D.__getnewargs__cCsd|S)Nz(%.2f,%.2f)r�)r�r�r�r��__repr__szVec2D.__repr__N)
�__name__�
__module__�__qualname__r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�scCszt|j�}|j�x|D]}t||�q Wx<|jj�D]+\}}t|�tjkrG|||<qGWdS)N)	�list�	__bases__�reverse�__methodDict�__dict__�items�type�types�FunctionType)r��_dictZbaseListZ_superr�r�r�r�r�r� s

r�cCsi}t||�|j�S)N)r��keys)r�r�r�r�r��	__methods*s
r�z*def %(method)s(self, *args, **kw): return z*self.%(attribute)s.%(method)s(*args, **kw)cCs
i}t||�i}t|�}xi|j�D][}|dd�dks�|dd�dks�||ks�||krq2||||<q2Wxr|j�D]d\}}	d|d|	i}
t|t�r�td|d|i}t||
�t|||
|�q�WdS)Nr��_�method�funcZ	attribute���)	r�r�r�r�r��str�__stringBody�exec�setattr)Z	fromClassZtoClassZtoPartZexcludeZ_dict_1r�Zmfc�exr�r��dZ
execStringr�r�r��__forwardmethods4s
D
r�c@s�eZdZdddddd�Zddddd�Zd	d
�Zdd�Zd
d�Zdd�Zdd�Z	dd�Z
dd�Zdd�ZdS)ri�i^iXcCs
tjj||d|d|�|j�|_|||_|_|||_|_d|_	tj
|d|d|d|j	dtjdd�|_tj
|d|jjd	tj�|_tj
|d|jj�|_|jjd
|jjd|jj�|jdd
ddd�|jdd
ddd�|jjddd|dddddddddddd�|jjddd|dddddddddddd�|jjddd|dddddddddddd�|j�|jjd|j�dS)Nrzr��white�bgZreliefZborderwidthr�ZcommandZorientZxscrollcommandZyscrollcommandrZweightr�Zminsize�padx�in_�pady�row�column�rowspan�
columnspan�sticky�newsz<Configure>)�TK�Frame�__init__�winfo_toplevelZ_rootwindowrzr�r�r�r��CanvasZSUNKEN�_canvasZ	ScrollbarZxviewZ
HORIZONTAL�hscrollZyview�vscrollZ	configure�setZrowconfigureZcolumnconfigure�gridr`�bind�onResize)r�Zmasterrzr�r�r�r�r�r�r�Os,	
$$$
zScrolledCanvas.__init__Nc	Cs�|r||_|r||_|r-||_|jjd|d|jd|jd|jd|jdf�|jjd|j|jd|j�|jjd|j|jd|j�|j	�dS)Nr��scrollregionr�g�?�)
r�r�r�r��config�xview_movetorz�yview_movetor��
adjustScrolls)r�r�r�r�r�r�r�r`hs			zScrolledCanvas.resetcCs|jj�}|jj�}|jjd|j||j�|jjd|j||j�||jks�||jkr�|jjddd|ddddddd	dd
ddd�|j	jddd|ddddddd	dd
ddd�n|jj
�|j	j
�dS)
Ng�?r�r�r�r�r�r�rr�r�r�r�)r��winfo_width�winfo_heightrr�rr�r�r�r�Zgrid_forget)r��cwidth�cheightr�r�r�rzs""$$
zScrolledCanvas.adjustScrollscCs|j�dS)N)r)r��eventr�r�r�r�szScrolledCanvas.onResizecGs|jj|�S)N)r��bbox)r��argsr�r�r�r�szScrolledCanvas.bboxcOs|jj||�S)N)r��cget)r�r
�kwargsr�r�r�r�szScrolledCanvas.cgetcOs|jj||�dS)N)r�r)r�r
rr�r�r�r�szScrolledCanvas.configcOs|jj||�dS)N)r�r�)r�r
rr�r�r�r��szScrolledCanvas.bindcOs|jj||�dS)N)r��unbind)r�r
rr�r�r�r�szScrolledCanvas.unbindcCs|jj�dS)N)r��focus_force)r�r�r�r�r�szScrolledCanvas.focus_force)
r�r�r�r�r`rrrrrr�rrr�r�r�r�rIsr�c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�_RootcCstjj|�dS)N)r��Tkr�)r�r�r�r�r��sz_Root.__init__cCs8t|||||�|_|jjdddd�dS)N�expandr��fillZboth)rr��pack)r�rzr�r	r
r�r�r��setupcanvas�sz_Root.setupcanvascCs|jS)N)r�)r�r�r�r��
_getcanvas�sz_Root._getcanvascCs!|jd||||f�dS)Nz%dx%d%+d%+d)Zgeometry)r�rzr��startx�startyr�r�r��set_geometry�sz_Root.set_geometrycCs|jd|�dS)NZWM_DELETE_WINDOW)Zwm_protocol)r��destroyr�r�r��	ondestroy�sz_Root.ondestroycCs
|j�S)N)Zwinfo_screenwidth)r�r�r�r��	win_width�sz_Root.win_widthcCs
|j�S)N)Zwinfo_screenheight)r�r�r�r��
win_height�sz_Root.win_heightN)
r�r�r�r�rrrrrrr�r�r�r�r�src@s�eZdZedd��Zedd��Zdd�Zdd�Zd	d	d	d
dd�Zd
d�Z	d	d	d	d
dd�Z
dd�Zdd�Zdd�Z
dd�Zd	dd�Zdd�Zdd	dd�Zdd	d d!�Zdd	d"d#�Zdd	d$d%�Zd&d'�Zd	d(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd	d	d	d<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#d	d	d	dDdE�Z$d	S)F�TurtleScreenBasecCs&tjdddd�}|j�|S)Nrzr�r�)r��
PhotoImage�blank)Zimgr�r�r��_blankimage�s
zTurtleScreenBase._blankimagecCstjd|�S)N�file)r�r!)r�r�r�r��_image�szTurtleScreenBase._imagecCs�||_t|t�r3|jj}|jj}nat|jjd��}t|jjd��}|jjd|d|d|d|df�||_||_d|_|_	dS)Nrzr�rr�g�?)
�cvr�rr�r�r�rr�xscale�yscale)r�r&�w�hr�r�r�r��s	1		zTurtleScreenBase.__init__cCs|jjddddd�S)Nrrr��outline)rrrrrr)r&Zcreate_polygon)r�r�r�r��_createpoly�szTurtleScreenBase._createpolyNFc
Cs�g}x=|D]5\}}	|j||j�|j|	|j�q
W|jj||�|dk	r{|jj|d|�|dk	r�|jj|d|�|dk	r�|jj|d|�|r�|jj|�dS)Nrr+rz)�appendr'r(r&�coords�
itemconfigure�	tag_raise)
r�Zpolyitem�	coordlistrr+rz�top�clr�r�r�r�r��	_drawpoly�szTurtleScreenBase._drawpolycCs.|jjdddddddddtj�S)Nrrr�rzr�Zcapstyle)r&Zcreate_liner�ZROUND)r�r�r�r��_createlines$zTurtleScreenBase._createlinec	Cs�|dk	reg}x=|D]5\}}|j||j�|j||j�qW|jj||�|dk	r�|jj|d|�|dk	r�|jj|d|�|r�|jj|�dS)Nrrz)r-r'r(r&r.r/r0)	r�Zlineitemr1rrzr2r3r�r�r�r�r��	_drawlines
zTurtleScreenBase._drawlinecCs|jj|�dS)N)r&�delete)r��itemr�r�r��_delete)szTurtleScreenBase._deletecCs|jj�dS)N)r&r,)r�r�r�r��_update/szTurtleScreenBase._updatecCs|jj|�dS)N)r&�after)r�rr�r�r��_delay4szTurtleScreenBase._delaycCs>y|jj|�}d}Wntjk
r9d}YnX|S)NTF)r&Z	winfo_rgbr�ZTclError)r�r9Zrgb�okr�r�r��_iscolorstring8s
zTurtleScreenBase._iscolorstringcCs@|dk	r,|jjd|�|j�n|jjd�SdS)Nr�)r&rr:r)r�r9r�r�r��_bgcolorBs
zTurtleScreenBase._bgcolorcCs�|\}}||j}||j}ddddddi}|jj|d|d|d	||d
|d|�}	|jj|	�\}
}}}
|jj�|	|dfS)NrP�sw�centerr�r_Zser��text�anchorr�font)r'r(r&Zcreate_textrr,)r�r[�txt�alignrDrWr�r�rCr8Zx0Zy0Zx1Zy1r�r�r��_writeKs

'
zTurtleScreenBase._writer�cs\�dkr&�jj|d|�n2��fdd�}�jj|d|||�dS)Nz<Button-%s>csK�jj|j��j�jj|j��j}}�||�dS)N)r&�canvasxr�r'�canvasyr�r()rr�r�)�funr�r�r��eventfunfs!z+TurtleScreenBase._onclick.<locals>.eventfun)r&�
tag_unbind�tag_bind)r�r8rJ�num�addrKr�)rJr�r��_onclick]szTurtleScreenBase._onclickcs\�dkr&�jj|d|�n2��fdd�}�jj|d|||�dS)Nz<Button%s-ButtonRelease>csK�jj|j��j�jj|j��j}}�||�dS)N)r&rHr�r'rIr�r()rr�r�)rJr�r�r�rKxs!z-TurtleScreenBase._onrelease.<locals>.eventfun)r&rLrM)r�r8rJrNrOrKr�)rJr�r��
_onreleasels
	zTurtleScreenBase._onreleasecs\�dkr&�jj|d|�n2��fdd�}�jj|d|||�dS)Nz<Button%s-Motion>csdyK�jj|j��j�jj|j��j}}�||�Wntk
r_YnXdS)N)r&rHr�r'rIr�r(r�)rr�r�)rJr�r�r�rK�s!
z*TurtleScreenBase._ondrag.<locals>.eventfun)r&rLrM)r�r8rJrNrOrKr�)rJr�r��_ondrags	zTurtleScreenBase._ondragcsV�dkr#�jjd|�n/��fdd�}�jjd|||�dS)Nz<Button-%s>csK�jj|j��j�jj|j��j}}�||�dS)N)r&rHr�r'rIr�r()rr�r�)rJr�r�r�rK�s!z1TurtleScreenBase._onscreenclick.<locals>.eventfun)r&rr�)r�rJrNrOrKr�)rJr�r��_onscreenclick�s	zTurtleScreenBase._onscreenclickcsS�dkr&|jjd|d�n)�fdd�}|jjd||�dS)Nz<KeyRelease-%s>cs��dS)Nr�)r)rJr�r�rK�sz0TurtleScreenBase._onkeyrelease.<locals>.eventfun)r&rr�)r�rJr�rKr�)rJr��
_onkeyrelease�szTurtleScreenBase._onkeyreleasecs��dkrH|dkr.|jjdd�q�|jjd|d�nK�fdd�}|dkr||jjd|�n|jjd||�dS)Nz
<KeyPress>z
<KeyPress-%s>cs��dS)Nr�)r)rJr�r�rK�sz.TurtleScreenBase._onkeypress.<locals>.eventfun)r&rr�)r�rJr�rKr�)rJr��_onkeypress�szTurtleScreenBase._onkeypresscCs|jj�dS)N)r&r)r�r�r�r��_listen�szTurtleScreenBase._listencCs6|dkr|jj|�n|jj||�dS)Nr)r&Z
after_idler;)r�rJ�tr�r�r��_ontimer�szTurtleScreenBase._ontimercCs|jjddd|�S)Nr�image)r&Zcreate_image)r�rYr�r�r��_createimage�szTurtleScreenBase._createimagecCsN|\}}|jj|||j||jf�|jj|d|�dS)NrY)r&r.r'r(�
itemconfig)r�r8r[rYr�r�r�r�r��
_drawimage�s(zTurtleScreenBase._drawimagecCs*|jj|d|�|jj|�dS)NrY)r&r[Z	tag_lower)r�r8rYr�r�r��	_setbgpic�szTurtleScreenBase._setbgpiccCs|jj|�S)N)r&r�)r�r8r�r�r��_type�szTurtleScreenBase._typecsA|jj|���fdd�tdt��d�D�}|S)Ncs)g|]}�|�|df�qS)r�r�)�.0�i)r3r�r��
<listcomp>�s	z/TurtleScreenBase._pointlist.<locals>.<listcomp>rr�)r&r.�range�len)r�r8�plr�)r3r��
_pointlist�s+zTurtleScreenBase._pointlistcCs#|jjd||||f�dS)Nr)r&r)r��srx1�sry1�srx2�sry2r�r�r��_setscrollregion�sz!TurtleScreenBase._setscrollregionc	Cs�|jj�}x�|D]�}t|jj|��}g}xR|r�|dd�\}}|j||�|j||�|dd�}q=W|jj||�qWdS)Nr�)r&Zfind_allr�r.r-)	r�ZxscalefactorZyscalefactorr�r8ZcoordinatesZnewcoordlistr�r�r�r�r��_rescale�s
	zTurtleScreenBase._rescalecCs�t|jt�s"|j|jfS||koD|koDdknr_|jj|jjfS|dk	rt||_|dk	r�||_|jj|||�dS)N)r�r&rr�r�r`)r�r�r�r�r�r�r��_resizes'		zTurtleScreenBase._resizecCsZ|jj�}|dkr(|jd}|jj�}|dkrP|jd}||fS)Nr�rzr�)r&rr)r�rzr�r�r�r��_window_sizes

zTurtleScreenBase._window_sizecCstj�dS)N)r�r)r�r�r�r�r s
zTurtleScreenBase.mainloopcCstj||�S)N)rZ	askstring)r�r)�promptr�r�r�r(/s
zTurtleScreenBase.textinputc	Cs"tj||d|d|d|�S)NZinitialvalueZminvalue�maxvalue)rZaskfloat)r�r)rn�defaultZminvalZmaxvalr�r�r�r>szTurtleScreenBase.numinput)%r�r�r��staticmethodr#r%r�r,r4r5r6r9r:r<r>r?rGrPrQrRrSrTrUrVrXrZr\r]r^rerjrkrlrmrr(rr�r�r�r�r �sF

	r c@seZdZdS)r�N)r�r�r�r�r�r�r�r�Ysc@seZdZdS)�TurtleGraphicsErrorN)r�r�r�r�r�r�r�rrbsrrc@s.eZdZddd�Zddd�ZdS)rNcCs�||_|dkr3t|t�r�t|�}ns|dkr�t|t�r�|j�jd�r�t|�r�tj	|�}n%|dkr�g}nt
d|��||_dS)N�polygonrYz.gif�compoundzThere is no shape type %s)r^r�r�r�r��lower�endswithrrr%rr�_data)r�Ztype_�datar�r�r�r�ns	!	zShape.__init__cCsQ|jdkr"td|j��|dkr4|}|jj|||g�dS)Nrtz Cannot add component to %s Shape)r^rrrwr-)r��polyrr+r�r�r��addcomponent~s
zShape.addcomponent)r�r�r�r�rzr�r�r�r�rgsc@s^eZdZddd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�ZdS)�Tbufferr�cCs2||_dgg||_d|_d|_dS)Nr�Fr�)�bufsize�buffer�ptr�cumulate)r�r|r�r�r�r��s		zTbuffer.__init__NcCsb|dkr9xFt|j�D]}dg|j|<qWn||_dgg||_d|_dS)Nr�r�)rbr|r}r~)r�r|r`r�r�r�r`�s	z
Tbuffer.resetcCs]|jdkrY|jsB|jd|j|_||j|j<n|j|jj|�dS)Nrr�)r|rr~r}r-)r�r8r�r�r��push�s
	zTbuffer.pushcCsa|jdkr]|j|j}|dkr/dSdg|j|j<|jd|j|_|SdS)Nrr�)r|r}r~)r�r8r�r�r��pop�szTbuffer.popcCs|j|jjdg�S)N)r|r}�count)r�r�r�r��nr_of_items�szTbuffer.nr_of_itemscCst|j�dt|j�S)N� )r�r}r~)r�r�r�r�r��szTbuffer.__repr__)	r�r�r�r�r`r�r�r�r�r�r�r�r�r{�s	r{c@s�eZdZdZedededdd�Zdd�Zd	d
d�Zdd
�Zd	dd�Z	dd�Z
dd�Zd	dd�Zdd�Z
dd�Zdd�Zd	d	dd�Zd	dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d	d-d.�Zd/d0�Zd	d1d2�Zd	d	d3d4�Zd5d6d7�Zd	d8d9�Zd	d	d	d:d;�ZeZe
Z eZ!e	Z"eZ#d	S)<rTrrrcCsdtdd-�dtddZ�dtdd��dtdd��dtdd��dtdd��dtd|j��i|_dd i|_tj||�||_||_td!|_	g|_
|j�tj
d"kr|j�}|jd#d$d%d&d'�|jd#d$d%d&d(�dS)�NZarrowrsr�rr��r��r����	����r4��Q�#@���Q�@�G�z. @��Q��@gg$@ZsquareZtriangleg�G�z@皙���'@r�r"rY�nopicr�r�darwinZwmZ
attributesr�z-topmost�1�0����r�r�r�r�rr�)r�r�r��rr�����r�r�r��r�r�����r�r�����r�r�����r�r�����r�r�����r�r��������r�r��������r�r��������r�r�r�r��r�r�����rr�r��r�r�����r�r�����r�r�r��r�r��r�r��r�r��r�r��r�r��r�r��r�r��r�r�)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��r�r�r�r��r�r��r�r��r�r��rr����Q���r�r���Q����r�r��G�z. ��r�r���Q�#��r�r�����r�r��Q�#����Q���r�r��G�z. ���Q����r�r���Q����G�z. ��r�r����Q����Q�#��r�r����$��r�r���Q�#��r�r��G�z. ��r�r���Q����r�r����Q���r�r�)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�����r�r��r�r�����r�r��������r�r�)r�r�r�r���G�z��r�r��rr������G�z��r�r�)r�r�r��rrr�����r�r�����rr�����r�r�)r�r�r�r�)rr#�_shapes�_bgpicsr r��_mode�_delayvaluer��
_colormode�_keysr5�sys�platformr��call)r�r&rrrZ
rootwindowr�r�r�r��s:						
	
zTurtleScreen.__init__cCs�td|_td|_|jd�|jd�|_d|_d|_d|_g|_	|j
d�xdD]}|jd|�qqW|jd�x;|j
dd�D]&}|jd|�|jd|�q�Wdt_dS)Nrr�allr�r�r�rr�r�r�)r�r�r�)r�rrr9rZ�_bgpic�
_bgpicname�_tracing�_updatecounter�_turtlesrrRrrrr�_pen)r��btnr�r�r�r�r5�s 



				


zTurtleScreen.clearNcCs�|dkr|jS|j�}|dkr;td|��||_|dkr�|j|jd|jd|jd|jd�d|_|_|j�dS)	Nr��logo�worldzNo turtle-graphics-mode %sr�g�?)r�rr)r�r)	rrurrrjr�r�r'r(r`)r�rr�r�r�r
s	zTurtleScreen.modecCs|j�dkr|jd�t||�}t||�}|j�\}}|j|d|d�|j|j}	}
|j||_|j||_||j}||j}|j|}
|j|}|j|||
|�|j	|j|	|j|
�|j
�dS)Nr�)rr�rmr%r'r(r�r�rjrkr,)r�ZllxZllyZurxZuryZxspanZyspanZwxZwyZ	oldxscaleZ	oldyscalerfrgrhrir�r�r�r',s 



z TurtleScreen.setworldcoordinatescCs~|dkrO|j�jd�r<td|j|��}qmtdd��nt|t�rmtd|�}||j|<dS)Nz.gifrYz"Bad arguments for register_shape.
zUse  help(register_shape)rs)rurvrr%rrr�r�r�)r��namerkr�r�r�r#Ss
zTurtleScreen.register_shapecCsSt|�dkr|d}t|t�r`|j|�sF|dkrJ|Stdt|���y|\}}}Wn.ttfk
r�tdt|���YnX|jdkr�dd�|||fD�\}}}d|ko�d	kno)d|kod	kno)d|ko'd	knsBtd
t|���d|||fS)Nr�rr�zbad color string: %szbad color arguments: %sg�?cSs g|]}td|��qS)g�o@)�round)r_r�r�r�r�ra�s	z*TurtleScreen._colorstr.<locals>.<listcomp>�zbad color sequence: %sz
#%02x%02x%02x)rcr�r�r>rr�	TypeErrorr�r)r�r9r��g�br�r�r��	_colorstrvs

%TzTurtleScreen._colorstrcs��jd�s�St��dkrA�fdd�dD�}nHt��dkry�fd	d��dd�D�}ntd
���t�fdd�|D��S)
Nr�r�cs-g|]#}t�||d�d��qS)r�r�)r�)r_r`)�cstrr�r�ra�s	z'TurtleScreen._color.<locals>.<listcomp>r�r�r�r�cs'g|]}dt�|d��qS)r�)r�)r_r*)rr�r�ra�s	zbad colorstring: %scs!g|]}|�jd�qS)r)r)r_r�)r�r�r�ra�s	)r�r�r�)r�rcrrr�)r�rr3r�)rr�r��_color�s&zTurtleScreen._colorcCsP|dkr|jS|dkr1t|�|_n|dkrLt|�|_dS)Ng�?r)rr�r�)r�Zcmoder�r�r�r�szTurtleScreen.colormodecCs2x+|jD] }|j|j�|j�q
WdS)N)r�_setmoderr`)r�r�r�r�r�r`�szTurtleScreen.resetcCs|jS)N)r)r�r�r�r�r+�szTurtleScreen.turtlescGsL|r|j|�}nd}|j|�}|dk	rH|j|�}|S)N)rr?r)r�r
r9r�r�r�r�szTurtleScreen.bgcolorcCs]|dkr|jSt|�|_d|_|dk	rFt|�|_|jrY|j�dS)Nr)r
r�rrr,)r��nrr�r�r�r*�s		zTurtleScreen.tracercCs&|dkr|jSt|�|_dS)N)rr�)r�rr�r�r�r�szTurtleScreen.delaycCsLtjsdt_t�|jdkrH|jd7_|j|j;_dS)NTrr�)r�_RUNNINGr�r
r)r�r�r�r��
_incrementudcs		zTurtleScreen._incrementudccCsT|j}d|_x(|j�D]}|j�|j�qW||_|j�dS)NT)r
r+�_update_data�_drawturtler:)r��tracingrWr�r�r�r,s		
	zTurtleScreen.updatecCs|j�dS)Nr)rm)r�r�r�r�r.szTurtleScreen.window_widthcCs|j�dS)Nr�)rm)r�r�r�r�r-%szTurtleScreen.window_heightcCs|jS)N)r&)r�r�r�r�r.s
zTurtleScreen.getcanvascCst|jj��S)N)�sortedr�r�)r�r�r�r�r:s	zTurtleScreen.getshapesr�cCs|j|||�dS)N)rS)r�rJrrOr�r�r�rREszTurtleScreen.onclickcCsa|dkr.||jkrM|jj|�n||jkrM|jj|�|j||�dS)N)r�remover-rT)r�rJr�r�r�r�rVszTurtleScreen.onkeycCsm|dkr.||jkrY|jj|�n+|dk	rY||jkrY|jj|�|j||�dS)N)rr#r-rU)r�rJr�r�r�r�rtszTurtleScreen.onkeypresscCs|j�dS)N)rV)r��xdummy�ydummyr�r�r�r�s
zTurtleScreen.listenrcCs|j||�dS)N)rX)r�rJrWr�r�r�r"�szTurtleScreen.ontimercCs_|dkr|jS||jkr8|j|�|j|<|j|j|j|�||_dS)N)r	r�r%r]r)r�Zpicnamer�r�r�r�szTurtleScreen.bgpiccCs|j|||�S)N)rl)r�r�r�r�r�r�r�r%�szTurtleScreen.screensize)$r�r�r�rr�r�r5rr'r#rrrr`r+rr*rrr,r.r-rrrRrrrr"rr%r!r$rrr r�r�r�r�r�sB&"'#				 c@s�eZdZdedd�dedd�dedd�iZdZdZdZedd	�Zd
d�Z	dd
d�Z
dd�Zddd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zdd*d+�Zd,d-�Zd.d/�Zd0d1�Zdd2d3�Zdd4d5�Zd6d7�Zd8d9�Zddd:d;�Z dd<d=�Z!ddd>d?�Z"dd@dA�Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS)B�
TNavigatorr�g�?grrrr�cCs[|j|_|j|_||_d|_|j�d|_|j|�tj	|�dS)N)
�DEFAULT_ANGLEOFFSET�_angleOffset�DEFAULT_ANGLEORIENT�_angleOrientr�
undobufferr:rr&r`)r�rr�r�r�r��s		
	
zTNavigator.__init__cCs)tdd�|_tj|j|_dS)Ng)r�	_positionr&�START_ORIENTATIONr�_orient)r�r�r�r�r`�szTNavigator.resetNcCsj|dkr|jS|dkr#dS||_|dkrMd|_d|_n|jd|_d	|_dS)
Nr�rrrr�g@)r�rr)r�rr�)rr(r*�_fullcircle)r�rr�r�r�rs		zTNavigator._setmodecCsB||_d||_|jdkr1d|_n
|d|_dS)Nihr�rg@)r/�
_degreesPerAUrr()r��
fullcircler�r�r��_setDegreesPerAUs
	
zTNavigator._setDegreesPerAUg�v@cCs|j|�dS)N)r2)r�r1r�r�r�r:szTNavigator.degreescCs|jdtj�dS)Nr�)r2r�r�)r�r�r�r�r^4szTNavigator.radianscCs%|j|j|}|j|�dS)N)r,r.�_goto)r�r;Zender�r�r��_goBszTNavigator._gocCs&||j9}|jj|�|_dS)N)r0r.r�)r�r�r�r�r��_rotateGs
zTNavigator._rotatecCs
||_dS)N)r,)r��endr�r�r�r3LszTNavigator._gotocCs|j|�dS)N)r4)r�r;r�r�r�rCPszTNavigator.forwardcCs|j|�dS)N)r4)r�r;r�r�r�r/gszTNavigator.backcCs|j|�dS)N)r5)r�r�r�r�r�r_{szTNavigator.rightcCs|j|�dS)N)r5)r�r�r�r�r�rP�szTNavigator.leftcCs|jS)N)r,)r�r�r�r�r[�szTNavigator.poscCs|jdS)Nr)r,)r�r�r�r�r|�szTNavigator.xcorcCs|jdS)Nr�)r,)r�r�r�r�r}�szTNavigator.ycorcCs<|dkr"|jt|��n|jt||��dS)N)r3r)r�r�r�r�r�r�rI�szTNavigator.gotocCs!|jdd�|jd�dS)Nr)rIrd)r�r�r�r�rL�szTNavigator.homecCs!|jt||jd��dS)Nr�)r3rr,)r�r�r�r�r�riszTNavigator.setxcCs!|jt|jd|��dS)Nr)r3rr,)r�r�r�r�r�rjszTNavigator.setycCsz|dk	rt||�}t|t�r3|}n6t|t�rQt|�}nt|t�ri|j}t||j�S)N)rr�r�r&r,�abs)r�r�r�r[r�r�r�r;$s		zTNavigator.distancecCs�|dk	rt||�}t|t�r3|}n6t|t�rQt|�}nt|t�ri|j}||j\}}ttj||�dtjd�d}||j	}|j
|j||jS)Ng�f@r�g�v@)
rr�r�r&r,rr��atan2r�r0r(r*r/)r�r�r�r[�resultr�r�r�ruDs		*
zTNavigator.towardscCs_|j\}}ttj||�dtjd�d}||j}|j|j||jS)Ng�f@r�g�v@)	r.rr�r8r�r0r(r*r/)r�r�r�r9r�r�r�rJgs
*
zTNavigator.headingcCsK||j�|j}|j}||d||d}|j|�dS)Ng@)rJr*r/r5)r�Zto_angler��fullr�r�r�rdvs	zTNavigator.setheadingcCs�|jr(|jjdg�d|j_|j�}|dkrI|j}|dkr�t|�|j}dttdt|�dd�|�}d||}d|}d	|tj	|tj
d
|j�}|dkr�|||}}}|j�}	|j
�}
|dkr.|jdd�n
|jd�|j|�xHt|�D]:}|j|�|j|�|jd�|j|�qUW|j|�|dkr�|j|	|
�|j|�|jr�d|j_dS)
N�seqTr��g@g�M@g�?g�?g@g�f@rF)r+r�rrpr/r7r��minr�r�r�r0�_tracerr<r5rbr4)r��radiusZextent�stepsrpZfracr)Zw2�l�trZdlr`r�r�r�r4�s>		+
)





	zTNavigator.circlecCsdS)Nr�)r�r�r�r�r�rp�szTNavigator.speedcCsdS)Nr�)r��arr�r�r�r>�szTNavigator._tracercCsdS)Nr�)r�rr�r�r�r<�szTNavigator._delay)-r�r�r�rr-ZDEFAULT_MODEr'r)r�r`rr2r:r^r4r5r3rCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rpr>r<r@r3r0rbrQr\rerfrcr�r�r�r�r&�sV
	
# #Ar&c@sHeZdZeddd�Zededdd�Zdd	d
�Zddd�Zd
d�Zdd�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zdd!d"�Zd#d$d%�Zd#d&d'd(�Zd)d*�Zd+d,�ZeZeZeZe	Ze	ZeZeZdS)-�TPenracCs#||_d|_tj|�dS)N)�_resizemoder+rD�_reset)r�rar�r�r�r��s		z
TPen.__init__rWrAcCsgd|_d|_||_||_d|_d|_d|_d|_d|_d|_	d|_
dS)Nr�Tr���?�)rGrG)rGrHrHrG)�_pensize�_shown�	_pencolor�
_fillcolor�_drawing�_speed�_stretchfactor�_shearfactor�_tilt�_shapetrafo�
_outlinewidth)r�rWrAr�r�r�rF�s										zTPen._resetNcCs?|dkr|jS|j�}|dkr;|jd|�dS)N�auto�userr�ra)rTrUr�)rErurV)r�Zrmoder�r�r�ra�s
zTPen.resizemodecCs'|dkr|jS|jd|�dS)NrY)rIrV)r�rzr�r�r�rYszTPen.pensizecCs!|js
dS|jdd�dS)NrXF)rMrV)r�r�r�r�rZ/s
	z
TPen.penupcCs!|jr
dS|jdd�dS)NrXT)rMrV)r�r�r�r�rX=s
	zTPen.pendowncCs|jS)N)rM)r�r�r�r�rNKs
zTPen.isdownc
Cs�ddddddddd	d
i}|dkr7|jS||krP||}n7d|kogdknr�tt|��}nd}|jd
|�dS)NZfastestr�fastr��normalr�Zslowr�Zslowestr�g�?g%@rp)rNr�rrV)r�rpZspeedsr�r�r�rpZs$
z
TPen.speedcGs�|r�t|�}|dkr/|d}}n1|dkrJ|\}}n|dkr`|}}|j|�}|j|�}|jd|d|�n"|j|j�|j|j�fSdS)Nr�rr�r�rWrA)rcrrVrrKrL)r�r
rAZpcolorZfcolorr�r�r�r9�s 
z
TPen.colorcGsO|r;|j|�}||jkr(dS|jd|�n|j|j�SdS)NrW)rrKrVr)r�r
r9r�r�r�rW�sz
TPen.pencolorcGsO|r;|j|�}||jkr(dS|jd|�n|j|j�SdS)NrA)rrLrVr)r�r
r9r�r�r�rA�szTPen.fillcolorcCs|jdd�dS)N�shownT)rV)r�r�r�r�ro�szTPen.showturtlecCs|jdd�dS)NrXF)rV)r�r�r�r�rK	szTPen.hideturtlecCs|jS)N)rJ)r�r�r�r�rO	s
zTPen.isvisiblecKs�d|jd|jd|jd|jd|jd|jd|jd|jd	|jd
|j	d|j
i}|pr|sy|St|t�r�|}ni}|j
|�i}x|D]}||||<q�W|jr�|jjd|f�d
}d|kr|j|dkrd}d|kret|dt�rL|j|df�|d<|j|dkred}d|kr�|j|dkr�d}|r�|j�d|kr�|d|_d|kr�|d|_d|kr�|d|_d|kr+t|dt�r|j|df�|d<|d|_d|krD|d|_d|kr]|d|_d|kr�|d}t|ttf�r�||f}||_d	|kr�|d	|_d
|kr�|d
|_	d|kr�|d|_d|kr|d|_
d|ks%d|ks%d	|kr�|j\}	}
|j}tj|j
�tj|j
�}}
|	|
|
||
||	||
|
||f|_|j�dS)NrXrXrWrArYrpra�
stretchfactorrnr+rsrVFT)rJrMrKrLrIrNrErOrPrSrQr��dictr,r+r�r�r�_newLiner�r�r�r�r�rRr:)r�rVZpendictZ_pd�pZ_p_bufr�ZnewLineZsfZscxZscyZshf�sa�car�r�r�rV 	s�/											

	







	



$	% zTPen.penTcCsdS)Nr�)r��usePosr�r�r�r[�	sz
TPen._newLineFcCsdS)Nr�)r�r�Zforcedr�r�r�r:�	szTPen._updatecCsdS)Nr�)r�r
r�r�r�r�	szTPen._colorcCsdS)Nr�)r�r
r�r�r�r�	szTPen._colorstr)r�r�r�r�r�rFrarYrZrXrNrpr9rWrArorKrOrVr[r:rrrzryr]rUr=rqrMr�r�r�r�rD�s6
&.%$
rDc@s(eZdZdd�Zdd�ZdS)�_TurtleImagecCs#||_d|_|j|�dS)N)r�r^�	_setshape)r�r��
shapeIndexr�r�r�r��	s		z_TurtleImage.__init__csY|j�||_|jdko6�j|jknr?dS|jdkoc�j|jknrldS|jdkr��j|j�n0|jdkr�x|jD]}�j|�q�W�j|j|_|jdkr��j�|_nc|jdkr �j�jdj�|_n5|jdkrU�fdd��j|jD�|_dS)NrsrYrtr"csg|]}�j��qSr�)r,)r_r8)r�r�r�ra�	s	z*_TurtleImage._setshape.<locals>.<listcomp>)rYrs)	r�rbr^r�r9�_itemr,rZrw)r�rbr8r�)r�r�ra�	s&		))z_TurtleImage._setshapeN)r�r�r�r�rar�r�r�r�r`�	sr`c@s�eZdZgZdedededdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdddd�Z
dd�Zdd�Zdd�Zdd�Zddd �Zdddd!d"�Zdd#d$�Zd%d&�Zdd'd(�Zd)d*�Zddddd+d,�Zd-d.�Zd/d0�Zd1d2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zdd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dDdEdF�Z$dGdH�Z%dIdJ�Z&dKdL�Z'ddMdN�Z(dOdP�Z)d1dQdndUdV�Z*dWdX�Z+dYdZ�Z,d[d\�Z-d]d^�Z.d_d`�Z/e/Z0ddadb�Z1dcdddde�Z2dcddfdg�Z3dcddhdi�Z4djdk�Z5dldm�Z6eZ7dS)or
Nrkr�r�cCs�t|t�r||_n�t|t�rU|tjkrItjj|�||_nwt|ttf�r�x_tjD]}|j	|krt||_PqtWt|�|_tjj|j�nt
d|��|j}tj||j
��tj|�|jj|�|j�|_t||�|_d|_d|_d|_|_||_d|_|j�|_|jg|_|jg|_g|_||_t |�|_!|j"�dS)Nzbad canvas argument %sF)#r��_Screenr�rr
�screensr-rr�r&rrr&r�rrDrr5�drawingLineItemr`r��_poly�
_creatingPoly�	_fillitem�	_fillpathrJ�_hidden_from_screen�currentLineItemr,�currentLiner��
stampItems�_undobuffersizer{r+r:)r�Zcanvasrkr�r�r�r�r�r�r��	s@		
						zRawTurtle.__init__cCs<tj|�tj|�|j�|j�|j�dS)N)r&r`rDrF�_clearr r:)r�r�r�r�r`�	s




zRawTurtle.resetcCs7|dks|dkr$d|_nt|�|_dS)Nr)r+r{)r��sizer�r�r�rh
szRawTurtle.setundobuffercCs |jdkrdS|jj�S)Nr)r+r�)r�r�r�r�rx+
s	zRawTurtle.undobufferentriescCs�d|_|_x!|jD]}|jj|�qW|jj�|_g|_|jrk|jj	|j
�|jg|_|j�|j|j
�dS)N)rirjr�r�r9r5rlrmrMr-r,r7rhro)r�r8r�r�r�rp8
s		
zRawTurtle._clearcCs|j�|j�dS)N)rpr:)r�r�r�r�r5F
s
zRawTurtle.clearcCsa|jj�|jjdkr#dSt|j�dkr]|jj|j|j|j|j�dS)Nrr�)	r�rrrcrmr6rlrKrI)r�r�r�r�rU
s
zRawTurtle._update_datacCs�|j}|jdkrdS|jdkr\|j�|j�|j�|j|j�nD|j�|jdkr�x|j�D]}|j�q�W|j�dS)Nrr�)	r�r
rr r:r<rrr+)r�r�rWr�r�r�r:]
s	



zRawTurtle._updatecCs|jj||�S)N)r�r*)r��flagrr�r�r�r>o
szRawTurtle._tracercCs|jj|�S)N)r�r)r�r
r�r�r�r�
szRawTurtle._colorcCs|jj|�S)N)r�r)r�r
r�r�r�r�
szRawTurtle._colorstrcCs	t|t�r|Sy|\}}}Wn.ttfk
rVtdt|���YnX|jjdkr�dd�|||fD�\}}}d|ko�dkno�d|ko�dkno�d|ko�dkns�tdt|���d|||fS)	Nzbad color arguments: %sg�?cSs g|]}td|��qS)g�o@)r)r_r�r�r�r�ra�
s	z!RawTurtle._cc.<locals>.<listcomp>rrzbad color sequence: %sz
#%02x%02x%02x)r�r�rr�rrr�r)r�r
r�rrr�r�r��_cc�
s%Tz
RawTurtle._cccs@|j�|j|j�|j}d|_d|_t|�}�|_||_�|_t�|jj�|_�jj|��j	|jjj
}|dkr��j�|j_ni|dkr��j
�j	dj�|j_n;|dkr#�fdd��j	|jjjD�|j_�j�|_|j�|S)NrsrYr"rtcsg|]}�j��qSr�)r,)r_r8)r�r�r�ra�
s	z#RawTurtle.clone.<locals>.<listcomp>)r�r[rMr�rr`rbrr-r�r^r,rcrZrwr5rlr:)r�r��q�ttyper�)r�r�r8�
s,							" 
zRawTurtle.clonecCsY|dkr|jjS||jj�kr;td|��|jj|�|j�dS)NzThere is no shape named %s)r�rbr�rrrrar:)r�rr�r�r�rk�
s
zRawTurtle.shapecCs||ko"|ko"dknrF|j\}}|||jfS|dks^|dkrjtd��|dk	r�|dkr�||f}q�||f}n+|dk	r�|jd|f}n	|j}|dkr�|j}|jddd|d|�dS)Nrz(stretch_wid/stretch_len must not be zerorarUrYr+)rOrSrrrV)r�Zstretch_widZstretch_lenr+rYr�r�r�rl�
s '		zRawTurtle.shapesizecCs-|dkr|jS|jddd|�dS)NrarUrn)rPrV)r�Zshearr�r�r�rnszRawTurtle.shearfactorcCsK||j|j}|tjddtj}|jddd|�dS)Ng�f@r�rarUrs)r0r*r�r�rV)r�r�rsr�r�r�rgszRawTurtle.settiltanglecCsK|dkr:|jdtj|j}||j|jS|j|�dS)Ng�f@)rQr�r�r*r0r/rg)r�r�rsr�r�r�rt3szRawTurtle.tiltanglecCs|j||j��dS)N)rgrt)r�r�r�r�r�rsMszRawTurtle.tiltcCs�||ko-|ko-|ko-dknr9|jS|j\}}}}|dk	r`|}|dk	rr|}|dk	r�|}|dk	r�|}||||dkr�td��||||f|_tj||�dtj}	tj|	�tj|	�}
}|||
||||
||
||||
|||f\}}
}}||f|_|
||_|	|_	|j
dd�dS)Nrz0Bad shape transform matrix: must not be singularr�rarU)rRrrr�r8r�r�r�rOrPrQrV)r��t11�t12�t21�t22Zm11Zm12Zm21Zm22Zalfar]r^Za11Za12Za21Za22r�r�r�rm`s,20
	zRawTurtle.shapetransformcs�|j�|j\��|j\��t���j�j�}dt|�|\�������fdd�|D�S)Ng�?csQg|]G\}}��|�|�j��|�|�jf�qSr�)r'r()r_r�r�)�e0�e1�p0�p1r�r�r�ra�s	z(RawTurtle._polytrafo.<locals>.<listcomp>)r�r,r.rr(r'r7)r�ry�er�)rzr{r|r}r�r��
_polytrafo�s	zRawTurtle._polytrafocCsE|jj|jj}|jdkrA|j|j|jdk�SdS)Nrsrt)r�r�r�rbr^�
_getshapepolyrw)r�rkr�r�r�rG�szRawTurtle.get_shapepolyFcs�|jdks|r-|j\����nY|jdkrstd|jd�}|dd|f\����n|jdkr�|St����fdd�|D��S)	NrUrTr�g@rr�cs:g|]0\}}�|�|�|�|f�qSr�r�)r_r�r�)rvrwrxryr�r�ra�s	z+RawTurtle._getshapepoly.<locals>.<listcomp>)rErR�maxrIr�)r�rsrtrAr�)rvrwrxryr�r��s!zRawTurtle._getshapepolycCs^|j}|j|jj}|j}|jj}|jr�|jdkr�|jdkr�d|_	|j
}|dkr|jdkr�d}n$|jdkr�|j}n	|j
}|j|j|��}|j|j}}|j||d|d|d	|d
d�qZ|dkr-|j||j|�qZ|d
krZxt||�D]m\}	\}
}}|j|j|
d��}
|j|	|
d|j|�d|j|�d	|j
d
d�qIWn�|j	r�dS|dkr�|j|ddd�nb|dkr|j||j|jdj
�n3|d
krQx$|D]}	|j|	ddd�q1Wd|_	dS)NrFrsr�r�rTrr+rzr2TrYrtr�r"�rr�rr�rr)r�r�r��rr�rr�rr)r�r�r�)r�r�r�rbr^rcrJrr
rkrwrErIrSrr�rLrKr4r\r,�ziprs)r�r�rkruZtitem�tshaper)�fc�ocr8ryr�r�r�r �sF		'				%&	
zRawTurtle._drawturtlecCs�|j}|j|jj}|j}|j}|dkr�|j�}|jdkr^d}n$|jdkry|j}n	|j	}|j
|j|��}|j|j
}}|j||d|d|d|dd	�n�|d
kr|jd�}|j||j|�n�|dkr�g}x'|D]}	|j�}
|j|
�q%Wt|�}x~t||�D]m\}
\}}}|j
|j|d	��}|j|
|d|j|�d|j|�d|j	dd	�qdW|jj|�|jjd
|f�|S)Nrsr�r�rTrr+rzr2TrYr�rtrr)r�r�r�rbr^rwr,rErIrSrr�rLrKr4rZr\r,r-r�r�rsrnr+r�)r�r�rkrur��stitemr)r�r��elementr8ryr�r�r�rr�s>					
%#zRawTurtle.stampcCs�||jkrbt|t�rBx1|D]}|jj|�q%Wn|jj|�|jj|�d|f}|j}||jkr�dS|jj|�}|jj|�||j	kr�|j	d|j
|_	|jj|j	d|j
dg�dS)Nrrr�)rnr�r�r�r9r#r+r}�indexr~r|�insert)r��stampidZsubitemr8�bufr�r�r�r��_clearstamps
	zRawTurtle._clearstampcCs|j|�|j�dS)N)r�r:)r�r�r�r�r�r6s
zRawTurtle.clearstampcCs�|dkr"|jdd�}n5|dkrD|jd|�}n|j|d�}x|D]}|j|�q^W|j�dS)Nr)rnr�r:)r�rZtoDeleter8r�r�r�r7,s
zRawTurtle.clearstampsc
CsZ|j|j|jt|jt�f}|j}d|j|||j|j	dd�|j
|j�|jdd�ff}|jr�|jj
|�|j}|jr�|jdkr�||}|d|jd|d|jd}dt|ddd|j|j�}|d|}	x�td|�D]p}
|
dkrLd	}nd
}||	|
|_|jr�|j|j||jf|j|j|�|j�q1W|jr�|j|jdddd
|j�|jr�|j	j|�t|jt�r|jj|�||_|jr-|jj|�t|j	�dkrL|j�|j�dS)N�gor�rr�g�?r�g�������?g�?TFrr�rz�*�rr�rr)r�r�)rMrKrIr�rjr�r�r,rlrmrer�r+r�rNr
r'r(r�rbr6rfr:r-rhrgrcr[)r�r6�go_modesr�Z
undo_entry�start�diff�diffsq�nhops�deltarr2r�r�r�r3HsR			
(*						
zRawTurtle._gotocs�|\}}}}|\}}}}	|\}
}}�|j�t|j|�dkrbtd�|
|_||_|ddgkr�d}
n|}
�j|
|d|
d|���fdd�|jD�}x+|D]#}�j|�|jj	|�q�W|}|j
r&�jd	kr&||}|d�jd
|d	�j
d
}d	t|ddd|j
|j
�}|d
|}xxtd	|�D]g}|d	kr�d}nd}||||_|r��j|j||jf|||�|j�q�W|r&�j|jdddd|�||_|jr{t|j�dkrZ|jj�|jgkr{d|_d|_|	r�|jgkr�d|_td�n|jdk	r�|jj�|j�dS)Ng�?z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rr�rrzcs7g|]-}|�kr�j|�dkr|�qS)r�)r^)r_r`)r�r�r�r�ra�s	z'RawTurtle._undogoto.<locals>.<listcomp>r�r�r�g�������?g�?TFzUnwahrscheinlich in _undogoto!)rr)rr�rr�rr)r�r�)r�r7r,r�rlrmr6r�r9r#rNr
r'r(r�rbrfr:rhrcrgr�rj)r��entry�old�newr�ZcoodataZdrawingZpcZpsrBZcLIZcLrdZusepcZtodeleter`r�r�r�r�r�rr2r�)r�r�r��	_undogoto}sb	
			


(*	

		
			

zRawTurtle._undogotocCs�|jr%|jjd||jf�||j9}|jj|�}|jj}|dkr�|jdkr�d|j}dtt	|�|�}d||}x3t
|�D]%}|jj|�|_|j�q�W||_|j�dS)N�rotr�rg@g�?)r+r�r0r.r�r�r
rNr�r7rbr:)r�r�Z	neworientr!Zanglevelr@r�r�r�r�r�r5�s	

	zRawTurtle._rotateTcCs�t|j�dkrb|jj|j|j|j|j�|jj�|_|jj	|j�n|jj|jdd�g|_|r�|j
g|_dS)Nr�r2T)rcrmr�r6rlrKrIr5r�r-r,)r�r_r�r�r�r[�s	zRawTurtle._newLinecCst|jt�S)N)r�rjr�)r�r�r�r�rB�szRawTurtle.fillingcCsz|j�s1|jj�|_|jj|j�|jg|_|j�|j	rl|j	j
d|jf�|j�dS)N�	beginfill)rBr�r,rir�r-r,rjr[r+r�r:)r�r�r�r�r1�s
	zRawTurtle.begin_fillcCs�|j�rt|j�dkre|jj|j|jd|j�|jre|jjd|jf�d|_|_|j	�dS)Nr�r�dofill)
rBrcrjr�r4rirLr+r�r:)r�r�r�r�r>
s
	zRawTurtle.end_fillcGs�|sqt|ttf�rF|j|�}|jt|jd�}q�|j}|s�|jt|jd�}n4|dkr�|jt|jd�}|j|�}t|jd�r|jj	|j
||�}|jj|�|j
r�|j
jd|f�n�|j�}|j
r8|j
jdg�d|j
_zQ|j�dkrW|j�|j�|j|�|j|�|jd�Wd|j|�X|j
r�d|j
_dS)	Nr��_dotr<r;TrTrF)r�r�r�rrIr�rK�hasattrr�r�r,r�r-r+r�rVrrarMrXrYrWrC)r�rqr9r8rVr�r�r�r<
s:			



	z
RawTurtle.dotcCs]|jj|j||||j�\}}|jj|�|jrY|jjd|f�|S)N�wri)r�rGr,rKr�r-r+r�)r�rErFrDr8r6r�r�r�rGG
s	zRawTurtle._writerP�Arialr�rWcCs�|jr(|jjdg�d|j_|jt|�|j�|�}|rq|j�\}}|j||�|jr�d|j_dS)Nr;TF)r+r�rrGr�rur[re)r��arg�moverFrDr6r�r�r�r�r�r{Q
s	!	zRawTurtle.writecCs|jg|_d|_dS)NT)r,rgrh)r�r�r�r�r2n
szRawTurtle.begin_polycCs
d|_dS)NF)rh)r�r�r�r�r?|
szRawTurtle.end_polycCs |jdk	rt|j�SdS)N)rgr�)r�r�r�r�rD�
s
zRawTurtle.get_polycCs|jS)N)r�)r�r�r�r�rF�
szRawTurtle.getscreencCs|S)Nr�)r�r�r�r�rH�
szRawTurtle.getturtlecCs|jj|�S)N)r�r)r�rr�r�r�r<�
szRawTurtle._delayr�cCs-|jj|jj|||�|j�dS)N)r�rPr�rcr:)r�rJrrOr�r�r�rR�
szRawTurtle.onclickcCs-|jj|jj|||�|j�dS)N)r�rQr�rcr:)r�rJrrOr�r�r�rT�
szRawTurtle.onreleasecCs#|jj|jj|||�dS)N)r�rRr�rc)r�rJrrOr�r�r�rS�
szRawTurtle.ondragcCs�|jdkrdS|dkrV|\}}|j|||j�|jj�}n8|dkr||d}|j|�n|dkr�|j|�n�|d
kr�|d}|jj|�|jj	|�n�|dkr	|d}|jj
|ddd	d
d	�n�|dkra|d}d|_|_||jkr�|jj|�|jj	|�n-|dkr�t
j||d�|jj�dS)Nr�rrrr�r�r<r�rr�r+r�rV)r�r<�rr�rr�rr)r�r�r�)r+r5r0r�r6r�r�r9r�r#r4rirjrDrV)r��actionrxr�ZdegPAU�dummyr�r8r�r�r��_undos8



zRawTurtle._undocCs�|jdkrdS|jj�}|d}|dd�}|dkr�xG|r~|j�}|j|d|dd��qKWn|j||�dS)Nrr�r;)r+r�r�)r�r8r�rxr�r�r�rw&s
	%zRawTurtle.undo)r�r�rW)8r�r�r�rer�r�r`rhrxrpr5rr:r>rrrsr8rkrlrnrgrtrsrmrrGr�r rrr�r6r7r3r�r5r[rBr1r>r<rGr{r2r?rDrFrHrEr<rRrTrSr�rwrvr�r�r�r�r
�	sn%
(((
(-5A0


 cCs"tjdkrt�t_tjS)N)r�_screenrdr�r�r�r�r	Isc@s�eZdZdZdZedZdd�Zededededd	d
�Zdd�Z	d
d�Z
dd�Zdd�ZdS)rdNr)cCs�tjdkrHt�t_|_|jjtj�|jj|j�tjdkr�td}td}td}td}td}td}|jj	||||�|jj
�t_tj|tj�|j
||||�dS)Nrzr�r�r�r�r�)rd�_rootrr)�_titler�_destroyr�r�rrrr�r&)r�rzr�r�r�r�r�r�r�r�r�Ws





z_Screen.__init__rzr�r�r�cCs�t|jd�sdS|jj�}|jj�}t|t�rid|koZdknri||}|dkr�||d}t|t�r�d|ko�dknr�||}|dkr�||d}|jj||||�|j�dS)Nrrr�r�)r�r�rrr�r�rr,)r�rzr�rrr@�shr�r�r�r&ms+
+
z
_Screen.setupcCs,tjdk	rtjj|�|t_dS)N)rdr�r)r�)r�Ztitlestringr�r�r�r)�s
z
_Screen.titlecCsS|j}|tjkr<dt_dt_dt_dt_dt_|j�dS)NF)	r�rdrr
r�r�rrr)r��rootr�r�r�r��s						z_Screen._destroycCs|j�dS)N)r�)r�r�r�r�r�sz_Screen.byecs[�fdd�}�j|�tdr-dSyt�Wntk
rVtd�YnXdS)Ncs�j�dS)N)r)r�r�)r�r�r��exitGracefully�sz+_Screen.exitonclick.<locals>.exitGracefullyr�r)rRr�r�AttributeError�exit)r�r�r�)r�r�r�s


z_Screen.exitonclick)
r�r�r�r�r�r�r�r�r&r)r�rrr�r�r�r�rdQs
'
rdc@s=eZdZdZdZedededdd�ZdS)rNrkr�r�c	CsDtjdkrt�t_tj|tjd|d|d|�dS)Nrkr�r�)rr�r	r
r�)r�rkr�r�r�r�r�r��szTurtle.__init__)r�r�r�r
r�r�r�r�r�r�r�r�s
Zturtle_docstringdictcCsCi}x+tD]#}d|}t|�j||<q
Wx+tD]#}d|}t|�j||<q;Wtd|d���}tdd�|j�D��}|jd�xD|dd
�D]2}|jd	t|��|jd
||�q�W|d}|jd	t|��|jd||�|jd�|j	�WdQRXdS)Nz_Screen.zTurtle.z%s.pyr)cSs/g|]%}|jd�dtkr|�qS)r�r�)r�_alias_list)r_r�r�r�r�ras	z'write_docstringdict.<locals>.<listcomp>zdocsdict = {

r�z%s :
z        """%s
""",

z        """%s
"""

z}
r�r�)
�_tg_screen_functionsr��__doc__�_tg_turtle_functionsr�r"r�r{�repr�close)r��docsdict�
methodnamer�r�r�r�r�r�r~�s$






cCszdd|j�i}t|�}|j}xH|D]@}y||t|�_Wq2tk
rqtd|�Yq2Xq2WdS)Nz!turtle_docstringdict_%(language)sr�zBad docstring-entry: %s)ru�
__import__r�r�r�r�r�)�lang�modname�moduler�r�r�r�r��read_docstringss	

r�zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc
Cs<d}}tj|j�\}}}|dd�}|dd�}|jpQg}dd�|D�}dgt|�t|�|}dd�t||�D�}	|dk	r�|	jd|�|jd|�|dk	r|	jd|�|jd|�dj|	�}d	|}dj|�}d	|}||fS)
Nr�r�cSsg|]}d|f�qS)z=%rr�)r_r�r�r�r�ra;s	z"getmethparlist.<locals>.<listcomp>cSs g|]\}}||�qSr�r�)r_r�Zdfltr�r�r�ra=s	�*z**z, z(%s))�inspectZgetargs�__code__�__defaults__rcr�r-r)
�obZdefTextZcallTextr
ZvarargsZvarkwZitems2ZrealArgs�defaultsZitems1r�r�r��getmethparlist+s&
!

r�cCseddl}|dkrdStd}|jd|d�}|jd|�}|jd|�}|S)Nrr�z%s.r�z \(.+ %s\):�:)�rer��replace�compile�sub)�docstrr�Z
turtlename�	newdocstr�parexpr�r�r��_turtle_docreviseJs
r�cCseddl}|dkrdStd}|jd|d�}|jd|�}|jd|�}|S)Nrr�z%s.r�z \(.+ %s\):r�)r�r�r�r�r�)r�r�Z
screennamer�r�r�r�r��_screen_docreviseVs
r�ardef {name}{paramslist}:
    if {obj} is None:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        {obj} = {init}
    try:
        return {obj}.{name}{argslist}
    except TK.TclError:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        raise
c
Cs�x�|D]�}t||�}t|�\}}|dkrMtd||�qtjd|d|d|d|d|�}	t|	t��||j�t�|_qWdS)Nr�z>>>>>>�obj�initrZ
paramslistZargslist)�getattrr�r��__func_body�formatr��globalsr�)
Z	functionsr�r�r�Z	docreviser�r�Zpl1Zpl2Zdefstrr�r�r��_make_global_funcsvs
r�zTurtle._screenzScreen()zTurtle._penzTurtle()�__main__cCst�rt�nt�dS)N)rNr]rUr�r�r�r��	switchpen�s	
r�cCs�t�td�t�td�t�td�x�td�D]y}|dkrYt�x(td�D]}td�t	d�qfW|dkr�t
d�t�t�td	�t�q@Wtd
�t
d�td�t�td�td�td�td�td
�t�t
dd
�t
dd
�t
d�x<td�D].}td�t	d�td�td�qLWtd�t�x<td�D].}td�t	d�td�td�q�Wt�dS)NT�dr�r�r�r�ZZmaroonrr�r�F�Z
startstartr��redr�)r`r*ryr0r=rzrbr1rCrPr9r>r_r{)r`r�r�r�r��demo1�sX























r�cCsFtd�t�td�ttdd��tdd�d}td�x(td�D]}t�t	|d�qXWt
d�xt�r�t�q�Wt
�td�td	�d}td
�td�td�x�td,d
�D]�}|dkrt�td	d|dd|�x(td�D]}t|�td�q(Wt�|d7}td�tt�dd�q�Wtd�t�td�td�t�tdd�td�t�x?td�D]1}t	dd�td�td�td�q�Wt�td�t�td�t�td�t�}|jd�t�}|jd�|jd�|j
�|jd�|jd�|j�|jdd�|jd�|j�|jd�|jdd�|jd�|jd�tt|��d}x�|j|�dkr�|jd�|jd�|j|j|��|jd�|d dkr�|j �|j �t�|d7}qW|j
d!d"d-d%d&�|jd'�|jd�d(d)�}t!j"d�x!t�r|j�|j�q�W|jd�|j
d*d"d.�|j#|d�dS)/Nr�r�rg@r��r�zwait a moment...rZgreenr�r�r���x��Frr�Zyellowr��2r�rTi�(r�ZblueZorangeg@g333333�?rzCAUGHT! rDr��boldrFr_r�cSst�t�dS)N)rr)r$r%r�r�r��babaszdemo2.<locals>.babaz  Click me!�Courierr�)r�r�r�)r�r�r�)$rprqrYrdrur;rbrbr�r4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrarrPryrIr=rr�time�sleeprR)r?r�Zlaenger`Ztrir�r�r�r�r�r��demo2�s�






















	
	




















r�)EZ_ver�tkinterr�r�r�r�r�rZos.pathrrr�copyrrZ_tg_classesr�r�Z
_tg_utilities�__all__r�r�r�r�r�r�r�rr�r�r�r�r�rr�rr�objectr r�rrrr{rr&rDr`r
rr	rdrr
r~r�Z	_LANGUAGE�ImportErrorr�r�r�r�r�rrr�r�r�r�rr�r�r�r��<module>gs�	
4
c	��	/&��,��������y�"



	
	
5c