a
    Cgl.                     @   s   d dl Z d dlmZ d dlmZ d dlmZ ddlmZmZm	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eddZdd ZG dd dZdedddZG dd dZG dd deZdS )    N)
namedtuple)copy)ElementTree   )BadImageOperationErrorImageSvgImageFilec                   @   s   e Zd ZdS )WillowSvgExceptionN__name__
__module____qualname__ r   r   I/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/willow/svg.pyr	   	   s   r	   c                   @   s   e Zd ZdS )InvalidSvgAttributeNr
   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )InvalidSvgSizeAttributeNr
   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )SvgViewBoxParseErrorNr
   r   r   r   r   r      s   r   ViewBoxzmin_x min_y width heightc                 C   s"   | j  d| j d| j d| j S )N )min_xmin_ywidthheight)view_boxr   r   r   view_box_to_attr_str   s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ViewportToUserSpaceTransformc                 C   s   || _ || _|| _|| _d S N)scale_xscale_ytranslate_xtranslate_y)selfr   r   r   r    r   r   r   __init__!   s    z%ViewportToUserSpaceTransform.__init__c              
   C   s.   | j j d| j d| j d| j d| j d
S )Nz	(scale_x=z
, scale_y=z, translate_x=z, translate_y=))	__class__r   r   r   r   r    r!   r   r   r   __repr__'   s    z%ViewportToUserSpaceTransform.__repr__c                 C   s@   t || jsdS | j|jko>| j|jko>| j|jko>| j|jkS NF)
isinstancer$   r   r   r   r    )r!   otherr   r   r   __eq__.   s    


z#ViewportToUserSpaceTransform.__eq__c                 C   sH   |\}}}}|| j  | j || j | j || j  | j || j | j fS r   )r   r   r    r   )r!   rectlefttoprightbottomr   r   r   __call__8   s    z%ViewportToUserSpaceTransform.__call__N)r   r   r   r"   r&   r*   r0   r   r   r   r   r       s   
r   SvgImage)svgreturnc                 C   sX  | j j}| j j }z|\}}W n ty>   |d }d }Y n0 | j j|j }| j j|j }|dkrnd}d}n>|dd  }|dd   }|dkrtnt	}	|	|| }}|j
| }
|j| }|dkr|
| j j|j|  d	 8 }
n |d
kr|
| j j|j|  8 }
|dkr*|| j j|j|  d	 8 }n |d
krJ|| j j|j|  8 }t|||
|S )Nr   noneminr         sliceZmid   max)imager   preserve_aspect_ratiosplit
ValueErrorr   r   lowerr:   r5   r   r   r   )r2   r   r<   ZalignZmeet_or_slicer   r   Z
x_positionZ
y_positionZchoose_coefficientr   r    r   r   r   $get_viewport_to_user_space_transformB   s6    





