a
    ze1                    @   s,  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dddddddddddddddddddddZdd  Zd!d" Zzee W n ey   ed# Y n0 G d$d% d%eZd&d' Zd(d) Zd*Zdgd,d-ZG d.d/ d/ej Z!ee!ej"d0 G d1d2 d2ej#Z$ej"Z"G d3d4 d4e%Z&G d5d deZ'G d6d7 d7eZ(G d8d9 d9e%Z)G d:d; d;e%Z*G d<d= d=e&Z+G d>d? d?e%Z,G d@dA dAe%Z-G dBdC dCe%Z.G dDdE dEe-e,Z/e/Z0dFdG Z1G dHdI dIe+Z2G dJdK dKe/Z3e3Z4dhdMd	Z5dNdO Z6edP Z7ze7dkrle6e7 W n< e8y   edQe7 Y n  ey   edRe7  Y n0 dSdT Z9dUdV Z:dWdX Z;dYZ<dZd[ Z=e=ee2d\d]e; e=ee3d^d_e: e>Z?e@d`kr(dadb ZAdcdd ZBdedf ZCeB  eC  eD  dS )iz-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         ?g      ?i  i,  standard      ?
   i  classicblacknoresizeTenglishturtlescreenzPython Turtle GraphicsF)rz   height	canvwidth
canvheight	leftright	topbottomr   r   r   undobuffersizerk   rW   rA   ra   visiblelanguageexampleturtleexamplescreenr)   
using_IDLEc              	   C   s   t | d}| }W d    n1 s(0    Y  i }|D ]}| }|r:|drVq:z|d\}}W n& ty   td| |f  Y q:Y n0 | }| }|dv rt|}n2zd|v rt|}nt	|}W n ty   Y n0 |||< 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.9/turtle.pyconfig_dict   s0    &



r   c                 C   s   d}i }i }t |rt|}d|v r0d|d  }ztt\}}t||}W n ty`   d}Y n0 t |rrt|}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      s    zVec2D.__new__c                 C   s"   t | d |d  | d |d  S Nr      r   selfotherr   r   r   __add__   s    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__  s    zVec2D.__sub__c                 C   s   t | d  | d  S r   r   r   r   r   r   __neg__  s    zVec2D.__neg__c                 C   s   | d d | d d  d S )Nr      r   r   r   r   r   r   r   __abs__
  s    zVec2D.__abs__c                 C   sj   t | d  | d }|tj d }t|t| }}t | d | |d |  | d | |d |  S )Nr   r        f@)r   mathpicossin)r   angleZperpcsr   r   r   rotate  s    zVec2D.rotatec                 C   s   | d | d fS r   r   r   r   r   r   __getnewargs__  s    zVec2D.__getnewargs__c                 C   s   d|  S )Nz(%.2f,%.2f)r   r   r   r   r   __repr__  s    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   sT   t | j}|  |D ]}t|| q| j D ]\}}t|tjkr0|||< q0d 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 ]B}|d d dksd|dd  dksd||v sd||v rXq"|| ||< q"| D ]D\}}	||	d}
t|trt||d }t||
 t| ||
|  qnd 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                   @   s`   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   whiter   )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 s`|| jk r| jjd| ddddddd | j	jd| ddddddd n| 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   s   |    d S r   )r  )r   eventr   r   r   r    s    zScrolledCanvas.onResizec                 G   s   | j j| S r   )r   bboxr   argsr   r   r   r    s    zScrolledCanvas.bboxc                 O   s   | j j|i |S r   )r   cgetr   r  kwargsr   r   r   r    s    zScrolledCanvas.cgetc                 O   s   | j j|i | d S r   )r   r
  r  r   r   r   r
    s    zScrolledCanvas.configc                 O   s   | j j|i | d S r   )r   r  r  r   r   r   r    s    zScrolledCanvas.bindc                 O   s   | j j|i | d S r   )r   unbindr  r   r   r   r    s    zScrolledCanvas.unbindc                 C   s   | j   d S r   )r   focus_forcer   r   r   r   r    s    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                   @   sD   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     s    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  s    z_Root.set_geometryc                 C   s   |  d| d S )NZWM_DELETE_WINDOW)Zwm_protocol)r   destroyr   r   r   	ondestroy  s    z_Root.ondestroyc                 C   s   |   S r   )Zwinfo_screenwidthr   r   r   r   	win_width  s    z_Root.win_widthc                 C   s   |   S r   )Zwinfo_screenheightr   r   r   r   
win_height  s    z_Root.win_heightN)
r   r   r   r   r!  r"  r%  r'  r(  r)  r   r   r   r   r    s   r  c                   @   s(  e Zd Zdd Zdd Zdd Zdd ZdFddZdd ZdGddZ	dd Z
dd Zdd Zdd ZdHddZdd ZdIddZdJd d!ZdKd"d#ZdLd$d%Zd&d' ZdMd(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; ZdNd<d=Zd>d? Z d@dA Z!dBdC Z"dOdDdEZ#d	S )P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   r+  r,  )r   r   r   r   r   _image  s    zTurtleScreenBase._imagec                 C   s   || _ t|tr"| j j}| j j}nJt| 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  s    zTurtleScreenBase._createpolyNFc           
      C   s   g }|D ]*\}}	| || j  | |	 | j  q| jj|g|R   |d ur`| jj||d |d urx| jj||d |d ur| jj||d |r| j| d S )Nr  )r7  rz   appendr2  r3  r,  coordsZitemconfigureZ	tag_raise)
