a
    ¦¾deô>  ã                   @   sÎ   d Z dZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZmZmZmZ dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zddd„Zddd„Zdd„ Z G dd„ deeƒZ!dS )z.this code is derived from that used by svglib.)ÚSvgPathé    N)
ÚacosÚceilÚcopysignÚcosÚdegreesÚfabsÚhypotÚradiansÚsinÚsqrté   )	ÚGroupÚmmultÚrotateÚ	translateÚtransformPointÚPathÚFILL_EVEN_ODDÚ
_CLOSEPATHÚUserNodec                 C   sn   dd„ t  d|¡D ƒ}g }tdt|ƒ|ƒD ]>}|dkrN| dv rN| dkrJdnd} | | |||| … g¡ q*|S )	a;  Split `value`, a list of numbers as a string, to a list of float numbers.

    Also optionally insert a `l` or `L` operation depending on the operation
    and the length of values.
    Example: with op='m' and value='10,20 30,40,' the returned value will be
             ['m', [10.0, 20.0], 'l', [30.0, 40.0]]
    c                 S   s   g | ]}|rt |ƒ‘qS © ©Úfloat)Ú.0Úseqr   r   úS/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/svgpath.pyÚ
<listcomp>   ó    z split_floats.<locals>.<listcomp>ú(-?\d*\.?\d*(?:[eE][+-]?\d+)?)r   >   ÚmÚMr    ÚlÚL)ÚreÚfindallÚrangeÚlenÚextend)ÚopZmin_numÚvalueZfloatsÚresÚir   r   r   Úsplit_floats   s    r-   c              	   C   s^   d}d}d  |||||||g¡d }g }t || ¡ ¡D ] }| | dd„ | ¡ D ƒg¡ q8|S )Nr   z([1|0])z[\s,]*c                 S   s   g | ]}t |ƒ‘qS r   r   )r   Únumr   r   r   r       r   z$split_arc_values.<locals>.<listcomp>)Újoinr$   ÚfinditerÚstripr(   Úgroups)r)   r*   Zfloat_reZflag_reZa_seq_rer+   r   r   r   r   Úsplit_arc_values   s    ÿþr3   c                 C   s   dddddddddddddddddddddœ}|  ¡ }g }tjd|  ¡ tjd	�}d
}|D ]¢}| ¡ dkrjqX||v r¾|dkrˆ||krˆd}n|dkrž||kržd}n|}|| dkrú| |g g¡ qX| ¡ dkrÜ| t||ƒ¡ n| t||| |ƒ¡ |d }qX|S )aÀ  Normalise SVG path.

    This basically introduces operator codes for multi-argument
    parameters. Also, it fixes sequences of consecutive M or m
    operators to MLLL... and mlll... operators. It adds an empty
    list as argument for Z and z only in order to make the resul-
    ting list easier to iterate over.

    E.g. "M 10 20, M 20 20, L 30 40, 40 40, Z"
      -> ['M', [10, 20], 'L', [20, 20], 'L', [30, 40], 'L', [40, 40], 'Z', []]
    é   é   é   r   é   r   )ÚAÚaÚQÚqÚTÚtÚSÚsr!   r#   r    r"   ÚHÚVÚhÚvÚCÚcÚZÚzz([achlmqstvz]))ÚflagsNÚ r!   r#   r    r"   r9   éþÿÿÿ)	Úkeysr$   Úsplitr1   ÚIr(   Úlowerr3   r-   )ÚattrÚopsZop_keysÚresultr2   r)   Úitemr   r   r   Únormalise_svg_path#   s2    ü
rS   c                 C   s„   | }| d d|d | d    | d d|d | d    f}|d d|d | d    |d d|d | d    f}|}||||fS )zM
    Convert a quadratic Bezier curve through q0, q1, q2 to a cubic one.
    r   gUUUUUUå?r   gUUUUUUÕ?r   )Zq0Zq1Zq2Úc0Úc1Úc2Úc3r   r   r   Úconvert_quadratic_to_cubic_pathT   s
    88rX   c                 C   sŒ   t | Ž t |Ž  }|dkrdS | d |d  | d |d   | }|dk rNd}n|dkrZd}| d |d  | d |d   }ttt|ƒ|ƒƒS )Nr   r   éÿÿÿÿ)r	   r   r   r   )ÚurC   ÚdrE   r?   r   r   r   Úvector_anglea   s    $ r\   c	                 C   sb  t |ƒ}t |ƒ}|rft|ƒ}	t|	ƒ}
