B
    u9aò0 ã            O   @   s2  d Z ddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZ ddlmZ ddlmZ dddd	d
ddddg	Z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-gZd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|gOZd}d~gZee e e dg Zdd/d2d?dLdPdTdZd\dadbdddedpdudxdygZd€dd‚dƒddd„d…d†d‡dˆd‰d‰dŠd‹dŒddŽddd‘œZd’d“„ Zd”d•„ Zyeeƒ W n ek
r   ed–ƒ Y nX G d—d„ deƒZd˜d™„ Zdšd›„ ZdœZdÓdždŸ„ZG d d„ dej ƒZ!ee!ej"d¡ƒ G d¢d£„ d£ej#ƒZ$ej"Z"G d¤d¥„ d¥e%ƒZ&G d¦d„ deƒZ'G d§d¨„ d¨eƒZ(G d©d„ de%ƒZ)G dªd«„ d«e%ƒZ*G d¬d„ de&ƒZ+G d­d®„ d®e%ƒZ,G d¯d°„ d°e%ƒZ-G d±d²„ d²e%ƒZ.G d³d	„ d	e-e,ƒZ/e/Z0d´d„ Z1G dµd¶„ d¶e+ƒZ2G d·d
„ d
e/ƒZ3e3Z4dÔd¹d}„Z5dºd»„ Z6ed¼ Z7ye7dŒkrne6e7ƒ W n@ e8k
r   ed½e7ƒ Y n" ek
r°   ed¾e7 ƒ Y nX d¿dÀ„ Z9dÁdÂ„ Z:dÃdÄ„ Z;dÅZ<dÆdÇ„ Z=e=ee2dÈdÉe;ƒ e=ee3dÊdËe:ƒ e>Z?e@dÌkr.dÍdÎ„ ZAdÏdÐ„ ZBdÑdÒ„ ZCeBƒ  eCƒ  eDƒ  dS )Õz-turtle 1.1b- - for Python 3.1   -  4. 5. 2009é    N)ÚisfileÚsplitÚjoin)Údeepcopy)ÚsimpledialogÚScrolledCanvasÚTurtleScreenÚScreenÚ	RawTurtleÚTurtleÚRawPenÚPenÚShapeÚVec2DÚaddshapeÚbgcolorÚbgpicÚbyeÚclearscreenÚ	colormodeÚdelayÚexitonclickÚ	getcanvasÚ	getshapesÚlistenÚmainloopÚmodeÚnuminputÚonkeyÚ
onkeypressÚonkeyreleaseÚonscreenclickÚontimerÚregister_shapeÚresetscreenÚ
screensizeÚsetupÚsetworldcoordinatesÚ	textinputÚtitleÚtracerÚturtlesÚupdateÚwindow_heightÚwindow_widthÚbackÚbackwardÚ
begin_fillÚ
begin_polyÚbkÚcircleÚclearÚ
clearstampÚclearstampsÚcloneÚcolorÚdegreesÚdistanceÚdotÚdownÚend_fillÚend_polyÚfdÚ	fillcolorÚfillingÚforwardÚget_polyÚgetpenÚ	getscreenÚget_shapepolyÚ	getturtleÚgotoÚheadingÚ
hideturtleÚhomeÚhtÚisdownÚ	isvisibleÚleftÚltÚonclickÚondragÚ	onreleaseÚpdÚpenÚpencolorÚpendownÚpensizeÚpenupÚposÚpositionÚpuÚradiansÚrightÚresetÚ
resizemodeÚrtÚsethÚ
setheadingÚsetposÚsetpositionÚsettiltangleÚsetundobufferÚsetxÚsetyÚshapeÚ	shapesizeÚshapetransformÚshearfactorÚ
showturtleÚspeedÚstÚstampÚtiltÚ	tiltangleÚtowardsÚ
turtlesizeÚundoÚundobufferentriesÚupÚwidthÚwriteÚxcorÚycorÚwrite_docstringdictÚdoneÚ
Terminatorg      à?g      è?i  i,  Ústandardg      ð?é
   iè  ÚclassicÚblackÚnoresizeTÚenglishÚturtleÚscreenzPython Turtle GraphicsF)rz   ÚheightÚ	canvwidthÚ
canvheightÚ	leftrightÚ	topbottomr   r   r   Úundobuffersizerk   rW   rA   ra   ÚvisibleÚlanguageÚexampleturtleÚexamplescreenr)   Ú
using_IDLEc          	   C   sä   t | dƒ}| ¡ }W d Q R X i }x¼|D ]´}| ¡ }|r(| d¡rDq(y| d¡\}}W n& tk
r|   td| |f ƒ w(Y nX | ¡ }| ¡ }|dkr t|ƒ}n4yd|kr´t|ƒ}nt	|ƒ}W n tk
rÒ   Y nX |||< q(W |S )NÚrú#ú=zBad line in config-file %s:
%s)ÚTrueÚFalseÚNonez''z""Ú.)
ÚopenÚ	readlinesÚstripÚ
startswithr   Ú
ValueErrorÚprintÚevalÚfloatÚint)ÚfilenameÚfZcfglinesÚcfgdictÚlineÚkeyÚvalue© rª   ú/usr/lib/python3.7/turtle.pyÚconfig_dict«   s0    


r¬   c             C   sŒ   d}i }i }t |ƒrt|ƒ}d|kr0d|d  }yttƒ\}}t||ƒ}W n tk
rb   d}Y nX t |ƒrtt|ƒ}t |¡ t |¡ d S )Nz
turtle.cfgZimportconfigzturtle_%s.cfgÚ )r   r¬   r   Ú__file__r   Ú	ExceptionÚ_CFGr,   )r¦   Zdefault_cfgZcfgdict1Zcfgdict2ÚheadÚtailZ	cfg_file2rª   rª   r«   Ú
readconfigÈ   s     

r³   z"No configfile read, reason unknownc               @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r   c             C   s   t  | ||f¡S )N)ÚtupleÚ__new__)ÚclsÚxÚyrª   rª   r«   rµ   ú   s    zVec2D.__new__c             C   s"   t | d |d  | d |d  ƒS )Nr   é   )r   )ÚselfÚotherrª   rª   r«   Ú__add__ü   s    zVec2D.__add__c             C   sD   t |tƒr*| d |d  | d |d   S t| d | | d | ƒS )Nr   r¹   )Ú
isinstancer   )rº   r»   rª   rª   r«   Ú__mul__þ   s    
 zVec2D.__mul__c             C   s2   t |tƒst |tƒr.t| d | | d | ƒS d S )Nr   r¹   )r½   r£   r¢   r   )rº   r»   rª   rª   r«   Ú__rmul__  s    zVec2D.__rmul__c             C   s"   t | d |d  | d |d  ƒS )Nr   r¹   )r   )rº   r»   rª   rª   r«   Ú__sub__  s    zVec2D.__sub__c             C   s   t | d  | d  ƒS )Nr   r¹   )r   )rº   rª   rª   r«   Ú__neg__  s    zVec2D.__neg__c             C   s   | d d | d d  d S )Nr   é   r¹   g      à?rª   )rº   rª   rª   r«   Ú__abs__	  s    zVec2D.__abs__c             C   sj   t | d  | d ƒ}|tj d }t |¡t |¡ }}t | d | |d |  | d | |d |  ƒS )Nr¹   r   g     €f@)r   ÚmathÚpiÚcosÚsin)rº   ÚangleZperpÚcÚsrª   rª   r«   Úrotate  s    zVec2D.rotatec             C   s   | d | d fS )Nr   r¹   rª   )rº   rª   rª   r«   Ú__getnewargs__  s    zVec2D.__getnewargs__c             C   s   d|  S )Nz(%.2f,%.2f)rª   )rº   rª   rª   r«   Ú__repr__  s    zVec2D.__repr__N)Ú__name__Ú
__module__Ú__qualname__rµ   r¼   r¾   r¿   rÀ   rÁ   rÃ   rË   rÌ   rÍ   rª   rª   rª   r«   r   ì   s   c             C   s\   t | jƒ}| ¡  x|D ]}t||ƒ qW x,| j ¡ D ]\}}t|ƒtjkr6|||< q6W d S )N)	ÚlistÚ	__bases__ÚreverseÚ__methodDictÚ__dict__ÚitemsÚtypeÚtypesÚFunctionType)r¶   Ú_dictZbaseListZ_superr¨   r©   rª   rª   r«   rÔ      s    

rÔ   c             C   s   i }t | |ƒ | ¡ S )N)rÔ   Úkeys)r¶   rÚ   rª   rª   r«   Ú	__methods*  s    
rÜ   zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)rª   c             C   sÀ   i }t ||ƒ i }t| ƒ}xN| ¡ D ]B}|d d… dksf|dd … dksf||ksf||krZq$|| ||< q$W xP| ¡ D ]D\}}	||	dœ}
t|tƒržt||dœ }t||
ƒ t| ||
| ƒ qtW d S )Nr¹   Ú_éÿÿÿÿ)ÚmethodÚfunc)rß   Z	attribute)	rÔ   rÜ   rÛ   rÖ   r½   ÚstrÚ__stringBodyÚexecÚsetattr)Z	fromClassZtoClassZtoPartZexcludeZ_dict_1rÚ   ZmfcZexrß   rà   ÚdZ
execStringrª   rª   r«   Ú__forwardmethods4  s    
0


ræ   c               @   s`   e Zd Zddd„Zddd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r   éô  é^  éX  c          
   C   s0  t jj| |||d |  ¡ | _|| | _| _|| | _| _d| _	t j
|||| j	t jdd| _t j|| jjt jd| _t j|| jjd| _| jj| jj| jjd | jdd	dd
 | jdd	dd
 | jjd	| d	ddd	d	dd | jjd	| d	dd	d	d	dd | jjd	| d	d	dd	d	dd |  ¡  | j d| j¡ d S )N)rz   r‰   ÚwhiterÂ   )rz   r‰   ÚbgZreliefZborderwidth)ÚcommandZorient)rì   )ZxscrollcommandZyscrollcommandr   r¹   )ZweightZminsizeÚnews)ÚpadxÚin_ÚpadyÚrowÚcolumnÚrowspanÚ
columnspanÚstickyz<Configure>)ÚTKÚFrameÚ__init__Úwinfo_toplevelZ_rootwindowrz   r‰   rŠ   r‹   rë   ÚCanvasZSUNKENÚ_canvasZ	ScrollbarZxviewZ
HORIZONTALÚhscrollZyviewÚvscrollZ	configureÚsetZrowconfigureZcolumnconfigureÚgridr`   ÚbindÚonResize)rº   Zmasterrz   r‰   rŠ   r‹   rª   rª   r«   rø   O  s,    

zScrolledCanvas.__init__Nc             C   s¢   |r
|| _ |r|| _|r|| _| jj|| j  d | j d | j d | jd fd | j d| j | j d  | j  ¡ | j d| j| j d  | j ¡ |  	¡  d S )NrÂ   )rë   Úscrollregiong      à?é   )
rŠ   r‹   rë   rû   ÚconfigÚxview_movetorz   Úyview_movetor‰   ÚadjustScrolls)rº   rŠ   r‹   rë   rª   rª   r«   r`   h  s    

zScrolledCanvas.resetc          
   C   s²   | j  ¡ }| j  ¡ }| j  d| j|  | j ¡ | j  d| j|  | j ¡ || jk s`|| jk rš| jjd| ddddddd | j	jd| ddddddd n| j 