r   Zpolyitem	coordlistr  r7  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rPg }|D ]*\}}| || j  | | | j  q| jj|g|R   |d urh| jj||d |d ur| jj||d |r| j| d S )Nr9  r:  r;  )	r   Zlineitemr>  r  rz   r?  r@  r   r   r   r   r   	_drawline  s    
zTurtleScreenBase._drawlinec                 C   s   | j | d S r   )r,  deleter   itemr   r   r   _delete(  s    zTurtleScreenBase._deletec                 C   s   | j   d S r   )r,  r,   r   r   r   r   _update.  s    zTurtleScreenBase._updatec                 C   s   | j | d S r   )r,  afterr   r   r   r   r   _delay3  s    zTurtleScreenBase._delayc                 C   s2   z| j |}d}W n tjy,   d}Y n0 |S )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 |   n| j dS d S )N)r   r   )r,  r
  rH  r  )r   r9   r   r   r   _bgcolorA  s    
zTurtleScreenBase._bgcolorc                 C   st   |\}}|| j  }|| j }dddd}| jj|d | ||| ||d}	| j|	\}
}}}| j  |	|d fS )Nswr   Zse)rP   centerr_   r   )textanchorr  font)r2  r3  r,  Zcreate_textr  r,   )r   r[   txtalignrS  rW   r   r   rR  rF  Zx0Zy0Zx1Zy1r   r   r   _writeJ  s    


zTurtleScreenBase._writer   c                    sD    d u rj |d|  n$ fdd}j |d| || d S )N<Button-%s>c                    s:   j | jj j | j j  }} || d S r   r,  canvasxr   r2  canvasyr   r3  r  r   r   funr   r   r   eventfune  s    z+TurtleScreenBase._onclick.<locals>.eventfunr,  Z
tag_unbindZtag_bindr   rF  r]  numaddr^  r   r\  r   _onclick\  s    zTurtleScreenBase._onclickc                    sD    d u rj |d|  n$ fdd}j |d| || d S )Nz<Button%s-ButtonRelease>c                    s:   j | jj j | j j  }} || d S r   rX  r[  r\  r   r   r^  w  s    z-TurtleScreenBase._onrelease.<locals>.eventfunr_  r`  r   r\  r   
_onreleasek  s    	zTurtleScreenBase._onreleasec                    sD    d u rj |d|  n$ fdd}j |d| || d S )Nz<Button%s-Motion>c                    sR   z:j | jj j | j j  }} || W n tyL   Y n0 d S r   )r,  rY  r   r2  rZ  r   r3  r   r[  r\  r   r   r^    s    z*TurtleScreenBase._ondrag.<locals>.eventfunr_  r`  r   r\  r   _ondrag~  s    	zTurtleScreenBase._ondragc                    s@    d u rj d|  n" fdd}j d| || d S )NrW  c                    s:   j | jj j | j j  }} || d S r   rX  r[  r\  r   r   r^    s    z1TurtleScreenBase._onscreenclick.<locals>.eventfunr,  r  r  )r   r]  ra  rb  r^  r   r\  r   _onscreenclick  s    	zTurtleScreenBase._onscreenclickc                    s>    d u r| j d| d  n fdd}| j d| | d S )Nz<KeyRelease-%s>c                    s
      d S r   r   r  r]  r   r   r^    s    z0TurtleScreenBase._onkeyrelease.<locals>.eventfunrf  r   r]  r   r^  r   ri  r   _onkeyrelease  s    zTurtleScreenBase._onkeyreleasec                    sn    d u r4|d u r | j dd  qj| j d| d  n6 fdd}|d u rX| j d| n| j d| | d S )Nz
<KeyPress>z<KeyPress-%s>c                    s
      d S r   r   rh  ri  r   r   r^    s    z.TurtleScreenBase._onkeypress.<locals>.eventfunrf  rj  r   ri  r   _onkeypress  s    zTurtleScreenBase._onkeypressc                 C   s   | j   d S r   )r,  r  r   r   r   r   _listen  s    zTurtleScreenBase._listenc                 C   s(   |dkr| j | n| j || d S Nr   )r,  Z
after_idlerI  r   r]  tr   r   r   _ontimer  s    zTurtleScreenBase._ontimerc                 C   s   | j jdd|dS )Nr   image)r,  Zcreate_image)r   rs  r   r   r   _createimage  s    zTurtleScreenBase._createimagec                 C   s<   |\}}| j ||| j | | j f | j j||d d S Nrr  )r,  r=  r2  r3  
itemconfig)r   rF  r[   rs  r   r   r   r   r   
_drawimage  s     zTurtleScreenBase._drawimagec                 C   s    | j j||d | j | d S ru  )r,  rv  Z	tag_lower)r   rF  rs  r   r   r   	_setbgpic  s    zTurtleScreenBase._setbgpicc                 C   s   | j |S r   )r,  r   rE  r   r   r   _type  s    zTurtleScreenBase._typec                    s.   | j |  fddtdt dD }|S )Nc                    s"   g | ]} |  |d    fqS )r   r   .0ir@  r   r   
<listcomp>      z/TurtleScreenBase._pointlist.<locals>.<listcomp>r   r   )r,  r=  rangelen)r   rF  plr   r}  r   
_pointlist  s    zTurtleScreenBase._pointlistc                 C   s   | j j||||fd d S )Nr1  )r,  r
  )r   srx1sry1srx2sry2r   r   r   _setscrollregion  s    z!TurtleScreenBase._setscrollregionc           	      C   s~   | j  }|D ]j}t| j |}g }|rd|d d \}}|||  |||  |dd  }q&| j j|g|R   qd S Nr   )r,  Zfind_allr   r=  r<  )	r   ZxscalefactorZyscalefactorr   rF  ZcoordinatesZnewcoordlistr   r   r   r   r   _rescale  s    
