o
     JAf1                    @   sx  	 d Z ddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZ ddlmZ ddlmZ g dZg dZg dZd	d
gZee e e dg Zg dZi dddddddddddddddddddddd d!d"d#d"d$d%d&d'd(d)d*d+d,d-d.d/Zd0d1 Zd2d3 Zzee W n ey   ed4 Y nw G d5d6 d6eZd7d8 Zd9d: Zd;Zdwd=d>ZG d?d@ d@ej Z!ee!ej"dA G dBdC dCej#Z$ej"Z"G dDdE dEe%Z&G dFd deZ'G dGdH dHeZ(G dIdJ dJe%Z)G dKdL dLe%Z*G dMdN dNe&Z+G dOdP dPe%Z,G dQdR dRe%Z-G dSdT dTe%Z.G dUdV dVe-e,Z/e/Z0dWdX Z1G dYdZ dZe+Z2G d[d\ d\e/Z3e3Z4dxd^d	Z5d_d` Z6ed( Z7ze7d)krZe6e7 W n e8yj   edae7 Y n eyy   edbe7  Y nw dcdd Z9dedf Z:dgdh Z;diZ<djdk Z=e=ee2dldme; e=ee3dndoe: e>Z?e@dpkrdqdr ZAdsdt ZBdudv ZCeB  eC  eD  dS dS )yz-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)O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
Terminator)r   r0   r3   r@   rM   rQ   rU   r[   r]   rb   rc   re   rf   rq   rv   ry   rz   rz         ?heightg      ?	canvwidthi  
canvheighti,  	leftright	topbottomr   standardr         ?r   
   undobuffersizei  rk   classicrW   blackrA   ra   noresizevisibleTlanguageenglishexampleturtleturtlescreenzPython Turtle GraphicsF)examplescreenr)   
using_IDLEc              	   C   s   	 t | d}| }W d    n1 sw   Y  i }|D ]W}| }|r+|dr,qz	|d\}}W n tyF   td| |f  Y qw | }| }|dv rXt|}nzd|v rbt|}nt	|}W n	 typ   Y nw |||< q|S )Nr#=zBad line in config-file %s:
%s)TrueFalseNonez''z"".)
open	readlinesstrip
startswithr   
ValueErrorprintevalfloatint)filenamefZcfglinescfgdictlinekeyvalue r   /usr/lib/python3.10/turtle.pyconfig_dict   s:   



r   c                 C   s   	 d}i }i }t |rt|}d|v rd|d  }ztt\}}t||}W n ty1   d}Y nw t |r:t|}t| t| d S )Nz
turtle.cfgZimportconfigzturtle_%s.cfg )r   r   r   __file__r   	Exception_CFGr,   )r   Zdefault_cfgZcfgdict1Zcfgdict2headtailZ	cfg_file2r   r   r   
readconfig   s$   
r   z"No configfile read, reason unknownc                   @   s^   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )r   c                 C   s   t | ||fS N)tuple__new__)clsxyr   r   r   r         zVec2D.__new__c                 C   s"   t | d |d  | d |d  S Nr      r   selfotherr   r   r   __add__      "zVec2D.__add__c                 C   sD   t |tr| d |d  | d |d   S t| d | | d | S r   )
isinstancer   r   r   r   r   __mul__   s   
 zVec2D.__mul__c                 C   s2   t |ts
t |trt| d | | d | S tS r   )r   r   r   r   NotImplementedr   r   r   r   __rmul__  s   zVec2D.__rmul__c                 C   s"   t | d |d  | d |d  S r   r   r   r   r   r   __sub__  r   zVec2D.__sub__c                 C   s   t | d  | d  S r   r   r   r   r   r   __neg__  s   zVec2D.__neg__c                 C   s
   t j|  S r   )mathhypotr   r   r   r   __abs__
     
zVec2D.__abs__c                 C   sh   	 t | d  | d }t|}t|t|}}t | d | |d |  | d | |d |  S )Nr   r   )r   r   r^   cossin)r   angleZperpcsr   r   r   rotate  s
   
2zVec2D.rotatec                 C   s   | d | d fS r   r   r   r   r   r   __getnewargs__  r   zVec2D.__getnewargs__c                 C   s   d|  S )Nz(%.2f,%.2f)r   r   r   r   r   __repr__     zVec2D.__repr__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                 C   sV   	 t | j}|  |D ]}t|| q| j D ]\}}t|tjkr(|||< qd S r   )	list	__bases__reverse__methodDict__dict__itemstypetypesFunctionType)r   _dictZbaseListZ_superr   r   r   r   r   r   !  s   
r   c                 C   s   	 i }t | | | S r   )r   keys)r   r   r   r   r   	__methods+  s   
r   zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)r   c                 C   s   i }t || i }t| }| D ]!}|d d dks+|dd  dks+||v s+||v r,q|| ||< q| D ]"\}}	||	d}
t|trLt||d }t||
 t| ||
|  q7d S )Nr   _)methodfunc)r   Z	attribute)	r   r   r   r   r   str__stringBodyexecsetattr)Z	fromClassZtoClassZtoPartZexcludeZ_dict_1r   Zmfcexr   r   dZ
execStringr   r   r   __forwardmethods5  s    
0


r   c                   @   sf   e Zd Z	 		dddZdddZd	d
 Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd ZdS )r     ^  X  c              
   C   s0  t jj| |||d |  | _||| _| _||| _| _d| _	t j
|||| j	t jdd| _t j|| jjt jd| _t j|| jjd| _| jj| jj| jjd | jdd	dd
 | jdd	dd
 | jjd	| d	ddd	d	dd | jjd	| d	dd	d	d	dd | jjd	| d	d	dd	d	dd |   | jd| j d S )N)rz   r   white   )rz   r   bgZreliefZborderwidth)commandZorient)r   )ZxscrollcommandZyscrollcommandr   r   )ZweightZminsizenewsZpadxZin_ZpadyrowcolumnZrowspanZ
columnspanZstickyz<Configure>)TKFrame__init__winfo_toplevelZ_rootwindowrz   r   r   r   r   CanvasZSUNKEN_canvasZ	ScrollbarZxviewZ
HORIZONTALhscrollZyviewvscrollZ	configuresetZrowconfigureZcolumnconfiguregridr`   bindonResize)r   masterrz   r   r   r   r   r   r   r   P  s8   


zScrolledCanvas.__init__Nc                 C   s   	 |r|| _ |r|| _|r|| _| jj|| j  d | j d | j d | jd fd | jd| j | j d  | j   | jd| j| j d  | j  | 	  d S )Nr   )r   scrollregionr      )
r   r   r   r  configxview_movetorz   yview_movetor   adjustScrollsr   r   r   r   r   r   r   r`   i  s&   zScrolledCanvas.resetc              
   C   s   	 | j  }| j  }| j d| j|  | j  | j d| j|  | j  || jk s1|| jk rO| jjd| ddddddd | j	jd| ddddddd d S | j
  | j	
  d S )Nr   r   r   r   r   )r  winfo_widthwinfo_heightr  r   r  r   r  r  r  Zgrid_forget)r   cwidthcheightr   r   r   r  {  s   



zScrolledCanvas.adjustScrollsc                 C      	 |    d S r   )r  )r   eventr   r   r   r	       zScrolledCanvas.onResizec                 G   s   	 | j j| S r   )r  bboxr   argsr   r   r   r       zScrolledCanvas.bboxc                 O   s   	 | j j|i |S r   )r  cgetr   r  kwargsr   r   r   r       zScrolledCanvas.cgetc                 O      	 | j j|i | d S r   )r  r  r  r   r   r   r       zScrolledCanvas.configc                 O   r!  r   )r  r  r  r   r   r   r    r"  zScrolledCanvas.bindc                 O   r!  r   )r  unbindr  r   r   r   r#    r"  zScrolledCanvas.unbindc                 C      	 | j   d S r   )r  focus_forcer   r   r   r   r%       zScrolledCanvas.focus_force)r   r   r   r   NNN)r   r   r   r   r`   r  r	  r  r  r  r  r#  r%  r   r   r   r   r   J  s    