¡  | j	 
¡  d S )Ng      à?r¹   r   rí   )rî   rï   rð   rñ   rò   ró   rô   rõ   )rû   Úwinfo_widthÚwinfo_heightr  rŠ   r  r‹   rü   rÿ   rý   Zgrid_forget)rº   ÚcwidthÚcheightrª   rª   r«   r  z  s    


zScrolledCanvas.adjustScrollsc             C   s   |   ¡  d S )N)r  )rº   Úeventrª   rª   r«   r  Š  s    zScrolledCanvas.onResizec             G   s   | j j|Ž S )N)rû   Úbbox)rº   Úargsrª   rª   r«   r  Ž  s    zScrolledCanvas.bboxc             O   s   | j j||ŽS )N)rû   Úcget)rº   r  Úkwargsrª   rª   r«   r  “  s    zScrolledCanvas.cgetc             O   s   | j j||Ž d S )N)rû   r  )rº   r  r  rª   rª   r«   r  ˜  s    zScrolledCanvas.configc             O   s   | j j||Ž d S )N)rû   r   )rº   r  r  rª   rª   r«   r     s    zScrolledCanvas.bindc             O   s   | j j||Ž d S )N)rû   Úunbind)rº   r  r  rª   rª   r«   r  ¢  s    zScrolledCanvas.unbindc             C   s   | j  ¡  d S )N)rû   Úfocus_force)rº   rª   rª   r«   r  §  s    zScrolledCanvas.focus_force)rç   rè   ré   rç   )NNN)rÎ   rÏ   rÐ   rø   r`   r  r  r  r  r  r   r  r  rª   rª   rª   r«   r   I  s    

rû   c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú_Rootc             C   s   t j | ¡ d S )N)rö   ÚTkrø   )rº   rª   rª   r«   rø   ±  s    z_Root.__init__c             C   s&   t | ||||ƒ| _| jjddd d S )Nr¹   Zboth)ÚexpandÚfill)r   rû   Úpack)rº   rz   r‰   r
  r  rª   rª   r«   Úsetupcanvas´  s    z_Root.setupcanvasc             C   s   | j S )N)rû   )rº   rª   rª   r«   Ú
_getcanvas¸  s    z_Root._getcanvasc             C   s   |   d||||f ¡ d S )Nz%dx%d%+d%+d)Zgeometry)rº   rz   r‰   ÚstartxÚstartyrª   rª   r«   Úset_geometry»  s    z_Root.set_geometryc             C   s   |   d|¡ d S )NZWM_DELETE_WINDOW)Zwm_protocol)rº   Údestroyrª   rª   r«   Ú	ondestroy¾  s    z_Root.ondestroyc             C   s   |   ¡ S )N)Zwinfo_screenwidth)rº   rª   rª   r«   Ú	win_widthÁ  s    z_Root.win_widthc             C   s   |   ¡ S )N)Zwinfo_screenheight)rº   rª   rª   r«   Ú
win_heightÄ  s    z_Root.win_heightN)
rÎ   rÏ   rÐ   rø   r  r  r  r  r  r   rª   rª   rª   r«   r  ¯  s   r  c               @   s0  e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ ZdFdd„Zdd„ Z	dGdd„Z
dd„ Zdd„ Zdd„ Zdd„ ZdHdd„Zdd„ ZdIdd„ZdJd d!„ZdKd"d#„ZdLd$d%„Zd&d'„ ZdMd(d)„Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ ZdNd<d=„Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dOdDdE„Z$d	S )PÚTurtleScreenBasec              C   s   t jddd} |  ¡  | S )Nr¹   )rz   r‰   )rö   Ú
PhotoImageÚblank)Zimgrª   rª   r«   Ú_blankimageÒ  s    zTurtleScreenBase._blankimagec             C   s   t j| dS )N)Úfile)rö   r"  )r¤   rª   rª   r«   Ú_imageÚ  s    zTurtleScreenBase._imagec             C   sˆ   || _ t|tƒr"| j j}| j j}nJt| j  d¡ƒ}t| j  d¡ƒ}| j j| d | d |d |d fd || _|| _d | _| _	d S )Nrz   r‰   rÂ   )r  g      ð?)
Úcvr½   r   rŠ   r‹   r£   r  r  ÚxscaleÚyscale)rº   r'  ÚwÚhrª   rª   r«   rø   á  s    

*zTurtleScreenBase.__init__c             C   s   | j jddddS )N)r   r   r   r   r   r   r­   )r  Úoutline)r'  Zcreate_polygon)rº   rª   rª   r«   Ú_createpolyî  s    zTurtleScreenBase._createpolyNFc       
      C   s¦   g }x2|D ]*\}}	|  || j ¡ |  |	 | j ¡ q
W | jj|f|žŽ  |d k	rb| jj||d |d k	rz| jj||d |d k	r’| jj||d |r¢| j |¡ d S )N)r  )r,  )rz   )Úappendr(  r)  r'  ÚcoordsÚitemconfigureÚ	tag_raise)
rº   ZpolyitemÚ	coordlistr  r,  rz   ÚtopÚclr·   r¸   rª   rª   r«   Ú	_drawpolyó  s    zTurtleScreenBase._drawpolyc          	   C   s   | j jddddddtjdS )Nr   r­   rÂ   )r  rz   Zcapstyle)r'  Zcreate_linerö   ZROUND)rº   rª   rª   r«   Ú_createline  s    zTurtleScreenBase._createlinec       	      C   s–   |d k	rRg }x2|D ]*\}}|  || j ¡ |  | | j ¡ qW | jj|f|žŽ  |d k	rj| jj||d |d k	r‚| jj||d |r’| j |¡ d S )N)r  )rz   )r.  r(  r)  r'  r/  r0  r1  )	rº   Zlineitemr2  r  rz   r3  r4  r·   r¸   rª   rª   r«   Ú	_drawline  s    
zTurtleScreenBase._drawlinec             C   s   | j  |¡ d S )N)r'  Údelete)rº   Úitemrª   rª   r«   Ú_delete)  s    zTurtleScreenBase._deletec             C   s   | j  ¡  d S )N)r'  r,   )rº   rª   rª   r«   Ú_update/  s    zTurtleScreenBase._updatec             C   s   | j  |¡ d S )N)r'  Úafter)rº   r   rª   rª   r«   Ú_delay4  s    zTurtleScreenBase._delayc             C   s4   y| j  |¡}d}W n tjk
r.   d}Y nX |S )NTF)r'  Z	winfo_rgbrö   ZTclError)rº   r9   ZrgbÚokrª   rª   r«   Ú_iscolorstring8  s    
zTurtleScreenBase._iscolorstringc             C   s0   |d k	r | j j|d |  ¡  n| j  d¡S d S )N)rë   rë   )r'  r  r;  r  )rº   r9   rª   rª   r«   Ú_bgcolorB  s    
zTurtleScreenBase._bgcolorc             C   st   |\}}|| j  }|| j }ddddœ}| jj|d | ||| ||d}	| j |	¡\}
}}}| j ¡  |	|d fS )NÚswrÊ   Zse)rP   Úcenterr_   r¹   )ÚtextÚanchorr  Úfont)r(  r)  r'  Zcreate_textr  r,   )rº   r[   ÚtxtÚalignrE  rW   r·   r¸   rD  r9  Zx0Zy0Zx1Zy1rª   rª   r«   Ú_writeK  s    



zTurtleScreenBase._writer¹   c                sD   ˆ d krˆj  |d| ¡ n$‡ ‡fdd„}ˆj  |d| ||¡ d S )Nz<Button-%s>c                s:   ˆj  | j¡ˆj ˆj  | j¡ ˆj  }}ˆ ||ƒ d S )N)r'  Úcanvasxr·   r(  Úcanvasyr¸   r)  )r  r·   r¸   )Úfunrº   rª   r«   Úeventfunf  s    z+TurtleScreenBase._onclick.<locals>.eventfun)r'  Ú
tag_unbindÚtag_bind)rº   r9  rK  ÚnumÚaddrL  rª   )rK  rº   r«   Ú_onclick]  s    zTurtleScreenBase._onclickc                sD   ˆ d krˆj  |d| ¡ n$‡ ‡fdd„}ˆj  |d| ||¡ d S )Nz<Button%s-ButtonRelease>c                s:   ˆj  | j¡ˆj ˆj  | j¡ ˆj  }}ˆ ||ƒ d S )N)r'  rI  r·   r(  rJ  r¸   r)  )r  r·   r¸   )rK  rº   rª   r«   rL  x  s    z-TurtleScreenBase._onrelease.<locals>.eventfun)r'  rM  rN  )rº   r9  rK  rO  rP  rL  rª   )rK  rº   r«   Ú
_onreleasel  s
    	zTurtleScreenBase._onreleasec                sD   ˆ d krˆj  |d| ¡ n$‡ ‡fdd„}ˆj  |d| ||¡ d S )Nz<Button%s-Motion>c                sT   y:ˆj  | j¡ˆj ˆj  | j¡ ˆj  }}ˆ ||ƒ W n tk
rN   Y nX d S )N)r'  rI  r·   r(  rJ  r¸   r)  r¯   )r  r·   r¸   )rK  rº   rª   r«   rL  ‹  s    z*TurtleScreenBase._ondrag.<locals>.eventfun)r'  rM  rN  )rº   r9  rK  rO  rP  rL  rª   )rK  rº   r«   Ú_ondrag  s    	zTurtleScreenBase._ondragc                s@   ˆ d krˆj  d| ¡ n"‡ ‡fdd„}ˆj  d| ||¡ d S )Nz<Button-%s>c                s:   ˆj  | j¡ˆj ˆj  | j¡ ˆj  }}ˆ ||ƒ d S )N)r'  rI  r·   r(  rJ  r¸   r)  )r  r·   r¸   )rK  rº   rª   r«   rL     s    z1TurtleScreenBase._onscreenclick.<locals>.eventfun)r'  r  r   )rº   rK  rO  rP  rL  rª   )rK  rº   r«   Ú_onscreenclick”  s    	zTurtleScreenBase._onscreenclickc                s>   ˆ d kr| j  d| d ¡ n‡ fdd„}| j  d| |¡ d S )Nz<KeyRelease-%s>c                s
   ˆ ƒ  d S )Nrª   )r  )rK  rª   r«   rL  ­  s    z0TurtleScreenBase._onkeyrelease.<locals>.eventfun)r'  r  r   )rº   rK  r¨   rL  rª   )rK  r«   Ú_onkeyrelease¦  s    zTurtleScreenBase._onkeyreleasec                sn   ˆ d kr4|d kr | j  dd ¡ qj| j  d| d ¡ n6‡ fdd„}|d krX| j  d|¡ n| j  d| |¡ d S )Nz
<KeyPress>z<KeyPress-%s>c                s
   ˆ ƒ  d S )Nrª   )r  )rK  rª   r«   rL  ¼  s    z.TurtleScreenBase._onkeypress.<locals>.eventfun)r'  r  r   )rº   rK  r¨   rL  rª   )rK  r«   Ú_onkeypress±  s    zTurtleScreenBase._onkeypressc             C   s   | j  ¡  d S )N)r'  r  )rº   rª   rª   r«   Ú_listenÃ  s    zTurtleScreenBase._listenc             C   s(   |dkr| j  |¡ n| j  ||¡ d S )Nr   )r'  Z
after_idler<  )rº   rK  Útrª   rª   r«   Ú_ontimerÈ  s    zTurtleScreenBase._ontimerc             C   s   | j jdd|dS )Nr   )Úimage)r'  Zcreate_image)rº   rZ  rª   rª   r«   Ú_createimageÐ  s    zTurtleScreenBase._createimagec             C   s<   |\}}| j  ||| j | | j f¡ | j j||d d S )N)rZ  )r'  r/  r(  r)  Ú
itemconfig)rº   r9  r[   rZ  r·   r¸   rª   rª   r«   Ú
_drawimageÕ  s     zTurtleScreenBase._drawimagec             C   s    | j j||d | j  |¡ d S )N)rZ  )r'  r\  Z	tag_lower)rº   r9  rZ  rª   rª   r«   Ú	_setbgpicÝ  s    zTurtleScreenBase._setbgpicc             C   s   | j  |¡S )N)r'  r×   )rº   r9  rª   rª   r«   Ú_typeå  s    zTurtleScreenBase._typec                s.   | j  |¡‰ ‡ fdd„tdtˆ ƒdƒD ƒ}|S )Nc                s"   g | ]}ˆ | ˆ |d    f‘qS )r¹   rª   )Ú.0Úi)r4  rª   r«   ú
<listcomp>ô  s    z/TurtleScreenBase._pointlist.<locals>.<listcomp>r   rÂ   )r'  r/  ÚrangeÚlen)rº   r9  Úplrª   )r4  r«   Ú
_pointlistë  s    zTurtleScreenBase._pointlistc             C   s   | j j||||fd d S )N)r  )r'  r  )rº   Úsrx1Úsry1Úsrx2Úsry2rª   rª   r«   Ú_setscrollregion÷  s    z!TurtleScreenBase._setscrollregionc       	      C   s„   | j  ¡ }xt|D ]l}t| j  |¡ƒ}g }x@|rh|d d… \}}| || ¡ | || ¡ |dd … }q*W | j j|f|žŽ  qW d S )NrÂ   )r'  Zfind_allrÑ   r/  r.  )	rº   ZxscalefactorZyscalefactorrÖ   r9  ZcoordinatesZnewcoordlistr·   r¸   rª   rª   r«   Ú_rescaleú  s    

zTurtleScreenBase._rescalec             C   sz   t | jtƒs| j| jfS ||  kr6|  kr6d krJn n| jj| jjfS |d k	rX|| _|d k	rf|| _| j |||¡ d S )N)r½   r'  r   rŠ   r‹   r`   )rº   rŠ   r‹   rë   rª   rª   r«   Ú_resize  s    "zTurtleScreenBase._resizec             C   s@   | j  ¡ }|dkr| j d }| j  ¡ }|dkr8| j d }||fS )Nr¹   rz   r‰   )r'  r  r	  )rº   rz   r‰   rª   rª   r«   Ú_window_size  s    



