
    z%i;                    \   	 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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z   ez   ez   d
gz   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d/ Zd0 Z	  ee        G d2 d3e      Zd4 Zd5 Zd6Zdfd7Z G d8 d9ej@                        Z! ee!ejD                  d:        G d; d<ejF                        Z$ejD                  Z" G d= d>e%      Z& G d? d
e      Z' G d@ dAe      Z( G dB dCe%      Z) G dD dEe%      Z* G dF dGe&      Z+ G dH dIe%      Z, G dJ dKe%      Z- G dL dMe%      Z. G dN dOe-e,      Z/e/Z0dP Z1 G dQ dRe+      Z2 G dS dTe/      Z3e3Z4dgdUZ5dV Z6ed'   Z7	 e7d(k7  r e6e7       dY Z9dZ Z:d[ Z;d\Z<d] Z= e=ee2d^d_e;        e=ee3d`dae:       e>Z?e@dbk(  rdc ZAdd ZBde ZC eB         eC         eD        yy# e$ r  ed1       Y dw xY w# e8$ r  edWe7       Y qe$ r  edXe7z         Y w xY w)h    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)P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teleporttilt	tiltangletowards
turtlesizeundoundobufferentriesupwidthwritexcorycorwrite_docstringdictdone
Terminator)r   r1   r4   rA   rN   rR   rV   r\   r^   rc   rd   rf   rg   rr   rx   r{   r|   r|         ?heightg      ?	canvwidthi  
canvheighti,  	leftright	topbottomr   standardr         ?r   
   undobuffersizei  rl   classicrX   blackrB   rb   noresizevisibleTlanguageenglishexampleturtleturtlescreenzPython Turtle GraphicsF)examplescreenr*   
using_IDLEc                    	 t        | d      5 }|j                         }d d d        i }D ]  }|j                         }|r|j                  d      r'	 |j	                  d      \  }}|j                         }|j                         }|dv rt        |      }n	 d|v rt        |      }nt        |      }|||<    |S # 1 sw Y   xY w# t
        $ r t        d| d|       Y w xY w# t
        $ r Y @w xY w)Nr#=zBad line in config-file z:
)TrueFalseNonez''z"".)
open	readlinesstrip
startswithr   
ValueErrorprintevalfloatint)filenamefcfglinescfgdictlinekeyvalues          :/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/turtle.pyconfig_dictr      s   9	h	 !;;=!G zz|ts+	CJC iik99KE%<!%LEJE +, N3! !  	xEF	  s/   B<CC(<CC%$C%(	C43C4c                 6   	 d}i }i }t        |      rt        |      }d|v rd|d   z  }	 t        t              \  }}t	        ||      }t        |      rt        |      }t        j                  |       t        j                  |       y # t
        $ r d}Y Nw xY w)Nz
turtle.cfgimportconfigzturtle_%s.cfg )r   r   r   __file__r   	Exception_CFGr-   )r   default_cfgcfgdict1cfgdict2headtail	cfg_file2s          r   
readconfigr      s     KHHk{+!%(@@8_
d{+	 iy)KKKK  	s   B
 
BBz"No configfile read, reason unknownc                   J    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)r   c                 2    t         j                  | ||f      S N)tuple__new__)clsxys      r   r   zVec2D.__new__   s    }}S1a&))    c                 >    t        | d   |d   z   | d   |d   z         S Nr      r   selfothers     r   __add__zVec2D.__add__   )    T!WU1X%tAwuQx'788r   c                     t        |t              r| d   |d   z  | d   |d   z  z   S t        | d   |z  | d   |z        S r   )
isinstancer   r   s     r   __mul__zVec2D.__mul__   sN    eU#758#DGE!H$444T!WU]DGEM22r   c                 ~    t        |t              st        |t              rt        | d   |z  | d   |z        S t        S r   )r   r   r   r   NotImplementedr   s     r   __rmul__zVec2D.__rmul__   s8    eS!Zu%=aQ66r   c                 >    t        | d   |d   z
  | d   |d   z
        S r   r   r   s     r   __sub__zVec2D.__sub__  r   r   c                 *    t        | d    | d          S r   r   r   s    r   __neg__zVec2D.__neg__  s    d1gXQx((r   c                 &    t        j                  |  S r   )mathhypotr   s    r   __abs__zVec2D.__abs__  s    zz4  r   c                     	 t        | d    | d         }t        j                  |      }t        j                  |      t        j                  |      }}t        | d   |z  |d   |z  z   | d   |z  |d   |z  z         S )Nr   r   )r   r   r_   cossin)r   angleperpcss        r   rotatezVec2D.rotate  s{    	d1gXtAw'U#xx1T!WQYtAwqy($q'!)DGAI*=>>r   c                     | d   | d   fS r    r   s    r   __getnewargs__zVec2D.__getnewargs__  s    Qa!!r   c                     d| z  S )Nz(%.2f,%.2f)r   r   s    r   __repr__zVec2D.__repr__  s    t##r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s9    *939)!?"$r   r   c                     	 t        | j                        }|j                          |D ]  }t        ||        | j                  j                         D ]'  \  }}t        |      t        j                  k(  s#|||<   ) y r   )	list	__bases__reverse__methodDict__dict__itemstypetypesFunctionType)r   _dictbaseList_superr   r   s         r   r   r     ss    -CMM"H $VU#$ll((* 
U;%,,,E#Jr   c                 @    	 i }t        | |       |j                         S r   )r   keys)r   r   s     r   	__methodsr   &  s     -Ee::<r   zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)c                 P   i }t        ||       i }t        |       }|j                         D ]#  }|d d dk(  s|dd  dk(  s||v s||v r||   ||<   % |j                         D ]B  \  }}	||	d}
t	        |t
              rt        ||dz  }t        |
       t        | ||
|          D y )Nr   _)methodfunc)r  	attribute)	r   r   r   r   r   str__stringBodyexecsetattr)	fromClasstoClasstoPartexclude_dict_1r   mfcexr  r  d
execStrings               r   __forwardmethodsr  0  s    G'"E
I
Clln $bq6S=BrsGsNbGmrSyE"I	$  .t,fc"6HH Z	61V9-.r   c                   R    e Zd Z	 	 	 ddZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zy)r   c           
      $   t         j                  j                  | |||       | j                         | _        ||c| _        | _        ||c| _        | _        d| _	        t        j                  |||| j                  t         j                  d      | _        t        j                  || j                  j                  t         j                        | _        t        j                  || j                  j"                        | _        | j                  j'                  | j                   j(                  | j$                  j(                         | j+                  dd	d
       | j-                  dd	d
       | j                  j/                  d	| d	ddd	d	d       | j$                  j/                  d	| d	dd	d	d	d       | j                   j/                  d	| d	d	dd	d	d       | j1                          | j                  j3                  d| j4                         y )N)r|   r   white   )r|   r   bgreliefborderwidth)commandorient)r  )xscrollcommandyscrollcommandr   r   )weightminsizenewspadxin_padyrowcolumnrowspan
columnspanstickyz<Configure>)TKFrame__init__winfo_toplevel_rootwindowr|   r   r   r   r  CanvasSUNKEN_canvas	Scrollbarxview
HORIZONTALhscrollyviewvscroll	configuresetrowconfigurecolumnconfiguregridra   bindonResize)r   masterr|   r   r   r   s         r   r-  zScrolledCanvas.__init__K  s   
$eFC..0"'
DK*3Z'yyuV$(GGBII1N||FDLL4F4F+-==:||FDLL4F4FGdll.>.>.2ll.>.> 	 	@!Aq1Qq!4q1!!& 	 	Bq1!!& 	 	Bq1!!& 	 	B

mT]];r   Nc                    	 |r|| _         |r|| _        |r|| _        | j                  j	                  || j                    dz  | j                   dz  | j                   dz  | j                  dz  f       | j                  j                  d| j                   | j                  z
  dz   z  | j                   z         | j                  j                  d| j                  | j                  z
  dz   z  | j                  z         | j                          y )Nr  )r  scrollregionr      )
r   r   r  r2  configxview_movetor|   yview_movetor   adjustScrollsr   r   r   r  s       r   ra   zScrolledCanvas.resetd  s    J&DN(DODGr'+~~oq&84??:JA:M'+~~q'8$//1:L&N 	 	O 	!!#t~~

'BR'G"H?C~~#N 	O!!#t'Cb'H"I>Boo#N 	Or   c           
         	 | j                   j                         }| j                   j                         }| j                   j                  d| j                  |z
  z  | j                  z         | j                   j                  d| j                  |z
  z  | j                  z         || j                  k  s|| j                  k  rG| j                  j                  d| dddddd       | j                  j                  d| dddddd       y | j                  j                          | j                  j                          y )Nr   r   r   r!  r"  )r2  winfo_widthwinfo_heightrE  r   rF  r   r6  r=  r8  grid_forget)r   cwidthcheights      r   rG  zScrolledCanvas.adjustScrollsv  s   	))+,,++-!!#t~~f'<"=dnn"LM!!#tw'>"?"OPDNN"g&?LL1Dqa%&a  PLL1Dqa%&a  P LL$$&LL$$&r   c                 &    	 | j                          y r   )rG  )r   events     r   r?  zScrolledCanvas.onResize  s    r   c                 6    	  | j                   j                  | S r   )r2  bboxr   argss     r   rR  zScrolledCanvas.bbox  s    	 t||  $''r   c                 <    	  | j                   j                  |i |S r   )r2  cgetr   rT  kwargss      r   rV  zScrolledCanvas.cget  s#    	 t||  $1&11r   c                 >    	  | j                   j                  |i | y r   )r2  rD  rW  s      r   rD  zScrolledCanvas.config       	T,V,r   c                 >    	  | j                   j                  |i | y r   )r2  r>  rW  s      r   r>  zScrolledCanvas.bind  s     	4*6*r   c                 >    	  | j                   j                  |i | y r   )r2  unbindrW  s      r   r]  zScrolledCanvas.unbind  rZ  r   c                 :    	 | j                   j                          y r   )r2  focus_forcer   s    r   r_  zScrolledCanvas.focus_force  s    	  "r   )  i^  iX  r`  NNN)r   r   r   r-  ra   rG  r?  rR  rV  rD  r>  r]  r_  r   r   r   r   r   E  sA    
 25DG<2$' (