r   r  c                   @   sF   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )_Rootc                 C   s   t j|  d S r   )r   Tkr   r   r   r   r   r     r   z_Root.__init__c                 C   s&   t | ||||| _| jjddd d S )Nr   Zboth)expandfill)r   r  pack)r   rz   r   r  r  r   r   r   setupcanvas  s   z_Root.setupcanvasc                 C   s   | j S r   )r  r   r   r   r   
_getcanvas  s   z_Root._getcanvasc                 C   s   |  d||||f  d S )Nz%dx%d%+d%+d)Zgeometry)r   rz   r   startxstartyr   r   r   set_geometry     z_Root.set_geometryc                 C   s   |  d| d S )NZWM_DELETE_WINDOW)Zwm_protocol)r   destroyr   r   r   	ondestroy  r   z_Root.ondestroyc                 C      |   S r   )Zwinfo_screenwidthr   r   r   r   	win_width  r   z_Root.win_widthc                 C   r5  r   )Zwinfo_screenheightr   r   r   r   
win_height  r   z_Root.win_heightN)
r   r   r   r   r-  r.  r1  r4  r6  r7  r   r   r   r   r(    s    r(  c                   @   s2  e Zd Z	 dd Zdd Zdd Zdd Z			
dFddZdd Z			
dFddZ	dd Z
dd Zdd Zdd ZdGddZdd ZdHddZdHd d!ZdHd"d#ZdHd$d%Zd&d' ZdGd(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; ZdId<d=Zd>d? Z d@dA Z!dBdC Z"dIdDdEZ#d	S )JTurtleScreenBasec                 C   s    	 t jdd| jd}|  |S )Nr   )rz   r   r
  )r   
PhotoImagecvblank)r   Zimgr   r   r   _blankimage  s   zTurtleScreenBase._blankimagec                 C   s   	 t j|| jdS )N)filer
  )r   r9  r:  )r   r   r   r   r   _image     zTurtleScreenBase._imagec                 C   s   || _ t|tr| j j}| j j}n%t| j d}t| j d}| j j| d | d |d |d fd || _|| _d | _| _	d S )Nrz   r   r   r  r   )
r:  r   r   r   r   r   r  r  xscaleyscale)r   r:  whr   r   r   r     s   

*zTurtleScreenBase.__init__c                 C   s   	 | j jddddS )N)r   r   r   r   r   r   r   r+  outline)r:  Zcreate_polygonr   r   r   r   _createpoly  r   zTurtleScreenBase._createpolyNFc           
      C   s   	 g }|D ]\}}	| || j  | |	 | j  q| jj|g|R   |d ur1| jj||d |d ur=| jj||d |d urI| jj||d |rS| j| d S d S )Nr+  )rF  rz   appendrA  rB  r:  coordsZitemconfigureZ	tag_raise)
r   Zpolyitem	coordlistr+  rF  rz   topclr   r   r   r   r   	_drawpoly  s   	zTurtleScreenBase._drawpolyc              	   C   s   	 | j jddddddtjdS )Nr   r   r   )r+  rz   Zcapstyle)r:  Zcreate_liner   ZROUNDr   r   r   r   _createline  s   zTurtleScreenBase._createlinec           	      C   s   	 |d ur)g }|D ]\}}| || j  | | | j  q	| jj|g|R   |d ur5| jj||d |d urA| jj||d |rK| j| d S d S )NrH  rI  rJ  )	r   ZlineitemrM  r+  rz   rN  rO  r   r   r   r   r   	_drawline  s   zTurtleScreenBase._drawlinec                 C      	 | j | d S r   )r:  deleter   itemr   r   r   _delete(  r?  zTurtleScreenBase._deletec                 C   r$  r   )r:  r,   r   r   r   r   _update.  r&  zTurtleScreenBase._updatec                 C   rS  r   )r:  afterr   r   r   r   r   _delay3  s   zTurtleScreenBase._delayc                 C   s4   	 z| j |}d}W |S  tjy   d}Y |S w )NTF)r:  Z	winfo_rgbr   ZTclError)r   r9   Zrgbokr   r   r   _iscolorstring7  s   zTurtleScreenBase._iscolorstringc                 C   s0   	 |d ur| j j|d |   d S | j dS )N)r   r   )r:  r  rX  r  )r   r9   r   r   r   _bgcolorA  s
   zTurtleScreenBase._bgcolorc                 C   sl   	 |\}}|| j  }|| j }dddd}| jj|d | ||| ||d}	| j|	\}
}}}|	|d fS )Nswr   Zse)rP   centerr_   r   )textanchorr+  font)rA  rB  r:  Zcreate_textr  )r   r[   txtalignrc  rW   r   r   rb  rV  Zx0Zy0Zx1Zy1r   r   r   _writeJ  s   

zTurtleScreenBase._writer   c                    H   	  d u rj |d|  d S  fdd}j |d| || d S )N<Button-%s>c                    :   j | jj j | j j }} || d S r   r:  canvasxr   rA  canvasyr   rB  r  r   r   funr   r   r   eventfund     z+TurtleScreenBase._onclick.<locals>.eventfunr:  Z
tag_unbindZtag_bindr   rV  ro  numaddrp  r   rn  r   _onclick[  s
   zTurtleScreenBase._onclickc                    rg  )Nz<Button%s-ButtonRelease>c                    ri  r   rj  rm  rn  r   r   rp  v  rq  z-TurtleScreenBase._onrelease.<locals>.eventfunrr  rs  r   rn  r   
_onreleasej  s   zTurtleScreenBase._onreleasec                    rg  )Nz<Button%s-Motion>c                    sR   zj | jj j | j j }} || W d S  ty(   Y d S w r   )r:  rk  r   rA  rl  r   rB  r   rm  rn  r   r   rp    s   z*TurtleScreenBase._ondrag.<locals>.eventfunrr  rs  r   rn  r   _ondrag}  s
   zTurtleScreenBase._ondragc                    sD   	  d u rj d|  d S  fdd}j d| || d S )Nrh  c                    ri  r   rj  rm  rn  r   r   rp    rq  z1TurtleScreenBase._onscreenclick.<locals>.eventfunr:  r#  r  )r   ro  rt  ru  rp  r   rn  r   _onscreenclick  s
   zTurtleScreenBase._onscreenclickc                    sB   	  d u r| j d| d  d S  fdd}| j d| | d S )Nz<KeyRelease-%s>c                    
      d S r   r   r  ro  r   r   rp    r   z0TurtleScreenBase._onkeyrelease.<locals>.eventfunry  r   ro  r   rp  r   r}  r   _onkeyrelease  s
   zTurtleScreenBase._onkeyreleasec                    sv   	  d u r|d u r| j dd  d S | j d| d  d S  fdd}|d u r0| j d| d S | j d| | d S )Nz