zTurtleScreenBase._window_sizec             C   s   t  ¡  d S )N)rö   r   )rº   rª   rª   r«   r      s    zTurtleScreenBase.mainloopc             C   s   t  ||¡S )N)r   Z	askstring)rº   r)   Úpromptrª   rª   r«   r(   /  s    zTurtleScreenBase.textinputc             C   s   t j|||||dS )N)ZinitialvalueZminvalueZmaxvalue)r   Zaskfloat)rº   r)   ro  ÚdefaultZminvalZmaxvalrª   rª   r«   r   >  s    
zTurtleScreenBase.numinput)NNNF)NNNF)N)r¹   N)r¹   N)r¹   N)r¹   N)N)NNN)NNN)%rÎ   rÏ   rÐ   Ústaticmethodr$  r&  rø   r-  r5  r6  r7  r:  r;  r=  r?  r@  rH  rQ  rR  rS  rT  rU  rV  rW  rY  r[  r]  r^  r_  rf  rk  rl  rm  rn  r   r(   r   rª   rª   rª   r«   r!  Ê  sF    
 


	





r!  c               @   s   e Zd ZdS )r€   N)rÎ   rÏ   rÐ   rª   rª   rª   r«   r€   Y  s   c               @   s   e Zd ZdS )ÚTurtleGraphicsErrorN)rÎ   rÏ   rÐ   rª   rª   rª   r«   rr  b  s   rr  c               @   s    e Zd Zddd„Zddd„ZdS )r   Nc             C   sz   || _ |dkr"t|tƒrpt|ƒ}nN|dkrVt|tƒrp| ¡  d¡rpt|ƒrpt 	|¡}n|dkrdg }nt
d| ƒ‚|| _d S )NÚpolygonrZ  z.gifÚcompoundzThere is no shape type %s)r_  r½   rÑ   r´   rá   ÚlowerÚendswithr   r   r&  rr  Ú_data)rº   Ztype_Údatarª   rª   r«   rø   n  s    


zShape.__init__c             C   s:   | j dkrtd| j  ƒ‚|d kr$|}| j |||g¡ d S )Nrt  z Cannot add component to %s Shape)r_  rr  rw  r.  )rº   Úpolyr  r,  rª   rª   r«   Úaddcomponent~  s    

zShape.addcomponent)N)N)rÎ   rÏ   rÐ   rø   rz  rª   rª   rª   r«   r   g  s   
c               @   s@   e Zd Zddd„Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ ZdS )ÚTbufferr‚   c             C   s$   || _ d gg| | _d| _d| _d S )NrÞ   F)ÚbufsizeÚbufferÚptrÚcumulate)rº   r|  rª   rª   r«   rø   ˜  s    zTbuffer.__init__Nc             C   sH   |d kr*x4t | jƒD ]}d g| j|< qW n|| _d gg| | _d| _d S )NrÞ   )rc  r|  r}  r~  )rº   r|  ra  rª   rª   r«   r`     s    zTbuffer.resetc             C   sF   | j dkrB| js0| jd | j  | _|| j| j< n| j| j  |¡ d S )Nr   r¹   )r|  r  r~  r}  r.  )rº   r9  rª   rª   r«   Úpush¥  s
    
zTbuffer.pushc             C   sJ   | j dkrF| j| j }|d kr"d S d g| j| j< | jd | j  | _|S d S )Nr   r¹   )r|  r}  r~  )rº   r9  rª   rª   r«   Úpop¬  s    
zTbuffer.popc             C   s   | j | j d g¡ S )N)r|  r}  Úcount)rº   rª   rª   r«   Únr_of_itemsµ  s    zTbuffer.nr_of_itemsc             C   s   t | jƒd t | jƒ S )Nú )rá   r}  r~  )rº   rª   rª   r«   rÍ   ·  s    zTbuffer.__repr__)r‚   )N)	rÎ   rÏ   rÐ   rø   r`   r€  r  rƒ  rÍ   rª   rª   rª   r«   r{  –  s   

	r{  c               @   s  e Zd ZdZed ed ed fdd„Zdd„ Zd<d
d„Zdd„ Zd=dd„Z	dd„ Z
dd„ Zd>dd„Zdd„ Zdd„ Zdd„ Zd?dd„Zd@dd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ ZdAd-d.„Zd/d0„ ZdBd1d2„ZdCd3d4„ZdDd6d7„ZdEd8d9„ZdFd:d;„ZeZeZ eZ!e	Z"eZ#d	S )Gr   Tr   r   r   c          
   C   s¸   t ddƒt ddƒt ddƒt ddƒt ddƒt ddƒt d|  ¡ ƒd	œ| _d
di| _t | |¡ || _|| _td | _	g | _
|  ¡  tjdkr´| ¡ }| ddddd¡ | ddddd¡ d S )Nrs  ))iöÿÿÿr   )r‚   r   )r   r‚   ))r   é   )éþÿÿÿé   )rÞ   r‚   )éüÿÿÿé   )iùÿÿÿé	   )i÷ÿÿÿé   )iúÿÿÿé   )iùÿÿÿr¹   )éûÿÿÿéýÿÿÿ)iøÿÿÿiúÿÿÿ)iúÿÿÿiøÿÿÿ)rˆ  r  )r   iùÿÿÿ)é   r  )é   iøÿÿÿ)r‹  iúÿÿÿ)rŒ  rŽ  )r‰  r¹   )r  rŒ  )rŠ  r‹  )r‰  rŠ  )r  r‰  )r¹   r‚   )rÂ   r‡  ))r‚   r   )g…ëQ¸#@g¸…ëQ¸@)g®Gáz. @g…ëQ¸…@)g…ëQ¸…@g®Gáz. @)g¸…ëQ¸@g…ëQ¸#@)r   r‚   )g¸…ëQ¸Àg…ëQ¸#@)g…ëQ¸…Àg®Gáz. @)g®Gáz. Àg…ëQ¸…@)g…ëQ¸#Àg¸…ëQ¸@)iöÿÿÿr   )g…ëQ¸#Àg¸…ëQ¸À)g®Gáz. Àg…ëQ¸…À)g…ëQ¸…Àg®Gáz. À)g¸…ëQ¸Àg…ëQ¸#À)g       €g      $À)g¸…ëQ¸@g…ëQ¸#À)g…ëQ¸…@g®Gáz. À)g®Gáz. @g…ëQ¸…À)g…ëQ¸#@g¸…ëQ¸À))r‚   iöÿÿÿ)r‚   r‚   )iöÿÿÿr‚   )iöÿÿÿiöÿÿÿ))r‚   g®GázÀ)r   gš™™™™'@)iöÿÿÿg®GázÀ))r   r   )r  i÷ÿÿÿ)r   iùÿÿÿ)rŒ  i÷ÿÿÿrZ  )Zarrowr‡   r4   ZsquareZtrianglerƒ   r#  Únopicr­   r   ÚdarwinZwmZ
attributesrš   z-topmostÚ1Ú0)r   r$  Ú_shapesÚ_bgpicsr!  rø   Ú_modeÚ_delayvaluer°   Ú
_colormodeÚ_keysr5   ÚsysÚplatformrù   Zcall)rº   r'  r   r   r   Z
rootwindowrª   rª   r«   rø   Å  s$    


zTurtleScreen.__init__c             C   sª   t d | _t d | _|  d¡ |  d¡| _d| _d| _d| _g | _	|  
d¡ xd	D ]}|  d |¡ qRW |  d ¡ x.| jd d … D ]}|  d |¡ |  d |¡ q€W d t_d S )
Nr   r   Úallr­   r‘  r¹   r   rê   )r¹   rÂ   é   )r°   r˜  r™  r:  r[  Ú_bgpicÚ
_bgpicnameÚ_tracingÚ_updatecounterÚ_turtlesr   rR   r   rš  r   r   Ú_pen)rº   Úbtnr¨   rª   rª   r«   r5   ì  s     