zTurtleScreenBase._rescalec                 C   sz   t | jts| j| jfS ||  u r6|  u r6d u rJn n| jj| jjfS |d urX|| _|d urf|| _| j||| d S r   )r   r,  r   r   r   r`   r  r   r   r   _resize  s    "zTurtleScreenBase._resizec                 C   s@   | j  }|dkr| j d }| j  }|dkr8| 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)NNNF)NNNF)N)r   N)r   N)r   N)r   N)N)NNN)NNN)$r   r   r   r.  r0  r   r8  rA  rB  rC  rG  rH  rK  rM  rN  rV  rc  rd  re  rg  rk  rl  rm  rq  rt  rw  rx  ry  r  r  r  r  r  r   r(   r   r   r   r   r   r*    sJ     
  


	





r*  c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   r   r   Y  s   c                   @   s   e Zd ZdS )TurtleGraphicsErrorNr  r   r   r   r   r  b  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rpt|}nN|dkrVt|trp| drpt|rpt	|}n|dkrdg }nt
d| || _d S )Npolygonrs  .gifcompoundzThere is no shape type %s)ry  r   r   r   r   lowerendswithr   r   r0  r  _data)r   type_datar   r   r   r   n  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)ry  r  r  r<  )r   polyr  r7  r   r   r   addcomponent~  s    
zShape.addcomponent)N)N)r   r   r   r   r  r   r   r   r   r   g  s   
r   c                   @   s@   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   sF   | j dkrB| js0| jd | j  | _|| j| j< n| j| j | d S r   )r  r  r  r  r<  rE  r   r   r   push  s
    
zTbuffer.pushc                 C   sJ   | j dkrF| j| j }|d u r"d S d g| j| j< | jd | j  | _|S d S r   )r  r  r  rE  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   )N)	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dAd-d.Zd/d0 ZdBd1d2ZdCd3d4ZdDd6d7ZdEd8d9ZdFd:d;ZeZeZ eZ!e	Z"eZ#d	S )Gr   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 )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  rs  )Zarrowr   r4   ZsquareZtriangler   r-  nopicr   r   darwinZwmZ
attributesr   z-topmost10)r*  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 | qP| d  | jd d  D ]}| d | | d | qzd t_d S )
Nr   r   allr   r  r   r   r   )r   r      )r   r  r  rG  rt  _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 rp| | 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   r2  r3  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%   r2  r3  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 r2|  dr(td| |}qFtdnt|trFtd|}|| j|< d S )Nr  rs  z;Bad arguments for register_shape.
Use  help(register_shape)r  )r  r  r   r0  r  r   r   r  )r   namerk   r   r   r   r#   T  s    


zTurtleScreen.register_shapec              	   C   s  t |dkr|d }t|trD| |s0|dkr4|S tdt| z|\}}}W n& ttfyx   tdt| Y n0 | jdkrdd |||fD \}}}d|  krd	krn n.d|  krd	krn nd|  krd	ksn td
t| d|||f S )Nr   r   r   zbad color string: %sbad color arguments: %sr   c                 S   s   g | ]}t d | qS g     o@roundr{  r   r   r   r   r~    r  z*TurtleScreen._colorstr.<locals>.<listcomp>   bad color sequence: %s#%02x%02x%02x)r  r   r   rM  r  	TypeErrorr   r  )r   r9   r   gbr   r   r   	_colorstrw  s    


FzTurtleScreen._colorstrc                    sx     ds S t dkr. fdddD }n4t dkrV 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   rz  cstrr   r   r~    r  z'TurtleScreen._color.<locals>.<listcomp>)r   r  r  r  c                    s   g | ]}d t  | d  qS )r  r  )r{  r5  r  r   r   r~    r  r   zbad colorstring: %sc                 3   s   | ]}| j  d  V  qdS )r  N)r  )r{  r   r   r   r   	<genexpr>  r  z&TurtleScreen._color.<locals>.<genexpr>)r   r  r  r   )r   r  r@  r   )r  r   r   _color  s    
zTurtleScreen._colorc                 C   s8   |d u r| j S |dkr"t|| _ n|dkr4t|| _ 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   s   | j S r   )r  r   r   r   r   r+     s    zTurtleScreen.turtlesc                 G   s4   |r|  |}nd }| |}|d ur0| |}|S r   )r  rN  r  r   r  r9   r   r   r   r     s    

zTurtleScreen.bgcolorc                 C   sB   |d u r| j S t|| _ d| _|d ur0t|| _| j r>|   d S rn  )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   rJ  r   r   r   r     s    zTurtleScreen.delayc                 C   s<   t jsdt _t| jdkr8|  jd7  _|  j| j;  _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_drawturtlerH  )r   tracingrp  r   r   r   r,     s    
zTurtleScreen.updatec                 C   s   |   d S rn  r  r   r   r   r   r.     s    zTurtleScreen.window_widthc                 C   s   |   d S Nr   r  r   r   r   r   r-   &  s    zTurtleScreen.window_heightc                 C   s   | j S r   )r,  r   r   r   r   r   /  s    
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   )rg  r   r]  r  rb  r   r   r   rR   F  s    zTurtleScreen.onclickc                 C   sF   |d u r || j v r6| j | n|| j vr6| j | | || d S r   )r  remover<  rk  r   r]  r   r   r   r   r   W  s    

zTurtleScreen.onkeyc                 C   sN   |d u r || j v r>| j | n|d ur>|| j vr>| j | | || d S r   )r  r   r<  rl  r  r   r   r   r   u  s    
zTurtleScreen.onkeypressc                 C   s   |    d S r   )rm  )r   xdummyydummyr   r   r   r     s    
zTurtleScreen.listenr   c                 C   s   |  || d S r   )rq  ro  r   r   r   r"     s    zTurtleScreen.ontimerc                 C   sF   |d u r| j S || jvr(| || j|< | | j| j|  || _ d S r   )r  r  r0  rx  r  )r   Zpicnamer   r   r   r     s    
zTurtleScreen.bgpicc                 C   s   |  |||S r   )r  r  r   r   r   r%     s    zTurtleScreen.screensize)N)N)N)NN)N)r   N)N)NN)r   )N)NNN)$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     sD   
(
"'
#
	

			

 



r   c                   @   sP  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dCd)d*Zd+d, Zd-d. Zd/d0 ZdDd1d2ZdEd3d4Zd5d6 Zd7d8 ZdFd9d:Z dGd;d<Z!dHd=d>Z"dId?d@Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS )J
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   sL   |d u r| j S |dvrd S || _ |dv r6d| _d| _n| jd | _d| _d S )Nr  )r   r  r   r         @r   )r  r  r	  _fullcircler  r   r   r   r    s    zTNavigator._setmodec                 C   s0   || _ d| | _| jdkr"d| _n
|d | _d S )Nih  r   r   r  )r  _degreesPerAUr  r  r   Z
fullcircler   r   r   _setDegreesPerAU  s
    

zTNavigator._setDegreesPerAU     v@c                 C   s   |  | d S r   )r  r  r   r   r   r:     s    zTNavigator.degreesc                 C   s   |  dtj  d S r  )r  r   r   r   r   r   r   r^   5  s    zTNavigator.radiansc                 C   s   | j | j|  }| | d S r   )r  r  _goto)r   r;   Zender   r   r   _goC  s    zTNavigator._goc                 C   s   || j 9 }| j|| _d S r   )r  r  r   r   r   r   r   r   _rotateH  s    
zTNavigator._rotatec                 C   s
   || _ d S r   r  )r   endr   r   r   r  M  s    zTNavigator._gotoc                 C   s   |  | d S r   r  r   r;   r   r   r   rC   Q  s    zTNavigator.forwardc                 C   s   |  |  d S r   r  r  r   r   r   r/   h  s    zTNavigator.backc                 C   s   |  |  d S r   r  r  r   r   r   r_   |  s    zTNavigator.rightc                 C   s   |  | d S r   r  r  r   r   r   rP     s    zTNavigator.leftc                 C   s   | j S r   r  r   r   r   r   r[     s    zTNavigator.posc                 C   s
   | j d S rn  r  r   r   r   r   r|     s    zTNavigator.xcorc                 C   s
   | j d S r  r  r   r   r   r   r}     s    zTNavigator.ycorc                 C   s,   |d u r|  t|  n|  t|| d S r   )r  r   )r   r   r   r   r   r   rI     s    zTNavigator.gotoc                 C   s   |  dd | d d S rn  )rI   rd   r   r   r   r   rL     s    zTNavigator.homec                 C   s   |  t|| jd  d S r  r  r   r  )r   r   r   r   r   ri     s    zTNavigator.setxc                 C   s   |  t| jd | d S rn  r  )r   r   r   r   r   rj     s    zTNavigator.setyc                 C   sT   |d urt ||}t|t r"|}n$t|tr6t | }nt|trF|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r6t | }nt|trF|j}|| j \}}tt||d tj dd }|| j	 }| j
| j|  | j S Nr   r   r  )r   r   r   r  r  r  r   atan2r   r  r  r	  r  )r   r   r   r[   resultr   r   r   ru   E  s    




 
zTNavigator.towardsc                 C   sJ   | j \}}tt||d tj dd }|| j }| j| j|  | j S r  )	r  r  r   r   r   r  r  r	  r  )r   r   r   r!  r   r   r   rJ   h  s    

 
zTNavigator.headingc                 C   s>   ||    | j }| j}||d  | |d  }| | d S )N       @)rJ   r	  r  r  )r   Zto_angler   fullr   r   r   rd   w  s    zTNavigator.setheadingc                 C   sp  | j r| j dg d| j _|  }|d u r2| j}|d u rjt|| j }dttdt|d  d|  }d| | }d| }d	| t	|tj
 d
 | j  }|dk r| | |   }}}|  }	|  }
|dkr| dd n
| d | | t|D ].}| | | | | d | | q | |  |dkrR| |	|
 | | | j rld| j _d S )NseqTr      g      @g     M@r   r   r"  r   r   F)r
  r  r  rp   r  r  r   minr   r   r   r  _tracerrK  r  r  r  )r   radiusZextentstepsrp   Zfracr4  Zw2ltrZdlr|  r   r   r   r4     s>    ""






zTNavigator.circlec                 C   s   d S r   r   )r   r   r   r   r   rp     s    zTNavigator.speedc                 C   s   d S r   r   )r   ar  r   r   r   r'    s    zTNavigator._tracerc                 C   s   d S r   r   )r   r  r   r   r   rK    s    zTNavigator._delay)N)r  )N)N)N)NN)r   )NN)N)-r   r   r   r   r  ZDEFAULT_MODEr  r  r   r`   r  r  r:   r^   r  r  r  rC   r/   r_   rP   r[   r|   r}   rI   rL   ri   rj   r;   ru   rJ   rd   r4   rp   r'  rK  r@   r3   r0   rb   rQ   r\   re   rf   rc   r   r   r   r   r    sX   

	