<KeyPress>z<KeyPress-%s>c                    r{  r   r   r|  r}  r   r   rp    r   z.TurtleScreenBase._onkeypress.<locals>.eventfunry  r~  r   r}  r   _onkeypress  s   zTurtleScreenBase._onkeypressc                 C   r$  r   )r:  r%  r   r   r   r   _listen  r&  zTurtleScreenBase._listenc                 C   s,   	 |dkr| j | d S | j || d S Nr   )r:  Z
after_idlerY  r   ro  tr   r   r   _ontimer  s   zTurtleScreenBase._ontimerc                 C   s   	 | j jdd|dS )Nr   image)r:  Zcreate_image)r   r  r   r   r   _createimage  r   zTurtleScreenBase._createimagec                 C   s>   	 |\}}| j ||| j | | j f | j j||d d S Nr  )r:  rL  rA  rB  
itemconfig)r   rV  r[   r  r   r   r   r   r   
_drawimage  s    zTurtleScreenBase._drawimagec                 C   s"   	 | j j||d | j | d S r  )r:  r  Z	tag_lower)r   rV  r  r   r   r   	_setbgpic  s   zTurtleScreenBase._setbgpicc                 C      	 | j |S r   )r:  r   rU  r   r   r   _type  s   zTurtleScreenBase._typec                    s0   	 | j |  fddtdt dD }|S )Nc                    s"   g | ]} |  |d    fqS )r   r   .0irO  r   r   
<listcomp>     " z/TurtleScreenBase._pointlist.<locals>.<listcomp>r   r   )r:  rL  rangelen)r   rV  plr   r  r   
_pointlist  s   zTurtleScreenBase._pointlistc                 C   s   | j j||||fd d S )Nr@  )r:  r  )r   srx1sry1srx2sry2r   r   r   _setscrollregion  r2  z!TurtleScreenBase._setscrollregionc           	      C   s   | j  }|D ]6}t| j |}g }|r3|d d \}}|||  |||  |dd  }|s| j j|g|R   qd S )Nr   )r:  Zfind_allr   rL  rK  )	r   ZxscalefactorZyscalefactorr   rV  ZcoordinatesZnewcoordlistr   r   r   r   r   _rescale  s   
zTurtleScreenBase._rescalec                 C   s|   	 t | jts| j| jfS ||  u r|  u rd u r&n n| jj| jjfS |d ur-|| _|d ur4|| _| j||| d S r   )r   r:  r   r   r   r`   r  r   r   r   _resize  s   "zTurtleScreenBase._resizec                 C   sB   	 | j  }|dkr| j d }| j  }|dkr| j d }||fS )Nr   rz   r   )r:  r  r  )r   rz   r   r   r   r   _window_size  s   



zTurtleScreenBase._window_sizec                 C   s   	 | j j  d S r   )r:  Ztkr   r   r   r   r   r     s   zTurtleScreenBase.mainloopc                 C   s   	 t j||| jdS )N)parent)r   Z	askstringr:  )r   r)   promptr   r   r   r(   -  s   zTurtleScreenBase.textinputc                 C   s   	 t j|||||| jdS )N)ZinitialvalueZminvaluemaxvaluer  )r   Zaskfloatr:  )r   r)   r  defaultZminvalZmaxvalr   r   r   r   <  s
   
zTurtleScreenBase.numinput)NNNFr   r   Nr'  )$r   r   r   r<  r>  r   rG  rP  rQ  rR  rW  rX  r[  r]  r^  rf  rv  rw  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r(   r   r   r   r   r   r8    sN    



	





r8  c                   @   s   e Zd Z	 dS )r   Nr   r   r   r   r   r   r   r   X  s    c                   @   s   e Zd ZdS )TurtleGraphicsErrorNr  r   r   r   r   r  a  s    r  c                   @   s"   e Zd Z	 dddZdddZdS )r   Nc                 C   sz   || _ |dkrt|trt|}n'|dkr+t|tr*| dr*t|r*t	|}n|dkr2g }nt
d| || _d S )Npolygonr  .gifcompoundzThere is no shape type %s)r  r   r   r   r   lowerendswithr   r   r>  r  _data)r   Ztype_datar   r   r   r   m  s   



zShape.__init__c                 C   s<   	 | j dkrtd| j  |d u r|}| j|||g d S )Nr  z Cannot add component to %s Shape)r  r  r  rK  )r   polyr+  rF  r   r   r   addcomponent}  s   
zShape.addcomponentr   )r   r   r   r   r  r   r   r   r   r   f  s    
r   c                   @   sB   e Zd Z	 dddZdddZdd Zd	d
 Zdd Zdd ZdS )Tbufferr   c                 C   s$   || _ d gg| | _d| _d| _d S )Nr   F)bufsizebufferptrcumulate)r   r  r   r   r   r     s   
zTbuffer.__init__Nc                 C   sD   |d u rt | jD ]}d g| j|< q	n
|| _d gg| | _d| _d S )Nr   )r  r  r  r  )r   r  r  r   r   r   r`     s   
zTbuffer.resetc                 C   sL   | j dkr$| js| jd | j  | _|| j| j< d S | j| j | d S d S r   )r  r  r  r  rK  rU  r   r   r   push  s   
zTbuffer.pushc                 C   sJ   | j dkr#| j| j }|d u rd S d g| j| j< | jd | j  | _|S d S r   )r  r  r  rU  r   r   r   pop  s   
zTbuffer.popc                 C   s   | j | jd g S r   )r  r  countr   r   r   r   nr_of_items  s   zTbuffer.nr_of_itemsc                 C   s   t | jd t | j S )N )r   r  r  r   r   r   r   r     s   zTbuffer.__repr__)r   r   )	r   r   r   r   r`   r  r  r  r   r   r   r   r   r    s    

	r  c                   @   s   e Zd Z	 dZed ed ed fddZdd Zd<d
dZdd Zd<ddZ	dd Z
dd Zd<ddZdd Zdd Zdd Zd=ddZd<ddZd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd>d-d.Zd/d0 Zd<d1d2Zd=d3d4Zd?d6d7Zd<d8d9Zd@d:d;ZeZeZ eZ!e	Z"eZ#d	S )Ar   Tr   r   r   c              
   C   s   t | | tddtddtddtddtddtddtd|  d	| _d
di| _|| _|| _td | _	g | _
|   tjdkr\| }|ddddd |ddddd d S d S )Nr  )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  )Q#@Q@)Gz. @Q@)r  r  )r  r  r  )Qr  )Qr  )Gz. r  )Q#r  r  )r  r  )r  r  )r  r  )r  r  )g       g      $)r  r  )r  r  )r  r  )r  r  ))r   r  )r   r   )r  r   )r  r  ))r   Gz)r   g'@)r  r  )r   r   )r  r  r  )r  r  r  )Zarrowr   r4   ZsquareZtriangler   r;  nopicr   r   darwinZwmZ
attributesr   z-topmost10)r8  r   r   r<  _shapes_bgpics_mode_delayvaluer   
_colormode_keysr5   sysplatformr  call)r   r:  r   r   r   Z
rootwindowr   r   r   r     s(   


zTurtleScreen.__init__c                 C   s   	 t d | _t d | _| d | d| _d| _d| _d| _g | _	| 
d d	D ]}| d | q)| d  | jd d  D ]}| d | | d | q>d t_d S )
Nr   r   allr   r  r   r   r   )r   r      )r   r  r  rW  r  _bgpic
_bgpicname_tracing_updatecounter_turtlesr   rR   r   r  r   r   _pen)r   btnr   r   r   r   r5     s"   





zTurtleScreen.clearNc                 C   s~   	 |d u r| j S | }|dvrtd| || _ |dv r9| | j d | j d | jd | jd  d | _| _|   d S )Nr   logoworldzNo turtle-graphics-mode %s)r   r  r   r   )	r  r  r  r  r   r   rA  rB  r`   r   r   r   r   r   r   
  s   zTurtleScreen.modec                 C   s   	 |   dkr|  d t|| }t|| }|  \}}| |d |d  | j| j}	}
| j| | _| j| | _|| j }| | j }| j| }| j| }| |||| | 	| j|	 | j|
  | 
  d S )Nr     )r   r   r  r%   rA  rB  r   r   r  r  r,   )r   ZllxZllyZurxZuryZxspanZyspanZwxZwyZ	oldxscaleZ	oldyscaler  r  r  r  r   r   r   r'   ,  s"   



z TurtleScreen.setworldcoordinatesc                 C   sT   	 |d u r|  drtd| |}ntdt|tr#td|}|| j|< d S )Nr  r  z;Bad arguments for register_shape.
Use  help(register_shape)r  )r  r  r   r>  r  r   r   r  )r   namerk   r   r   r   r#   S  s   

zTurtleScreen.register_shapec              	   C   s   	 t |dkr|d }t|tr#| |s|dkr|S tdt| z|\}}}W n ttfy;   tdt| w | jdkrNdd |||fD \}}}d|  krXd	krqn nd|  krdd	krqn nd|  krpd	ksyn td
t| d|||f S )Nr   r   r   zbad color string: %sbad color arguments: %sr   c                 S      g | ]}t d | qS g     o@roundr  r   r   r   r   r        z*TurtleScreen._colorstr.<locals>.<listcomp>   bad color sequence: %s#%02x%02x%02x)r  r   r   r]  r  	TypeErrorr   r  )r   r9   r   gbr   r   r   	_colorstrv  s"   	