zTurtleScreen.clearNc             C   s|   |d kr| j S | ¡ }|dkr*td| ƒ‚|| _ |dkrp|  | j d | j d | jd | jd ¡ d | _| _|  ¡  d S )N)r   ÚlogoÚworldzNo turtle-graphics-mode %s)r   r¦  rÂ   g      ð?)	r—  ru  rr  rk  rŠ   r‹   r(  r)  r`   )rº   r   rª   rª   r«   r   
  s    zTurtleScreen.modec             C   sÒ   |   ¡ dkr|   d¡ t|| ƒ}t|| ƒ}|  ¡ \}}|  |d |d ¡ | j| j }	}
| j| | _| j| | _|| j }| | j }| j| }| j| }|  ||||¡ |  	| j|	 | j|
 ¡ |  
¡  d S )Nr§  é   )r   r¢   rn  r%   r(  r)  rŠ   r‹   rk  rl  r,   )rº   ZllxZllyZurxZuryZxspanZyspanZwxZwyZ	oldxscaleZ	oldyscalerg  rh  ri  rj  rª   rª   r«   r'   ,  s     



z TurtleScreen.setworldcoordinatesc             C   sT   |d kr2|  ¡  d¡r(td|  |¡ƒ}qFtdƒ‚nt|tƒrFtd|ƒ}|| j|< d S )Nz.gifrZ  z;Bad arguments for register_shape.
Use  help(register_shape)rs  )ru  rv  r   r&  rr  r½   r´   r•  )rº   Únamerk   rª   rª   r«   r#   S  s    


zTurtleScreen.register_shapec          	   C   s  t |ƒdkr|d }t|tƒrD|  |¡s0|dkr4|S tdt|ƒ ƒ‚y|\}}}W n( ttfk
rz   tdt|ƒ ƒ‚Y nX | jdkr dd„ |||fD ƒ\}}}d|  kr´d	kræn n.d|  krÌd	kræn nd|  kräd	ksön td
t|ƒ ƒ‚d|||f S )Nr¹   r   r­   zbad color string: %szbad color arguments: %sg      ð?c             S   s   g | ]}t d | ƒ‘qS )g     ào@)Úround)r`  r·   rª   rª   r«   rb  Œ  s    z*TurtleScreen._colorstr.<locals>.<listcomp>éÿ   zbad color sequence: %sz#%02x%02x%02x)rd  r½   rá   r?  rr  Ú	TypeErrorrŸ   r™  )rº   r9   r”   ÚgÚbrª   rª   r«   Ú	_colorstrv  s    


FzTurtleScreen._colorstrc                sx   ˆ   d¡sˆ S tˆ ƒdkr.‡ fdd„dD ƒ}n4tˆ ƒdkrV‡ fdd„ˆ dd … D ƒ}ntd	ˆ  ƒ‚t‡fd
d„|D ƒƒS )Nr•   r‰  c                s"   g | ]}t ˆ ||d  … dƒ‘qS )rÂ   r…  )r£   )r`  ra  )Úcstrrª   r«   rb  •  s    z'TurtleScreen._color.<locals>.<listcomp>)r¹   rž  rŒ  r  c                s   g | ]}d t ˆ | d ƒ ‘qS )r…  )r£   )r`  r+  )r°  rª   r«   rb  —  s    r¹   zbad colorstring: %sc             3   s   | ]}|ˆ j  d  V  qdS )r«  N)r™  )r`  rÉ   )rº   rª   r«   ú	<genexpr>š  s    z&TurtleScreen._color.<locals>.<genexpr>)rž   rd  rr  r´   )rº   r°  r4  rª   )r°  rº   r«   Ú_color‘  s    
zTurtleScreen._colorc             C   s8   |d kr| j S |dkr"t|ƒ| _ n|dkr4t|ƒ| _ d S )Ng      ð?r«  )r™  r¢   r£   )rº   Zcmoderª   rª   r«   r   œ  s    zTurtleScreen.colormodec             C   s(   x"| j D ]}| | j¡ | ¡  qW d S )N)r£  Ú_setmoder—  r`   )rº   r‡   rª   rª   r«   r`   ±  s    zTurtleScreen.resetc             C   s   | j S )N)r£  )rº   rª   rª   r«   r+   ½  s    zTurtleScreen.turtlesc             G   s4   |r|   |¡}nd }|  |¡}|d k	r0|  |¡}|S )N)r¯  r@  r²  )rº   r  r9   rª   rª   r«   r   Æ  s    

zTurtleScreen.bgcolorc             C   sB   |d kr| j S t|ƒ| _ d| _|d k	r0t|ƒ| _| j r>|  ¡  d S )Nr   )r¡  r£   r¢  r˜  r,   )rº   Únr   rª   rª   r«   r*   Ý  s    

zTurtleScreen.tracerc             C   s   |d kr| j S t|ƒ| _ d S )N)r˜  r£   )rº   r   rª   rª   r«   r   ù  s    zTurtleScreen.delayc             C   s<   t jsdt _t‚| jdkr8|  jd7  _|  j| j;  _d S )NTr   r¹   )r   Ú_RUNNINGr€   r¡  r¢  )rº   rª   rª   r«   Ú_incrementudc  s    
zTurtleScreen._incrementudcc             C   s@   | j }d| _ x |  ¡ D ]}| ¡  | ¡  qW || _ |  ¡  d S )NT)r¡  r+   Ú_update_dataÚ_drawturtler;  )rº   ÚtracingrX  rª   rª   r«   r,     s    zTurtleScreen.updatec             C   s   |   ¡ d S )Nr   )rn  )rº   rª   rª   r«   r.     s    zTurtleScreen.window_widthc             C   s   |   ¡ d S )Nr¹   )rn  )rº   rª   rª   r«   r-   %  s    zTurtleScreen.window_heightc             C   s   | j S )N)r'  )rº   rª   rª   r«   r   .  s    
zTurtleScreen.getcanvasc             C   s   t | j ¡ ƒS )N)Úsortedr•  rÛ   )rº   rª   rª   r«   r   :  s    	zTurtleScreen.getshapesr¹   c             C   s   |   |||¡ d S )N)rT  )rº   rK  r¥  rP  rª   rª   r«   rR   E  s    zTurtleScreen.onclickc             C   sF   |d kr || j kr6| j  |¡ n|| j kr6| j  |¡ |  ||¡ d S )N)rš  Úremover.  rU  )rº   rK  r¨   rª   rª   r«   r   V  s    

zTurtleScreen.onkeyc             C   sN   |d kr || j kr>| j  |¡ n|d k	r>|| j kr>| j  |¡ |  ||¡ d S )N)rš  r»  r.  rV  )rº   rK  r¨   rª   rª   r«   r   t  s    
zTurtleScreen.onkeypressc             C   s   |   ¡  d S )N)rW  )rº   ÚxdummyÚydummyrª   rª   r«   r   ”  s    
zTurtleScreen.listenr   c             C   s   |   ||¡ d S )N)rY  )rº   rK  rX  rª   rª   r«   r"      s    zTurtleScreen.ontimerc             C   sF   |d kr| j S || jkr(|  |¡| j|< |  | j| j| ¡ || _ d S )N)r   r–  r&  r^  rŸ  )rº   Zpicnamerª   rª   r«   r   µ  s    
zTurtleScreen.bgpicc             C   s   |   |||¡S )N)rm  )rº   rŠ   r‹   rë   rª   rª   r«   r%   Í  s    zTurtleScreen.screensize)N)N)N)NN)N)r¹   N)N)NN)r   )N)NNN)$rÎ   rÏ   rÐ   rµ  r°   rø   r5   r   r'   r#   r¯  r²  r   r`   r+   r   r*   r   r¶  r,   r.   r-   r   r   rR   r   r   r   r"   r   r%   r!   r$   r   r   r    rª   rª   rª   r«   r   ¼  sB   &
"'
#
	

			

 



c               @   sP  e Zd ZeddƒeddƒeddƒdœZdZdZdZefdd„Zd	d
„ Z	dAdd„Z
dd„ ZdBdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ ZdCd)d*„Zd+d,„ Zd-d.„ Zd/d0„ ZdDd1d2„ZdEd3d4„Zd5d6„ Zd7d8„ ZdFd9d:„Z dGd;d<„Z!dHd=d>„Z"dId?d@„Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS )JÚ
TNavigatorg      ð?g        )r   r§  r¦  r   r   r¹   c             C   sB   | j | _| j| _|| _d | _|  ¡  d | _|  |¡ t 	| ¡ d S )N)
ÚDEFAULT_ANGLEOFFSETÚ_angleOffsetÚDEFAULT_ANGLEORIENTÚ_angleOrientr—  Ú
undobufferr:   r³  r¾  r`   )rº   r   rª   rª   r«   rø   ò  s    
zTNavigator.__init__c             C   s   t ddƒ| _tj| j | _d S )Ng        )r   Ú	_positionr¾  ÚSTART_ORIENTATIONr—  Ú_orient)rº   rª   rª   r«   r`   ü  s    zTNavigator.resetNc             C   sL   |d kr| j S |dkrd S || _ |dkr6d| _d| _n| jd | _d| _d S )N)r   r¦  r§  )r   r§  r   r¹   g      @rÞ   )r—  rÀ  rÂ  Ú_fullcircle)rº   r   rª   rª   r«   r³    s    zTNavigator._setmodec             C   s0   || _ d| | _| jdkr"d| _n
|d | _d S )Nih  r   r   g      @)rÇ  Ú_degreesPerAUr—  rÀ  )rº   Ú
fullcirclerª   rª   r«   Ú_setDegreesPerAU  s
    

zTNavigator._setDegreesPerAUç     €v@c             C   s   |   |¡ d S )N)rÊ  )rº   rÉ  rª   rª   r«   r:     s    zTNavigator.degreesc             C   s   |   dtj ¡ d S )NrÂ   )rÊ  rÄ   rÅ   )rº   rª   rª   r«   r^   4  s    zTNavigator.radiansc             C   s   | j | j|  }|  |¡ d S )N)rÄ  rÆ  Ú_goto)rº   r;   Zenderª   rª   r«   Ú_goB  s    zTNavigator._goc             C   s   || j 9 }| j |¡| _d S )N)rÈ  rÆ  rË   )rº   rÈ   rª   rª   r«   Ú_rotateG  s    
zTNavigator._rotatec             C   s
   || _ d S )N)rÄ  )rº   Úendrª   rª   r«   rÌ  L  s    zTNavigator._gotoc             C   s   |   |¡ d S )N)rÍ  )rº   r;   rª   rª   r«   rC   P  s    zTNavigator.forwardc             C   s   |   | ¡ d S )N)rÍ  )rº   r;   rª   rª   r«   r/   g  s    zTNavigator.backc             C   s   |   | ¡ d S )N)rÎ  )rº   rÈ   rª   rª   r«   r_   {  s    zTNavigator.rightc             C   s   |   |¡ d S )N)rÎ  )rº   rÈ   rª   rª   r«   rP     s    zTNavigator.leftc             C   s   | j S )N)rÄ  )rº   rª   rª   r«   r[   ¥  s    zTNavigator.posc             C   s
   | j d S )Nr   )rÄ  )rº   rª   rª   r«   r|   ²  s    zTNavigator.xcorc             C   s
   | j d S )Nr¹   )rÄ  )rº   rª   rª   r«   r}   À  s    zTNavigator.ycorc             C   s,   |d kr|   t|Ž ¡ n|   t||ƒ¡ d S )N)rÌ  r   )rº   r·   r¸   rª   rª   r«   rI   Ï  s    zTNavigator.gotoc             C   s   |   dd¡ |  d¡ d S )Nr   )rI   rd   )rº   rª   rª   r«   rL   ò  s    zTNavigator.homec             C   s   |   t|| jd ƒ¡ d S )Nr¹   )rÌ  r   rÄ  )rº   r·   rª   rª   r«   ri      s    zTNavigator.setxc             C   s   |   t| jd |ƒ¡ d S )Nr   )rÌ  r   rÄ  )rº   r¸   rª   rª   r«   rj     s    zTNavigator.setyc             C   sT   |d k	rt ||ƒ}t|t ƒr"|}n$t|tƒr6t |Ž }nt|tƒrF|j}t|| j ƒS )N)r   r½   r´   r¾  rÄ  Úabs)rº   r·   r¸   r[   rª   rª   r«   r;   $  s    




