U
    ;g~                     @   s   d dl Z d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
Zd dlmZ d dlmZ d dlmZ G dd	 d	ejj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dS )    N)Decimal)ListOptionalTypeUnionoverload)Literal)ET)svg)QRModuleDrawerc                       s   e Zd ZU dZdZdZdZejZ	e
e ed<  fddZeeeef ed ed	d
dZedeeef ed ed	ddZdddZdddZdd Zdd ZdddZdd Z  ZS )SvgFragmentImagezT
    SVG image builder

    Creates a QR-code image as a SVG document fragment.
    zhttp://www.w3.org/2000/svgSVG)r   default_drawer_classc                    s.   t d| j t j|| | | j| _d S )Nr
   )r	   register_namespace_SVG_namespacesuper__init__unitsZbox_sizeZ	unit_sizeselfargskwargs	__class__ 4/tmp/pip-unpacked-wheel-ij2mbwps/qrcode/image/svg.pyr      s    zSvgFragmentImage.__init__F)pixelstextreturnc                 C   s   d S Nr   r   r   r   r   r   r   r      s    zSvgFragmentImage.unitsTc                 C   s   d S r   r   r    r   r   r   r   #   s    c                 C   s   t |d }|s|S |t d}tjtjgd}z.t dt dt dfD ]}|j||d}qJW n tjk
rv   Y nX | dS )	z8
        A box_size of 10 (default) equals 1mm.
        
   z0.001)Ztrapsz0.01z0.10)contextmm)r   quantizedecimalContextInexact)r   r   r   r   r#   dr   r   r   r   '   s    Nc                 C   s   | j |d | | d S )N)kind)Z
check_kind_write)r   streamr*   r   r   r   save7   s    zSvgFragmentImage.savec                 K   s   t j| jf|S r   )r	   tostring_imgr   r   r   r   r   	to_string;   s    zSvgFragmentImage.to_stringc                 K   s   | j f |S r   )_svgr0   r   r   r   	new_image>   s    zSvgFragmentImage.new_image1.1c                 K   s<   |d krt | jd}| | j}t j|f|||d|S )Nr
   )widthheightversion)r	   QNamer   r   
pixel_sizeElement)r   tagr7   r   	dimensionr   r   r   r2   A   s    zSvgFragmentImage._svgc                 C   s   t | jj|dd d S )NF)xml_declarationr	   ElementTreer/   writer   r,   r   r   r   r+   M   s    zSvgFragmentImage._write)T)T)N)Nr4   )__name__
__module____qualname____doc__r   r*   Zallowed_kindssvg_drawersSvgSquareDrawerr   r   r   __annotations__r   r   r   intr   r   r   strr-   r1   r3   r2   r+   __classcell__r   r   r   r   r      s    
 "


r   c                       sx   e Zd ZU dZdZee ed< ej	i fej	de
difejde
difdZejjjed< d fd	d
	Zdd Z  ZS )SvgImageza
    Standalone SVG image builder

    Creates a QR-code image as a standalone SVG document.
    N
background
size_ratio皙?Zcirclezgapped-circlezgapped-squaredrawer_aliasesr
   c              
      sL   t  jf d|i|}|d| j | jrH|tjd| jddddd |S )Nr;   xmlnsZrectr"   z100%)fillxyr5   r6   )r   r2   setr   rM   appendr	   r:   )r   r;   r   r
   r   r   r   r2   _   s    
zSvgImage._svgc                 C   s   t | jj|ddd d S )NzUTF-8T)encodingr=   r>   rA   r   r   r   r+   o   s    zSvgImage._write)r
   )rB   rC   rD   rE   rM   r   rJ   rH   rF   ZSvgCircleDrawerr   rG   rQ   qrcodeimagebaseZDrawerAliasesr2   r+   rK   r   r   r   r   rL   Q   s   
rL   c                       s   e Zd ZU dZdddddZdZdZeej	 e
d	< ejZee e
d
< eji fejdedifejdedifdZ fddZd fdd	Zdd Z  ZS )SvgPathImagezs
    SVG image builder with one single <path> element (removes white spaces
    between individual QR points).
    z#0000001Znonzeronone)rS   zfill-opacityz	fill-ruleZstrokeTNpathr   rN   rO   rP   c                    s   g | _ t j|| d S r   )	_subpathsr   r   r   r   r   r   r      s    zSvgPathImage.__init__c                    s:   |d kr$| j | jdd}dj|d}t jf d|i|S )NF)r   z0 0 {d} {d})r)   viewBox)r   r9   formatr   r2   )r   ra   r   r<   r   r   r   r2      s    zSvgPathImage._svgc                 C   sB   t jt dfd| jdd| j| _g | _| j| j d S )Nr_    zqr-path)r)   id)	r	   r:   r8   joinr`   QR_PATH_STYLEr_   r/   rW   )r   r   r   r   process   s    
zSvgPathImage.process)N)rB   rC   rD   rE   rf   Zneeds_processingr_   r   r	   r:   rH   rF   ZSvgPathSquareDrawerr   r   r   ZSvgPathCircleDrawerr   rQ   r   r2   rg   rK   r   r   r   r   r\   s   s(   


r\   c                   @   s   e Zd ZdZdZdS )SvgFillImagez9
    An SvgImage that fills the background to white.
    whiteNrB   rC   rD   rE   rM   r   r   r   r   rh      s   rh   c                   @   s   e Zd ZdZdZdS )SvgPathFillImagez=
    An SvgPathImage that fills the background to white.
    ri   Nrj   r   r   r   r   rk      s   rk   )r&   r   typingr   r   r   r   r   Ztyping_extensionsr   Zqrcode.image.baserY   Zqrcode.compat.etreer	   Z!qrcode.image.styles.moduledrawersr
   rF   Z&qrcode.image.styles.moduledrawers.baser   rZ   r[   ZBaseImageWithDrawerr   rL   r\   rh   rk   r   r   r   r   <module>   s   D"3