FzTurtleScreen._colorstrc                    sx     ds S t dkr fdddD }nt dkr+ fdd dd  D }ntd	  tfd
d|D S )Nr   r  c                    s"   g | ]}t  ||d   dqS )r   r  r   r  cstrr   r   r    r  z'TurtleScreen._color.<locals>.<listcomp>)r   r  r  r  c                    s   g | ]}d t  | d  qS )r  r  )r  rD  r  r   r   r    s    r   zbad colorstring: %sc                 3   s    | ]
}| j  d  V  qdS )r  N)r  )r  r   r   r   r   	<genexpr>  s    z&TurtleScreen._color.<locals>.<genexpr>)r   r  r  r   )r   r  rO  r   )r  r   r   _color  s   
zTurtleScreen._colorc                 C   s@   	 |d u r| j S |dkrt|| _ d S |dkrt|| _ d S d S )Nr   r  )r  r   r   )r   Zcmoder   r   r   r     s   zTurtleScreen.colormodec                 C   s&   	 | j D ]}|| j |  qd S r   )r  _setmoder  r`   )r   r   r   r   r   r`     s
   

zTurtleScreen.resetc                 C      	 | j S r   )r  r   r   r   r   r+     s   zTurtleScreen.turtlesc                 G   s6   	 |r	|  |}nd }| |}|d ur| |}|S r   )r  r^  r  r   r  r9   r   r   r   r     s   

zTurtleScreen.bgcolorc                 C   sH   	 |d u r| j S t|| _ d| _|d urt|| _| j r"|   d S d S r  )r  r   r  r  r,   )r   nr   r   r   r   r*     s   

zTurtleScreen.tracerc                 C   s   	 |d u r| j S t|| _ d S r   )r  r   rZ  r   r   r   r     s   
zTurtleScreen.delayc                 C   sB   	 t js	dt _t| jdkr|  jd7  _|  j| j;  _d S d S )NTr   r   )r   _RUNNINGr   r  r  r   r   r   r   _incrementudc  s   
zTurtleScreen._incrementudcc                 C   s>   	 | j }d| _ |  D ]
}|  |  q|| _ |   d S NT)r  r+   _update_data_drawturtlerX  )r   tracingr  r   r   r   r,     s   
zTurtleScreen.updatec                 C      	 |   d S r  r  r   r   r   r   r.        zTurtleScreen.window_widthc                 C   r  Nr   r  r   r   r   r   r-   %  r  zTurtleScreen.window_heightc                 C   r
  r   )r:  r   r   r   r   r   .     	zTurtleScreen.getcanvasc                 C   s   	 t | j S r   )sortedr  r   r   r   r   r   r   :  s   zTurtleScreen.getshapesr   c                 C   s   	 |  ||| d S r   )rz  r   ro  r  ru  r   r   r   rR   E  s   zTurtleScreen.onclickc                 C   sH   	 |d u r|| j v r| j | n|| j vr| j | | || d S r   )r  removerK  r  r   ro  r   r   r   r   r   V  s   

zTurtleScreen.onkeyc                 C   sP   	 |d u r|| j v r| j | n|d ur || j vr | j | | || d S r   )r  r  rK  r  r  r   r   r   r   t  s   
zTurtleScreen.onkeypressc                 C   r  r   )r  )r   xdummyydummyr   r   r   r     s   	zTurtleScreen.listenr   c                 C   s   	 |  || d S r   )r  r  r   r   r   r"        zTurtleScreen.ontimerc                 C   sH   	 |d u r| j S || jvr| || j|< | | j| j|  || _ d S r   )r  r  r>  r  r  )r   Zpicnamer   r   r   r     s   

zTurtleScreen.bgpicc                 C   s   	 |  |||S r   )r  r  r   r   r   r%     s   zTurtleScreen.screensizer   NNr  r   r'  )$r   r   r   r  r   r   r5   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     sH    
(
"
'#
	

			


 


r   c                   @   sR  e Zd Z	 eddeddedddZdZdZdZefddZd	d
 Z	dAddZ
dd ZdBddZdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdAd)d*Zd+d, Zd-d. Zd/d0 ZdAd1d2ZdAd3d4Zd5d6 Zd7d8 ZdCd9d:Z dDd;d<Z!dCd=d>Z"dAd?d@Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS )E
TNavigatorr           )r   r  r  r   r   r   c                 C   sB   | j | _| j| _|| _d | _|   d | _| | t	|  d S r   )
DEFAULT_ANGLEOFFSET_angleOffsetDEFAULT_ANGLEORIENT_angleOrientr  
undobufferr:   r	  r!  r`   r  r   r   r   r     s   
zTNavigator.__init__c                 C   s    	 t dd| _tj| j | _d S )Nr"  )r   	_positionr!  START_ORIENTATIONr  _orientr   r   r   r   r`     s   zTNavigator.resetNc                 C   sP   	 |d u r| j S |dvrd S || _ |dv rd| _d| _d S | jd | _d| _d S )Nr  )r   r  r   r         @r   )r  r$  r&  _fullcircler  r   r   r   r	    s   

zTNavigator._setmodec                 C   s4   	 || _ d| | _| jdkrd| _d S |d | _d S )Nih  r   r   r+  )r,  _degreesPerAUr  r$  r   Z
fullcircler   r   r   _setDegreesPerAU  s   


zTNavigator._setDegreesPerAU     v@c                 C      	 |  | d S r   )r/  r.  r   r   r   r:     s   zTNavigator.degreesc                 C   s   	 |  tj d S r   )r/  r   taur   r   r   r   r^   4  s   zTNavigator.radiansc                 C   s    	 | j | j|  }| | d S r   )r(  r*  _goto)r   r;   Zender   r   r   _goB  s   zTNavigator._goc                 C   s   	 || j 9 }| j|| _d S r   )r-  r*  r   r   r   r   r   r   _rotateG  s   
zTNavigator._rotatec                 C   s   	 || _ d S r   r(  )r   endr   r   r   r3  L  s   
zTNavigator._gotoc                 C   r1  r   r4  r   r;   r   r   r   rC   P  s   zTNavigator.forwardc                 C      	 |  |  d S r   r9  r:  r   r   r   r/   g  s   zTNavigator.backc                 C   r;  r   r6  r5  r   r   r   r_   {  r  zTNavigator.rightc                 C   r1  r   r<  r5  r   r   r   rP        zTNavigator.leftc                 C   r
  r   r7  r   r   r   r   r[     s   
zTNavigator.posc                 C      	 | j d S r  r7  r   r   r   r   r|        
zTNavigator.xcorc                 C   r>  r  r7  r   r   r   r   r}     r?  zTNavigator.ycorc                 C   s0   	 |d u r|  t|  d S |  t|| d S r   )r3  r   )r   r   r   r   r   r   rI     s   zTNavigator.gotoc                 C   s   	 |  dd | d d S r  )rI   rd   r   r   r   r   rL     s   
zTNavigator.homec                 C   s   	 |  t|| jd  d S r  r3  r   r(  )r   r   r   r   r   ri         zTNavigator.setxc                 C   s   	 |  t| jd | d S r  r@  )r   r   r   r   r   rj     rA  zTNavigator.setyc                 C   sV   	 |d ur
t ||}t|t r|}nt|trt | }nt|tr$|j}t|| j S r   )r   r   r   r!  r(  abs)r   r   r   r[   r   r   r   r;   $  s   




zTNavigator.distancec                 C   s   	 |d ur
t ||}t|t r|}nt|trt | }nt|tr$|j}|| j \}}ttt||dd }|| j	 }| j
| j|  | j S Nr   r0  )r   r   r   r!  r(  r  r   r:   atan2r-  r$  r&  r,  )r   r   r   r[   resultr   r   r   ru   D  s   





zTNavigator.towardsc                 C   sH   	 | j \}}ttt||dd }|| j }| j| j|  | j S rC  )	r*  r  r   r:   rD  r-  r$  r&  r,  )r   r   r   rE  r   r   r   rJ   g  s
   
	
zTNavigator.headingc                 C   s@   	 ||    | j }| j}||d  | |d  }| | d S )N       @)rJ   r&  r,  r6  )r   Zto_angler   fullr   r   r   rd   v  s
   zTNavigator.setheadingc                 C   sl  	 | j r| j dg d| j _|  }|d u r| j}|d u r6t|| j }dttdt|d  d|  }d| | }d| }d	| t	t