zTNavigator.distancec             C   s”   |d k	rt ||ƒ}t|t ƒr"|}n$t|tƒr6t |Ž }nt|tƒrF|j}|| j \}}tt ||¡d tj dƒd }|| j	 }| j
| j|  | j S )Ng     €f@r‚   g     €v@)r   r½   r´   r¾  rÄ  rª  rÄ   Úatan2rÅ   rÈ  rÀ  rÂ  rÇ  )rº   r·   r¸   r[   Úresultrª   rª   r«   ru   D  s    




 
zTNavigator.towardsc             C   sJ   | j \}}tt ||¡d tj dƒd }|| j }| j| j|  | j S )Ng     €f@r‚   g     €v@)	rÆ  rª  rÄ   rÑ  rÅ   rÈ  rÀ  rÂ  rÇ  )rº   r·   r¸   rÒ  rª   rª   r«   rJ   g  s    

 
zTNavigator.headingc             C   s>   ||   ¡  | j }| j}||d  | |d  }|  |¡ d S )Ng       @)rJ   rÂ  rÇ  rÎ  )rº   Zto_anglerÈ   Zfullrª   rª   r«   rd   v  s    zTNavigator.setheadingc             C   st  | j r| j  dg¡ d| j _|  ¡ }|d kr2| j}|d krjt|ƒ| j }dttdt|ƒd  dƒ| ƒ }d| | }d| }d	| t 	|tj
 d
 | j ¡ }|dk r¾| | |   }}}|  ¡ }	|  ¡ }
|dkrä|  dd¡ n
|  d¡ |  |¡ x:t|ƒD ].}|  |¡ |  |¡ |  d¡ |  |¡ qW |  | ¡ |dkrV|  |	|
¡ |  |¡ | j rpd| j _d S )NÚseqTr¹   é   g      @g     €M@g      ð?g      à?g       @g     €f@r   F)rÃ  r€  r  rp   rÇ  rÐ  r£   ÚminrÄ   rÇ   rÅ   rÈ  Ú_tracerr=  rÎ  rc  rÍ  )rº   ÚradiusZextentÚstepsrp   Zfracr*  Zw2ÚlÚtrZdlra  rª   rª   r«   r4   ’  s>    ""






zTNavigator.circlec             C   s   d S )Nrª   )rº   rÊ   rª   rª   r«   rp   Ó  s    zTNavigator.speedc             C   s   d S )Nrª   )rº   Úar®  rª   rª   r«   rÖ  Õ  s    zTNavigator._tracerc             C   s   d S )Nrª   )rº   r´  rª   rª   r«   r=  ×  s    zTNavigator._delay)N)rË  )N)N)N)NN)r   )NN)N)-rÎ   rÏ   rÐ   r   rÅ  ZDEFAULT_MODEr¿  rÁ  rø   r`   r³  rÊ  r:   r^   rÍ  rÎ  rÌ  rC   r/   r_   rP   r[   r|   r}   rI   rL   ri   rj   r;   ru   rJ   rd   r4   rp   rÖ  r=  r@   r3   r0   rb   rQ   r\   re   rf   rc   rª   rª   rª   r«   r¾  æ  sV   

	

#
 
#
A


r¾  c               @   sâ   e Zd Zed fdd„Zed ed fdd„Zd-d	d
„Zd.dd„Zdd„ Zdd„ Z	dd„ Z
d/dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd0d!d"„Zd1d$d%„Zd2d'd(„Zd)d*„ Zd+d,„ ZeZeZeZe	Ze	ZeZeZdS )3ÚTPenra   c             C   s   || _ d | _t | ¡ d S )N)Ú_resizemoderÃ  rÜ  Ú_reset)rº   ra   rª   rª   r«   rø   é  s    zTPen.__init__rW   rA   c             C   sF   d| _ d| _|| _|| _d| _d| _d| _d| _d| _d| _	d| _
d S )Nr¹   Trž  )g      ð?g      ð?g        )g      ð?g        g        g      ð?)Ú_pensizeÚ_shownÚ	_pencolorÚ
_fillcolorÚ_drawingÚ_speedÚ_stretchfactorÚ_shearfactorÚ_tiltÚ_shapetrafoÚ_outlinewidth)rº   rW   rA   rª   rª   r«   rÞ  î  s    zTPen._resetNc             C   s.   |d kr| j S | ¡ }|dkr*| j|d d S )N)ÚautoÚuserr…   )ra   )rÝ  ru  rV   )rº   Zrmoderª   rª   r«   ra   ü  s
    zTPen.resizemodec             C   s   |d kr| j S | j|d d S )N)rY   )rß  rV   )rº   rz   rª   rª   r«   rY     s    zTPen.pensizec             C   s   | j s
d S | jdd d S )NF)rX   )rã  rV   )rº   rª   rª   r«   rZ   /  s    
z
TPen.penupc             C   s   | j r
d S | jdd d S )NT)rX   )rã  rV   )rº   rª   rª   r«   rX   =  s    
zTPen.pendownc             C   s   | j S )N)rã  )rº   rª   rª   r«   rN   K  s    zTPen.isdownc             C   sj   ddddddœ}|d kr| j S ||kr0|| }n*d|  k rDdk rVn ntt|ƒƒ}nd}| j|d	 d S )
Nr   r‚   r  rž  r¹   )ZfastestZfastÚnormalZslowZslowestg      à?g      %@)rp   )rä  r£   rª  rV   )rº   rp   Zspeedsrª   rª   r«   rp   Z  s    
z
TPen.speedc             G   s„   |rht |ƒ}|dkr"|d  }}n"|dkr4|\}}n|dkrD| }}|  |¡}|  |¡}| j||d n|  | j¡|  | j¡fS d S )Nr¹   r   rÂ   rž  )rW   rA   )rd  r¯  rV   r²  rá  râ  )rº   r  rÙ  ZpcolorZfcolorrª   rª   r«   r9   €  s     


z
TPen.colorc             G   s:   |r*|   |¡}|| jkrd S | j|d n|  | j¡S d S )N)rW   )r¯  rá  rV   r²  )rº   r  r9   rª   rª   r«   rW   ®  s    

zTPen.pencolorc             G   s:   |r*|   |¡}|| jkrd S | j|d n|  | j¡S d S )N)rA   )r¯  râ  rV   r²  )rº   r  r9   rª   rª   r«   rA   Ó  s    

zTPen.fillcolorc             C   s   | j dd d S )NT)Úshown)rV   )rº   rª   rª   r«   ro   ÷  s    zTPen.showturtlec             C   s   | j dd d S )NF)rí  )rV   )rº   rª   rª   r«   rK   	  s    zTPen.hideturtlec             C   s   | j S )N)rà  )rº   rª   rª   r«   rO   	  s    
zTPen.isvisiblec             K   s¶  | j | j| j| j| j| j| j| j| j| j	| j
dœ}|s>|s>|S t|tƒrN|}ni }| |¡ i }x|D ]}|| ||< qfW | jr| j d|f¡ d}d|kr®| j|d kr®d}d|krêt|d tƒrØ|  |d f¡|d< | j|d krêd}d|kr| j|d krd}|r|  ¡  d|kr*|d | _d|kr>|d | _d|krR|d | _d|krŠt|d tƒr€|  |d f¡|d< |d | _d	|krž|d	 | _d
|kr²|d
 | _d|krâ|d }t|ttfƒrÜ||f}|| _d|krö|d | _d|kr
|d | _	d|kr|d | _ d|kr2|d | _
d|ksPd|ksPd|krª| j\}	}
| j}t | j
¡t | j
¡ }}|	| |
|| |  |	 | |
|||   f| _|  ¡  d S )N)rí  rX   rW   rA   rY   rp   ra   Ústretchfactorrn   r,  rs   rV   FrX   TrW   rY   rA   rp   ra   rî  rn   r,  rí  rs   )rà  rã  rá  râ  rß  rä  rÝ  rå  ræ  ré  rç  r½   Údictr,   rÃ  r€  r´   r¯  Ú_newLiner£   r¢   rÄ   rÇ   rÆ   rè  r;  )rº   rV   ZpendictZ_pdÚpZ_p_bufr¨   ZnewLineZsfZscxZscyZshfÚsaÚcarª   rª   r«   rV    	  sŒ    /


























zTPen.penTc             C   s   d S )Nrª   )rº   ÚusePosrª   rª   r«   rð  Ÿ	  s    zTPen._newLineFc             C   s   d S )Nrª   )rº   r‚  Zforcedrª   rª   r«   r;  ¡	  s    zTPen._updatec             C   s   d S )Nrª   )rº   r  rª   rª   r«   r²  £	  s    zTPen._colorc             C   s   d S )Nrª   )rº   r  rª   rª   r«   r¯  ¥	  s    zTPen._colorstr)N)N)N)N)T)TF)rÎ   rÏ   rÐ   r°   rø   rÞ  ra   rY   rZ   rX   rN   rp   r9   rW   rA   ro   rK   rO   rV   rð  r;  r²  r¯  rz   ry   r]   rU   r=   rq   rM   rª   rª   rª   r«   rÜ  å  s6   


&.%$


rÜ  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_TurtleImagec             C   s   || _ d | _|  |¡ d S )N)rˆ   r_  Ú	_setshape)rº   rˆ   Ú
shapeIndexrª   rª   r«   rø   µ	  s    z_TurtleImage.__init__c                s  | j ‰ || _| jd  kr*ˆ j| jkr2n nd S | jd  krPˆ j| jkrXn nd S | jdkrpˆ  | j¡ n$| jdkr”x| jD ]}ˆ  |¡ q‚W ˆ j| j| _| jdkr¸ˆ  ¡ | _nF| jdkrØˆ  ˆ jd j¡| _n&| jdkrþ‡ fdd„ˆ j| jD ƒ| _d S )Nrs  rZ  )rZ  rs  rt  r#  c                s   g | ]}ˆ   ¡ ‘qS rª   )r-  )r`  r9  )rˆ   rª   r«   rb  Ì	  s    z*_TurtleImage._setshape.<locals>.<listcomp>)	rˆ   r÷  r_  r•  r:  Ú_itemr-  r[  rw  )rº   r÷  r9  rª   )rˆ   r«   rö  º	  s&    ""





z_TurtleImage._setshapeN)rÎ   rÏ   rÐ   rø   rö  rª   rª   rª   r«   rõ  ±	  s   rõ  c               @   sÔ  e Zd Zg Zded ed ed fdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdldd„Zdd„ Zdd„ Zdd„ Zdd„ Zdmdd „Zdnd!d"„Zdod#d$„Zd%d&„ Zdpd'd(„Zd)d*„ Zdqd+d,„Zd-d.„ Zd/d0„ Zdrd2d3„Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zdsd<d=„Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dtdEdF„Z$dGdH„ Z%dIdJ„ Z&dKdL„ Z'dudMdN„Z(dOdP„ Z)dvdSdT„Z*dUdV„ Z+dWdX„ Z,dYdZ„ Z-d[d\„ Z.d]d^„ Z/e/Z0dwd_d`„Z1dxdbdc„Z2dyddde„Z3dzdfdg„Z4dhdi„ Z5djdk„ Z6eZ7dS ){r
   Nrk   rŽ   r   c             C   s6  t |tƒr|| _n~t |tƒr:|tjkr2tj |¡ || _nVt |ttfƒr„xFtjD ]}|j	|krP|| _P qPW t|ƒ| _tj | j¡ nt
