r'c@seZdZdS)r�N�r�r�r�r�r�r�r�r�Ysc@seZdZdS)�TurtleGraphicsErrorNr�r�r�r�r�r�bsr�c@s eZdZddd�Zddd�ZdS)rNcCsz||_|dkr"t|t�rpt|�}nN|dkrVt|t�rp|���d�rpt|�rpt� |�}n|dkrdg}nt d|��||_dS)N�polygonrp�.gif�compoundzThere is no shape type %s)rvr�r�r�r��lower�endswithrrr-r��_data)r�Ztype_�datar�r�r�r�ns
zShape.__init__cCs:|jdkrtd|j��|dkr$|}|j�|||g�dS)Nr�z Cannot add component to %s Shape)rvr�r�r9)r��polyrr4r�r�r��addcomponent~s �zShape.addcomponent)N)N)r�r�r�r�r�r�r�r�r�rgs c@s@eZdZddd�Zddd�Zdd�Zd d �Zdd�Zd d�ZdS)�Tbufferr�cCs$||_dgg||_d|_d|_dS)Nr�F)�bufsize�buffer�ptr�cumulate)r�r�r�r�r�r��szTbuffer.__init__NcCsD|dkr&t|j�D]}dg|j|<qn||_dgg||_d|_dS)Nr�)r|r�r�r�)r�r�ryr�r�r�r`�sz Tbuffer.resetcCsF|jdkrB|js0|jd|j|_||j|j<n|j|j�|�dSr�)r�r�r�r�r9rBr�r�r��push�s
z TurtleScreen.setworldcoordinatescCsT|dkr2|���d�r(td|�|��}qFtd��nt|t�rFtd|�}||j|<dS)Nr�rpz;Bad arguments for register_shape. Use help(register_shape)r�)r�r�rr-r�r�r�r�)r��namerkr�r�r�r#Ts
zTurtleScreen.register_shapec Cst|�dkr|d}t|t�rD|�|�s0|dkr4|Stdt|���z|\}}}Wn(ttfk rztdt|���YnX|jdkr�dd�|||fD�\}}}d|kr�d kr�nn.d|kr�d kr�nnd|kr�d ks�ntd t|���d|||fS)Nr�rr�zbad color string: %s�bad color arguments: %sr�cSsg|]}td|��qS�g�o@��round�rxr�r�r�r�r{�sz*TurtleScreen._colorstr.<locals>.<listcomp>��bad color sequence: %s� #%02x%02x%02x)r}r�r�rJr�� TypeErrorr�r�)r�r9r��g�br�r�r�� _colorstrws
zRawTurtle.__init__cCs0t�|�t�|�|��|��|��dSr�)r�r`r$r&�_clearr�rEr�r�r�r�r` s
zRawTurtle.resetcCs&|dks|dkrd|_n t|�|_dSrk)rr�)r��sizer�r�r�rh szRawTurtle.setundobuffercCs|jdkrdS|j��Srk)rr�r�r�r�r�rx, s zRawTurtle.undobufferentriescCsld|_|_|jD]}|j�|�q|j��|_g|_|jrJ|j� |j �|jg|_|��|�|j �dSr�)rNrOr�r�rDr?rQrRr+r9rr7rhrTrBr�r�r�rU9 s
zRawTurtle._clearcCs|��|��dSr�)rUrEr�r�r�r�r5G szRawTurtle.clearcCsF|j��|jjdkrdSt|j�dkrB|j�|j|j|j|j�dSr�) r�r�r�r}rRr@rQr)r'r�r�r�r�r�V s �zRawTurtle._update_datacCsx|j}|jdkrdS|jdkrD|��|��|��|�|j�n0|��|jdkrt|��D]}|��q^|��dSr�) r�r�r�r�rErHr�r�r+)r�r�rmr�r�r�rE^ s
zRawTurtle._updatecCs|j�||�Sr�)r�r*)r��flagrr�r�r�rp szRawTurtle._tracercCs|j�|�Sr�)r�r�rr�r�r�r�� szRawTurtle._colorcCs|j�|�Sr�)r�r�rr�r�r�r�� szRawTurtle._colorstrc Cs�t|t�r|Sz|\}}}Wn(ttfk rDtdt|���YnX|jjdkrldd�|||fD�\}}}d|kr�dkr�nn.d|kr�dkr�nnd|kr�dks�ntdt|���d|||fS) Nr�r�cSsg|]}td|��qSr�r�r�r�r�r�r{� sz!RawTurtle._cc.<locals>.<listcomp>rr�r�r�)r�r�r�r�r�r�r�)r�rr�r�r�r�r�r��_cc� s Fz RawTurtle._cccs�|j�|�|j�|j}d|_d|_t|�}�|_||_�|_t�|jj�|_�j�|��j |jjj }|dkr����|j_nJ|dkr��� �j dj�|j_n*|dkrʇfdd��j |jjjD�|j_���|_|��|S)Nr�rpr*r�csg|]}����qSr�rErFrGr�r�r{� sz#RawTurtle.clone.<locals>.<listcomp>)r�r=r+r�rrBrDr�r9r�rvr5rHrqr�r?rQrE)r�r��q�ttyper�rGr�r8� s. �
zRawTurtle.clonecCsB|dkr|jjS||j��kr*td|��|j�|�|��dS)NzThere is no shape named %s)r�rDr�rr�rCrE)r�r�r�r�r�rk� szRawTurtle.shapecCs�||kr|krdkr8nn|j\}}|||jfS|dksH|dkrPtd��|dk rt|dkrj||f}q�||f}n|dk r�|jd|f}n|j}|dkr�|j}|jd||d�dS)Nrz(stretch_wid/stretch_len must not be zeror3)rar;r4)r-r1r�rV)r�Zstretch_widZstretch_lenr4r;r�r�r�rl� s$"
�zRawTurtle.shapesizecCs |dkr|jS|jd|d�dS)Nr3)rarn)r.rV)r�Zshearr�r�r�rnszRawTurtle.shearfactorcCs<||j|j}|tjddtj}|jd|d�dS)Nr�r�r3)rars)r rr�r�rV�r�r�rsr�r�r�rgszRawTurtle.settiltanglecCs>|dkr0|jdtj|j}||j|jS|�|�dS)Nr�)r/r�r�rr rrgr[r�r�r�rt4szRawTurtle.tiltanglecCs|�||���dSr�)rgrtrr�r�r�rsNszRawTurtle.tiltcCs6||kr(|kr(|kr(dkr2nn|jS|j\}}}}|dk rL|}|dk rX|}|dk rd|}|dk rp|}||||dkr�td��||||f|_t�||�dtj} t�| �t�| �} }||| |||| || |||| |||f\}} }}||f|_| ||_| |_ |j dd�dS)Nrz0Bad shape transform matrix: must not be singularr�r3r4)r0r�r�rr�r�r�r-r.r/rV)r��t11�t12�t21�t22Zm11Zm12Zm21Zm22Zalfar?r@Za11Za12Za21Za22r�r�r�rmas0,�
z RawTurtle.dotcCsB|j�|j||||j�\}}|j�|�|jr>|j�d|f�|S)N�wri)r�rSrr)r�r9rr�)r�rQrRrPrCrr�r�r�rSH s�zRawTurtle._writerP��Arialr�r7cCs`|jr|j�dg�d|j_|�t|�|��|�}|rN|��\}}|�||�|jr\d|j_dS)NrTF)rr�r�rSr�r�r[re)r��argZmoverRrPrr�r�r�r�r�r{R szRawTurtle.writecCs|jg|_d|_dSr�)rrLrMr�r�r�r�r2o s zRawTurtle.begin_polycCs d|_dS�NF)rMr�r�r�r�r?} szRawTurtle.end_polycCs|jdk rt|j�SdSr�)rLr�r�r�r�r�rD� s