r@   c                   @   s   e Zd ZedZdZede de de de d	ZedZddd	d
ddZ	d1e
dddZdd Zedd Zedd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zed$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0S )2
SvgWrapperz(?:em|ex|px|in|cm|mm|pt|pc|%)$z%([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)^z(?:,\s*|\s+)$z7^none$|^x(Min|Mid|Max)Y(Min|Mid|Max)(\s+(meet|slice))?$g
BP(?gL&d2?r   gqq?gUUUUUU?)mmcminptZpc`      domc                 C   s  || _ || _|| _|  | _|  | _|  \}}|  \}}|d u rP|}|}n4|d u rb|}|}n"|dkrt|}|}n|dkr|}|}|d u r|d u s|dkr|dkr| jd ur| jj	| _	| jj
| _
qd| _	d| _
n| ||| _	| ||| _
| jd u rtdd| j	| j
| _d S )N%i,     r   )rK   dpifont_size_px_get_view_boxr   _get_preserve_aspect_ratior<   
_get_width_get_heightr   r   _convert_to_pxr   )r!   rK   rN   rO   r   Z
width_unitr   Zheight_unitr   r   r   r"      s:    

 

zSvgWrapper.__init__c                 C   s&   t t| j }| j|| j| jdS )N)rN   rO   )r   r   rK   getrootr$   rN   rO   )r!   rK   r   r   r   __copy__   s    zSvgWrapper.__copy__c                 C   s   | t |jS r   )r   rK   )clsfr   r   r   	from_file   s    zSvgWrapper.from_filec                 C   s
   | j  S r   )rK   rU   r%   r   r   r   root   s    zSvgWrapper.rootc                 C   s>   | j dd }|dkrdS | j|s:td| d|S )NpreserveAspectRatio zxMidYMid meetz+Unable to parse preserveAspectRatio value '')rZ   getstripPRESERVE_ASPECT_RATIO_REmatchr   )r!   valuer   r   r   rQ      s    
z%SvgWrapper._get_preserve_aspect_ratioc                 C   s   | j d}|r| |S dS )Nr   NNrZ   r^   _parse_sizer!   
attr_valuer   r   r   rR      s    
zSvgWrapper._get_widthc                 C   s   | j d}|r| |S dS )Nr   rc   rd   rf   r   r   r   rS      s    
zSvgWrapper._get_heightc              
   C   s   |  }| j|}|r(|| d  nd }|rB|d t|  n|}zt|}W n6 ty } ztd| d|W Y d }~n
d }~0 0 |dkrtd| d||fS )NzUnable to parse value from 'r]   r   z!Negative or 0 sizes are invalid (r#   )r_   UNIT_REsearchstartlenfloatr>   r   )r!   	raw_valueZclean_valuera   unitZ
amount_rawamounterrr   r   r   re      s    
zSvgWrapper._parse_sizec                 C   sL   |dv r|S |dkr|| j  S |dkr4|| j  d S || j | j|  S d S )N)NZpxemexr9   )rO   rN   COEFFICIENTS)r!   sizern   r   r   r   rT      s    
zSvgWrapper._convert_to_pxc                 C   s   | j d}|r| |S d S NviewBox)rZ   r^   _parse_view_boxrf   r   r   r   rP      s    zSvgWrapper._get_view_boxc                 C   s:   | j | }|d u r(td| dttt|  S )NzUnable to parse viewBox value 'r]   )VIEW_BOX_REra   r_   r   r   maprl   groups)rW   rm   ra   r   r   r   rw     s    zSvgWrapper._parse_view_boxc                 C   s   | j |t| d S r   )rZ   setstr)r!   attrrb   r   r   r   set_root_attr
  s    zSvgWrapper.set_root_attrc                 C   s   |  d| || _d S )Nr   )r~   r   )r!   r   r   r   r   	set_width  s    zSvgWrapper.set_widthc                 C   s   |  d| || _d S )Nr   )r~   r   )r!   r   r   r   r   
set_height  s    zSvgWrapper.set_heightc                 C   s   |  dt| || _d S ru   )r~   r   r   )r!   r   r   r   r   set_view_box  s    zSvgWrapper.set_view_boxc                 C   s   | j j|dd d S )Nzutf-8)encoding)rK   writer!   rX   r   r   r   r     s    zSvgWrapper.writeN)rH   rI   )r   r   r   recompilerh   ZNUMBER_PATTERNrx   r`   rs   r   r"   rV   classmethodrY   propertyrZ   rQ   rR   rS   re   rT   rP   rw   r~   r   r   r   r   r   r   r   r   rA   s   sJ   
.



rA   c                   @   s   e Zd Zdd ZejefddZejdd Zejdd Z	ejd	d
 Z
ejdd Zejdd Zdd Zejdd Zeeedd ZdS )r1   c                 C   s
   || _ d S r   r;   )r!   r;   r   r   r   r"     s    zSvgImage.__init__c                 C   s   |\}}}}||ks||kr*t d| || }|| }|| |}	|	\}}}}t| j}
|| }|| }|
t|||| |
| |
| | j|
dS )NzInvalid crop dimensions: r   )r   r   r;   r   r   r   r   r$   )r!   r+   Zget_transformerr,   r-   r.   r/   Zviewport_widthZviewport_heightZtransformed_rectsvg_wrapperZview_box_widthZview_box_heightr   r   r   crop!  s    


zSvgImage.cropc                 C   sP   |\}}|dk s|dk r&t d| t| j}|| || | j|dS )Nr   zInvalid resize dimensions: r   )r   r   r;   r   r   r$   )r!   rt   Z	new_widthZ
new_heightr   r   r   r   resize5  s    


zSvgImage.resizec                 C   s   | j j| j jfS r   )r;   r   r   r%   r   r   r   get_size@  s    zSvgImage.get_sizec                 C   s   | S r   r   r%   r   r   r   auto_orientD  s    zSvgImage.auto_orientc                 C   s   dS r'   r   r%   r   r   r   has_animationH  s    zSvgImage.has_animationc                 C   s   dS )Nr   r   r%   r   r   r   get_frame_countL  s    zSvgImage.get_frame_countc                 C   s   | j | |d d S )Nr   )r;   r   seekr   r   r   r   r   P  s    zSvgImage.writec                 C   s   |  | t|| jjdS )NrJ   )r   r   r;   rK   r   r   r   r   save_as_svgT  s    
zSvgImage.save_as_svgc                 C   s   | t |jdS )Nr   )rA   rK   )rW   Zsvg_image_filer   r   r   openY  s    zSvgImage.openN)r   r   r   r"   r   Z	operationr@   r   r   r   r   r   r   r   r   r   Zconverter_fromr   r   r   r   r   r   r1     s&   






)r   collectionsr   r   xml.etree.ElementTreer   r;   r   r   r   	Exceptionr	   r   r   r   r   r   r   r@   rA   r1   r   r   r   r   <module>   s"   
#1 +