d| ƒ‚| j}t | | ¡ ¡ t | ¡ |j | ¡ | ¡ | _t||ƒ| _d | _d| _d  | _| _|| _d| _| ¡ | _| jg| _| jg| _g | _|| _t |ƒ| _!|  "¡  d S )Nzbad canvas argument %sF)#r½   Ú_Screenrˆ   r   r
   Úscreensr.  r   rú   r'  rr  r¾  rø   r   rÜ  r£  r6  ÚdrawingLineItemrõ  r‡   Ú_polyÚ_creatingPolyÚ	_fillitemÚ	_fillpathrà  Ú_hidden_from_screenÚcurrentLineItemrÄ  ÚcurrentLinerÖ   Ú
stampItemsÚ_undobuffersizer{  rÃ  r;  )rº   Zcanvasrk   rŽ   r   rˆ   rª   rª   r«   rø   ×	  s@    










zRawTurtle.__init__c             C   s0   t  | ¡ t | ¡ |  ¡  |  ¡  |  ¡  d S )N)r¾  r`   rÜ  rÞ  Ú_clearr¸  r;  )rº   rª   rª   r«   r`   ÿ	  s
    

zRawTurtle.resetc             C   s&   |d ks|dkrd | _ n
t|ƒ| _ d S )Nr   )rÃ  r{  )rº   Úsizerª   rª   r«   rh   
  s    zRawTurtle.setundobufferc             C   s   | j d krdS | j  ¡ S )Nr   )rÃ  rƒ  )rº   rª   rª   r«   rx   +
  s    	
zRawTurtle.undobufferentriesc             C   sp   d  | _ | _x| jD ]}| j |¡ qW | j ¡ | _g | _| jrN| j 	| j
¡ | jg| _|  ¡  |  | j¡ d S )N)rþ  rÿ  rÖ   rˆ   r:  r6  r  r  rã  r.  rÄ  r7   rh   r  )rº   r9  rª   rª   r«   r  8
  s    
zRawTurtle._clearc             C   s   |   ¡  |  ¡  d S )N)r  r;  )rº   rª   rª   r«   r5   F
  s    zRawTurtle.clearc             C   sF   | j  ¡  | j jdkrd S t| jƒdkrB| j  | j| j| j| j¡ d S )Nr   r¹   )	rˆ   r¶  r¢  rd  r  r7  r  rá  rß  )rº   rª   rª   r«   r·  U
  s    
zRawTurtle._update_datac             C   s|   | j }|jdkrd S |jdkrD|  ¡  |  ¡  | ¡  | |j¡ n4|  ¡  |jdkrxx| ¡ D ]}| ¡  q`W | ¡  d S )Nr   r¹   )	rˆ   r¡  r·  r¸  r;  r=  r˜  r¢  r+   )rº   rˆ   rX  rª   rª   r«   r;  ]
  s    


zRawTurtle._updatec             C   s   | j  ||¡S )N)rˆ   r*   )rº   Úflagr   rª   rª   r«   rÖ  o
  s    zRawTurtle._tracerc             C   s   | j  |¡S )N)rˆ   r²  )rº   r  rª   rª   r«   r²  „
  s    zRawTurtle._colorc             C   s   | j  |¡S )N)rˆ   r¯  )rº   r  rª   rª   r«   r¯  ‡
  s    zRawTurtle._colorstrc          	   C   sÐ   t |tƒr|S y|\}}}W n( ttfk
rD   tdt|ƒ ƒ‚Y nX | jjdkrldd„ |||fD ƒ\}}}d|  kr€dkr²n n.d|  kr˜dkr²n nd|  kr°dksÂn tdt|ƒ ƒ‚d|||f S )	Nzbad color arguments: %sg      ð?c             S   s   g | ]}t d | ƒ‘qS )g     ào@)rª  )r`  r·   rª   rª   r«   rb  ”
  s    z!RawTurtle._cc.<locals>.<listcomp>r   r«  zbad color sequence: %sz#%02x%02x%02x)r½   rá   r¬  rŸ   rr  rˆ   r™  )rº   r  r”   r­  r®  rª   rª   r«   Ú_ccŠ
  s    
FzRawTurtle._ccc                sà   | j ‰ |  | j¡ | j}d | _ d | _t| ƒ}ˆ | _ || _ˆ |_ tˆ | jjƒ|_ˆ j |¡ ˆ j	| jj j
}|dkr€ˆ  ¡ |j_nJ|dkr ˆ  ˆ j	d j¡|j_n*|dkrÊ‡ fdd„ˆ j	| jj jD ƒ|j_ˆ  ¡ |_| ¡  |S )Nrs  rZ  r#  rt  c                s   g | ]}ˆ   ¡ ‘qS rª   )r-  )r`  r9  )rˆ   rª   r«   rb  »
  s    z#RawTurtle.clone.<locals>.<listcomp>)rˆ   rð  rã  r‡   r   rõ  r÷  r£  r.  r•  r_  r-  rø  r[  rw  r6  r  r;  )rº   r‡   ÚqÚttyperª   )rˆ   r«   r8   ™
  s,    

zRawTurtle.clonec             C   sB   |d kr| j jS || j ¡ kr*td| ƒ‚| j  |¡ |  ¡  d S )NzThere is no shape named %s)r‡   r÷  rˆ   r   rr  rö  r;  )rº   r©  rª   rª   r«   rk   Á
  s    zRawTurtle.shapec             C   s´   ||  kr|  krd kr8n n| j \}}||| jfS |dksH|dkrPtdƒ‚|d k	rt|d krj||f}q’||f}n|d k	rŒ| j d |f}n| j }|d kr | j}| jd||d d S )Nr   z(stretch_wid/stretch_len must not be zerorë  )ra   rî  r,  )rå  ré  rr  rV   )rº   Zstretch_widZstretch_lenr,  rî  rª   rª   r«   rl   Ü
  s     "


zRawTurtle.shapesizec             C   s    |d kr| j S | jd|d d S )Nrë  )ra   rn   )ræ  rV   )rº   Zshearrª   rª   r«   rn     s    zRawTurtle.shearfactorc             C   s<   | | j  | j }|tj d dtj  }| jd|d d S )Ng     €f@rÂ   rë  )ra   rs   )rÈ  rÂ  rÄ   rÅ   rV   )rº   rÈ   rs   rª   rª   r«   rg     s    zRawTurtle.settiltanglec             C   s>   |d kr0| j  dtj  | j }|| j | j S |  |¡ d S )Ng     €f@)rç  rÄ   rÅ   rÂ  rÈ  rÇ  rg   )rº   rÈ   rs   rª   rª   r«   rt   3  s    zRawTurtle.tiltanglec             C   s   |   ||  ¡  ¡ d S )N)rg   rt   )rº   rÈ   rª   rª   r«   rs   M  s    zRawTurtle.tiltc             C   s6  ||  kr(|  kr(|  kr(d kr2n n| j S | j \}}}}|d k	rL|}|d k	rX|}|d k	rd|}|d k	rp|}|| ||  dkrŒtdƒ‚||||f| _ t | |¡dtj  }	t |	¡t |	¡ }
}|| |
|  || |
|  |
| ||  |
| ||  f\}}}}||f| _|| | _|	| _	| j
dd d S )Nr   z0Bad shape transform matrix: must not be singularrÂ   rë  )ra   )rè  rr  rÄ   rÑ  rÅ   rÇ   rÆ   rå  ræ  rç  rV   )rº   Út11Út12Út21Út22Zm11Zm12Zm21Zm22Zalfarò  ró  Za11Za12Za21Za22rª   rª   r«   rm   `  s,    ,    (

zRawTurtle.shapetransformc                s^   | j ‰| j\‰‰| j\‰ ‰tˆ ˆˆj ˆj ƒ}dt|ƒ | \‰ ‰‡ ‡‡‡‡fdd„|D ƒS )Ng      ð?c                sF   g | ]>\}}ˆˆ| ˆ |  ˆj   ˆˆ  | ˆ|  ˆj  f‘qS rª   )r(  r)  )r`  r·   r¸   )Úe0Úe1Úp0Úp1rˆ   rª   r«   rb  ‘  s   z(RawTurtle._polytrafo.<locals>.<listcomp>)rˆ   rÄ  rÆ  r   r)  r(  rÐ  )rº   ry  Úerª   )r  r  r  r  rˆ   r«   Ú
_polytrafoˆ  s    