2
-
+
-
#r   r   r2  c                   8    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	y)	_Rootc                 B    t         j                  j                  |        y r   )r+  Tkr-  r   s    r   r-  z_Root.__init__  s    
tr   c                 f    t        | ||||      | _        | j                  j                  dd       y )Nr   both)expandfill)r   r2  pack)r   r|   r   rM  rN  s        r   setupcanvasz_Root.setupcanvas  s-    %dE667K0r   c                     | j                   S r   )r2  r   s    r   
_getcanvasz_Root._getcanvas  s    ||r   c                 4    | j                  d||||fz         y )Nz%dx%d%+d%+d)geometry)r   r|   r   startxstartys        r   set_geometryz_Root.set_geometry  s    mUFFF$CCDr   c                 (    | j                  d|       y )NWM_DELETE_WINDOW)wm_protocol)r   destroys     r   	ondestroyz_Root.ondestroy  s    +W5r   c                 "    | j                         S r   )winfo_screenwidthr   s    r   	win_widthz_Root.win_width  s    %%''r   c                 "    | j                         S r   )winfo_screenheightr   s    r   
win_heightz_Root.win_height  s    &&((r   N)
r   r   r   r-  rk  rm  rr  rw  rz  r}  r   r   r   rc  rc    s)    11E6()r   rc  c                       e Zd Z	 d Zd Zd Zd Z	 	 d#dZd Z	 	 d#dZ	d	 Z
d
 Zd Zd Zd$dZd Zd%dZd%dZd%dZd%dZd Zd$dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd&dZd Z d  Z!d! Z"d&d"Z#y)'TurtleScreenBasec                 l    	 t        j                  dd| j                        }|j                          |S )Nr   )r|   r   r@  )r+  
PhotoImagecvblank)r   imgs     r   _blankimagezTurtleScreenBase._blankimage  s+    	mm!Adgg>		
r   c                 F    	 t        j                  || j                        S )N)filer@  )r+  r  r  )r   r   s     r   _imagezTurtleScreenBase._image  s    	 }}(477;;r   c                    || _         t        |t              r-| j                   j                  }| j                   j                  }nvt        | j                   j                  d            }t        | j                   j                  d            }| j                   j                  | dz  | dz  |dz  |dz  f       || _        || _        dx| _        | _	        y )Nr|   r   r  rB  r   )
r  r   r   r   r   r   rV  rD  xscaleyscale)r   r  whs       r   r-  zTurtleScreenBase.__init__  s    b.)!!A""ADGGLL)*ADGGLL*+AGGNNA2q51"a%Aq!t*ENF$''dkr   c                 @    	 | j                   j                  ddd      S )N)r   r   r   r   r   r   r   ri  outline)r  create_polygonr   s    r   _createpolyzTurtleScreenBase._createpoly  s$    	ww%%&8r2%NNr   Nc                    	 g }|D ]B  \  }}	|j                  || j                  z         |j                  |	 | j                  z         D  | j                  j                  |g|  || j                  j                  ||       || j                  j                  ||       || j                  j                  ||       |r| j                  j                  |       y y )Nri  )r  r|   appendr  r  r  coordsitemconfigure	tag_raise)
r   polyitem	coordlistri  r  r|   topclr   r   s
             r   	_drawpolyzTurtleScreenBase._drawpoly  s    	  	(DAqIIa$++o&IIqb4;;&'	( 	x%"%GG!!(!6GG!!(G!<GG!!(%!8GGh' r   c           	      d    	 | j                   j                  ddddddt        j                        S )Nr   r   r  )ri  r|   capstyle)r  create_liner+  ROUNDr   s    r   _createlinezTurtleScreenBase._createline  s6    	ww""1aABa.0hh # 8 	8r   c                    	 |fg }|D ]B  \  }}|j                  || j                  z         |j                  | | j                  z         D  | j                  j                  |g|  || j                  j                  ||       || j                  j                  ||       |r| j                  j                  |       y y )Nr  r  r  )	r   lineitemr  ri  r|   r  r  r   r   s	            r   	_drawlinezTurtleScreenBase._drawline  s    	  B! ,1		!dkk/*		1"t{{*+, DGGNN8)b)GG!!(!6GG!!(%!8GGh' r   c                 <    	 | j                   j                  |       y r   )r  deleter   items     r   _deletezTurtleScreenBase._delete#  s    	 	tr   c                 :    	 | j                   j                          y r   )r  r-   r   s    r   _updatezTurtleScreenBase._update)  s    	r   c                 <    	 | j                   j                  |       y r   )r  afterr   r   s     r   _delayzTurtleScreenBase._delay.  s    ;er   c                 |    	 	 | j                   j                  |      }d}|S # t        j                  $ r d}Y |S w xY w)NTF)r  	winfo_rgbr+  TclError)r   r:   rgboks       r   _iscolorstringzTurtleScreenBase._iscolorstring2  sK    		''##E*CB 	 {{ 	B		s   " ;;c                     	 |-| j                   j                  |       | j                          y | j                   j                  d      S )N)r  r  )r  rD  r  rV  )r   r:   s     r   _bgcolorzTurtleScreenBase._bgcolor<  s;    	(GGNNN&LLN77<<%%r   c                     	 |\  }}|| j                   z  }|| j                  z  }dddd}| j                  j                  |dz
  | |||   ||      }	| j                  j	                  |	      \  }
}}}|	|dz
  fS )Nswr   se)rQ   centerr`   r   )textanchorri  font)r  r  r  create_textrR  )r   r\   txtalignr  rX   r   r   r  r  x0y0x1y1s                 r   _writezTurtleScreenBase._writeE  s    	# 1OOT;ww""1Q33/7 # Fd+BBRTzr   c                      	   j                   j                  |d|z         y  fd} j                   j                  |d|z  ||       y )N<Button-%s>c                     j                   j                  | j                        j                  z  j                   j	                  | j
                         j                  z  }} ||       y r   r  canvasxr   r  canvasyr   r  rP  r   r   funr   s      r   eventfunz+TurtleScreenBase._onclick.<locals>.eventfun\  P    0<11$++= Aq	r   r  
tag_unbindtag_bindr   r  r  numaddr  s   ` `   r   _onclickzTurtleScreenBase._onclickS  sL    	
 ;GGt]S%89 GGT=3#6#Fr   c                      	   j                   j                  |d|z         y  fd} j                   j                  |d|z  ||       y )Nz<Button%s-ButtonRelease>c                     j                   j                  | j                        j                  z  j                   j	                  | j
                         j                  z  }} ||       y r   r  r  s      r   r  z-TurtleScreenBase._onrelease.<locals>.eventfunn  r  r   r  r  s   ` `   r   
_onreleasezTurtleScreenBase._onreleaseb  sQ    	 ;GGt%?#%EF GGT#=#C%s,r   c                      	   j                   j                  |d|z         y  fd} j                   j                  |d|z  ||       y )Nz<Button%s-Motion>c                    	 j                   j                  | j                        j                  z  j                   j	                  | j
                         j                  z  }} ||       y # t        $ r Y y w xY wr   )r  r  r   r  r  r   r  r   r  s      r   r  z*TurtleScreenBase._ondrag.<locals>.eventfun  sg     GGOOEGG4T[[@ GGOOEGG44T[[@ A1I  s   A.A2 2	A>=A>r  r  s   ` `   r   _ondragzTurtleScreenBase._ondragu  sN    	 ;GGt%83%>? GGT#6#<hLr   c                      	  j                   j                  d|z         y  fd} j                   j                  d|z  ||       y )Nr  c                     j                   j                  | j                        j                  z  j                   j	                  | j
                         j                  z  }} ||       y r   r  r  s      r   r  z1TurtleScreenBase._onscreenclick.<locals>.eventfun  r  r   r  r]  r>  )r   r  r  r  r  s   ``   r   _onscreenclickzTurtleScreenBase._onscreenclick  sD    	 ;GGNN=3./ GGLL,h<r   c                     	  | j                   j                  d|z  d        y fd}| j                   j                  d|z  |       y )Nz<KeyRelease-%s>c                              y r   r   rP  r  s    r   r  z0TurtleScreenBase._onkeyrelease.<locals>.eventfun      r   r  r   r  r   r  s    `  r   _onkeyreleasezTurtleScreenBase._onkeyrelease  sD    	 ;GGNN,s2D9GGLL*S0(;r   c                    	 ?|| j                   j                  dd        y | j                   j                  d|z  d        y fd}|| j                   j                  d|       y | j                   j                  d|z  |       y )Nz