|| j  }|d
k r^| | | }}}|  }	|  }
|d
krq| d
d
 n| d
 | | t|D ]}| | | | | d
 | | q| |  |d
kr| |	|
 | | | j rd| j _d S d S )NseqTr      g      @g     M@r   r   rF  r   F)r'  r  r  rp   r,  rB  r   minr   r   r^   r-  _tracerr[  r6  r  r4  )r   radiusZextentstepsrp   ZfracrC  Zw2ltrZdlr  r   r   r   r4     sB   "





zTNavigator.circlec                 C      d S r   r   )r   r   r   r   r   rp        zTNavigator.speedc                 C   rP  r   r   )r   ar  r   r   r   rK    rQ  zTNavigator._tracerc                 C   rP  r   r   )r   r  r   r   r   r[    rQ  zTNavigator._delayr   )r0  r  r   )-r   r   r   r   r)  ZDEFAULT_MODEr#  r%  r   r`   r	  r/  r:   r^   r4  r6  r3  rC   r/   r_   rP   r[   r|   r}   rI   rL   ri   rj   r;   ru   rJ   rd   r4   rp   rK  r[  r@   r3   r0   rb   rQ   r\   re   rf   rc   r   r   r   r   r!    s\    


	
#

 #

A

r!  c                   @   s   e Zd Z	 ed fddZed ed fddZd-d	d
Zd-ddZdd Zdd Z	dd Z
d-ddZdd Zdd Zdd Zdd Zdd Zdd  Zd-d!d"Zd.d$d%Zd/d'd(Zd)d* Zd+d, ZeZeZeZe	Ze	ZeZeZdS )0TPenra   c                 C   s   || _ d | _t|  d S r   )_resizemoder'  rS  _reset)r   ra   r   r   r   r        zTPen.__init__rW   rA   c                 C   sF   d| _ d| _|| _|| _d| _d| _d| _d| _d| _d| _	d| _
d S )Nr   Tr  )r   r   r"  )r   r"  r"  r   )_pensize_shown	_pencolor
_fillcolor_drawing_speed_stretchfactor_shearfactor_tilt_shapetrafo_outlinewidth)r   rW   rA   r   r   r   rU    s   
zTPen._resetNc                 C   s4   	 |d u r| j S | }|dv r| j|d d S d S )N)autouserr   ra   )rT  r  rV   )r   Zrmoder   r   r   ra     s   zTPen.resizemodec                 C   s    	 |d u r| j S | j|d d S )N)rY   )rW  rV   )r   rz   r   r   r   rY     s   zTPen.pensizec                 C   s   	 | j sd S | jdd d S )NFrX   r[  rV   r   r   r   r   rZ   /     	z
TPen.penupc                 C   s   	 | j rd S | jdd d S )NTre  rf  r   r   r   r   rX   =  rg  zTPen.pendownc                 C   r
  r   )r[  r   r   r   r   rN   K  s   zTPen.isdownc                 C   sl   	 dddddd}|d u r| j S ||v r|| }nd|  k r#dk r,n ntt|}nd}| j|d	 d S )
Nr   r   r  r  r   )ZfastestfastnormalZslowZslowestr   g      %@)rp   )r\  r   r  rV   )r   rp   Zspeedsr   r   r   rp   Z  s   
z
TPen.speedc                 G   s   	 |r6t |}|dkr|d  }}n|dkr|\}}n|dkr#| }}| |}| |}| j||d d S | | j| | jfS )Nr   r   r   r  )rW   rA   )r  r  rV   r  rY  rZ  )r   r  rN  ZpcolorZfcolorr   r   r   r9     s   


z
TPen.colorc                 G   :   	 |r|  |}|| jkrd S | j|d d S | | jS )N)rW   )r  rY  rV   r  r  r   r   r   rW     s   

zTPen.pencolorc                 G   rj  )N)rA   )r  rZ  rV   r  r  r   r   r   rA     s   

zTPen.fillcolorc                 C      	 | j dd d S )NTshownrV   r   r   r   r   ro     s   
zTPen.showturtlec                 C   rk  )NFrl  rn  r   r   r   r   rK   	  s   zTPen.hideturtlec                 C   r
  r   )rX  r   r   r   r   rO   	  r  zTPen.isvisiblec                 K   s  	 | j | j| j| j| j| j| j| j| j| j	| j
d}|s |s |S t|tr(|}ni }|| i }|D ]}|| ||< q3| jrG| jd|f d}d|v rV| j|d krVd}d|v rtt|d trk| |d f|d< | j|d krtd}d|v r| j|d krd}|r|   d|v r|d | _d|v r|d | _d|v r|d | _d|v rt|d tr| |d f|d< |d | _d	|v r|d	 | _d
|v r|d
 | _d|v r|d }t|ttfr||f}|| _d|v r|d | _d|v r|d | _	d|v r|d | _ d|v r	|d | _
d|v sd|v sd|v rE| j\}	}
| j}t| j
t| j
}}|	| |
|| |  |	 | |
|||   f| _|   d S )N)rm  rX   rW   rA   rY   rp   ra   stretchfactorrn   rF  rs   rV   FrX   TrW   rY   rA   rp   ra   ro  rn   rF  rm  rs   )rX  r[  rY  rZ  rW  r\  rT  r]  r^  ra  r_  r   dictr,   r'  r  r   r  _newLiner   r   r   r   r   r`  rX  )r   rV   ZpendictZ_pdpZ_p_bufr   ZnewLineZsfZscxZscyZshfsacar   r   r   rV    	  s   .













zTPen.penTc                 C   rP  r   r   r   ZusePosr   r   r   rq  	  rQ  zTPen._newLineFc                 C   rP  r   r   )r   r  Zforcedr   r   r   rX  	  rQ  zTPen._updatec                 C   rP  r   r   r  r   r   r   r  	  rQ  zTPen._colorc                 C   rP  r   r   r  r   r   r   r  	  rQ  zTPen._colorstrr   T)TF)r   r   r   r   r   rU  ra   rY   rZ   rX   rN   rp   r9   rW   rA   ro   rK   rO   rV   rq  rX  r  r  rz   ry   r]   rU   r=   rq   rM   r   r   r   r   rS    s<    



&.%$


rS  c                   @   s   e Zd Z	 dd Zdd ZdS )_TurtleImagec                 C   s   || _ d | _| | d S r   )r   r  	_setshape)r   r   
shapeIndexr   r   r   r   	  rV  z_TurtleImage.__init__c                    s   | j  || _| jd  kr j| jkrd S  | jd  kr' j| jkr(d S  | jdv r4 | j n| jdkrD| jD ]} | q< j| j| _| jdkrW  | _d S | jdkrh  jd j| _d S | jdkr} fdd j| jD | _d S d S )Nr  r  )r  r  r  r;  c                       g | ]}   qS r   rG  r  rV  r   r   r   r  	      z*_TurtleImage._setshape.<locals>.<listcomp>)	r   ry  r  r  rW  _itemrG  r  r  )r   ry  rV  r   r}  r   rx  	  s.   







z_TurtleImage._setshapeN)r   r   r   r   rx  r   r   r   r   rw  	  s    rw  c                   @   s  e Zd Z	 g Zded ed ed fddZdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdlddZdd Zdd Zdd Zdd Zdmdd Zdnd!d"Zdmd#d$Zd%d& Zdmd'd(Zd)d* Zdod+d,Zd-d. Zd/d0 Zdpd2d3Zd4d5 Zd6d7 Zd8d9 Zd:d; Zdmd<d=Z d>d? Z!d@dA Z"dBdC Z#dqdEdFZ$dGdH Z%dIdJ Z&dKdL Z'dmdMdNZ(dOdP Z)drdSdTZ*dUdV Z+dWdX Z,dYdZ Z-d[d\ Z.d]d^ Z/e/Z0dmd_d`Z1dsdbdcZ2dsdddeZ3dsdfdgZ4dhdi Z5djdk Z6eZ7dS )tr
   Nrk   r   r   c                 C   s4  t |tr	|| _n>t |tr|tjvrtj| || _n*t |ttfrAtjD ]}|j	|kr3|| _ nq't|| _tj| j nt