zRawTurtle._polytrafoc             C   s2   | j j| jj }|jdkr.|  |j|jdk¡S d S )Nrs  rt  )rˆ   r•  r‡   r÷  r_  Ú_getshapepolyrw  )rº   rk   rª   rª   r«   rG   ”  s    
zRawTurtle.get_shapepolyFc                sx   | j dks|r| j\‰ ‰‰‰n>| j dkrNtd| jd ƒ}|dd|f\‰ ‰‰‰n| j dkr\|S t‡ ‡‡‡fdd„|D ƒƒS )	Nrë  rê  r¹   g      @r   r…   c             3   s2   | ]*\}}ˆ | ˆ|  ˆ| ˆ|  fV  qd S )Nrª   )r`  r·   r¸   )r  r  r  r  rª   r«   r±  °  s    z*RawTurtle._getshapepoly.<locals>.<genexpr>)rÝ  rè  Úmaxrß  r´   )rº   rs  rt  rÙ  rª   )r  r  r  r  r«   r  ¥  s    

zRawTurtle._getshapepolyc          	   C   s®  | j }|j| jj }|j}| jj}| jr.|jdkr.|jdkr.d| _	|j
}|dkr´| jdkrfd}n| jdkrx| j}n| j}|  |  |¡¡}| j| j }}|j|||||dd nx|d	krÎ| || j|¡ n^|d
krªxÐt||ƒD ]D\}	\}
}}|  |  |
d¡¡}
|j|	|
|  |¡|  |¡| jdd qäW n|| j	r:d S |dkrV| |ddd¡ nN|d	krz| || j|jd j
¡ n*|d
kr¤x|D ]}	| |	ddd¡ qŠW d| _	d S )Nr   Frs  r…   r¹   rê  T)r  r,  rz   r3  rZ  rt  ))r   r   )r   r   )r   r   r­   r#  )rˆ   r•  r‡   r÷  r_  rø  rà  r¢  r¡  r   rw  rÝ  rß  ré  r  r  râ  rá  r5  r]  rÄ  Úzipr  )rº   rˆ   rk   r
  ZtitemÚtshaper*  ÚfcÚocr9  ry  rª   rª   r«   r¸  ²  sF     
 
 





zRawTurtle._drawturtlec          	   C   s\  | j }|j| jj }|j}|j}|dkrŽ| ¡ }| jdkr@d}n| jdkrR| j}n| j	}|  
|  |¡¡}| j| j }}|j|||||dd n®|dkr²| d¡}| || j|¡ nŠ|d	kr<g }x|D ]}	| ¡ }
| |
¡ qÆW t|ƒ}xRt||ƒD ]D\}
\}}}|  
|  |d¡¡}|j|
||  |¡|  |¡| j	dd qôW | j |¡ | j d
|f¡ |S )Nrs  r…   r¹   rê  T)r  r,  rz   r3  rZ  r­   rt  rr   )rˆ   r•  r‡   r÷  r_  rw  r-  rÝ  rß  ré  r  r  râ  rá  r5  r[  r]  rÄ  r.  r´   r  r  r  rÃ  r€  )rº   rˆ   rk   r
  r  Ústitemr*  r  r  Zelementr9  ry  rª   rª   r«   rr   Ú  s>    
 
 


zRawTurtle.stampc             C   s¸   || j krHt|tƒr0x&|D ]}| j |¡ qW n| j |¡ | j  |¡ d|f}| j}||jkrdd S |j |¡}|j |¡ ||j	kr˜|j	d |j
 |_	|j |j	d |j
 d g¡ d S )Nrr   r¹   )r  r½   r´   rˆ   r:  r»  rÃ  r}  Úindexr~  r|  Úinsert)rº   ÚstampidZsubitemr9  Úbufr  rª   rª   r«   Ú_clearstamp  s    




zRawTurtle._clearstampc             C   s   |   |¡ |  ¡  d S )N)r   r;  )rº   r  rª   rª   r«   r6     s    
zRawTurtle.clearstampc             C   sb   |d kr| j d d … }n&|dkr0| j d |… }n| j |d … }x|D ]}|  |¡ qDW |  ¡  d S )Nr   )r  r   r;  )rº   r´  ZtoDeleter9  rª   rª   r«   r7   ,  s    
zRawTurtle.clearstampsc          
   C   sÊ  | j | j| jt| jtƒf}| j}d| j||| j| j	d d … | 
| j¡| jd d … ff}| jrh| j |¡ | j}| jr^|jdkr^|| }|d |j d |d |j d  }dt|d dd| j  | j  ƒ }|d|  }	x`td|ƒD ]R}
|
dkrüd	}nd
}||	|
  | _| j r4| | j|| jf| j| j|¡ |  ¡  qêW | j r^|j| jdd| jd | j rr| j	 |¡ t| jtƒrŒ| j |¡ || _| jr¦| j |¡ t| j	ƒdkr¾|  ¡  |  ¡  d S )NÚgor¹   r   rÂ   g      à?rž  gš™™™™™ñ?g      ð?TF))r   r   )r   r   r­   )r  rz   é*   )rã  rá  rß  r½   rÿ  rÑ   rˆ   rÄ  r  r  rf  rÖ   rÃ  r€  rä  r¡  r(  r)  r£   rc  r7  rû  r;  r.  rý  rü  rd  rð  )rº   rÏ  Úgo_modesrˆ   Z
undo_entryÚstartÚdiffÚdiffsqÚnhopsÚdeltar´  r3  rª   rª   r«   rÌ  H  sR    

$$
zRawTurtle._gotoc                s$  |\}}}}|\}}}}	|\}
}}‰ | j ‰t| j| ƒdkrDtdƒ |
| _|| _|ddgkrbd}n|}ˆj|
|||d ‡ ‡fdd„| jD ƒ}x"|D ]}ˆ |¡ | j 	|¡ q”W |}| j
r ˆjdkr || }|d	 ˆj d
 |d ˆj d
  }dt|d dd| j
  | j
  ƒ }|d|  }x^td|ƒD ]P}|dkrFd}nd}|||  | _|rxˆ | j|| jf|||¡ |  ¡  q2W |r ˆj| jdd|d || _| jràt| jƒd	krÈ| j ¡  | jg kràd| _d | _|	r| jg krd | _tdƒ n| jd k	r| j ¡  |  ¡  d S )Ng      à?z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!)r   r   r­   )r  rz   c                s&   g | ]}|ˆ krˆ  |¡d kr|‘qS )r§   )r_  )r`  ra  )rÖ   rˆ   rª   r«   rb    s    
z'RawTurtle._undogoto.<locals>.<listcomp>r¹   r   rÂ   rž  gš™™™™™ñ?g      ð?TF))r   r   )r   r   zUnwahrscheinlich in _undogoto!)rˆ   rÐ  rÄ  r    r  r  r7  rÖ   r:  r»  rä  r¡  r(  r)  r£   rc  rû  r;  rý  rd  rü  r  rÿ  )rº   ÚentryÚoldÚnewr#  ZcoodataZdrawingZpcZpsrB   ZcLIZcLre  ZusepcZtodeletera  r$  r%  r&  r'  r(  r´  r3  rª   )rÖ   rˆ   r«   Ú	_undogoto}  sb    

$$






zRawTurtle._undogotoc             C   s®   | j r| j  d|| jf¡ || j9 }| j |¡}| jj}|dkrœ| jdkrœd| j }dtt	|ƒ| ƒ }d| | }x&t
|ƒD ]}| j |¡| _|  ¡  q~W || _|  ¡  d S )NÚrotr¹   r   g      @g      ð?)rÃ  r€  rÈ  rÆ  rË   rˆ   r¡  rä  r£   rÐ  rc  r;  )rº   rÈ   Z	neworientr¹  ZanglevelrØ  r(  rÝ   rª   rª   r«   rÎ  ¾  s    

zRawTurtle._rotateTc             C   sn   t | jƒdkrD| j | j| j| j| j¡ | j ¡ | _| j 	| j¡ n| jj| jdd g | _|rj| j
g| _d S )Nr¹   T)r3  )rd  r  rˆ   r7  r  rá  rß  r6  rÖ   r.  rÄ  )rº   rô  rª   rª   r«   rð  Ð  s    zRawTurtle._newLinec             C   s   t | jtƒS )N)r½   rÿ  rÑ   )rº   rª   rª   r«   rB   à  s    zRawTurtle.fillingc             C   sX   |   ¡ s"| j ¡ | _| j | j¡ | jg| _|  ¡  | j	rL| j	 
d| jf¡ |  ¡  d S )NÚ	beginfill)rB   rˆ   r-  rþ  rÖ   r.  rÄ  rÿ  rð  rÃ  r€  r;  )rº   rª   rª   r«   r1   î  s    
zRawTurtle.begin_fillc             C   s^   |   ¡ rZt| jƒdkrF| jj| j| j| jd | jrF| j d| jf¡ d  | _| _|  	¡  d S )NrÂ   )r  Údofill)
rB   rd  rÿ  rˆ   r5  rþ  râ  rÃ  r€  r;  )rº   rª   rª   r«   r>     s    
zRawTurtle.end_fillc          	   G   s8  |sNt |ttfƒr0|  |¡}| jt| jdƒ }qr| j}|sr| jt| jdƒ }n$|d krh| jt| jdƒ }|  |¡}t| jdƒr´| j 	| j
||¡}| j |¡ | jr²| j d|f¡ n€|  ¡ }| jrØ| j dg¡ d| j_z>|  ¡ dkrî|  ¡  |  ¡  |  |¡ |  |¡ |  d¡ W d |  |¡ X | jr4d| j_d S )	Nr  Ú_dotr<   rÓ  Trê  r   F)r½   rá   r´   r¯  rß  r  rá  Úhasattrrˆ   r0  rÄ  rÖ   r.  rÃ  r€  rV   r  ra   rM   rX   rY   rW   rC   )rº   r  r9   r9  rV   rª   rª   r«   r<     s:    



zRawTurtle.dotc             C   sB   | j  | j|||| j¡\}}| j |¡ | jr>| j d|f¡ |S )NÚwri)rˆ   rH  rÄ  rá  rÖ   r.  rÃ  r€  )rº   rF  rG  rE  r9  rÏ  rª   rª   r«   rH  G  s    zRawTurtle._writerP   ©ÚArialr‹  rì  c             C   s`   | j r| j  dg¡ d| j _|  t|ƒ| ¡ |¡}|rN|  ¡ \}}|  ||¡ | j r\d| j _d S )NrÓ  TF)rÃ  r€  r  rH  rá   ru  r[   re   )rº   ÚargZmoverG  rE  rÏ  r·   r¸   rª   rª   r«   r{   Q  s    zRawTurtle.writec             C   s   | j g| _d| _d S )NT)rÄ  rü  rý  )rº   rª   rª   r«   r2   n  s    
zRawTurtle.begin_polyc             C   s
   d| _ d S )NF)rý  )rº   rª   rª   r«   r?   |  s    zRawTurtle.end_polyc             C   s   | j d k	rt| j ƒS d S )N)rü  r´   )rº   rª   rª   r«   rD   ‰  s    

zRawTurtle.get_polyc             C   s   | j S )N)rˆ   )rº   rª   rª   r«   rF   –  s    zRawTurtle.getscreenc             C   s   | S )Nrª   )rº   rª   rª   r«   rH   ¦  s    zRawTurtle.getturtlec             C   s   | j  |¡S )N)rˆ   r   )rº   r   rª   rª   r«   r=  ¾  s    zRawTurtle._delayr¹   c             C   s"   | j  | jj|||¡ |  ¡  d S )N)rˆ   rQ  r‡   rø  r;  )rº   rK  r¥  rP  rª   rª   r«   rR   Ã  s    zRawTurtle.onclickc             C   s"   | j  | jj|||¡ |  ¡  d S )N)rˆ   rR  r‡   rø  r;  )rº   rK  r¥  rP  rª   rª   r«   rT   Ø  s    zRawTurtle.onreleasec             C   s   | j  | jj|||¡ d S )N)rˆ   rS  r‡   rø  )rº   rK  r¥  rP  rª   rª   r«   rS   ñ  s    zRawTurtle.ondragc             C   s,  | j d krd S |dkr@|\}}|  | | | j ¡ | j  ¡ }nè|dkr\|d }|  |¡ nÌ|dkrp|  |¡ n¸|dkrš|d }| j |¡ | j 	|¡ nŽ|dkrÀ|d }| jj
|dddd	 nh|d
kr|d }d  | _| _|| jkr(| j |¡ | j 	|¡ n$|dkr(t | |d ¡ | j  ¡  d S )Nr-  rr   r   r!  )r2  r<   r/  ))r   r   )r   r   )r   r   r­   )r  r,  r.  rV   )rÃ  rÎ  rÈ  r  r6   r,  rˆ   r:  rÖ   r»  r5  rþ  rÿ  rÜ  rV   )rº   Úactionrx  rÈ   ZdegPAUZdummyr  r9  rª   rª   r«   Ú_undo  s8    