<KeyPress>z<KeyPress-%s>c                              y r   r   r  s    r   r  z.TurtleScreenBase._onkeypress.<locals>.eventfun  r  r   r  r  s    `  r   _onkeypresszTurtleScreenBase._onkeypress  sp    	 ;{|T24d;{\84_s2H=r   c                 :    	 | j                   j                          y r   )r  r_  r   s    r   _listenzTurtleScreenBase._listen  s    	r   c                     	 |dk(  r| j                   j                  |       y | j                   j                  ||       y Nr   )r  
after_idler  r   r  ts      r   _ontimerzTurtleScreenBase._ontimer  s2    	6GGs#GGMM!S!r   c                 @    	 | j                   j                  dd|      S )Nr   image)r  create_image)r   r  s     r   _createimagezTurtleScreenBase._createimage  s#    	ww##Aq#66r   c                     	 |\  }}| j                   j                  ||| j                  z  | | j                  z  f       | j                   j	                  ||       y Nr  )r  r  r  r  
itemconfig)r   r  r\   r  r   r   s         r   
_drawimagezTurtleScreenBase._drawimage  sS    	 1ta$++orDKK/?@A4u-r   c                 v    	 | j                   j                  ||       | j                   j                  |       y r  )r  r  	tag_lower)r   r  r  s      r   	_setbgpiczTurtleScreenBase._setbgpic  s2    	 	4u-$r   c                 :    	 | j                   j                  |      S r   )r  r   r  s     r   _typezTurtleScreenBase._type  s    	 ww||D!!r   c                     	 | j                   j                  |      }t        dt        |      d      D cg c]  }||   ||dz       f }}|S c c}w )Nr   r  r   )r  r  rangelen)r   r  r  ipls        r   
_pointlistzTurtleScreenBase._pointlist  sX    	 WW^^D!).q#b'1)=>Ar!ur!A#wh>>
 ?s   Ac                 D    | j                   j                  ||||f       y )Nr  )r  rD  )r   srx1sry1srx2sry2s        r   _setscrollregionz!TurtleScreenBase._setscrollregion  s    T4t$<=r   c                 @   | j                   j                         }|D ]  }t        | j                   j                  |            }g }|r8|d d \  }}|j	                  ||z         |j	                  ||z         |dd  }|r8 | j                   j                  |g|   y )Nr  )r  find_allr   r  r  )	r   xscalefactoryscalefactorr   r  coordinatesnewcoordlistr   r   s	            r   _rescalezTurtleScreenBase._rescale  s      " 	0Dtww~~d34KL"2A1##A$45##A$45)!"o	 
 DGGNN4/,/	0r   c                 >   	 t        | j                  t              s| j                  | j                  fS ||cxu r|cxu r/n n,| j                  j                  | j                  j                  fS ||| _        ||| _        | j                  j                  |||       y r   )r   r  r   r   r   ra   rH  s       r   _resizezTurtleScreenBase._resize  s    	 $''>2>>4??22
0b077$$dgg&8&888 &DN!(DOiR0r   c                     	 | j                   j                         }|dk  r| j                   d   }| j                   j                         }|dk  r| j                   d   }||fS )Nr   r|   r   )r  rJ  rK  )r   r|   r   s      r   _window_sizezTurtleScreenBase._window_size  s_    	##%A:GGG$E%%'Q;WWX&Ff}r   c                 N    	 | j                   j                  j                          y r   )r  tkr   r   s    r   r   zTurtleScreenBase.mainloop  s    	 	

r   c                 H    	 t        j                  ||| j                        S )N)parent)r   	askstringr  )r   r*   prompts      r   r)   zTurtleScreenBase.textinput%  s"    	 %%eVDGGDDr   c                 N    	 t        j                  |||||| j                        S )N)initialvalueminvaluemaxvaluer  )r   askfloatr  )r   r*   r!  defaultminvalmaxvals         r   r   zTurtleScreenBase.numinput4  s.    	" $$UF.4v,0GG5 	5r   )NNNFr   r   Nra  )$r   r   r   r  r  r-  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r   r)   r   r   r   r   r  r    s    <(O
 3705(28 -1-2(.
&G,&M*=$	<>$
"7
. "
>
01	E5r   r  c                       e Zd Z	 y)r   Nr   r   r   r   r   r   r   r   P  s    
 	r   c                       e Zd Zy)TurtleGraphicsErrorNr,  r   r   r   r.  r.  Y  s    r   r.  c                       e Zd Z	 ddZddZy)r   Nc                 b   || _         |dk(  r#t        |t              rt        |      }|| _        y |dk(  rWt        |t              rd|j                         j                  d      rEt        |      r:t        j                  |      }|| _        y |dk(  r
g }|| _        y t        d|z        || _        y )Npolygonr  .gifcompoundzThere is no shape type %s)r  r   r   r   r  lowerendswithr   r	   r  r.  _data)r   type_datas      r   r-  zShape.__init__e  s    
I$%T{ 
 g$$::<((0VD\'..t4D 
	 j D 
 &&AE&IJJ
r   c                     	 | j                   dk7  rt        d| j                   z        ||}| j                  j                  |||g       y )Nr3  z Cannot add component to %s Shape)r  r.  r6  r  )r   polyri  r  s       r   addcomponentzShape.addcomponentu  sW    	 ::#%&HBF**'M N N?G

4w/0r   r   )r   r   r   r-  r;  r   r   r   r   r   ^  s     1r   r   c                   6    e Zd Z	 ddZd	dZd Zd Zd Zd Zy)
Tbufferc                 F    || _         d gg|z  | _        d| _        d| _        y )Nr  F)bufsizebufferptrcumulate)r   r?  s     r   r-  zTbuffer.__init__  s'    vh(r   Nc                     |2t        | j                        D ]  }d g| j                  |<    d| _        y || _        d gg|z  | _        d| _        y )Nr  )r  r?  r@  rA  )r   r?  r  s      r   ra   zTbuffer.reset  sW    ?4<<( ("&A(
  #DL 6(W,DKr   c                    | j                   dkD  rp| j                  s;| j                  dz   | j                   z  | _        || j                  | j                  <   y | j                  | j                     j	                  |       y y r   )r?  rB  rA  r@  r  r  s     r   pushzTbuffer.push  s_    <<!== HHqLDLL8(,DHH%DHH%,,T2 r   c                     | j                   dkD  rY| j                  | j                     }|y d g| j                  | j                  <   | j                  dz
  | j                   z  | _        |S y r   )r?  r@  rA  r  s     r   popzTbuffer.pop  s^    <<!;;txx(D|)-DHH% HHqLDLL8 r   c                 T    | j                   | j                  j                  d g      z
  S r   )r?  r@  countr   s    r   nr_of_itemszTbuffer.nr_of_items  s"    ||dkk//777r   c                 ^    t        | j                        dz   t        | j                        z   S )N )r  r@  rA  r   s    r   r   zTbuffer.__repr__  s#    4;;#%DHH55r   )r   r   )	r   r   r   r-  ra   rE  rG  rJ  r   r   r   r   r=  r=    s#    ?
386r   r=  c                       e Zd Z	 dZed   ed   ed   fdZd Zd dZd	 Zd d
Z	d Z
d Zd dZd Zd Zd Zd!dZd dZd Zd Zd Zd Zd Zd Zd"dZd Zd dZd!dZd#dZd dZd$dZeZeZ eZ!e	Z"eZ#y)%r	   Tr   r   r   c                 
   t         j                  | |       t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      t        d| j                               d	| _        d
di| _        || _        || _        t        d   | _	        g | _
        | j                          t        j                  dk(  r;|j                         }|j                  ddddd       |j                  ddddd       y y )Nr1  )r   r   r   r   r   ))r      )   )r  r   )   )	   )   )   )rX  r   ))r\  )r\  r`  )rV  r^  r   rX  )   r^  )   r`  )r[  r\  )r]  r_  )rW  r   )rc  r]  )rY  r[  )rW  rY  )rb  rW  )r   r   )r  rU  )rQ  )Q#@Q@)Gz. @Q@)rg  rf  )re  rd  rR  )Qrd  )Qrf  )Gz. rg  )Q#re  rO  )rk  rh  )rj  ri  )ri  rj  )rh  rk  )g       g      $)re  rk  )rg  rj  )rf  ri  )rd  rh  ))r   rP  )r   r   )rP  r   )rP  rP  ))r   Gz)r   g'@)rP  rl  )r   r   )r^  rZ  ra  )r]  rZ  r  )arrowr   r5   squaretriangler   r  nopicr   r   darwinwm
attributesr   z-topmost10)r  r-  r   r  _shapes_bgpics_mode_delayvaluer   
_colormode_keysr6   sysplatformr.  call)r   r  r   r   r   
rootwindows         r   r-  zTurtleScreen.__init__  s	   !!$+ #9.GH"9 /& '
 #9 /H I #9 /) *"9 /+ ,"9.KL"7D,<,<,>?%*  "~
 {+


<<8# **,JOOD,ZEOOD,ZE $r   c                    	 t         d   | _        t         d   | _        | j                  d       | j	                  d      | _        d| _        d| _        d| _        g | _	        | j                  d       d	D ]  }| j                  d |        | j                  d        | j                  d d  D ]&  }| j                  d |       | j                  d |       ( d t        _        y )
Nr   r   allr   rq  r   r   r  )r   r     )r   rz  r{  r  r  _bgpic
_bgpicname_tracing_updatecounter_turtlesr   rS   r    r|  r   r   _pen)r   btnr   s      r   r6   zTurtleScreen.clear  s    	  ={+U''+!W 	$CLLs#	$::a= 	'CJJtS!OOD#&	' r   Nc                 L   	 || j                   S |j                         }|dvrt        d|z        || _         |dv rX| j                  | j                   dz  | j
                   dz  | j                  dz  | j
                  dz         dx| _        | _        | j                          y )Nr   logoworldzNo turtle-graphics-mode %s)r   r  r  r   )	ry  r4  r.  r  r   r   r  r  ra   r   r   s     r   r   zTurtleScreen.mode  s    	* <::zz|44%&BT&IJJ
''!!4>>/1"4t6F6I'+~~q'8$//1:LN(++DK$+

r   c                 v   	 | j                         dk7  r| j                  d       t        ||z
        }t        ||z
        }| j                         \  }}| j                  |dz
  |dz
         | j                  | j
                  }
}	| j                  |z  | _        | j                  |z  | _        || j                  z  }| | j
                  z  }| j                  |z   }| j                  |z   }| j                  ||||       | j                  | j                  |	z  | j
                  |
z         | j                          y )Nr     )r   r   r  r&   r  r  r   r   r  r  r-   )r   llxllyurxuryxspanyspanwxwy	oldxscale	oldyscaler  r  r  r  s                  r   r(   z TurtleScreen.setworldcoordinates$  s   	* 99;'!IIgcCi cCi ""$B2r"u%#{{DKK9	nnu,oo-T[[ tdkk!~~$%dD$5dkk)+T[[-BCr   c                     	 |F|j                         j                  d      rt        d| j                  |            }n't	        d      t        |t              rt        d|      }|| j                  |<   y )Nr2  r  z;Bad arguments for register_shape.
Use  help(register_shape)r1  )r4  r5  r   r  r.  r   r   rw  )r   namerl   s      r   r$   zTurtleScreen.register_shapeK  sp    	, =zz|$$V,gt{{4'89) +H J Ju%)U+E"Tr   c                    	 t        |      dk(  r|d   }t        |t              r/| j                  |      s|dk(  r|S t	        dt        |      z        	 |\  }}}| j                  dk(  r#|||fD cg c]  }t        d|z         c}\  }}}d|cxk  rdk  rn nd|cxk  rdk  rn nd|cxk  rdk  sn t	        d	t        |      z        d
|||fz  S # t
        t        f$ r t	        dt        |      z        w xY wc c}w )Nr   r   r   zbad color string: %sbad color arguments: %sr        o@   bad color sequence: %s#%02x%02x%02x)	r  r   r  r  r.  	TypeErrorr   r{  round)r   r:   r   gbr   s         r   	_colorstrzTurtleScreen._colorstrn  s   	 u:?!HEeS!""5)Ub[)*@3u:*MNN	NGAq! ??c!011ay9!uU1W~9GAq!a3Q!]s]a3%&>U&KLL!Q** :& 	N%&?#e*&LMM	N :s   C 1C?'C<c           	      @    |j                  d      s|S t        |      dk(  r dD cg c]  }t        |||dz    d       }}n?t        |      dk(  r#|dd  D cg c]  }dt        ||   d      z   }}nt        d|z        t	         fd	|D              S c c}w c c}w )
Nr   rW  )r   r  r]  r  rS  rb  r   zbad colorstring: %sc              3   B   K   | ]  }|j                   z  d z    yw)r  N)r{  ).0r   r   s     r   	<genexpr>z&TurtleScreen._color.<locals>.<genexpr>  s     9Q(,9s   )r   r  r   r.  r   )r   cstrr  r  r  s   `    r   _colorzTurtleScreen._color  s    s#Kt9>09:1#d1QqSk2&:B:Y!^/3ABx8!"Sa"%%8B8%&;d&BCC9b999 ;8s   BBc                 z    	 || j                   S |dk(  rt        |      | _         y |dk(  rt        |      | _         y y )Nr   r  )r{  r   r   )r   cmodes     r   r   zTurtleScreen.colormode  sA    	 =??"C<#ElDOc\!%jDO r   c                 ~    	 | j                   D ]-  }|j                  | j                         |j                          / y r   )r  _setmodery  ra   )r   r   s     r   ra   zTurtleScreen.reset  s5    	 mm 	FOODJJ'LLN	r   c                     	 | j                   S r   )r  r   s    r   r,   zTurtleScreen.turtles  s    	 }}r   c                 |    	 |r| j                  |      }nd }| j                  |      }|| j                  |      }|S r   )r  r  r  r   rT  r:   s      r   r   zTurtleScreen.bgcolor  sF    	 NN4(EEe$KK&Er   c                     	 || j                   S t        |      | _         d| _        |t        |      | _        | j                   r| j	                          y y r  )r  r   r  rz  r-   )r   nr   s      r   r+   zTurtleScreen.tracer  sR    	$ 9== A"5zD==KKM r   c                 B    	 || j                   S t        |      | _         y r   )rz  r   r  s     r   r   zTurtleScreen.delay  s&    		 =###u:r   c                     	 t         j                  sdt         _        t        | j                  dkD  r5| xj                  dz  c_        | xj                  | j                  z  c_        y y )NTr   r   )r	   _RUNNINGr   r  r  r   s    r   _incrementudczTurtleScreen._incrementudc   sS    '$$$(L!==11$4==0 r   c                     	 | j                   }d| _         | j                         D ]"  }|j                          |j                          $ || _         | j	                          y NT)r  r,   _update_data_drawturtler  )r   tracingr  s      r   r-   zTurtleScreen.update	  sQ    	-- 	ANNMMO	  r   c                 *    	 | j                         d   S r  r  r   s    r   r/   zTurtleScreen.window_width      	   "1%%r   c                 *    	 | j                         d   S Nr   r  r   s    r   r.   zTurtleScreen.window_height  r  r   c                     	 | j                   S r   )r  r   s    r   r   zTurtleScreen.getcanvas&  s    	 wwr   c                 J    	 t        | j                  j                               S r   )sortedrw  r   r   s    r   r   zTurtleScreen.getshapes2  s!    	 dll'')**r   c                 ,    	 | j                  |||       y r   )r  r   r  r  r  s       r   rS   zTurtleScreen.onclick=  s    	 	Cc*r   c                     	 |*|| j                   v rE| j                   j                  |       n)|| j                   vr| j                   j                  |       | j                  ||       y r   )r|  remover  r  r   r  r   s      r   r   zTurtleScreen.onkeyN  sZ    	, ;djj 