#
 
#
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d0d!d"Zd1d$d%Zd2d'd(Zd)d* Zd+d, ZeZeZeZe	Ze	ZeZeZdS )3TPenra   c                 C   s   || _ d | _t|  d S r   )_resizemoder
  r-  _reset)r   ra   r   r   r   r     s    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   r/    s    zTPen._resetNc                 C   s.   |d u r| j S | }|dv r*| j|d d S )N)autouserr   ra   )r.  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   )r0  rV   )r   rz   r   r   r   rY     s    zTPen.pensizec                 C   s   | j s
d S | jdd d S )NFrX   r4  rV   r   r   r   r   rZ   0  s    
z
TPen.penupc                 C   s   | j r
d S | jdd d S )NTr>  r?  r   r   r   r   rX   >  s    
zTPen.pendownc                 C   s   | j S r   )r4  r   r   r   r   rN   L  s    zTPen.isdownc                 C   sj   dddddd}|d u r| j S ||v r0|| }n*d|  k rDdk rVn ntt|}nd}| j|d	 d S )
Nr   r   r  r  r   )ZfastestfastnormalZslowZslowestr   g      %@)rp   )r5  r   r  rV   )r   rp   Zspeedsr   r   r   rp   [  s    
z
TPen.speedc                 G   s   |rht |}|dkr"|d  }}n"|dkr4|\}}n|dkrD| }}| |}| |}| j||d n| | j| | jfS d S )Nr   r   r   r  )rW   rA   )r  r  rV   r  r2  r3  )r   r  r*  ZpcolorZfcolorr   r   r   r9     s     