d| | j}t| |  t|  |j|  | | _t||| _d | _d| _d  | _| _|| _d| _| | _| jg| _| jg| _g | _|| _t || _!| "  d S )Nzbad canvas argument %sF)#r   _Screenr   r   r
   screensrK  r   r  r:  r  r!  r   r   rS  r  rQ  drawingLineItemrw  r   _poly_creatingPoly	_fillitem	_fillpathrX  _hidden_from_screencurrentLineItemr(  currentLiner   
stampItems_undobuffersizer  r'  rX  )r   Zcanvasrk   r   r   r   r   r   r   r   	  sD   











zRawTurtle.__init__c                 C   s2   	 t |  t|  |   |   |   d S r   )r!  r`   rS  rU  _clearr  rX  r   r   r   r   r`   	  s   

zRawTurtle.resetc                 C   s*   	 |d u s	|dkrd | _ d S t|| _ d S r  )r'  r  )r   sizer   r   r   rh   
  s   
zRawTurtle.setundobufferc                 C   s   	 | j d u rdS | j  S r  )r'  r  r   r   r   r   rx   +
  s   

zRawTurtle.undobufferentriesc                 C   sn   	 d  | _ | _| jD ]}| j| q
| j | _g | _| jr&| j	| j
 | jg| _|   | | j d S r   )r  r  r   r   rW  rQ  r  r  r[  rK  r(  r7   rh   r  rU  r   r   r   r  8
  s   

zRawTurtle._clearc                 C   s   	 |    |   d S r   )r  rX  r   r   r   r   r5   F
  s   zRawTurtle.clearc                 C   sJ   | j   | j jdkrd S t| jdkr#| j | j| j| j| j d S d S r   )	r   r  r  r  r  rR  r  rY  rW  r   r   r   r   r  U
  s   
zRawTurtle._update_datac                 C   s   	 | j }|jdkrd S |jdkr$|   |   |  ||j d S |   |jdkr>| D ]}|  q1|  d S d S r   )	r   r  r  r  rX  r[  r  r  r+   )r   r   r  r   r   r   rX  ]
  s   



zRawTurtle._updatec                 C   s   	 | j ||S r   )r   r*   )r   flagr   r   r   r   rK  o
  r=  zRawTurtle._tracerc                 C      | j |S r   )r   r  r  r   r   r   r  
     zRawTurtle._colorc                 C   r  r   )r   r  r  r   r   r   r  
  r  zRawTurtle._colorstrc              	   C   s   	 t |tr|S z|\}}}W n ttfy    tdt| w | jjdkr4dd |||fD \}}}d|  kr>dkrWn nd|  krJdkrWn nd|  krVdks_n tdt| d|||f S )	Nr  r   c                 S   r  r  r  r  r   r   r   r  
  r  z!RawTurtle._cc.<locals>.<listcomp>r   r  r  r  )r   r   r   r   r  r   r  )r   r  r   r  r  r   r   r   _cc
  s   
FzRawTurtle._ccc                    s   	 | j  | | j | j}d | _ d | _t| } | _ || _ |_ t | jj|_ j|  j	| jj j
}|dkrA  |j_n%|dkrQ  j	d j|j_n|dkrf fdd j	| jj jD |j_  |_|  |S )Nr  r  r;  r  c                    rz  r   r{  r|  r}  r   r   r  
  r~  z#RawTurtle.clone.<locals>.<listcomp>)r   rq  r[  r   r   rw  ry  r  rK  r  r  rG  r  r  r  rQ  r  rX  )r   r   qttyper   r}  r   r8   
  s0   


zRawTurtle.clonec                 C   sD   	 |d u r	| j jS || j vrtd| | j | |   d S )NzThere is no shape named %s)r   ry  r   r   r  rx  rX  )r   r  r   r   r   rk   
  s   zRawTurtle.shapec                 C   s   	 ||  u r|  u rd u rn n| j \}}||| jfS |dks%|dkr)td|d ur;|d u r6||f}n||f}n|d urG| j d |f}n| j }|d u rQ| j}| jd||d d S )Nr   z(stretch_wid/stretch_len must not be zerorc  )ra   ro  rF  )r]  ra  r  rV   )r   Zstretch_widZstretch_lenrF  ro  r   r   r   rl   
  s$   "



zRawTurtle.shapesizec                 C   s"   	 |d u r| j S | jd|d d S )Nrc  )ra   rn   )r^  rV   )r   Zshearr   r   r   rn     s   zRawTurtle.shearfactorc                 C   s6   	 | | j  | j }t|tj }| jd|d d S )Nrc  )ra   rs   )r-  r&  r   r^   r2  rV   r   r   rs   r   r   r   rg     s   zRawTurtle.settiltanglec                 C   s<   	 |d u rt | j | j }|| j | j S | | d S r   )r   r:   r_  r&  r-  r,  rg   r  r   r   r   rt   3  s
   zRawTurtle.tiltanglec                 C   s   	 |  ||    d S r   )rg   rt   r5  r   r   r   rs   N  s   zRawTurtle.tiltc                 C   s0  	 ||  u r|  u r|  u rd u r| j S  | j \}}}}|d ur%|}|d ur+|}|d ur1|}|d ur7|}|| ||  dkrEtd||||f| _ t| |tj }	t|	t|	}
}|| |
|  || |
|  |
| ||  |
| ||  f\}}}}||f| _|| | _|	| _	| j
dd d S )Nr   z0Bad shape transform matrix: must not be singularrc  rd  )r`  r  r   rD  r2  r   r   r]  r^  r_  rV   )r   t11t12t21t22Zm11Zm12Zm21Zm22Zalfars  rt  Za11Za12Za21Za22r   r   r   rm   a  s*   &

zRawTurtle.shapetransformc                    s`   	 | j | j\| j\ t j j }dt| | \  fdd|D S )Nr   c                    sF   g | ]\}}|  |  j     | |  j  fqS r   )rA  rB  r  r   r   Ze0e1Zp0Zp1r   r   r   r    s    :z(RawTurtle._polytrafo.<locals>.<listcomp>)r   r(  r*  r   rB  rA  rB  )r   r  er   r  r   
_polytrafo  s   

zRawTurtle._polytrafoc                 C   s4   	 | j j| jj }|jdkr| |j|jdkS d S )Nr  r  )r   r  r   ry  r  _getshapepolyr  )r   rk   r   r   r   rG     s
   
zRawTurtle.get_shapepolyFc                    sz   	 | j dks|r| j\ n| j dkr(td| jd }|dd|f\ n| j dkr/|S t fdd|D S )	Nrc  rb  r   g      @r   r   c                 3   s4    | ]\}} | |  | |  fV  qd S r   r   r  r  r  r  r  r   r   r    s   2 z*RawTurtle._getshapepoly.<locals>.<genexpr>)rT  r`  maxrW  r   )r   r  r  rN  r   r  r   r    s   

zRawTurtle._getshapepolyc              	   C   s  	 | j }|j| jj }|j}| jj}| jr|jdkr|jdkrd| _	|j
}|dkrY| jdkr1d}n| jdkr:| j}n| j}| | |}| j| j}}|j|||||dd d S |d	krg||| j| d S |d
krt||D ]$\}	\}
}}| | |
d}
|j|	|
| || || jdd qpd S d S | j	rd S |dkr||ddd n"|d	kr||| j|jd j
 n|d
kr|D ]
}	||	ddd qd| _	d S )Nr   Fr  r   r   rb  Tr+  rF  rz   rN  r  r  r  r  r  r   r;  )r   r  r   ry  r  r  rX  r  r  r  r  rT  rW  ra  r  r  rZ  rY  rP  r  r(  zipr  )r   r   rk   r  ZtitemtshaperC  fcocrV  r  r   r   r   r    sN   



zRawTurtle._drawturtlec              	   C   sT  	 | j }|j| jj }|j}|j}|dkrH| }| jdkr!d}n| jdkr*| j}n| j	}| 
| |}| j| j}}|j|||||dd nR|dkrZ|d}||| j| n@|d	krg }|D ]}	| }
||
 qbt|}t||D ]"\}
\}}}| 
| |d}|j|
|| || || j	dd qw| j| | jd
|f |S )Nr  r   r   rb  Tr  r  r   r  rr   )r   r  r   ry  r  r  rG  rT  rW  ra  r  r  rZ  rY  rP  r  r  r(  rK  r   r  r  r  r'  r  )r   r   rk   r  r  stitemrC  r  r  elementrV  r  r   r   r   rr     s@   
zRawTurtle.stampc                 C   s   	 || j v r#t|tr|D ]}| j| qn| j| | j | d|f}| j}||jvr1d S |j|}|j| ||j	krK|j	d |j
 |_	|j|j	d |j
 d g d S )Nrr   r   )r  r   r   r   rW  r  r'  r  indexr  r  insert)r   stampidZsubitemrV  bufr  r   r   r   _clearstamp  s"   



 zRawTurtle._clearstampc                 C   s   	 |  | |   d S r   )r  rX  )r   r  r   r   r   r6     s   
zRawTurtle.clearstampc                 C   s`   	 |d u r| j d d  }n|dkr| j d | }n| j |d  }|D ]}| | q"|   d S r  )r  r  rX  )r   r  ZtoDeleterV  r   r   r   r7   -  s   zRawTurtle.clearstampsc              
   C   s  	 | j | j| jt| jtf}| j}d| j||| j| j	d d  |