!!#&

"JJc"3$r   c                     	 |*|| j                   v rG| j                   j                  |       n+|)|| j                   vr| j                   j                  |       | j                  ||       y r   )r|  r  r  r  r  s      r   r    zTurtleScreen.onkeypressl  s^    	0 ;djj 

!!#&_DJJ!6JJc"c"r   c                 &    	 | j                          y r   )r  )r   xdummyydummys      r   r   zTurtleScreen.listen  s    	 	r   c                 *    	 | j                  ||       y r   )r  r  s      r   r#   zTurtleScreen.ontimer  s    	$ 	c1r   c                     	 || j                   S || j                  vr| j                  |      | j                  |<   | j                  | j                  | j                  |          || _         y r   )r  rx  r  r  r  )r   picnames     r   r   zTurtleScreen.bgpic  s]    	  ???"$,,&$(KK$8DLL!t{{DLL$9:!r   c                 *    	 | j                  |||      S r   )r  rH  s       r   r&   zTurtleScreen.screensize  s    	  ||Iz266r   r   NNr*  r   ra  )$r   r   r   r  r   r-  r6   r   r(   r$   r  r  r   ra   r,   r   r+   r   r  r-   r/   r.   r   r   rS   r   r    r   r#   r   r&   r"   r%   r   r   r!   r   r   r   r	   r	     s     H $V,DM&FP< D%N!#F+6	:)*
.8&1	&&
	++"%<#@
*"07& MKKHLr   r	   c                   J   e Zd Z	  edd       edd       edd      dZdZdZdZefdZd Z	d)d
Z
d Zd*dZd Zd Zd Zd Zd+dddedd	fdZd Zd Zd Zd Zd Zd Zd Zd)dZd Zd Zd  Zd)d!Zd)d"Zd# Z d$ Z!d+d%Z"d,d&Z#d+d'Z$d)d(Z%eZ&eZ'eZ(eZ)eZ*eZ+eZ,eZ-e!Z.y	)-
TNavigatorr           )r   r  r  r   r   r   c                     | j                   | _        | j                  | _        || _        d | _        | j                          d | _        | j                  |       t        j                  |        y r   )
DEFAULT_ANGLEOFFSET_angleOffsetDEFAULT_ANGLEORIENT_angleOrientry  
undobufferr;   r  r  ra   r  s     r   r-  zTNavigator.__init__  sV     44 44

dr   c                 l    	 t        dd      | _        t        j                  | j                     | _        y )Nr  )r   	_positionr  START_ORIENTATIONry  _orientr   s    r   ra   zTNavigator.reset  s,    	 sC"44TZZ@r   Nc                     	 || j                   S |dvry || _         |dv rd| _        d| _        y | j                  dz  | _        d| _        y )Nr  )r   r  r   r         @r  )ry  r  r  _fullcircler  s     r   r  zTNavigator._setmode  s]    	<::44
(( !D !D $ 0 0 3D "Dr   c                 j    	 || _         d|z  | _        | j                  dk(  rd| _        y |dz  | _        y )Nih  r   r   r  )r  _degreesPerAUry  r  r   
fullcircles     r   _setDegreesPerAUzTNavigator._setDegreesPerAU  s9    9% ^::# !D *2Dr   c                 (    	 | j                  |       y r   )r  r  s     r   r;   zTNavigator.degrees  s    	* 	j)r   c                 D    	 | j                  t        j                         y r   )r  r   taur   s    r   r_   zTNavigator.radians,  s    
	 	dhh'r   c                 `    	 | j                   | j                  |z  z   }| j                  |       y r   )r  r  _goto)r   r<   endes      r   _gozTNavigator._go:  s(    7~~x 77

4r   c                 d    	 || j                   z  }| j                  j                  |      | _        y r   )r  r  r   r   r   s     r   _rotatezTNavigator._rotate?  s+    K###||**51r   c                     	 || _         y r   r  )r   ends     r   r  zTNavigator._gotoD  s    *r   Ffill_gapr  returnc                t    	 ||n| j                   d   }||n| j                   d   }t        ||      | _         y r   )r  r   )r   r   r   r  new_xnew_ys         r   rt   zTNavigator.teleportH  s=    	(]q(9]q(9ue,r   c                 (    	 | j                  |       y r   r  r   r<   s     r   rD   zTNavigator.forwardO  s    	( 	r   c                 *    	 | j                  |        y r   r  r  s     r   r0   zTNavigator.backf  s    	" 	(r   c                 *    	 | j                  |        y r   r  r  s     r   r`   zTNavigator.rightz  s    	$ 	eVr   c                 (    	 | j                  |       y r   r  r  s     r   rQ   zTNavigator.left  s    	$ 	Ur   c                     	 | j                   S r   r  r   s    r   r\   zTNavigator.pos  s    		 ~~r   c                 "    	 | j                   d   S r  r  r   s    r   r~   zTNavigator.xcor      
	 ~~a  r   c                 "    	 | j                   d   S r  r  r   s    r   r   zTNavigator.ycor  r	  r   c                 p    	 || j                  t        |        y | j                  t        ||             y r   )r  r   )r   r   r   s      r   rJ   zTNavigator.goto  s0    	: 9JJuay!JJuQ{#r   c                 L    	 | j                  dd       | j                  d       y r  )rJ   re   r   s    r   rM   zTNavigator.home  s"    		 			!Qr   c                 V    	 | j                  t        || j                  d                y r  r  r   r  )r   r   s     r   rj   zTNavigator.setx  s%    	 	

5DNN1-./r   c                 V    	 | j                  t        | j                  d   |             y r  r  )r   r   s     r   rk   zTNavigator.sety  s%    	 	

5*A./r   c                     	 |t        ||      }t        |t               r|}n5t        |t              r	t        | }nt        |t              r|j                  }t        | j                  z
        S r   )r   r   r   r  r  abs)r   r   r   r\   s       r   r<   zTNavigator.distance#  sb    	* =1+CaC5!)C:&++C3'((r   c                    	 |t        ||      }t        |t               r|}n5t        |t              r	t        | }nt        |t              r|j                  }| j                  z
  \  }}t        t        j                  t        j                  ||            d      dz  }|| j                  z  }| j                  | j                  |z  z   | j                  z  S Nr        v@)r   r   r   r  r  r  r   r;   atan2r  r  r  r  )r   r   r   r\   results        r   rw   zTNavigator.towardsC  s    	* =1+CaC5!)C:&++CT^^#1t||DJJq!$45r:UB$$$$!!D$5$5f$<<@P@PPPr   c                     	 | j                   \  }}t        t        j                  t        j                  ||            d      dz  }|| j
                  z  }| j                  | j                  |z  z   | j                  z  S r  )	r  r  r   r;   r  r  r  r  r  )r   r   r   r  s       r   rK   zTNavigator.headingf  sr    	 ||1t||DJJq!$45r:UB$$$$!!D$5$5f$<<@P@PPPr   c                     	 || j                         z
  | j                  z  }| j                  }||dz  z   |z  |dz  z
  }| j                  |       y )N       @)rK   r  r  r  )r   to_angler   fulls       r   re   zTNavigator.setheadingu  sV    	, DLLN*D,=,==tBw$tBw.Ur   c           	         	 | j                   r-| j                   j                  dg       d| j                   _        | j                         }|| j                  }|Bt        |      | j                  z  }dt        t        dt        |      dz  z   d      |z        z   }d|z  |z  }d|z  }d	|z  t        j                  t        j                  |      | j                  z        z  }|d
k  r	| | | }}}| j                         }	| j                         }
|d
k(  r| j                  d
d
       n| j                  d
       | j                  |       t        |      D ]F  }| j                  |       | j!                  |       | j                  d
       | j                  |       H | j                  |        |d
k(  r| j                  |	|
       | j                  |       | j                   rd| j                   _        y y )NseqTr      g      @g     M@r   r   r  r   F)r  rE  rB  rq   r  r  r   minr   r   r_   r  _tracerr  r  r  r  )r   radiusextentstepsrq   fracr  w2ltrdlr  s               r   r5   zTNavigator.circle  s   	: ??OO  %)'+DOO$

>%%F=v;t///Dc#bVS0$7<==E&L5 1W&L488DLL$4T5G5G$GHHA:rA2s"qA\\^[[]A:LLAJJqMRu 	AJJuHHQKJJqMLLO		
 	bSA:LLR 

