o
    hl.                     @   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ddefddZG dd dZG dd deZdS )    N)
namedtuple)copy)ElementTree   )BadImageOperationErrorImageSvgImageFilec                   @      e Zd ZdS )WillowSvgExceptionN__name__
__module____qualname__ r   r   J/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/willow/svg.pyr
   	       r
   c                   @   r	   )InvalidSvgAttributeNr   r   r   r   r   r      r   r   c                   @   r	   )InvalidSvgSizeAttributeNr   r   r   r   r   r      r   r   c                   @   r	   )SvgViewBoxParseErrorNr   r   r   r   r   r      r   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,   r2   r   r   r   r   r       s
    
r   svgSvgImagereturnc                 C   sR  | j j}| j j }z|\}}W n ty   |d }d }Y nw | j j|j }| j j|j }|dkr7d}d}n|dd  }|dd   }|dkrMtnt	}	|	|| }}|j
| }
|j| }|dkrr|
| j j|j|  d	 8 }
n|d
kr|
| j j|j|  8 }
|dkr|| j j|j|  d	 8 }n|d
kr|| j j|j|  8 }t|||
|S )Nr   noneminr         slicemid   max)imager   preserve_aspect_ratiosplit
ValueErrorr   r   lowerr=   r7   r   r   r   )r3   r   r?   alignmeet_or_slicer   r    
x_position
y_positionchoose_coefficientr!   r"   r   r   r   $get_viewport_to_user_space_transformB   s8   

rH   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	d1de
f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ptpc`      domc                 C   s  || _ || _|| _|  | _|  | _|  \}}|  \}}|d u r(|}|}n|d u r1|}|}n|dkr:|}|}n|dkrB|}|}|d u rJ|d u sR|dkri|dkri| jd urb| jj	| _	| jj
| _
nd| _	d| _
n| ||| _	| ||| _
| jd u rtdd| j	| j
| _d S d S )N%i,     r   )rS   dpifont_size_px_get_view_boxr   _get_preserve_aspect_ratior?   
_get_width_get_heightr   r   _convert_to_pxr   )r#   rS   rV   rW   r   
width_unitr   height_unitr   r   r   r$      s<   

 


zSvgWrapper.__init__c                 C   s&   t t| j }| j|| j| jdS )N)rV   rW   )r   r   rS   getrootr&   rV   rW   )r#   rS   r   r   r   __copy__   s   zSvgWrapper.__copy__c                 C   s   | t |jS r   )r   rS   )clsfr   r   r   	from_file   s   zSvgWrapper.from_filec                 C   s
   | j  S r   )rS   r_   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 '')rd   getstripPRESERVE_ASPECT_RATIO_REmatchr   )r#   valuer   r   r   rY      s   
z%SvgWrapper._get_preserve_aspect_ratioc                 C      | j d}|r| |S dS )Nr   NNrd   rh   _parse_sizer#   
attr_valuer   r   r   rZ         
zSvgWrapper._get_widthc                 C   rm   )Nr   rn   ro   rq   r   r   r   r[      rs   zSvgWrapper._get_heightc              
   C   s   |  }| j|}|r|| d  nd }|r!|d t|  n|}zt|}W n ty> } z	td| d|d }~ww |dkrKtd| d||fS )NzUnable to parse value from 'rg   r   z!Negative or 0 sizes are invalid (r%   )ri   UNIT_REsearchstartlenfloatrA   r   )r#   	raw_valueclean_valuerk   unit
amount_rawamounterrr   r   r   rp      s"   
zSvgWrapper._parse_sizec                 C   sH   |dv r|S |dkr|| j  S |dkr|| j  d S || j | j|  S )N)Npxemexr<   )rW   rV   COEFFICIENTS)r#   sizer{   r   r   r   r\      s   
zSvgWrapper._convert_to_pxc                 C   s   | j d}|r| |S d S NviewBox)rd   rh   _parse_view_boxrq   r   r   r   rX      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 'rg   )VIEW_BOX_RErk   ri   r   r   maprx   groups)ra   ry   rk   r   r   r   r     s   zSvgWrapper._parse_view_boxc                 C   s   | j |t| d S r   )rd   setstr)r#   attrrl   r   r   r   set_root_attr
  s   zSvgWrapper.set_root_attrc                 C      |  d| || _d S )Nr   )r   r   )r#   r   r   r   r   	set_width     
zSvgWrapper.set_widthc                 C   r   )Nr   )r   r   )r#   r   r   r   r   
set_height  r   zSvgWrapper.set_heightc                 C   s   |  dt| || _d S r   )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)rS   writer#   rb   r   r   r   r     s   zSvgWrapper.writeN)rQ   rR   )r   r   r   recompilert   NUMBER_PATTERNr   rj   r   r   r$   r`   classmethodrc   propertyrd   rY   rZ   r[   rp   r\   rX   r   r   r   r   r   r   r   r   r   r   rI   s   sL    
.



rI   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 )r4   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-   get_transformerr.   r/   r0   r1   viewport_widthviewport_heighttransformed_rectsvg_wrapperview_box_width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#   r   	new_width
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     zSvgImage.auto_orientc                 C      dS r)   r   r'   r   r   r   has_animationH  r   zSvgImage.has_animationc                 C   r   )Nr   r   r'   r   r   r   get_frame_countL  r   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 )N)rS   )r   r   r>   rS   r   r   r   r   save_as_svgT  s   
zSvgImage.save_as_svgc                 C   s   | t |jdS )Nr   )rI   rS   )ra   svg_image_filer   r   r   openY  s   zSvgImage.openN)r   r   r   r$   r   	operationrH   r   r   r   r   r   r   r   r   r   converter_fromr   r   r   r   r   r   r4     s(    






)r   collectionsr   r   xml.etree.ElementTreer   r>   r   r   r   	Exceptionr
   r   r   r   r   r   r   rH   rI   r4   r   r   r   r   <module>   s(    
"
1 +