| j| jd d  ff}| jr5| j| | j}| jr|jdkr|| }|d |j d |d |j d  }dt|d dd| j  | j   }|d|  }	td|D ](}
|
dkr|d	}nd
}||	|
  | _| j r|| j|| jf| j| j| |   qs| j r|j| jdd| jd | j r| j	| t| jtr| j| || _| jr| j| t| j	dkr|   |   d S )Ngor   r   r   r   r  皙?r   TFr  r  r   r+  rz   *   )r[  rY  rW  r   r  r   r   r(  r  r  r  r   r'  r  r\  r  rA  rB  r   r  rR  r  rX  rK  r  r  r  rq  )r   r8  go_modesr   Z
undo_entrystartdiffdiffsqnhopsdeltar  rN  r   r   r   r3  I  s^   


$$


zRawTurtle._gotoc                    s  	 |\}}}}|\}}}}	|\}
}} | j t| j| dkr#td |
| _|| _|ddgkr2d}n|}j|
|||d  fdd| jD }|D ]}| | j	| qJ|}| j
rǈjdkr|| }|d	 j d
 |d j d
  }dt|d dd| j
  | j
   }|d|  }td|D ]%}|dkrd}nd}|||  | _|r| j|| jf||| |   q|rǈj| jdd|d || _| jrt| jd	kr| j  | jg krd| _d | _|	r| jg krd | _td n
| jd ur| j  |   d S )Nr   z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!r  r   r  c                    s&   g | ]}| vr |d kr|qS )r   )r  r  r   r   r   r   r    s    z'RawTurtle._undogoto.<locals>.<listcomp>r   r   r   r  r  r   TFr  zUnwahrscheinlich in _undogoto!)r   rB  r(  r   r  r  rR  r   rW  r  r\  r  rA  rB  r   r  r  rX  r  r  r  r  r  )r   entryoldnewr  ZcoodataZdrawingZpcZpsrB   ZcLIZcLr  ZusepcZtodeleter  r  r  r  r  r  r  rN  r   r  r   	_undogoto~  sh   
$$







zRawTurtle._undogotoc                 C   s   	 | j r| j d|| jf || j9 }| j|}| jj}|dkrM| jdkrMd| j }dtt	||  }d| | }t
|D ]}| j|| _|   q?|| _|   d S )Nrotr   r   g      @r   )r'  r  r-  r*  r   r   r  r\  r   rB  r  rX  )r   r   Z	neworientr  ZanglevelrM  r  r   r   r   r   r6    s   


zRawTurtle._rotateTc                 C   st   	 t | jdkr#| j| j| j| j| j | j | _| j	| j n	| jj| jdd g | _|r8| j
g| _d S d S )Nr   T)rN  )r  r  r   rR  r  rY  rW  rQ  r   rK  r(  ru  r   r   r   rq    s   zRawTurtle._newLinec                 C   s   	 t | jtS r   )r   r  r   r   r   r   r   rB     s   zRawTurtle.fillingc                 C   sZ   	 |   s| j | _| j| j | jg| _|   | j	r'| j	
d| jf |   d S )N	beginfill)rB   r   rG  r  r   rK  r(  r  rq  r'  r  rX  r   r   r   r   r1     s   

zRawTurtle.begin_fillc                 C   sd   	 |   r0t| jdkr$| jj| j| j| jd | jr$| jd| jf d  | _| _| 	  d S d S )Nr   rH  dofill)
rB   r  r  r   rP  r  rZ  r'  r  rX  r   r   r   r   r>     s   
zRawTurtle.end_fillc              	   G   sL  	 |s(t |ttfr| |}| jt| jd }n!| j}|s'| jt| jd }n|d u r5| jt| jd }| |}t| jdr^| j	| j
||}| j| | jr\| jd|f d S d S |  }| jrp| jdg d| j_z$|  dkr{|   |   | | | | | d W | | n| | w | jrd| j_d S d S )	Nr  _dotr<   rH  Trb  r   F)r   r   r   r  rW  r  rY  hasattrr   r  r(  r   rK  r'  r  rV   r  ra   rM   rX   rY   rW   rC   )r   r  r9   rV  rV   r   r   r   r<     sB   



zRawTurtle.dotc                 C   sL   	 | j | j|||| j\}}|   | j| | jr$| jd|f |S )Nwri)	r   rf  r(  rY  rX  r   rK  r'  r  )r   rd  re  rc  rV  r8  r   r   r   rf  H  s   zRawTurtle._writerP   Arialr  ri  c                 C   sf   	 | j r| j dg d| j _| t|| |}|r(|  \}}| || | j r1d| j _d S d S )NrH  TF)r'  r  r  rf  r   r  r[   re   )r   argmovere  rc  r8  r   r   r   r   r   r{   S  s   zRawTurtle.writec                 C   s   	 | j g| _d| _d S r  )r(  r  r  r   r   r   r   r2   p  s   


zRawTurtle.begin_polyc                 C   s   	 d| _ d S NF)r  r   r   r   r   r?   ~  s   

zRawTurtle.end_polyc                 C   s   	 | j d urt| j S d S r   )r  r   r   r   r   r   rD     s   
	
zRawTurtle.get_polyc                 C   r
  r   r}  r   r   r   r   rF     s   zRawTurtle.getscreenc                 C   s   	 | S r   r   r   r   r   r   rH     s   zRawTurtle.getturtlec                 C   r  r   )r   r   rZ  r   r   r   r[    r  zRawTurtle._delayr   c                 C   $   	 | j | jj||| |   d S r   )r   rv  r   r  rX  r  r   r   r   rR     s   zRawTurtle.onclickc                 C   r  r   )r   rw  r   r  rX  r  r   r   r   rT     s   zRawTurtle.onreleasec                 C   s   	 | j | jj||| d S r   )r   rx  r   r  r  r   r   r   rS     s   zRawTurtle.ondragc                 C   s<  	 | j d u rd S |dkr"|\}}| | | | j  | j  }d S |dkr1|d }| | d S |dkr<| | d S |dv rR|d }| j| | j	| d S |dkrf|d }| jj
|dddd	 d S |d
kr|d }d  | _| _|| jv r| j| | j	| d S d S |dkrt| |d  | j   d S d S )Nr  rr   r   r  )r  r<   r  r  r   rE  r  rV   )r'  r6  r-  r  r6   r  r   rW  r   r  rP  r  r  rS  rV   )r   actionr  r   ZdegPAUZdummyr  rV  r   r   r   _undo  s@   



zRawTurtle._undoc                 C   sv   	 | j d u rd S | j  }|d }|dd  }|dkr3|r1| }| |d |dd   |sd S d S | || d S )Nr   r   rH  )r'  r  r  )r   rV  r  r  r   r   r   rw   (  s   

zRawTurtle.undor  r   r'  )NNNN)Frv  )FrP   r  r  )8r   r   r   r  r   r   r`   rh   rx   r  r5   r  rX  rK  r  r  r  r8   rk   rl   rn   rg   rt   rs   rm   r  rG   r  r  rr   r  r6   r7   r3  r  r6  rq  rB   r1   r>   r<   rf  r{   r2   r?   rD   rF   rH   rE   r[  rR   rT   rS   r  rw   rv   r   r   r   r   r
   	  st    