5??',DOO$ r   c                      y r   r   )r   r   s     r   rq   zTNavigator.speed      =r   c                      y r   r   )r   ar  s      r   r   zTNavigator._tracer  r*  r   c                      y r   r   )r   r  s     r   r  zTNavigator._delay  r*  r   r   )r  r  r  )/r   r   r   r   r  DEFAULT_MODEr  r  r-  ra   r  r  r;   r_   r  r  r  boolrt   rD   r0   r`   rQ   r\   r~   r   rJ   rM   rj   rk   r<   rw   rK   re   r5   rq   r   r  rA   r4   r1   rc   rR   r]   rf   rg   rd   r   r   r   r  r    s    #sO#sO#sO' L( A#.*0(
2
-5 -D -T -.(**!!!$F0$0$)@!QFQ8=-B>>> 
B	BH	B	BHFKDr   r  c                       e Zd Z	 ed   fdZed   ed   fdZddZddZd	 Zd
 Z	d Z
ddZd Zd Zd ZddddeddfdZd Zd Zd ZddZddZd dZd Zd ZeZeZeZe	Ze	ZeZeZy)!TPenrb   c                 J    || _         d | _        t        j                  |        y r   )_resizemoder  r1  _reset)r   rb   s     r   r-  zTPen.__init__  s    %Dr   rX   rB   c                     d| _         d| _        || _        || _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        y )Nr   Tr  )r   r   r  )r   r  r  r   )_pensize_shown	_pencolor
_fillcolor_drawing_speed_stretchfactor_shearfactor_tilt_shapetrafo_outlinewidth)r   rX   rB   s      r   r4  zTPen._reset  sS    !#&
+r   Nc                 p    	 || j                   S |j                         }|dv r| j                  |       y y )N)autouserr   rb   )r3  r4  rW   )r   rmodes     r   rb   zTPen.resizemode  sA    	* =###00HHH& 1r   c                 F    	 || j                   S | j                  |       y )N)rZ   )r6  rW   )r   r|   s     r   rZ   zTPen.pensize  s&    	" === r   c                 D    	 | j                   sy | j                  d       y NFrY   r:  rW   r   s    r   r[   z
TPen.penup.  s!    	 }}r   c                 D    	 | j                   ry | j                  d       y )NTrI  rJ  r   s    r   rY   zTPen.pendown<  s!    	 ==r   c                     	 | j                   S r   )r:  r   s    r   rO   zTPen.isdownJ  s    	 }}r   c                     	 dddddd}|| j                   S ||v r||   }n%d|cxk  rdk  rn nt        t        |            }nd}| j                  |	       y )
Nr   r   rc  r  r   )fastestfastnormalslowslowestr   g      %@)rq   )r;  r   r  rW   )r   rq   speedss      r   rq   z
TPen.speedY  sf    	4 b1Q!M=;;F?5ME54e%EEur   c                 8   	 |rbt        |      }|dk(  r|d   x}}n|dk(  r|\  }}n	|dk(  r|x}}| j                        }| j                        }| j                  ||       y | j                  | j                        | j                  | j
                        fS )Nr   r   r  r  )rX   rB   )r  r  rW   r  r8  r9  )r   rT  r&  pcolorfcolors        r   r:   z
TPen.color  s    	> D	AAv"&q')a!%a"&&^^F+F^^F+FHHfH7;;t~~.DOO0LLLr   c                     	 |r4| j                  |      }|| j                  k(  ry | j                  |       y | j                  | j                        S )N)rX   )r  r8  rW   r  r  s      r   rX   zTPen.pencolor  sJ    	8 NN4(E&HHeH$;;t~~..r   c                     	 |r4| j                  |      }|| j                  k(  ry | j                  |       y | j                  | j                        S )N)rB   )r  r9  rW   r  r  s      r   rB   zTPen.fillcolor  sJ    	6 NN4(E'HHuH%;;t//r   Fr  r  r  c                r    	 | j                         }|r| j                  d       | j                  |       y rH  )rO   rW   )r   r   r   r  rY   s        r   rt   zTPen.teleport  s3    	 ++-HHUH#!r   c                 *    	 | j                  d       y )NTshownrW   r   s    r   rp   zTPen.showturtle  s    		 	tr   c                 *    	 | j                  d       y )NFr[  r]  r   s    r   rL   zTPen.hideturtle	  s    	 	ur   c                     	 | j                   S r   )r7  r   s    r   rP   zTPen.isvisible	  s    	 {{r   c                    	 | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  d}|s|s|S t        |t              r|}ni }|j                  |       i }|D ]
  }||   ||<    | j                  r| j                  j                  d|f       d}d|v r| j                  |d   k7  rd}d|v r?t        |d   t               r| j#                  |d   f      |d<   | j                  |d   k7  rd}d|v r| j                  |d   k7  rd}|r| j%                          d|v r
|d   | _        d|v r
|d   | _        d|v r
|d   | _        d|v r5t        |d   t               r| j#                  |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 r}| j                  \  }	}
| j                  }t+        j,                  | j                        t+        j.                  | j                        }}|	|z  |
||z  |z   z  |	 |z  |
|||z  z
  z  f| _        | j3                          y )N)r\  rY   rX   rB   rZ   rq   rb   stretchfactorro   r  ru   rW   FrY   TrX   rZ   rB   rq   rb   ra  ro   r  r\  ru   )r7  r:  r8  r9  r6  r;  r3  r<  r=  r@  r>  r   dictr-   r  rE  r   r  _newLiner   r   r   r   r   r?  r  )r   rW   pendict_pdp_p_bufr   newLinesfscxscyshfsacas                 r   rW   zTPen.pen(	  s   -	\ #'++"&--"&.."&//"&--"&++"&"2"2"&"5"5"&"3"3"&"4"4"&** wJc4 AA	 	#Cc(F3K	# ??OO  %1>}}),?!J-/ $*/? @*~~:.>}}),MMO>iLDM?z]DN>iLDM!!K.%0!%;0A!B+nDOa<G*DK1 Da?#B"sEl+"X"$DA !- 0D>!"9Da<G*DKQ;6DJa6Q;-12D**HC##CXXdjj)488DJJ+?B!$Rc"frk):!$Rb3r6k): <Dr   c                      y r   r   r   usePoss     r   rc  zTPen._newLine	  r*  r   c                      y r   r   )r   rI  forceds      r   r  zTPen._update	  r*  r   c                      y r   r   rS  s     r   r  zTPen._color	  r*  r   c                      y r   r   rS  s     r   r  zTPen._colorstr	  r*  r   r   r  T)TF) r   r   r   r   r-  r4  rb   rZ   r[   rY   rO   rq   r:   rX   rB   r/  rt   rp   rL   rP   rW   rc  r  r  r  r|   r{   r^   rV   r>   rr   rN   r   r   r   r1  r1    s     #'|"4 
 #:.#K0'8 . $L,M\#/J"0H"5 "D "T " 
{~>>>> E	B	B	BD	B	Br   r1  c                       e Zd Z	 d Zd Zy)_TurtleImagec                 B    || _         d | _        | j                  |       y r   )r   r  	_setshape)r   r   
shapeIndexs      r   r-  z_TurtleImage.__init__	  s    
z"r   c                 6   | j                   }|| _        | j                  dcxk(  r|j                  |   j                  k(  ry  | j                  dcxk(  r|j                  |   j                  k(  ry  | j                  dv r|j	                  | j
                         n1| j                  dk(  r"| j
                  D ]  }|j	                  |        |j                  |   j                  | _        | j                  dk(  r|j                         | _        y | j                  dk(  r.|j                  |j                  d   j                        | _        y | j                  dk(  r;|j                  |   j                  D cg c]  }|j                          c}| _        y y c c}w )Nr1  r  )r  r1  r3  r  )	r   r{  r  rw  r  _itemr  r  r6  )r   r{  r   r  s       r   rz  z_TurtleImage._setshape	  sR   $::FfnnZ&@&F&FF G::DFNN:$>$D$DD E::--NN4::&ZZ:%

 %t$%^^J/55
::"++-DJZZ7",,V^^G-D-J-JKDJZZ:%*0..*D*J*JL4&,,. LDJ &Ls   5FN)r   r   r   r-  rz  r   r   r   rx  rx  	  s    #
Lr   rx  c                      e Zd Z	 g Zded   ed   ed   fdZd Zd Zd Zd	 Z	d
 Z
d Zd Zd;dZd Zd Zd Zd;dddeddfdZd Zd<dZd=dZd<dZd Zd<dZd Zd>dZd Zd Zd?d Zd! Zd" Zd# Z d$ Z!d<d%Z"d& Z#d' Z$d( Z%d@d)Z&d* Z'd+ Z(d, Z)d<d-Z*d. Z+dAd/Z,d0 Z-d1 Z.d2 Z/d3 Z0d4 Z1e1Z2d<d5Z3dBd6Z4dBd7Z5dBd8Z6d9 Z7d: Z8eZ9y)Cr   Nrl   r   r   c                 
   t        |t              r|| _        nt        |t              r9|t        j
                  vrt        j
                  j                  |       || _        nt        |t        t        f      rgt        j
                  D ]  }|j                  |k(  s|| _         nI t        |      | _        t        j
                  j                  | j                         nt        d|z        | j                  }t        j                  | |j                                t        j                  |        |j                  j                  |        |j!                         | _        t%        ||      | _        d | _        d| _        d x| _        | _        || _        d| _        |j!                         | _        | j6                  g| _        | j4                  g| _        g | _        || _        tA        |      | _!        | jE                          y )Nzbad canvas argument %sF)#r   _Screenr   r	   r   screensr  r   r0  r  r.  r  r-  r   r1  r  r  drawingLineItemrx  r   _poly_creatingPoly	_fillitem	_fillpathr7  _hidden_from_screencurrentLineItemr  currentLiner   
stampItems_undobuffersizer=  r  r  )r   canvasrl   r   r   r   s         r   r-  zRawTurtle.__init__	  s    fg& DK-Y...!!((0 DK 89#++ 699&"(DK6
 +62!!((5%&>&GHHD&++-0dt$%113"651
"*..#( %113 NN+**+
-!.1r   c                     	 t         j                  |        t        j                  |        | j	                          | j                          | j                          y r   )r  ra   r1  r4  _clearr  r  r   s    r   ra   zRawTurtle.reset
  sA    	$ 	Dr   c                 D    	 ||dk  rd | _         y t        |      | _         y r  )r  r=  )r   sizes     r   ri   zRawTurtle.setundobuffer 
  s&    	 <419"DO%dmDOr   c                 R    	 | j                   y| j                   j                         S r  )r  rJ  r   s    r   rz   zRawTurtle.undobufferentries3
  s)    	 ??"**,,r   c                    	 d x| _         | _        | j                  D ]  }| j                  j	                  |        | j                  j                         | _        g | _        | j                  r%| j                  j                  | j                         | j                  g| _        | j                          | j                  | j                         y r   )r  r  r   r   r  r  r  r  r:  r  r  r8   ri   r  r  s     r   r  zRawTurtle._clear@
  s    **..JJ 	&DKK%	&#{{668==##DNN3**+
