o
    ÓèFh~  ã                   @   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deeef d	ed
 defdd„ƒZeddeeef d	ed def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__ÚunitsÚbox_sizeÚ	unit_size©ÚselfÚargsÚkwargs©Ú	__class__© úI/var/www/html/loop/nvenv/lib/python3.10/site-packages/qrcode/image/svg.pyr      s   zSvgFragmentImage.__init__ÚpixelsÚtextFÚreturnc                 C   ó   d S ©Nr   ©r   r   r    r   r   r   r      ó   zSvgFragmentImage.unitsTc                 C   r"   r#   r   r$   r   r   r   r   #   r%   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�}q%W n
 tjy:   Y nw |› d�S )	z8
        A box_size of 10 (default) equals 1mm.
        é
   z0.001)Ú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)Ú
check_kindÚ_write)r   Ústreamr0   r   r   r   Úsave7   s   zSvgFragmentImage.savec                 K   s   t j| jfi |¤ŽS r#   )r	   ÚtostringÚ_img©r   r   r   r   r   Ú	to_string;   s   zSvgFragmentImage.to_stringc                 K   s   | j di |¤ŽS )Nr   )Ú_svgr7   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   Útagr>   r   Ú	dimensionr   r   r   r9   A   s   ÿüûzSvgFragmentImage._svgc                 C   s   t  | j¡j|dd� d S )NF)Úxml_declaration©r	   ÚElementTreer6   Úwrite©r   r3   r   r   r   r2   M   s   zSvgFragmentImage._write)Tr#   )Nr;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r0   Úallowed_kindsÚsvg_drawersÚSvgSquareDrawerr   r   r   Ú__annotations__r   r   r   Úintr   r   r   Ústrr4   r8   r:   r9   r2   Ú__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dd|i|¤Ž}| d| j¡ | jr$| tjd| jddddd�¡ |S )NrB   ÚxmlnsÚrectr(   z100%)ÚfillÚxÚyr<   r=   r   )r   r9   Úsetr   rU   Úappendr	   rA   )r   rB   r   r   r   r   r   r9   _   s   úÿ
zSvgImage._svgc                 C   s   t  | j¡j|ddd� d S )NzUTF-8T)ÚencodingrD   rE   rH   r   r   r   r2   o   s   zSvgImage._writer
   )rI   rJ   rK   rL   rU   r   rR   rP   rN   ÚSvgCircleDrawerr   rO   rZ   ÚqrcodeÚimageÚbaseÚDrawerAliasesr9   r2   rS   r   r   r   r   rT   Q   s   
 ýrT   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Ú1ÚnonzeroÚnone)r]   zfill-opacityz	fill-ruleÚstrokeTNÚpathr   rV   rW   rX   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dd|i|¤ŽS )NF)r    z0 0 {d} {d})r/   ÚviewBoxr   )r   r@   Úformatr   r9   )r   ro   r   rC   r   r   r   r9   “   s   zSvgPathImage._svgc                 C   sB   t jt  d¡fd | j¡ddœ| j¤Ž| _g | _| j | j¡ d S )Nrm   Ú zqr-path)r/   Úid)	r	   rA   r?   Újoinrn   ÚQR_PATH_STYLErm   r6   ra   )r   r   r   r   Úprocess™   s   ÿ
ýüzSvgPathImage.processr#   )rI   rJ   rK   rL   rt   Úneeds_processingrm   r   r	   rA   rP   rN   ÚSvgPathSquareDrawerr   r   r   ÚSvgPathCircleDrawerr   rZ   r   r9   ru   rS   r   r   r   r   rh   s   s*   
 ü
þ
þúrh   c                   @   ó   e Zd ZdZdZdS )ÚSvgFillImagez9
    An SvgImage that fills the background to white.
    ÚwhiteN©rI   rJ   rK   rL   rU   r   r   r   r   rz   ¦   ó    rz   c                   @   ry   )ÚSvgPathFillImagez=
    An SvgPathImage that fills the background to white.
    r{   Nr|   r   r   r   r   r~   ®   r}   r~   )r,   r   Útypingr   r   r   r   r   Útyping_extensionsr   Úqrcode.image.baserd   Úqrcode.compat.etreer	   Ú!qrcode.image.styles.moduledrawersr   rN   Ú&qrcode.image.styles.moduledrawers.baser   re   rf   ÚBaseImageWithDrawerr   rT   rh   rz   r~   r   r   r   r   Ú<module>   s    D"3