z
TPen.colorc                 G   s:   |r*|  |}|| jkrd S | j|d n| | jS d S )N)rW   )r  r2  rV   r  r  r   r   r   rW     s    

zTPen.pencolorc                 G   s:   |r*|  |}|| jkrd S | j|d n| | jS d S )N)rA   )r  r3  rV   r  r  r   r   r   rA     s    

zTPen.fillcolorc                 C   s   | j dd d S )NTshownrV   r   r   r   r   ro     s    zTPen.showturtlec                 C   s   | j dd d S )NFrB  rD  r   r   r   r   rK   	  s    zTPen.hideturtlec                 C   s   | j S r   )r1  r   r   r   r   rO   	  s    
zTPen.isvisiblec                 K   s  | j | j| j| j| j| j| j| j| j| j	| j
d}|s>|s>|S t|trN|}ni }|| i }|D ]}|| ||< qd| jr| jd|f d}d|v r| j|d krd}d|v rt|d tr| |d f|d< | j|d krd}d|v r| j|d krd}|r|   d|v r&|d | _d|v r:|d | _d|v rN|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 sLd|v sLd|v r| j\}	}
| j}t| j
t| j
 }}|	| |
|| |  |	 | |
|||   f| _|   d S )N)rC  rX   rW   rA   rY   rp   ra   stretchfactorrn   r7  rs   rV   FrX   TrW   rY   rA   rp   ra   rE  rn   r7  rC  rs   )r1  r4  r2  r3  r0  r5  r.  r6  r7  r:  r8  r   dictr,   r
  r  r   r  _newLiner   r   r   r   r   r9  rH  )r   rV   ZpendictZ_pdpZ_p_bufr   ZnewLineZsfZscxZscyZshfsacar   r   r   rV   !	  s    /
























zTPen.penTc                 C   s   d S r   r   r   ZusePosr   r   r   rG  	  s    zTPen._newLineFc                 C   s   d S r   r   )r   r  Zforcedr   r   r   rH  	  s    zTPen._updatec                 C   s   d S r   r   r  r   r   r   r  	  s    zTPen._colorc                 C   s   d S r   r   r  r   r   r   r  	  s    zTPen._colorstr)N)N)N)N)T)TF)r   r   r   r   r   r/  ra   rY   rZ   rX   rN   rp   r9   rW   rA   ro   rK   rO   rV   rG  rH  r  r  rz   ry   r]   rU   r=   rq   rM   r   r   r   r   r-    s8   



&.%$


r-  c                   @   s   e Zd Zdd Zdd ZdS )_TurtleImagec                 C   s   || _ d | _| | d S r   )r   ry  	_setshape)r   r   
shapeIndexr   r   r   r   	  s    z_TurtleImage.__init__c                    s   | j  || _| jd  kr* j| jkr2n nd S | jd  krP j| jkrXn nd S | jdv rp | j n | jdkr| jD ]} | q j| j| _| jdkr  | _nF| jdkrԈ  jd j| _n&| jdkr fdd j| jD | _d S )Nr  rs  )rs  r  r  r-  c                    s   g | ]}   qS r   r8  r{  rF  r   r   r   r~  	  r  z*_TurtleImage._setshape.<locals>.<listcomp>)	r   rN  ry  r  rG  _itemr8  rt  r  )r   rN  rF  r   rQ  r   rM  	  s(    ""







z_TurtleImage._setshapeN)r   r   r   r   rM  r   r   r   r   rL  	  s   rL  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dod#d$Zd%d& Zdpd'd(Zd)d* Zdqd+d,Zd-d. Zd/d0 Zdrd2d3Zd4d5 Zd6d7 Zd8d9 Zd:d; Zdsd<d=Z d>d? Z!d@dA Z"dBdC Z#dtdEdFZ$dGdH Z%dIdJ Z&dKdL Z'dudMdNZ(dOdP Z)dvdSdTZ*dUdV Z+dWdX Z,dYdZ Z-d[d\ Z.d]d^ Z/e/Z0dwd_d`Z1dxdbdcZ2dydddeZ3dzdfdgZ4dhdi Z5djdk Z6eZ7dS ){r
   Nrk   r   r   c                 C   s4  t |tr|| _n|t |tr:|tjvr2tj| || _nTt |ttfrtjD ]}|j	|krN|| _ qqNt|| _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
   screensr<  r   r   r,  r  r  r   r   r-  r  rB  drawingLineItemrL  r   _poly_creatingPoly	_fillitem	_fillpathr1  _hidden_from_screencurrentLineItemr  currentLiner   
stampItems_undobuffersizer  r
  rH  )r   Zcanvasrk   r   r   r   r   r   r   r   	  s@    











zRawTurtle.__init__c                 C   s0   t |  t|  |   |   |   d S r   )r  r`   r-  r/  _clearr  rH  r   r   r   r   r`    
  s
    

zRawTurtle.resetc                 C   s&   |d u s|dkrd | _ n
t|| _ d S rn  )r
  r  )r   sizer   r   r   rh   
  s    zRawTurtle.setundobufferc                 C   s   | j d u rdS | j  S rn  )r
  r  r   r   r   r   rx   ,
  s    	