4//0r   c                 F    	 | j                          | j                          y r   )r  r  r   s    r   r6   zRawTurtle.clearN
  s    
	 	r   c                 *   | j                   j                          | j                   j                  dk7  ry t        | j                        dkD  rG| j                   j                  | j                  | j                  | j                  | j                         y y r   )	r   r  r  r  r  r  r  r8  r6  r   s    r   r  zRawTurtle._update_data]
  so    !!#;;%%*t "KK!!$"6"68H8H"&..$--A #r   c                    	 | j                   }|j                  dk(  ry |j                  dk(  rL| j                          | j                          |j	                          |j                  |j                         y | j                          |j                  dk(  r6|j                         D ]  }|j                           |j	                          y y r   )	r   r  r  r  r  r  rz  r  r,   )r   r   r  s      r   r  zRawTurtle._updatee
  s    	??a__!NNMM&,,-$$)) $AMMO$  *r   c                 <    	 | j                   j                  ||      S r   )r   r+   )r   flagr   s      r   r   zRawTurtle._tracerw
  s     	$ {{!!$..r   c                 8    | j                   j                  |      S r   )r   r  rS  s     r   r  zRawTurtle._color
  s    {{!!$''r   c                 8    | j                   j                  |      S r   )r   r  rS  s     r   r  zRawTurtle._colorstr
  s    {{$$T**r   c                    	 t        |t              r|S 	 |\  }}}| j
                  j                  dk(  r#|||fD cg c]  }t        d|z         c}\  }}}d|cxk  rdk  rn nd|cxk  rdk  rn nd|cxk  rdk  sn t	        dt        |      z        d|||fz  S # t        t        f$ r t	        dt        |      z        w xY wc c}w )Nr  r   r  r   r  r  r  )r   r  r  r   r.  r   r{  r  )r   rT  r   r  r  r   s         r   _cczRawTurtle._cc
  s    	dC K	MGAq! ;;!!S(011ay9!uU1W~9GAq!a3Q!]s]a3%&>T&JKK!Q** :& 	M%&?#d)&KLL	M :s   B C	'CFr  r  r  c                T   	 | j                         }| j                         }|r| j                  d       |r|s| j                          ||n| j                  d   }||n| j                  d   }t        ||      | _        | j                  |       |r|s| j                          y y y )NFrI  r   r   )rO   rC   rW   r?   r  r   r2   )r   r   r   r  rY   was_fillingr  r  s           r   rt   zRawTurtle.teleport
  s    !	D ++-llnHHUH#xMMO]q(9]q(9ue,!xOO  (;r   c                 v   	 | j                   }| j                  | j                         | j                  }d | _         d | _        t	        |       }|| _         || _        ||_         t        || j                  j                        |_        |j                  j                  |       |j                  | j                  j                     j                  }|dk(  r |j                         |j                  _        n|dk(  r8|j                  |j                  d   j                        |j                  _        n]|dk(  rX|j                  | j                  j                     j                  D cg c]  }|j                          c}|j                  _        |j                         |_        |j#                          |S c c}w )Nr1  r  r  r3  )r   rc  r:  r   r   rx  r{  r  r  rw  r  r  r}  r  r6  r  r  r  )r   r   r   qttyper  s         r   r9   zRawTurtle.clone
  sS   
	 dmm$TN(>(>?q!t{{556<<I#//1AHHNg#001H1N1NOAHHNj $nnT[[-C-CDJJLtf002 LAHHN"..0				Ls   &F6c                     	 || j                   j                  S || j                  j                         vrt	        d|z        | j                   j                  |       | j                          y )NzThere is no shape named %s)r   r{  r   r   r.  rz  r  )r   r  s     r   rl   zRawTurtle.shape
  s_    	& <;;)))t{{,,..%&BT&IJJd#r   c                 *   	 ||cxu r|cxu r!n n| j                   \  }}||| j                  fS |dk(  s|dk(  rt        d      ||||f}n%||f}n || j                   d   |f}n| j                   }|| j                  }| j                  d||       y )Nr   z(stretch_wid/stretch_len must not be zerorC  )rb   ra  r  )r<  r@  r.  rW   )r   stretch_widstretch_lenr  ra  s        r   rm   zRawTurtle.shapesize  s    	( +88'+':':$KT-?-???!{a/%&PQQ"" +[ 8 +[ 8$ //2K?M //M?((GF,g 	 	?r   c                 H    	 || j                   S | j                  d|       y )NrC  )rb   ro   )r=  rW   )r   shears     r   ro   zRawTurtle.shearfactor<  s*    	$ =$$$F6r   c                 X    	 t        j                  ddd       | j                  |       y )Nzturtle.RawTurtle.settiltangle()zn{name!r} is deprecated since Python 3.1 and scheduled for removal in Python {remove}. Use tiltangle() instead.)r     )r  )warnings_deprecatedrv   r  s     r   rh   zRawTurtle.settiltangleS  s1    	( 	>X$+	- 	ur   c                 H   	 |It        j                  | j                         | j                  z  }|| j                  z  | j
                  z  S | | j                  z  | j                  z  }t        j                  |      t         j                  z  }| j                  d|       y )NrC  )rb   ru   )	r   r;   r>  r  r  r  r_   r  rW   )r   r   ru   s      r   rv   zRawTurtle.tiltanglen  s    	< =LL,,t/@/@@D4---1A1AAA6D...1B1BBD<<%0DHHTH2r   c                 J    	 | j                  || j                         z          y r   )rv   r  s     r   ru   zRawTurtle.tilt  s!    	  	ut~~//0r   c                 &   	 ||cxu r|cxu r|cxu r| j                   S  | j                   \  }}}}||}||}||}||}||z  ||z  z
  dk(  rt        d      ||||f| _         t        j                  | |      t        j                  z  }	t        j
                  |	      t        j                  |	      }}
||z  |
|z  z
  ||z  |
|z  z
  |
|z  ||z  z   |
|z  ||z  z   f\  }}}}||f| _        ||z  | _        |	| _	        | j                  d       y )Nr   z0Bad shape transform matrix: must not be singularrC  rD  )r?  r.  r   r  r  r   r   r<  r=  r>  rW   )r   t11t12t21t22m11m12m21m22alfarm  rn  a11a12a21a22s                   r   rn   zRawTurtle.shapetransform  sB   	& #+++### ,!--S#s?#C?#C?#C?#C9sSy A%%&XYYc3/zz3$$txx/$$B fr#vor#v3 fr#vor#v3@S#s!3hG
F#r   c           	      l   	 | j                   }| j                  \  }}| j                  \  }}t        |||j                  z  |j
                  z        }dt        |      z  |z  \  }}|D 	cg c]<  \  }}	|||z  ||	z  z   |j
                  z  z   || |z  ||	z  z   |j                  z  z   f> c}	}S c c}	}w )Nr   )r   r  r  r   r  r  r  )
r   r:  r   p0p1e0e1er   r   s
             r   
_polytrafozRawTurtle._polytrafo  s    	 BB"b6==(6==89A,!#BIMO?E1 RT"Q$Y--rB3q5A:v}}2L/LM O 	O Os   +AB0c                     	 | j                   j                  | j                  j                     }|j                  dk(  r)| j                  |j                  |j                  dk(        S y )Nr1  r3  )r   rw  r   r{  r  _getshapepolyr6  )r   rl   s     r   rH   zRawTurtle.get_shapepoly  sX    
	 ##DKK$:$:;;;)#%%ekk5;;*3LMM $r   c                 
   	 | j                   dk(  s|r| j                  \  nE| j                   dk(  r%t        d| j                  dz        }|dd|f\  n| j                   dk(  r|S t	        fd|D              S )NrC  rB  r   g      @r   r   c              3   P   K   | ]  \  }}|z  |z  z   |z  |z  z   f  y wr   r   )r  r   r   r  r  r  r  s      r   r  z*RawTurtle._getshapepoly.<locals>.<genexpr>  s2     JAc!ec!emSUSU]3Js   #&)r3  r?  maxr6  r   )r   r1  r3  r&  r  r  r  r  s       @@@@r   r  zRawTurtle._getshapepoly  s    	 v%!%!1!1Cc3'At}}S()A!"Aq!Cc3+NJ'JJJr   c           	         	 | j                   }|j                  | j                  j                     }|j                  }| j                  j
                  }| j                  rd|j                  dk(  rT|j                  dkD  rDd| _	        |j                  }|dk(  r| j                  dk(  rd}n(| j                  dk(  r| j                  }n| j                  }| j                  | j                  |            }| j                   | j"                  }}|j%                  |||||d       y |d	k(  r|j'                  || j(                  |       y |d
k(  ryt+        ||      D ]i  \  }	\  }
}}| j                  | j                  |
d            }
|j%                  |	|
| j-                  |      | j-                  |      | j                  d       k y y | j                  ry |dk(  r|j%                  |ddd       nZ|d	k(  r5|j'                  || j(                  |j                  d   j                         n |d
k(  r|D ]  }	|j%                  |	ddd        d| _	        y )Nr   Fr1  r   r   rB  Tri  r  r|   r  r  r3  rm  rm  rm  r   r  )r   rw  r   r{  r  r}  r7  r  r  r  r6  r3  r6  r@  r  r  r9  r8  r  r  r  zipr  )r   r   rl   r  titemtshaper  fcocr  r:  s              r   r  zRawTurtle._drawturtle  s)   	8t{{556!!;;600A5&//A:M',D$[[F	!##z1q1%%/T]]++a(:(:6(BC$..B  B<=4 ! I'!!!%@*$,/v,> _(D.4R??4+=+=dD+IJD$$T4dhhrl-1XXb\ASASY] % __ % ''	!  (@"bI'!!!%*0..*A*G*GI*$! MD$$T+CRLM'+D$r   c           	         	 | j                   }|j                  | j                  j                     }|j                  }|j
                  }|dk(  r|j                         }| j                  dk(  rd}n(| j                  dk(  r| j                  }n| j                  }| j                  | j                  |            }| j                  | j                  }}|j                  |||||d       n|dk(  r/|j                  d      }|j!                  || j"                  |       n|d	k(  rg }|D ]#  }	|j                         }
|j%                  |
       % t'        |      }t)        ||      D ]i  \  }
\  }}}| j                  | j                  |d            }|j                  |
|| j+                  |      | j+                  |      | j                  d       k | j,                  j%                         | j.                  j1                  d
|f       |S )Nr1  r   r   rB  Tr  r  r   r3  rs   )r   rw  r   r{  r  r6  r  r3  r6  r@  r  r  r9  r8  r  r  r  r  r  r   r  r  r  r  rE  )r   r   rl   r  r  stitemr  r  r  elementr  r:  s               r   rs   zRawTurtle.stamp"  s   	 t{{556I'')F:-1q!!V+Q''!OOD$6$6v$>?E__dnnBVUR89t  Eg((,Ffdnnf=j F! $))+d#$ 6]F(+FF(; [$ntRt'9'9$'EF  t$((2,)-"T=O=OUY ! [[ 	v&gv./r   c                 l   	 || j                   v rit        |t              r#|D ]  }| j                  j	                  |        n| j                  j	                  |       | j                   j                  |       d|f}| j                  }||j                  vry |j                  j                  |      }|j                  j                  |       ||j                  k  r!|j                  dz
  |j                  z  |_	        |j                  j                  |j                  dz   |j                  z  d g       y )Nrs   r   )r  r   r   r   r  r  r  r@  indexrA  r?  insert)r   stampidsubitemr  bufr  s         r   _clearstampzRawTurtle._clearstampO  s    	doo%'5)& 1GKK''01 ##G,OO""7+ !ooszz!

  &

$CGGww{ckk1CG

37719ckk1D6:r   c                 H    	 | j                  |       | j                          y r   )r  r  )r   r  s     r   r7   zRawTurtle.clearstampe  s     
	 	!r   c                     	 || j                   d d  }n$|dk\  r| j                   d | }n| j                   |d  }|D ]  }| j                  |        | j                          y r  )r  r  r  )r   r  toDeleter  s       r   r8   zRawTurtle.clearstampst  si    	" 9q)H!Vr*Hqr*H 	#DT"	#r   c           
         	 | j                   | j                  | j                  t        | j                  t
              f}| j                  }d| j                  ||| j                  | j                  d d  |j                  | j                        | j                  d d  ff}| j                  r| j                  j                  |       | j                  }| j                  r1|j                  dk(  r!||z
  }|d   |j                   z  dz  |d   |j"                  z  dz  z   }dt%        |dz  dd| j                  z  z  | j                  z  z        z   }|d|z  z  }	t'        d|      D ]t  }