t|	ƒ}d| |  }d||  }|| |
|  }|
| ||  }nd| |  }d||  }|| ||  || ||   }|dkrìt|ƒ}||9 }||9 }|| ||  || ||   }d| d }n|dk�rd| d }d|  k �rdk �r"n nd}t|ƒ}||k�r:| }|| | | }|| |  | }|�rœ|| |
|  d| |   }|
| ||  d||   }n |d| |   }|d||   }td|| | || | fƒ}t|| | || | f| | | | | | fƒd }|dk�r2|dk�r2|d8 }n|dk�rN|dk �rN|d7 }||||| | fS )zŠ
    See http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes F.6.5
    note that we reduce phi to zero outside this routine
    ç      à?r   r   g»½×Ùß|Û½)r   r   ih  )r   r
   r   r   r   r\   )Úx1Úy1Úx2Úy2ÚfAÚfSÚrxÚryÚphiZphi_radZsin_phiZcos_phiZtxÚtyZx1dZy1dÚrÚrrZcxdZcydÚcxÚcyÚtheta1Zdthetar   r   r   Úend_point_to_center_parametersm   sZ      

þý
rm   éZ   c                 C   sH  t |ƒdkrd}|}ntt |ƒd ƒ}|| }|dkr:g S t|ƒ}|d }	t ddt|	ƒ  t|	ƒ ƒ}
|dk rt|
 }
g }t|ƒ}|| }t|ƒ}t|ƒ}t|ƒD ]¢}|}|}|||  }t|ƒ}t|ƒ}| | ||  |||  | |||
|    ||||
|    | |||
|    ||||
|    | ||  |||  f¡ q |S )Nrn   r   r   r]   gUUUUUUõ?)Úabsr   r
   r   r   r&   Úappend)rj   rk   rd   re   Ú	start_angÚextentZnfragZ
frag_angleZfrag_radZhalf_radÚkappaZ
point_listrl   Z	start_radrU   Ús1r,   rT   Ús0r   r   r   Úbezier_arc_from_centre»   sB    


ùrv   c	              	   C   s$  | |kr||krg S |rìt t| ƒt|  | ƒƒ}	t|	||fƒ\}
}tdd|
|||||ƒ\}}}}}}t||||||ƒ}t t| |ƒt|ƒƒ}	g }|D ]R\} }}}}}}}| t|	| |fƒt|	||fƒ t|	||fƒ t|	||fƒ ¡ q”|S t| |||||||ƒ\}}}}}}t||||||ƒS d S )Nr   )r   r   r   r   rm   rv   rp   )r^   r_   rd   re   rf   rb   rc   r`   ra   ZmxZtx2Zty2rj   rk   rq   rr   Úbpr+   Zx3Zy3Zx4Zy4r   r   r   Úbezier_arc_from_end_pointsâ   s0    ÿÿÿÿÿrx   c                       s0   e Zd ZdZddef‡ fdd„	Zdd„ Z‡  ZS )r   zPath, from an svg path stringr   Nc           )         s\  |  dd¡}|  dd¡}tƒ jf d d |||dœ|¤Ž |s>d S t|ƒ}| j}	g }
g }d}d }tdt|ƒdƒD �]Ú}|||d … \}}|dv r´|dkr´| jd tkr´|
 	t| jƒ¡ |d	krÖ| j
|Ž  |	d
d … }�n`|dkrì| j|Ž  �nJ|dk�rjt|	ƒdk�rP|dv �r|}n|	d
d … }|d |d  |d |d   }}|  
||¡ n
| j
|Ž  |	d
d … }�nÌ|dk�r¦|	d
 |d  |	d |d   }}|  ||¡ �n�|dk�rÈ|  |d |	d ¡ �nn|dk�rê|  |	d
 |d ¡ �nL|dk�r|  |	d
 |d  |	d ¡ �n"|dk�r>|  |	d
 |	d |d  ¡ �nø|dk�rV| j|Ž  �nà|dk�rä|\}}}}t|	ƒdk �s„|dv�rž|	d