zRawTurtle.undobufferentriesc                 C   sl   d  | _ | _| jD ]}| j| q| j | _g | _| jrJ| j	| j
 | jg| _|   | | j d S r   )rX  rY  r   r   rG  rB  r[  r\  r4  r<  r  r7   rh   r^  rE  r   r   r   r_  9
  s    

zRawTurtle._clearc                 C   s   |    |   d S r   )r_  rH  r   r   r   r   r5   G
  s    zRawTurtle.clearc                 C   sF   | j   | j jdkrd S t| jdkrB| j | j| j| j| j d S r   )	r   r  r  r  r\  rC  r[  r2  r0  r   r   r   r   r  V
  s    
zRawTurtle._update_datac                 C   sx   | j }|jdkrd S |jdkrD|   |   |  ||j n0|   |jdkrt| D ]}|  q^|  d S r   )	r   r  r  r  rH  rK  r  r  r+   )r   r   rp  r   r   r   rH  ^
  s    



zRawTurtle._updatec                 C   s   | j ||S r   )r   r*   )r   flagr   r   r   r   r'  p
  s    zRawTurtle._tracerc                 C   s   | j |S r   )r   r  r  r   r   r   r  
  s    zRawTurtle._colorc                 C   s   | j |S r   )r   r  r  r   r   r   r  
  s    zRawTurtle._colorstrc              	   C   s   t |tr|S z|\}}}W n& ttfyB   tdt| Y n0 | jjdkrjdd |||fD \}}}d|  kr~dkrn n.d|  krdkrn nd|  krdksn tdt| d|||f S )	Nr  r   c                 S   s   g | ]}t d | qS 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r  |j_nJ|dkr  j	d j|j_n*|dkrʇ fdd j	| jj jD |j_  |_|  |S )Nr  rs  r-  r  c                    s   g | ]}   qS r   rO  rP  rQ  r   r   r~  
  r  z#RawTurtle.clone.<locals>.<listcomp>)r   rG  r4  r   r   rL  rN  r  r<  r  ry  r8  rR  rt  r  rB  r[  rH  )r   r   qttyper   rQ  r   r8   
  s.    


zRawTurtle.clonec                 C   sB   |d u r| j jS || j vr*td| | j | |   d S )NzThere is no shape named %s)r   rN  r   r   r  rM  rH  )r   r  r   r   r   rk   
  s    zRawTurtle.shapec                 C   s   ||  u r|  u rd u r8n n| j \}}||| jfS |dksH|dkrPtd|d urt|d u rj||f}q||f}n|d ur| j d |f}n| j }|d u r| j}| jd||d d S )Nr   z(stretch_wid/stretch_len must not be zeror<  )ra   rE  r7  )r6  r:  r  rV   )r   Zstretch_widZstretch_lenr7  rE  r   r   r   rl   
  s"    "


zRawTurtle.shapesizec                 C   s    |d u r| j S | jd|d d S )Nr<  )ra   rn   )r7  rV   )r   Zshearr   r   r   rn     s    zRawTurtle.shearfactorc                 C   s<   | | j  | j }|tj d dtj  }| jd|d d S )Nr   r   r<  )ra   rs   )r  r	  r   r   rV   r   r   rs   r   r   r   rg     s    zRawTurtle.settiltanglec                 C   s>   |d u r0| j  dtj  | j }|| j | j S | | d S )Nr   )r8  r   r   r	  r  r  rg   re  r   r   r   rt   4  s    zRawTurtle.tiltanglec                 C   s   |  ||    d S r   )rg   rt   r  r   r   r   rs   O  s    zRawTurtle.tiltc                 C   s6  ||  u r(|  u r(|  u r(d u r2n n| j S | j \}}}}|d urL|}|d urX|}|d urd|}|d urp|}|| ||  dkrtd||||f| _ t| |dtj  }	t|	t|	 }
}|| |
|  || |
|  |
| ||  |
| ||  f\}}}}||f| _|| | _|	| _	| j
dd d S )Nr   z0Bad shape transform matrix: must not be singularr   r<  r=  )r9  r  r   r   r   r   r   r6  r7  r8  rV   )r   t11t12t21t22Zm11Zm12Zm21Zm22ZalfarI  rJ  Za11Za12Za21Za22r   r   r   rm   b  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   )r2  r3  r{  r   r   Ze0e1Zp0Zp1r   r   r   r~    s   z(RawTurtle._polytrafo.<locals>.<listcomp>)r   r  r  r   r3  r2  r  )r   r  er   rk  r   
_polytrafo  s    

zRawTurtle._polytrafoc                 C   s2   | j j| jj }|jdkr.| |j|jdkS d S )Nr  r  )r   r  r   rN  ry  _getshapepolyr  )r   rk   r   r   r   rG     s    
zRawTurtle.get_shapepolyFc                    sx   | j dks|r| j\ n>| j dkrNtd| jd }|dd|f\ n| j dkr\|S t fdd|D S )	Nr<  r;  r   g      @r   r   c                 3   s2   | ]*\}} | |  | |  fV  qd S r   r   rj  rf  rg  rh  ri  r   r   r    r  z*RawTurtle._getshapepoly.<locals>.<genexpr>)r.  r9  maxr0  r   )r   r  r  r*  r   rp  r   ro    s    

zRawTurtle._getshapepolyc              	   C   s  | j }|j| jj }|j}| jj}| jr*|jdkr*|jdkr*d| _	|j
}|dkr| jdkrfd}n| jdkrx| j}n| j}| | |}| j| j }}|j|||||dd nt|d	kr||| j| nZ|d
krt||D ]D\}	\}
}}| | |
d}
|j|	|
| || || jdd qnx| j	r6d S |dkrR||ddd nJ|d	krv||| j|jd j
 n&|d
kr|D ]}	||	ddd qd| _	d S )Nr   Fr  r   r   r;  Tr  r7  rz   r?  rs  r  r  r  r  r   r-  )r   r  r   rN  ry  rR  r1  r  r  rZ  r  r.  r0  r:  rn  ro  r3  r2  rA  rw  r  ziprb  )r   r   rk   rd  Ztitemtshaper4  fcocrF  r  r   r   r   r    sH     