zRawTurtle._undoc             C   sp   | j d krd S | j  ¡ }|d }|dd … }|dkr`x6|r\| ¡ }|  |d |dd … ¡ q6W n|  ||¡ d S )Nr   r¹   rÓ  )rÃ  r  r7  )rº   r9  r6  rx  rª   rª   r«   rw   &  s    

zRawTurtle.undo)NN)N)NNN)N)N)NNNN)F)N)T)N)FrP   r3  )N)r¹   N)r¹   N)r¹   N)8rÎ   rÏ   rÐ   rú  r°   rø   r`   rh   rx   r  r5   r·  r;  rÖ  r²  r¯  r  r8   rk   rl   rn   rg   rt   rs   rm   r  rG   r  r¸  rr   r   r6   r7   rÌ  r,  rÎ  rð  rB   r1   r>   r<   rH  r{   r2   r?   rD   rF   rH   rE   r=  rR   rT   rS   r7  rw   rv   rª   rª   rª   r«   r
   Ð	  sn   %
(

(


(
(-
5A

0





 c               C   s   t jd krtƒ t _t jS )N)r   Ú_screenrù  rª   rª   rª   r«   r	   I  s    
c               @   sf   e Zd ZdZdZed Zdd„ Zed ed ed ed fd	d
„Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )rù  Nr)   c             C   s®   t jd kr4tƒ  t _| _| j t j¡ | j | j¡ t jd krªtd }td }td }td }td }td }| j 	||||¡ | j 
¡ t _t | t j¡ |  ||||¡ d S )Nrz   r‰   rŠ   r‹   rŒ   r   )rù  Ú_rootr  r)   Ú_titler  Ú_destroyrû   r°   r  r  r   rø   r&   )rº   rz   r‰   rŠ   r‹   rŒ   r   rª   rª   r«   rø   W  s    

z_Screen.__init__rz   r‰   rŒ   r   c             C   s¾   t | jdƒsd S | j ¡ }| j ¡ }t|tƒrNd|  krBdkrNn n|| }|d krb|| d }t|tƒrŒd|  kr€dkrŒn n|| }|d kr || d }| j ||||¡ |  ¡  d S )Nr  r   r¹   rÂ   )r1  r9  r  r   r½   r¢   r  r,   )rº   rz   r‰   r  r  rA  Úshrª   rª   r«   r&   m  s    

""z_Screen.setupc             C   s    t jd k	rt j |¡ |t _d S )N)rù  r9  r)   r:  )rº   Ztitlestringrª   rª   r«   r)   •  s    
z_Screen.titlec             C   s:   | j }|tj kr(d t_d t_d t_ d t_dt_| ¡  d S )NF)	r9  rù  r   r¤  r8  rû   r   rµ  r  )rº   Úrootrª   rª   r«   r;  ¦  s    
z_Screen._destroyc             C   s   |   ¡  d S )N)r;  )rº   rª   rª   r«   r   °  s    z_Screen.byec                sN   ‡ fdd„}ˆ   |¡ td r"d S y
tƒ  W n tk
rH   tdƒ Y nX d S )Nc                s   ˆ   ¡  d S )N)r   )r·   r¸   )rº   rª   r«   ÚexitGracefullyË  s    z+_Screen.exitonclick.<locals>.exitGracefullyr“   r   )rR   r°   r   ÚAttributeErrorÚexit)rº   r>  rª   )rº   r«   r   ¸  s    

z_Screen.exitonclick)rÎ   rÏ   rÐ   r9  rû   r°   r:  rø   r&   r)   r;  r   r   rª   rª   rª   r«   rù  Q  s   '
rù  c               @   s0   e Zd ZdZdZed ed ed fdd„ZdS )r   Nrk   rŽ   r   c             C   s,   t jd krtƒ t _tj| t j|||d d S )N)rk   rŽ   r   )r   r8  r	   r
   rø   )rº   rk   rŽ   r   rª   rª   r«   rø   ß  s    

zTurtle.__init__)rÎ   rÏ   rÐ   r¤  r8  r°   rø   rª   rª   rª   r«   r   Ö  s
   Úturtle_docstringdictc          	   C   sþ   i }x"t D ]}d| }t|ƒj||< q
W x"tD ]}d| }t|ƒj||< q.W td|  dƒš}tdd„ |D ƒƒ}| d¡ x8|d d… D ](}| d	t|ƒ ¡ | d
||  ¡ q†W |d }| d	t|ƒ ¡ | d||  ¡ | d¡ | ¡  W d Q R X d S )Nz_Screen.zTurtle.z%s.pyr*  c             s   s$   | ]}|  d ¡d tkr|V  qdS )rš   r¹   N)r   Ú_alias_list)r`  r·   rª   rª   r«   r±    s    z&write_docstringdict.<locals>.<genexpr>zdocsdict = {

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

z        """%s
"""

z}
)	Ú_tg_screen_functionsr¡   Ú__doc__Ú_tg_turtle_functionsr›   rº  r{   ÚreprÚclose)r¤   ÚdocsdictÚ
methodnamer¨   r¥   rÛ   rª   rª   r«   r~   ì  s$    



c          	   C   sd   dd|   ¡ i }t|ƒ}|j}x@|D ]8}y|| t|ƒ_W q$ tk
rZ   td| ƒ Y q$X q$W d S )Nz!turtle_docstringdict_%(language)sr   zBad docstring-entry: %s)ru  Ú
__import__rH  r¡   rD  r¯   r    )ÚlangÚmodnameÚmodulerH  r¨   rª   rª   r«   Úread_docstrings  s    
rN  r   zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc       
      C   sì   d }}t  | j¡\}}}|dd … }|dd … }| jp:g }dd„ |D ƒ}dgt|ƒt|ƒ  | }dd„ t||ƒD ƒ}	|d k	rœ|	 d| ¡ | d| ¡ |d k	rÀ|	 d| ¡ | d| ¡ d |	¡}d	| }d |¡}d	| }||fS )
Nr­   r¹   c             S   s   g | ]}d |f ‘qS )z=%rrª   )r`  r©   rª   rª   r«   rb  ;  s    z"getmethparlist.<locals>.<listcomp>c             S   s   g | ]\}}|| ‘qS rª   rª   )r`  r5  Zdfltrª   rª   r«   rb  =  s    Ú*z**z, z(%s))ÚinspectZgetargsÚ__code__Ú__defaults__rd  r  r.  r   )
ZobZdefTextZcallTextr  ZvarargsZvarkwZitems2ZrealArgsÚdefaultsZitems1rª   rª   r«   Úgetmethparlist+  s&    


rT  c             C   sJ   dd l }| d krd S td }|  d| d¡}| d| ¡}| d|¡}|S )Nr   r‘   z%s.r­   z \(.+ %s\):ú:)Úrer°   ÚreplaceÚcompileÚsub)ÚdocstrrV  Z
turtlenameÚ	newdocstrÚparexprª   rª   r«   Ú_turtle_docreviseJ  s    r]  c             C   sJ   dd l }| d krd S td }|  d| d¡}| d| ¡}| d|¡}|S )Nr   r’   z%s.r­   z \(.+ %s\):rU  )rV  r°   rW  rX  rY  )rZ  rV  Z
screennamer[  r\  rª   rª   r«   Ú_screen_docreviseV  s    r^  ar  def {name}{paramslist}:
    if {obj} is None:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        {obj} = {init}
    try:
        return {obj}.{name}{argslist}
    except TK.TclError:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        raise
c       
      C   sp   xj| D ]b}t ||ƒ}t|ƒ\}}|dkr6td||ƒ qtj|||||d}	t|	tƒ ƒ ||jƒtƒ | _qW d S )Nr­   z>>>>>>)ÚobjÚinitr©  Z
paramslistZargslist)ÚgetattrrT  r    Ú__func_bodyÚformatrã   ÚglobalsrD  )
Z	functionsr¶   r_  r`  Z	docreviserI  rß   Zpl1Zpl2Zdefstrrª   rª   r«   Ú_make_global_funcsv  s    



re  zTurtle._screenzScreen()zTurtle._penzTurtle()Ú__main__c               C   s   t ƒ rtƒ  ntƒ  d S )N)rN   r]   rU   rª   rª   rª   r«   Ú	switchpen‹  s    rg  c              C   s~  t ƒ  tdƒ tƒ  tdƒ tƒ  tdƒ xjtdƒD ]^} | dkrFtƒ  x tdƒD ]}tdƒ t	dƒ qPW | dkr~t
dƒ tƒ  tƒ  td	ƒ tƒ  q4W 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ƒ x2tdƒD ]&} tdƒ t	dƒ tdƒ tdƒ qW tdƒ tƒ  x2tdƒD ]&} tdƒ t	dƒ tdƒ tdƒ qJW tƒ  d S )NTéd   rž  rÂ   r  r¨  éZ   Zmaroonr  r¹   r„   Fé´   Z
startstartr$  ÚredrŒ  )r`   r*   ry   r0   r=   rz   rc  r1   rC   rP   r9   r>   r_   r{   )ra  rÝ   rª   rª   r«   Údemo1‘  sX    


rl  c              C   s^  t dƒ tƒ  tdƒ ttddƒƒ tddƒd } tdƒ x tdƒD ]}tƒ  t	| dƒ qDW t
dƒ xtƒ rttƒ  qfW tƒ  tdƒ td	ƒ d}td
ƒ tdƒ tdƒ x‚tddƒD ]t}|dkrÞtƒ  td	d|  dd| ƒ x tdƒD ]}t|ƒ tdƒ qèW tƒ  |d7 }tdƒ t t ƒ d d ƒ q´W tdƒ tƒ  tdƒ tdƒ tƒ  tddƒ t dƒ tƒ  x4tdƒD ](}t	ddƒ tdƒ tdƒ tdƒ qrW tƒ  tdƒ tƒ  tdƒ tƒ  tdƒ tƒ }| d¡ tƒ }| d¡ | d¡ | ¡  | d¡ |  d¡ | ¡  | dd¡ | d¡ | ¡  |  d¡ | dd¡ | d¡ |  d¡ tt|ƒƒ d}xp| |¡dkrÞ| d¡ | d ¡ | | |¡¡ | d¡ |d! dkrÒ|  ¡  |  ¡  tƒ  |d7 }qpW |j
d"d#d$d% | d&¡ | d¡ d'd(„ }t! "d¡ xtƒ r4| ¡  | ¡  qW | d¡ |j
d)d*d+ | #|d¡ d S ),Nr¹   rž  r   g       @ri  é   r‚   zwait a moment...r«  Zgreenrj  r†  r…  é   éx   é   éF   r  rk  Zyellowr  é2   r‡   rê  i  é(   r  ZblueZorangerÂ   g      @g333333ã?r¨  zCAUGHT! )r4  r…  Úboldr_   )rE  rG  r„   c             S   s   t ƒ  tƒ  d S )N)r   r   )r¼  r½  rª   rª   r«   Úbaba  s    zdemo2.<locals>.babaz  Click me!)ZCourierrp  rt  )rE  )$rp   rq   rY   rd   ru   r;   rb   rc  rg  r4   r{   rx   rw   r`   rQ   r   rW   r1   rA   r@   r>   r]   rU   r9   rk   rH   ra   r   rP   ry   rI   r=   rr   ÚtimeZsleeprR   )r×  rÝ   Zlaengera  Ztrir‡   r‚  ru  rª   rª   r«   Údemo2Æ  s°    



















rw  )rª   )rA  )EZ_verZtkinterrö   rØ   rÄ   rv  rP  r›  Zos.pathr   r   r   Úcopyr   r   Z_tg_classesrC  rE  Z_tg_utilitiesÚ__all__rB  r°   r¬   r³   r¯   r    r´   r   rÔ   rÜ   râ   ræ   r÷   r   rú   r  r  Úobjectr!  r€   rr  r   r{  r   r¾  rÜ  rõ  r
   r   r	   rù  r   r   r~   rN  Z	_LANGUAGEÚImportErrorrT  r]  r^  rb  re  r   r   rÎ   rg  rl  rw  r   rª   rª   rª   r«   Ú<module>g   s  







4

c   	/&    .       O        } 
"



5c