|
dk(  rd	}nd
}||	|
z  z   | _        | j                   r?|j)                  | j*                  || j                  f| j                  | j                  |       | j-                          v | j                   r)|j)                  | j*                  dd| j                         | j                   r| j                  j/                  |       t        | j                  t
              r| j                  j/                  |       || _        | j0                  r| j2                  j/                  |       t5        | j                        dkD  r| j7                          | j-                          y )Ngor   r   r  r   r  皙?r   TFrm  rm  r   ri  r|   *   )r:  r8  r6  r   r  r   r   r  r  r  r
  r   r  rE  r;  r  r  r  r   r  r  r  r  r  r  r  r  rc  )r   r  go_modesr   
undo_entrystartdiffdiffsqnhopsdeltar  r  s               r   r  zRawTurtle._goto  sf   	
 ]]^^]]57 DNNC++&&q)''(<(<=jjm%
 ??OO  ,;;6??a/ID1gfmm+a/476==3H12LLFc63;C,<)=dkk)IJKKECI&E1e_ 
6CC!&!2==$$T%9%9&+T^^%<%)^^T]]CI 
 }}  !5!57G46dmm ! M ==##C(dnnd+NN!!#&JJc"t 2%MMOr   c                 V   	 |\  }}}}|\  }}}}	|\  }
}}}| j                   }t        | j                  |z
        dkD  rt        d       |
| _        || _        |ddgk(  rd}n|}|j                  |
|||       | j                  D cg c]  }||vs|j                  |      dk(  r| }}|D ].  }|j                  |       | j                  j                  |       0 |}| j                  r|j                  dk(  r||z
  }|d   |j                  z  d	z  |d   |j                  z  d	z  z   }dt        |dz  d
d| j                  z  z  | j                  z  z        z   }|d|z  z  }t!        d|      D ]V  }|dk(  rd}nd}|||z  z   | _        |r+|j                  | j"                  || j                  f|||       | j%                          X |r|j                  | j"                  dd|       || _        | j&                  rOt)        | j*                        dkD  r| j*                  j-                          | j*                  g k(  rd| _        d | _        |	rH| j.                  g k(  rd | _        t        d       n&| j.                  | j.                  j-                          | j%                          y c c}w )Nr   z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rm  r   r  r   r   r   r  r  r  r   TFr  zUnwahrscheinlich in _undogoto!)r   r  r  r   r  r  r  r   r  r  r  r;  r  r  r  r   r  r  r  r  r  r  rG  r  )r   entryoldnewr  coodatadrawingpcpsrC   cLIcLr	  r   r   usepcr  todeleter  r  r  r  r  r  r  s                            r   	_undogotozRawTurtle._undogoto  s   	&+#S(G#+ R$RUt~~#$s*9:"&&!!EEbuB7#zz D!aun(.Q6(A  D D 	!ANN1JJa 	! ;;6??a/9D1gfmm+a/476==3H12LLFc63;C,<)=dkk)IJKKECI&E1e_ 
6CC!$uqy$$T%9%9&+T^^%<%'S2 
   !5!57G46b ! B 
 4::"

 zzR%*"!
~~#!%67+""$YDs   	J&J&c                 &   	 | j                   r(| j                   j                  d|| j                  f       || j                  z  }| j                  j	                  |      }| j
                  j                  }|dk(  r| j                  dkD  rqd| j                  z  }dt        t        |      |z        z   }d|z  |z  }t        |      D ]2  }| j                  j	                  |      | _        | j                          4 || _        | j                          y )Nrotr   r   g      @r   )r  rE  r  r  r   r   r  r;  r   r  r  r  )r   r   	neworientr  anglevelr#  r  r  s           r   r  zRawTurtle._rotate  s    	??OO  %0B0B!CD###LL''.	++&&a<DKK!OT[[(HCJx/00EIeOE5\ #||2259 !r   c                    	 t        | j                        dkD  r| j                  j                  | j                  | j                  | j
                  | j                         | j                  j                         | _        | j                  j                  | j                         n'| j                  j                  | j                  d       g | _        |r| j                  g| _        y y )Nr   T)r  )r  r  r   r  r  r8  r6  r  r   r  r  rp  s     r   rc  zRawTurtle._newLine  s    	 t 1$KK!!$"6"68H8H&*nndmmE#';;#:#:#<D JJd223KK!!$"6"6D!A $/D r   c                 8    	 t        | j                  t              S r   )r   r  r   r   s    r   rC   zRawTurtle.filling(  s    
	 $..$//r   c                 x   	 | j                         sD| j                  j                         | _        | j                  j                  | j                         | j                  g| _        | j                          | j                  r'| j                  j                  d| j                  f       | j                          y )N	beginfill)rC   r   r  r  r   r  r  r  rc  r  rE  r  r   s    r   r2   zRawTurtle.begin_fill6  s~    		 ||~![[446DNJJdnn-..)??OO  +t~~!>?r   c                 r   	 | j                         rt        | j                        dkD  ro| j                  j	                  | j
                  | j                  | j                         | j                  r'| j                  j                  d| j
                  f       d x| _        | _        | j                          y y )Nr  r  dofill)
rC   r  r  r   r  r  r9  r  rE  r  r   s    r   r?   zRawTurtle.end_fillK  s    		 <<>4>>"Q&%%dnndnn+/?? & <??OO(((DNN)CD.22DNT^LLN r   c                 Z   	 |s}t        |t        t        f      r5| j                  |      }| j                  t        | j                  d      z   }nh| j                  }|sZ| j                  t        | j                  d      z   }n6|#| j                  t        | j                  d      z   }| j                  |      }| j                         }| j                  r-| j                  j                  dg       d| j                  _
        	 | j                         dk(  r| j                          | j                          | j                  |       | j                  |       | j!                  d       | j                  |       | j                  rd| j                  _
        y y # | j                  |       w xY w)Nrb  r  TrB  r   F)r   r  r   r  r6  r  r8  rW   r  rE  rB  rb   rN   rY   rZ   rX   rD   )r   r  r:   rW   s       r   r=   zRawTurtle.dot_  s?   	 $e-t,}}s4==!'<<==3t}}a+@@D|}}s4==!'<<NN5)Ehhj??OO  %)'+DOO$	 F*	LLNLLMM% LLOHHSM??',DOO$  HHSMs   A&F F*c                    	 | j                   j                  | j                  |||| j                        \  }}| j	                          | j
                  j                  |       | j                  r| j                  j                  d|f       |S )Nwri)	r   r  r  r8  r  r   r  r  rE  )r   r  r  r  r  r  s         r   r  zRawTurtle._write  sp    	KK&&t~~sE4:>..J	c

$??OO  %/
r   c                 V   	 | j                   r-| j                   j                  dg       d| j                   _        | j                  t	        |      |j                         |      }|r%| j                         \  }}| j                  ||       | j                   rd| j                   _        y y )Nr  TF)r  rE  rB  r  r  r4  r\   rf   )r   argmover  r  r  r   r   s           r   r}   zRawTurtle.write  s    	$ ??OO  %)'+DOO$kk#c(EKKM4888:DAqKKQ??',DOO$ r   c                 8    	 | j                   g| _        d| _        y r  )r  r  r  r   s    r   r3   zRawTurtle.begin_poly  s    		 nn%
!r   c                     	 d| _         y NF)r  r   s    r   r@   zRawTurtle.end_poly  s    		 #r   c                 H    	 | j                   t        | j                         S y r   )r  r   r   s    r   rE   zRawTurtle.get_poly  s'    	 ::!$$ "r   c                     	 | j                   S r   )r   r   s    r   rG   zRawTurtle.getscreen  s    	 {{r   c                     	 | S r   r   r   s    r   rI   zRawTurtle.getturtle  s    	 r   c                 :    	 | j                   j                  |      S r   )r   r   r  s     r   r  zRawTurtle._delay  s    	{{  ''r   c                     	 | j                   j                  | j                  j                  |||       | j	                          y r   )r   r  r   r}  r  r  s       r   rS   zRawTurtle.onclick  s4    	" 	T[[..S#>r   c                     	 | j                   j                  | j                  j                  |||       | j	                          y r   )r   r  r   r}  r  r  s       r   rU   zRawTurtle.onrelease  s4    	* 	t{{00#sC@r   c                 j    	 | j                   j                  | j                  j                  |||       y r   )r   r  r   r}  r  s       r   rT   zRawTurtle.ondrag5  s+    	" 	DKK--sC=r   c                    	 | j                   y |dk(  rB|\  }}| j                  | |z  | j                  z         | j                   j                         }y |dk(  r|d   }| j	                  |       y |dk(  r| j                  |       y |dv r<|d   }| j                  j                  |       | j                  j                  |       y |dk(  r%|d   }| j                  j                  |ddd	       y |d
k(  rY|d   }d x| _        | _        || j                  v r7| j                  j                  |       | j                  j                  |       y y |dk(  r4t        j                  | |d          | j                   j                          y y )Nr  rs   r   r  )r  r=   r  r  r   r  r  rW   )r  r  r  rG  r7   r  r   r  r   r  r  r  r  r1  rW   )r   actionr8  r   degPAUdummyr  r  s           r   _undozRawTurtle._undoJ  sn   	??"U? ME6LL%t'9'99:OO'')Ew!WFOOF#t^NN4 ~%7DKK%JJd#x7DKK!!$(>')2 " 7{"7D.22DNT^tzz!##D)

!!$' " u_HHT47#OO! r   c                     	 | j                   y | j                   j                         }|d   }|dd  }|dk(  r/|r,|j                         }| j                  |d   |dd         |r+y y | j                  ||       y )Nr   r   r  )r  rG  r  )r   r  r  r8  s       r   ry   zRawTurtle.undoj  s~    	  ??"""$aABxU?xxz

47DH-  JJvt$r   r  r   ra  )NNNN)Frv  )FrQ   )Arialr[  rP  r*  ):r   r   r   r  r   r-  ra   ri   rz   r  r6   r  r  r   r  r  r  r/  rt   r9   rl   rm   ro   rh   rv   ru   rn   r  rH   r  r  rs   r  r7   r8   r  r  r  rc  rC   r2   r?   r=   r  r}   r3   r@   rE   rG   rI   rF   r  rS   rU   rT   r  ry   rx   r   r   r   r   r   	  sU    G"G} $%5 6i&P2,&-1A!$/*(++.5 .D .T .`&P6&?P7.6%3N1&%$P
ON"K$,P+Z;,83j?B$0 0*()-V	-:"#% " F(
*2>*"@%: Jr   r   c                  j    	 t         j                  t               t         _        t         j                  S r   )r   _screenr  r   r   r   r
   r
     s&    % ~~ >>r   c                   d    e Zd ZdZdZed   Zd Zed   ed   ed   ed   fdZd	 Z	d
 Z