zRawTurtle._drawturtlec              	   C   sT  | j }|j| jj }|j}|j}|dkr| }| jdkr@d}n| jdkrR| j}n| j	}| 
| |}| j| j }}|j|||||dd n|dkr|d}||| j| n|d	kr4g }|D ]}	| }
||
 qt|}t||D ]D\}
\}}}| 
| |d}|j|
|| || || j	dd q| j| | jd
|f |S )Nr  r   r   r;  Trr  rs  r   r  rr   )r   r  r   rN  ry  r  r8  r.  r0  r:  rn  ro  r3  r2  rA  rt  rw  r  r<  r   rt  rb  r]  r
  r  )r   r   rk   rd  ru  stitemr4  rv  rw  elementrF  r  r   r   r   rr     s>    

zRawTurtle.stampc                 C   s   || j v rDt|tr,|D ]}| j| qn| j| | j | d|f}| j}||jvr`d S |j|}|j| ||j	kr|j	d |j
 |_	|j|j	d |j
 d g d S )Nrr   r   )r]  r   r   r   rG  r   r
  r  indexr  r  insert)r   stampidZsubitemrF  bufrz  r   r   r   _clearstamp	  s    



zRawTurtle._clearstampc                 C   s   |  | |   d S r   )r~  rH  )r   r|  r   r   r   r6     s    
zRawTurtle.clearstampc                 C   s^   |d u r| j d d  }n&|dkr0| j d | }n| j |d  }|D ]}| | qB|   d S rn  )r]  r~  rH  )r   r  ZtoDeleterF  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rh| j| | j}| jrZ|jdkrZ|| }|d |j d |d |j d  }dt|d dd| j  | j   }|d|  }	td|D ]R}
|
dkrd	}nd
}||	|
  | _| j r2|| j|| jf| j| j| |   q| j rZ|j| jdd| jd | j rn| 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   *   )r4  r2  r0  r   rY  r   r   r  r[  r\  r  r   r
  r  r5  r  r2  r3  r   r  rC  rU  rH  r<  rW  rV  r  rG  )r   r  go_modesr   Z
undo_entrystartdiffdiffsqnhopsdeltar  r?  r   r   r   r  J  s\    


$$


zRawTurtle._gotoc                    s  |\}}}}|\}}}}	|\}
}} | j t| j| dkrDtd |
| _|| _|ddgkrbd}n|}j|
|||d  fdd| jD }|D ]}| | j	| q|}| j
rjdkr|| }|d	 j d
 |d j d
  }dt|d dd| j
  | j
   }|d|  }td|D ]P}|dkr@d}nd}|||  | _|rr| 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   )ry  rz  r   r   r   r   r~    s   z'RawTurtle._undogoto.<locals>.<listcomp>r   r   r   r  r  r   TFr  zUnwahrscheinlich in _undogoto!)r   r  r  r   r[  r\  rC  r   rG  r   r5  r  r2  r3  r   r  rU  rH  rW  r  rV  r  rY  )r   entryoldnewr  ZcoodataZdrawingZpcZpsrB   ZcLIZcLr  ZusepcZtodeleter|  r  r  r  r  r  r  r?  r   r  r   	_undogoto  sf    
$$




zRawTurtle._undogotoc                 C   s   | j r| j d|| jf || j9 }| j|}| jj}|dkr| jdkrd| j }dtt	||  }d| | }t
|D ]}| j|| _|   q||| _|   d S )Nrotr   r   g      @r   )r
  r  r  r  r   r   r  r5  r   r  r  rH  )r   r   Z	neworientr  Zanglevelr)  r  r   r   r   r   r    s    


zRawTurtle._rotateTc                 C   sn   t | jdkrD| j| j| j| j| j | j | _| j	| j n| jj| jdd g | _|rj| j
g| _d S )Nr   T)r?  )r  r\  r   rC  r[  r2  r0  rB  r   r<  r  rK  r   r   r   rG    s    zRawTurtle._newLinec                 C   s   t | jtS r   )r   rY  r   r   r   r   r   rB     s    zRawTurtle.fillingc                 C   sX   |   s"| j | _| j| j | jg| _|   | j	rL| j	
d| jf |   d S )N	beginfill)rB   r   r8  rX  r   r<  r  rY  rG  r
  r  rH  r   r   r   r   r1     s    
zRawTurtle.begin_fillc                 C   s^   |   rZt| jdkrF| jj| j| j| jd | jrF| jd| jf d  | _| _| 	  d S )Nr   r9  dofill)
rB   r  rY  r   rA  rX  r3  r
  r  rH  r   r   r   r   r>     s    zRawTurtle.end_fillc              	   G   sB  |sNt |ttfr0| |}| jt| jd }qr| j}|sr| jt| jd }n$|d u rh| jt| jd }| |}t| jdr| j	| j
||}| j| | jr| jd|f n|  }| jr| jdg d| j_zH|  dkr|   |   | | | | | d W | | n| | 0 | jr>d| j_d S )	Nr  _dotr<   r$  Tr;  r   F)r   r   r   r  r0  rq  r2  hasattrr   r  r  r   r<  r
  r  rV   r  ra   rM   rX   rY   rW   rC   )r   r`  r9   rF  rV   r   r   r   r<     s:    