d … d \}}}}n|	dd … \}}}}|||  |||   }}|  ||||||¡ �nR|dk�r>|	d
d … \}}|\}}}}}}|  || || || || || || ¡ �nø|dk�rÜ|\}}}}t|	ƒdk �sl|dv�r†|	d
d … d \}}}}n|	dd … \}}}}|||  |||   }}|  |||| || || || ¡ �nZ|dk�rR|	d
d … \}}|\}}}}||f}t||f||f||fƒ\\}}\}}\}}\}}|  ||||||¡ �nä|dk�r|d u�rp|\}}n|	d
d … \}}|	d
d … \}}|||  |||   }}||f}|\}}t||f||f||fƒ\\}}\}}\}}\}}|  ||||||¡ �n4|dk�rœ|	d
d … \}}|\}}}}|| || || || f\}}}}||f}t||f||f||fƒ\\}}\}}\}}\}}|  ||||||¡ �nš|dk�r\|d u�rº|\}}n|	d
d … \}}|	d
d … \}}|\}}|| ||  }}|||  |||   }}||f}t||f||f||fƒ\\}}\}}\}}\}}|  ||||||¡ nÚ|dv �r|\}}} }!}"}}|	d
d … \}}|d k�r¢||7 }||7 }t|ƒd!k�s¾t|ƒd!k�rÌ|  ||¡ nHt||||| |!|"||ƒ	}#|#D ]*\}$}$}}}}}}|  ||||||¡ �qèn |dv �r*|  ¡  nt d"|¡ |d#v�rDd }|}ql| jd tk�rj|
 	t| jƒ¡ |�sv|�rú|  ¡ }%|�r¼|%d |%d  }&tdt|	ƒdƒD ]}|&|	|  |	|< �q¤|�rú|%d$ |%d  }&tdt|	ƒdƒD ]}|&|	|  |	|< �qâ|
�rR| jd u�rRtƒ }'|'j t | j¡¡ t|
ƒD ]}(|'j |(t¡ �q.|'| _d | _nd | _d S )%NÚvswapr   Úhswap)ÚpointsÚ	operatorsÚ
isClipPathÚ	autocloseÚfillModerI   r6   )r    r!   rY   r!   rJ   r#   r    )rF   rG   r   r"   r@   rA   rB   rC   rD   r>   r5   >   r?   rD   rE   r>   éüÿÿÿrE   r?   r:   r<   r;   r=   )r8   r9   r9   g»½×Ùß|Û=zSuspicious self operator: %s)r:   r;   r<   r=   é   )ÚpopÚsuperÚ__init__rS   r{   r&   r'   r|   r   rp   ZmoveToZlineToZcurveTorX   ro   rx   Z	closePathÚloggerÚdebugZ	getBoundsZ	fillColorr   Ú__dict__ÚupdateÚcopyÚdeepcopyÚreversedÚinsertÚ_SvgPath__closed_path))Úselfr?   r}   r~   r   Úkwry   rz   ZnormPathr{   Zunclosed_subpath_pointersZsubpath_startZlastopZlast_quadratic_cpr,   r)   ÚnumsÚstarting_pointZxnZynr`   ra   ZxpZypZx0Zy0ÚxiÚyir^   r_   rd   re   rf   rb   rc   rw   Ú_Úbr    Zclosed_pathÚpointer©Ú	__class__r   r   r„     s   üü


"

"


 
 


0
(
ÿ


ÿ
$ÿ


ÿ




zSvgPath.__init__c                 C   sD   t ƒ }| j ¡ |_|`| jr<tƒ }| | j¡ | |¡ |S |S d S )N)r   r‡   r‰   r�   r   Úadd)rŽ   ÚpÚgr   r   r   ÚprovideNode¹  s    
zSvgPath.provideNode)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r„   rœ   Ú__classcell__r   r   r—   r   r     s    7r   )r   )r   rn   )"r    Ú__all__r$   r‰   Úmathr   r   r   r   r   r   r	   r
   r   r   Zshapesr   r   r   r   r   r   r   r   r   r-   r3   rS   rX   r\   rm   rv   rx   r   r   r   r   r   Ú<module>   s   0,1
N
'