d Zd Zy)r  Nr*   c                 t   t         j                  ht               xt         _        | _        | j                  j                  t         j                         | j                  j                  | j                         t         j                  t        d   }t        d   }t        d   }t        d   }t        d   }t        d   }| j                  j                  ||||       | j                  j                         t         _        t        j                  | t         j                         | j                  ||||       y y )Nr|   r   r   r   r   r   )r  _rootrc  r*   _titlerw  _destroyr2  r   rk  rm  r	   r-  r'   )r   r|   r   r   r   r   r   s          r   r-  z_Screen.__init__  s    == ).0GMDJJJW^^,JJ  /??"ME(^F[)Il+J[)I[)IJJ""5&)ZH"jj335GO!!$8JJufi; #r   r|   r   r   r   c                    	 t        | j                  d      sy | j                  j                         }| j                  j                         }t	        |t
              rd|cxk  rdk  rn n||z  }|||z
  dz  }t	        |t
              rd|cxk  rdk  rn n||z  }|||z
  dz  }| j                  j                  ||||       | j                          y )Nrr  r   r   r  )hasattrr  rz  r}  r   r   rr  r-   )r   r|   r   rp  rq  r  shs          r   r'   z_Screen.setup  s    	. tzz>2ZZ!!#ZZ""$eU#UauHE>5jA%Ffe$f)9)9YF>6kQ&F

vvv>r   c                 z    	 t         j                  t         j                  j                  |       |t         _        y r   )r  r  r*   r  )r   titlestrings     r   r*   z_Screen.title  s,    	 ==$MM,$r   c                     | j                   }|t        j                   u r,d t        _        d t        _        d t        _         d t        _        dt        _        |j                          y r  )	r  r  r   r  r  r2  r	   r  rv  )r   roots     r   r  z_Screen._destroy  sD    zz7== FK!FN GM"GO %r   c                 &    	 | j                          y r   )r  r   s    r   r   z_Screen.bye  s    	
 	r   c                      	  fd} j                  |       t        d   ry 	 t                y # t        $ r t	        d       Y y w xY w)Nc                 (    	 j                          y r   )r   )r   r   r   s     r   exitGracefullyz+_Screen.exitonclick.<locals>.exitGracefully
  s    8HHJr   r   r   )rS   r   r   AttributeErrorexit)r   r(  s   ` r   r   z_Screen.exitonclick  sF    	$	 	^$	J 	G	s   
/ AA)r   r   r   r  r2  r   r  r-  r'   r*   r  r   r   r   r   r   r  r    sR    EG']F<" w-X+&tK/@&P%"r   r  c                   6    e Zd Z	 dZdZed   ed   ed   fdZy)r   Nrl   r   r   c                     t         j                  t               t         _        t        j	                  | t         j                  |||       y )N)rl   r   r   )r   r  r
   r   r-  )r   rl   r   r   s       r   r-  zTurtle.__init__  s;     >>!#XFN4!&*8#* 	 	,r   )r   r   r   r  r  r   r-  r   r   r   r   r     s1    
 DG G} $%5 6i	,r   r   c                 h   	 i }t         D ]  }d|z   }t        |      j                  ||<   ! t        D ]  }d|z   }t        |      j                  ||<   ! t	        d| z  d      5 }t        d |D              }|j                  d       |d d D ]6  }|j                  dt        |      z         |j                  d	||   z         8 |d   }|j                  dt        |      z         |j                  d
||   z         |j                  d       |j                          d d d        y # 1 sw Y   y xY w)Nz_Screen.zTurtle.z%s.pyr  c              3   T   K   | ]   }|j                  d       d   t        vr| " yw)r   r   N)r   _alias_list)r  r   s     r   r  z&write_docstringdict.<locals>.<genexpr>A  s+      =Aa;  =s   &(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   s         r   r   r   +  s=   
 H* *
#S	))* + *

"S	))* 
g 	%  = = =	"#9 	?CGGHtCy()GG-=>	? 2h	49$%	(8C=89			  s   #B<D((D1c                     	 dd| j                         iz  }t        |      }|j                  }|D ]  }	 ||   t        |      _         y # t
        $ r t        d|z         Y 3w xY w)Nz!turtle_docstringdict_%(language)sr   zBad docstring-entry: %s)r4  
__import__r5  r   r1  r   r   )langmodnamemoduler5  r   s        r   read_docstringsr<  M  st     2Z

4MMG FH 3	3 (DI3  	3+c12	3s   A

A$#A$zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc                    	 t        j                  |       }|j                  t        |j                  j                               dd        }g }|j                  j                         D ]B  }|j                  xxt         j                  j                  k(  rn xt         j                  j                  k(  rn n  |j                  |j                         lxt         j                  j                  k(  r  |j                  d|j                          xt         j                  j                  k(  r, |j                  |j                   d|j                          t         j                  j                  k(  r |j                  d|j                          .	 t        d|j                         ddj!                  |       d	}t#        |      |fS )
Nr   )
parameters*r   z**zUnsupported parameter kind(z, ))inspect	signaturereplacer   r>  valueskind	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr  r  VAR_POSITIONALKEYWORD_ONLYVAR_KEYWORDRuntimeErrorr   r  )oborig_sigfunc_sig	call_argsparam	call_texts         r   getmethparlistrT  j  s~      $H ++2245ab9   H I$$++- Mjj:1!!119'##99:   ,1""11  1UZZL!12/""//  EJJ<q!=>""..  2ejj\!23"#?LLM DIIi()+Ix=)##r   c                     	 dd l }| y t        d   }| j                  d|z  d      }|j                  d|z        }|j	                  d|      }|S )Nr   r   %s.r    \(.+ %s\)::rer   rD  compilesub)docstrrZ  
turtlename	newdocstrparexps        r   _turtle_docrevisera    Z    ~o&Juz1"5IZZ34F

3	*Ir   c                     	 dd l }| y t        d   }| j                  d|z  d      }|j                  d|z        }|j	                  d|      }|S )Nr   r   rV  r   rW  rX  rY  )r]  rZ  
screennamer_  r`  s        r   _screen_docrevisere    rb  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                    | D ]  }t        ||      }t        |      \  }}|dk(  rt        d||       0t        j	                  |||||      }	t        |	t                       ||j                        t               |   _         y )Nr   z>>>>>>)objinitr  
paramslistargslist)getattrrT  r   __func_bodyformatr  globalsr1  )
	functionsr   rg  rh  	docreviser6  r  pl1pl2defstrs
             r   _make_global_funcsrt    s     	B
j)!&)S"9(C%##$Z/2S $ BVWY(1&..(A	*%	Br   zTurtle._screenzScreen()zTurtle._penzTurtle()__main__c                  B    t               rt                y t                y r   )rO   r^   rV   r   r   r   	switchpenrw    s    8DDr   c                     	 t                t        d       t                t        d       t	                t        d       t        d      D ]p  } | dk(  r
t                t        d      D ]  }t        d       t        d        | dk(  rt        d       t                t                t        d	       t	                r 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       0 t        d       t                t        d      D ].  } t        d       t        d       t        d       t        d       0 t                y )NTd   r  r  rb  r  Z   maroonrC  r   r   F   
startstartr  redr]  )ra   r+   r{   r1   r>   r|   r  r2   rD   rQ   r:   r?   r`   r}   )r  r  s     r   demo1r    sa   ,t
aq 	AAv1X R Avh
DBKF	 	agu
b	b	c
lAgqeq 	ABKHBK"I		 	tq 	ABKHBK"I		
 	
r   c                  	   	 t        d       t                t        d       t        t	        dd             t        dd      dz  } t        d       t        d      D ]  }t                t        | d        t        d       t               rt                t               rt                t        d       t        d	       d}t!        d
       t        d       t        d       t        dd      D ]  }|dkD  r t#                t%        d	d|z  z
  dd|z         t        d      D ]  }t'        |       t        d        t)                |dz  }t        d       t        t               dz   dz          t        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       1 t)                t        d       t+                t'        d       t-                t1        d       t3               }|j5                  d       t7               }|j5                  d       |j1                  d       |j                          |j9                  d       |j                  d       |j;                          |j=                  dd       |j                  d       |j?                          |j                  d       |j/                  dd       |j                  d       |j                  d       t        t	        |             d}|j                  |      dkD  r|j'                  d       |j                  d        |j                  |j	                  |             |j'                  d       |d!z  dk(  r*|jA                          |jA                          t                |dz  }|j                  |      dkD  r|j                  d"d#d$%       |j!                  d&       |j!                  d       d' }tC        jD                  d       t               r+|j                          |j                          t               r+|j'                  d       |j                  d(d)*       |jG                  |d       y )+Nr   r  r   r  rz     r   zwait a moment...r  greenr|  rT  rS     x      F   rC  r~  yellowrb  2   r   rB  i  (   rc  blueoranger  g      @g333333?r  zCAUGHT! )r  rS  boldr`   )r  r  r   c                 ,    t                t                y r   )r   r   )r  r  s     r   babazdemo2.<locals>.baba`  s    MEr   z  Click me!)Courierr  r  )r  )$rq   rr   rZ   re   rw   r<   rc   r  rw  r5   r}   rz   ry   ra   rR   r   rX   r2   rB   rA   r?   r^   rV   r:   rl   rI   rb   r   rQ   r{   rJ   r>   rs   timesleeprS   )r!  r  laenger  trir   rI  r  s           r   demo2r  
  s   (a

71a=!!Q#
2r 	AK62	 	 !!F  !
2#

3r2 
	"A1u#bd(Ar!t,1X 6
3 JbLFrF5719b.!
	" 	3

2
2
eHaq 	A2rNrFrFrF		
 	

2

2
hkv&!XBQ		C		"QVH%q		!76?#ll6"Q&IIcNIIcNNN3;;v./FF1IrzQ		QJE ll6"Q& 			*#8	HWU	 	

1!HHJKKM  ! 	r
		-(?	AD!r   )r   )turtle_docstringdict)Etkinterr+  r   r   r  rB  r}  r  os.pathr   r   r   copyr   r   _tg_classesr0  r2  _tg_utilities__all__r/  r   r   r   r   r   r   r   r   r   r  r  r,  r   r0  re  rc  objectr  r   r.  r   r=  r	   r  r1  rx  r   r   r
   r  r   r   r   r<  	_LANGUAGEImportErrorrT  ra  re  rl  rt  r   r   r   rw  r  r  r   r   r   r   <module>r     s  0KZ      
  ' '   I) !  '/--0DD(>*,	# 	4	c	 	c	 	T		
 	T	 	
	 	S	 		 	$	 		 	W	 	g	 	z	 	D	 	I	  	!	" ")'	,:<1t
*$E *$j1 .*a#RXX a#F I 6)BEE )0 
B5v B5T	) 	) 
,1F ,1^"6f "6Li# iVC CLR6 RjL6 L>oj ob% 
~l ~@,Y ,(  D3" 	MI	""$H

  
B '#Z1BD ' *.?A z2jaF 
G	GMC Ww  1	/01@t  1	
$i0 M	HBKL MMs*   G5 H	 5HH	H+H+*H+