zRawTurtle.dotc                 C   sB   | j | j|||| j\}}| j| | jr>| jd|f |S )Nwri)r   rV  r  r2  r   r<  r
  r  )r   rT  rU  rS  rF  r  r   r   r   rV  I  s    zRawTurtle._writerP   Arialr  rA  c                 C   s`   | j r| j dg d| j _| t|| |}|rN|  \}}| || | j r\d| j _d S )Nr$  TF)r
  r  r  rV  r   r  r[   re   )r   argmoverU  rS  r  r   r   r   r   r   r{   S  s    zRawTurtle.writec                 C   s   | j g| _d| _d S r  )r  rV  rW  r   r   r   r   r2   p  s    
zRawTurtle.begin_polyc                 C   s
   d| _ d S NF)rW  r   r   r   r   r?   ~  s    zRawTurtle.end_polyc                 C   s   | j d urt| j S d S r   )rV  r   r   r   r   r   rD     s    

zRawTurtle.get_polyc                 C   s   | j S r   rQ  r   r   r   r   rF     s    zRawTurtle.getscreenc                 C   s   | S r   r   r   r   r   r   rH     s    zRawTurtle.getturtlec                 C   s   | j |S r   )r   r   rJ  r   r   r   rK    s    zRawTurtle._delayr   c                 C   s"   | j | jj||| |   d S r   )r   rc  r   rR  rH  r  r   r   r   rR     s    zRawTurtle.onclickc                 C   s"   | j | jj||| |   d S r   )r   rd  r   rR  rH  r  r   r   r   rT     s    zRawTurtle.onreleasec                 C   s   | j | jj||| d S r   )r   re  r   rR  r  r   r   r   rS     s    zRawTurtle.ondragc                 C   s,  | j d u rd S |dkr@|\}}| | | | j  | j  }n|dkr\|d }| | n|dkrp| | n|dv r|d }| j| | j	| n|dkr|d }| jj
|dddd	 nh|d
kr|d }d  | _| _|| jv r(| j| | j	| n$|dkr(t| |d  | j   d S )Nr  rr   r   r  )r  r<   r  rs  r   r6  r  rV   )r
  r  r  r  r6   r  r   rG  r   r   rA  rX  rY  r-  rV   )r   actionr  r   ZdegPAUdummyrx  rF  r   r   r   _undo  s:    



zRawTurtle._undoc                 C   sl   | j d u rd S | j  }|d }|dd  }|dkr\|rh| }| |d |dd   q4n| || d S )Nr   r   r$  )r
  r  r  )r   rF  r  r  r   r   r   rw   (  s    

zRawTurtle.undo)NN)N)NNN)N)N)NNNN)F)N)T)N)FrP   r  )N)r   N)r   N)r   N)8r   r   r   rT  r   r   r`   rh   rx   r_  r5   r  rH  r'  r  r  rb  r8   rk   rl   rn   rg   rt   rs   rm   rn  rG   ro  r  rr   r~  r6   r7   r  r  r  rG  rB   r1   r>   r<   rV  r{   r2   r?   rD   rF   rH   rE   rK  rR   rT   rS   r  rw   rv   r   r   r   r   r
   	  sp   
(
(

(


(
(-
5A

0





 r
   c                   C   s   t jd u rt t _t jS r   )r   _screenrS  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 )rS  Nr)   c                 C   s   t jd u r4t  t _| _| jt j | j| j t jd u rtd }td }td }td }td }td }| j	|||| | j
 t _t| t j | |||| d S )Nrz   r   r   r   r   r   )rS  _rootr  r)   _titler'  _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rNd|  krBdkrNn n|| }|d u rb|| d }t|trd|  krdkrn n|| }|d u r|| d }| j|||| |   d S )Nr%  r   r   r   )r  r  r(  r)  r   r   r%  r,   )r   rz   r   r#  r$  rO  shr   r   r   r&   o  s    

""z_Screen.setupc                 C   s    t jd urt j| |t _d S r   )rS  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  rS  r   r  r  r   r   r  r&  )r   rootr   r   r   r    s    
z_Screen._destroyc                 C   s   |    d S r   )r  r   r   r   r   r     s    z_Screen.byec                    sL    fdd}  | td r"d S z
t  W n tyF   td Y n0 d S )Nc                    s       d S r   )r   )r   r   r   r   r   exitGracefully  s    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   rS  S  s   
(
rS  c                   @   s0   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}tdd |D }|d |d d D ](}|d	t|  |d
||   q||d }|d	t|  |d||   |d |  W d    n1 s0    Y  d S )Nz_Screen.zTurtle.z%s.pyr4  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 ]6}z|| t|_W q" tyV   td|  Y q"0 q"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  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r|	d|  |d|  |d ur|	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~  =  r  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  rt  r<  r   )
obZdefTextZcallTextr  ZvarargsZvarkwZitems2ZrealArgsdefaultsZitems1r   r   r   getmethparlist-  s&    


r  c                 C   sJ   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  s    r  c                 C   sJ   dd l }| d u rd S td }| d| d}|d| }|d|}|S )Nr   r   r  r   r  r  r  )r  r  Z
screennamer  r  r   r   r   _screen_docreviseX  s    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 ]b}t ||}t|\}}|dkr4t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  n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 ]Z} | dkrDt  tdD ]}td t	d qL| dkrxt
d t  t  td	 t  q2t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 q:t  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  sX    



r  c                  C   sB  t d t  td ttdd tddd } td tdD ]}t  t	| d qBt
d t rnt  q`t  td td	 d}td
 td td tddD ]p}|dkrt  td	d|  dd|  tdD ]}t| td qt  |d7 }td t t  d d  qt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 q`t  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r|d |d  ||| |d |d! dkr|   |   t  |d7 }qZ|j
d"d#d$d% |d& |d d'd( }t!"d t r|  |  q|d |j
d)d*d+ |#|d d S ),Nr   r  r   r"  r     r   zwait a moment...r  Zgreenr  r  r     x      F   r	  r  Zyellowr  2   r   r;  i  (   r  ZblueZoranger   g      @g333333?r  zCAUGHT! )r  r  boldr_   )rS  rU  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  )rS  )$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   )r(  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  objectr*  r   r  r   r  r   r  r-  rL  r
   r   r	   rS  r   r   r~   r  Z	_LANGUAGEImportErrorr  r  r  r  r  r   r   r   r  r  r  r   r   r   r   r   <module>g   s   
5

c   	/&    /       O        ~ 
"

5c