a
    ç´«jD  ã                   @   s²   d dl Z d dl mZ d dlmZmZmZ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)ÚOptionalÚ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                    s2   t  d| j¡ tƒ j|i |¤Ž |  | j¡| _d S )Nr   )r   Úregister_namespaceÚ_SVG_namespaceÚsuperÚ__init__ÚunitsZbox_sizeZ	unit_size©ÚselfÚargsÚkwargs©Ú	__class__© úO/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/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yt   Y n0 |› 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   Úsave3   s    zSvgFragmentImage.savec                 K   s   t j| jfi |¤ŽS r   )r   ÚtostringÚ_img©r   r   r   r   r   Ú	to_string7   s    zSvgFragmentImage.to_stringc                 K   s   | j f i |¤ŽS r   )Ú_svgr.   r   r   r   Ú	new_image:   s    zSvgFragmentImage.new_imageú1.1c                 K   s<   |d u rt  | jd¡}|  | j¡}t j|f|||dœ|¤ŽS )Nr   )ÚwidthÚheightÚversion)r   ÚQNamer   r   Ú
pixel_sizeÚElement)r   Útagr5   r   Ú	dimensionr   r   r   r0   =   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)   I   s    zSvgFragmentImage._write)T)T)N)Nr2   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   Zallowed_kindsÚsvg_drawersÚSvgSquareDrawerr   Útyper	   Ú__annotations__r   r   r   Úintr   r   r   Ústrr+   r/   r1   r0   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çš™™™™™é?©Ú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 )Nr9   ÚxmlnsZrectr    z100%)ÚfillÚxÚyr3   r4   )r   r0   Úsetr   rL   Úappendr   r8   )r   r9   r   r   r   r   r   r0   [   s    úÿ
zSvgImage._svgc                 C   s   t  | j¡j|ddd� d S )NzUTF-8T)Úencodingr;   r<   r?   r   r   r   r)   k   s    zSvgImage._write)r   )r@   rA   rB   rC   rL   r   rI   rG   rD   ZSvgCircleDrawerr   rE   rQ   ÚqrcodeÚimageÚbaseZDrawerAliasesr0   r)   rJ   r   r   r   r   rK   M   s   
ýrK   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   rM   rN   rO   c                    s   g | _ tƒ j|i |¤Ž d S r   )Ú	_subpathsr   r   r   r   r   r   r   ‹   s    zSvgPathImage.__init__c                    s:   |d u r$| j | jdd�}dj|d�}tƒ jf d|i|¤ŽS )NF)r   z0 0 {d} {d})r'   ÚviewBox)r   r7   Úformatr   r0   )r   ra   r   r:   r   r   r   r0   �   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   r8   r6   Újoinr`   ÚQR_PATH_STYLEr_   r-   rW   )r   r   r   r   Úprocess•   s    ÿ
ýüzSvgPathImage.process)N)r@   rA   rB   rC   rf   Zneeds_processingr_   r   r   r8   rG   rD   ZSvgPathSquareDrawerr   rF   r	   ZSvgPathCircleDrawerr   rQ   r   r0   rg   rJ   r   r   r   r   r\   o   s(   
ü
þ
þúr\   c                   @   s   e Zd ZdZdZdS )ÚSvgFillImagez9
    An SvgImage that fills the background to white.
    ÚwhiteN©r@   rA   rB   rC   rL   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   Zqrcode.image.baserY   Zqrcode.compat.etreer   Z!qrcode.image.styles.moduledrawersr   rD   Z&qrcode.image.styles.moduledrawers.baser	   rZ   r[   ZBaseImageWithDrawerr
   rK   r\   rh   rk   r   r   r   r   Ú<module>   s   B"3