(

(

(

(
(-
5A

0




 r
   c                   C   s   	 t jd u r
t t _t jS r   )r   _screenr  r   r   r   r   r	   K  s   
r	   c                   @   sf   e Zd ZdZdZed Zdd Zed ed ed ed fd	d
Zdd Z	dd Z
dd Zdd ZdS )r  Nr)   c                 C   s   t jd u rt  t _| _| jt j | j| j t jd u rWtd }td }td }td }td }td }| j	|||| | j
 t _t| t j | |||| d S d S )Nrz   r   r   r   r   r   )r  _rootr(  r)   _titler4  _destroyr  r   r-  r.  r   r   r&   )r   rz   r   r   r   r   r   r   r   r   r   Y  s    

z_Screen.__init__rz   r   r   r   c                 C   s   	 t | jds	d S | j }| j }t|tr(d|  kr"dkr(n n|| }|d u r2|| d }t|trGd|  krAdkrGn n|| }|d u rQ|| d }| j|||| |   d S )Nr1  r   r   r   )r  r  r6  r7  r   r   r1  r,   )r   rz   r   r/  r0  r_  shr   r   r   r&   o  s   

""z_Screen.setupc                 C   s"   	 t jd urt j| |t _d S r   )r  r  r)   r  )r   Ztitlestringr   r   r   r)     s   

z_Screen.titlec                 C   s:   | j }|tj u rd t_d t_d t_ d t_dt_|  d S r  )	r  r  r   r  r  r  r   r  r3  )r   rootr   r   r   r    s   
z_Screen._destroyc                 C   r  r   )r  r   r   r   r   r     s   z_Screen.byec                    sN   	  fdd}  | td rd S zt  W d S  ty&   td Y d S w )Nc                    s   	     d S r   )r   )r   r   r   r   r   exitGracefully  r  z+_Screen.exitonclick.<locals>.exitGracefullyr   r   )rR   r   r   AttributeErrorexit)r   r  r   r   r   r     s   
z_Screen.exitonclick)r   r   r   r  r  r   r  r   r&   r)   r  r   r   r   r   r   r   r  S  s    
(
r  c                   @   s2   e Zd Z	 dZdZed ed ed fddZdS )r   Nrk   r   r   c                 C   s,   t jd u r	t t _tj| t j|||d d S )N)rk   r   r   )r   r  r	   r
   r   )r   rk   r   r   r   r   r   r     s   


zTurtle.__init__)r   r   r   r  r  r   r   r   r   r   r   r     s    r   turtle_docstringdictc                 C   s
  	 i }t D ]}d| }t|j||< qtD ]}d| }t|j||< qtd|  dQ}tdd |D }|d |d d D ]}|d	t|  |d
||   q?|d }|d	t|  |d||   |d |  W d    d S 1 s~w   Y  d S )Nz_Screen.zTurtle.z%s.pyrC  c                 s   s&    | ]}| d d tvr|V  qdS )r   r   N)r   _alias_listr  r   r   r   r    s    z&write_docstringdict.<locals>.<genexpr>zdocsdict = {

r   z%s :
z        """%s
""",

z        """%s
"""

z}
)	_tg_screen_functionsr   __doc___tg_turtle_functionsr   r  r{   reprclose)r   docsdict
methodnamer   r   r   r   r   r   r~     s(   


"c              	   C   s^   	 dd|   i }t|}|j}|D ]}z	|| t|_W q ty,   td|  Y qw d S )Nz!turtle_docstringdict_%(language)sr   zBad docstring-entry: %s)r  
__import__r  r   r  r   r   )langmodnamemoduler  r   r   r   r   read_docstrings  s   r  zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc           
      C   s   	 d }}t | j\}}}|dd  }|dd  }| jpg }dd |D }dgt|t|  | }dd t||D }	|d urO|	d|  |d|  |d ura|	d|  |d|  d|	}d	| }d|}d	| }||fS )
Nr   r   c                 S   s   g | ]}d |f qS )z=%rr   )r  r   r   r   r   r  =  s    z"getmethparlist.<locals>.<listcomp>c                 S   s   g | ]\}}|| qS r   r   )r  r  Zdfltr   r   r   r  ?  r  *z**z, z(%s))inspectZgetargs__code____defaults__r  r  rK  r   )
obZdefTextZcallTextr  ZvarargsZvarkwZitems2ZrealArgsdefaultsZitems1r   r   r   getmethparlist-  s(   


r  c                 C   L   	 dd l }| d u rd S td }| d| d}|d| }|d|}|S )Nr   r   %s.r    \(.+ %s\)::rer   replacecompilesub)docstrr  Z
turtlename	newdocstrparexpr   r   r   _turtle_docreviseL     r  c                 C   r  )Nr   r   r  r   r  r  r  )r  r  Z
screennamer  r  r   r   r   _screen_docreviseX  r  r  ar  def {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           
      C   sl   | D ]1}t ||}t|\}}|dkrtd|| qtj|||||d}	t|	t  ||jt | _qd S )Nr   z>>>>>>)objinitr  Z
paramslistZargslist)getattrr  r   __func_bodyformatr   globalsr  )
Z	functionsr   r  r  Z	docreviser  r   Zpl1Zpl2Zdefstrr   r   r   _make_global_funcsx  s   

r  zTurtle._screenzScreen()zTurtle._penzTurtle()__main__c                   C   s   t  rt  d S t  d S r   )rN   r]   rU   r   r   r   r   	switchpen  s   

r  c                  C   sl  	 t   td t  td t  td tdD ]-} | dkr#t  tdD ]
}td t	d q'| dkr=t
d t  t  td	 t  qtd
 t
d td t  td td td td td t  tdd
 tdd
 t
d tdD ]} td t	d td td qtd t  tdD ]} td t	d td td qt  d S )NTd   r  r   r  r  Z   Zmaroonr  r   r   F   Z
startstartr  redr  )r`   r*   ry   r0   r=   rz   r  r1   rC   rP   r9   r>   r_   r{   )r  r   r   r   r   demo1  sZ   





r  c                  C   sV  	 t d t  td ttdd tddd } td tdD ]
}t  t	| d q"t
d t r:t  t s4t  td td	 d}td
 td td tddD ]8}|dkrmt  td	d|  dd|  tdD ]
}t| td qqt  |d7 }td t t  d d  qXtd t  td td t  tdd t d t  tdD ]}t	dd td td td qt  td t  td t  td t }|d t }|d |d |  |d | d |  |dd |d |  | d |dd |d | d tt| d}||dkrl|d |d  ||| |d |d! dkr`|   |   t  |d7 }||dks7|j
d"d#d$d% |d& |d d'd( }t!"d t r|  |  t s|d |j
d)d*d+ |#|d d S ),Nr   r  r   rF  r     r   zwait a moment...r  Zgreenr  r  r     x      F   r  r  Zyellowr  2   r   rb  i  (   r  ZblueZoranger   g      @g333333?r  zCAUGHT! )r  r  boldr_   )rc  re  r   c                 S   s   t   t  d S r   )r   r   )r  r  r   r   r   baba  s   
zdemo2.<locals>.babaz  Click me!)ZCourierr
  r  )rc  )$rp   rq   rY   rd   ru   r;   rb   r  r  r4   r{   rx   rw   r`   rQ   r   rW   r1   rA   r@   r>   r]   rU   r9   rk   rH   ra   r   rP   ry   rI   r=   rr   timesleeprR   )rL  r   Zlaenger  Ztrir   r  r  r   r   r   demo2  s   




















r  )r   )r  )EZ_vertkinterr   r   r   r  r  r  Zos.pathr   r   r   copyr   r   Z_tg_classesr  r  Z_tg_utilities__all__r  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)  r(  objectr8  r   r  r   r  r   r!  rS  rw  r
   r   r	   r  r   r   r~   r  Z	_LANGUAGEImportErrorr  r  r  r  r  r   r   r   r  r  r  r   r   r   r   r   <module>   s(  N
	
5

c   	/&    /       O         
"


5c
 