o
    ÛähD  ã                   @   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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__© úC/var/www/html/venv/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   Ú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 di |¤ŽS )Nr   )Ú_svgr5   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   r7   =   s   ÿüûzSvgFragmentImage._svgc                 C   s   t  | j¡j|dd� d S )NF)Úxml_declaration©r   ÚElementTreer4   Úwrite©r   r1   r   r   r   r0   I   s   zSvgFragmentImage._write)Tr!   )Nr9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r.   Úallowed_kindsÚsvg_drawersÚSvgSquareDrawerr   Útyper
   Ú__annotations__r   r   r   Úintr   r   r   Ústrr2   r6   r8   r7   r0   Ú__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 )Nr@   ÚxmlnsÚrectr&   z100%)ÚfillÚxÚyr:   r;   r   )r   r7   Úsetr   rT   Úappendr   r?   )r   r@   r   r	   r   r   r   r7   [   s   úÿ
zSvgImage._svgc                 C   s   t  | j¡j|ddd� d S )NzUTF-8T)ÚencodingrB   rC   rF   r   r   r   r0   k   s   zSvgImage._writer   )rG   rH   rI   rJ   rT   r   rQ   rO   rL   ÚSvgCircleDrawerr   rM   rY   ÚqrcodeÚimageÚbaseÚDrawerAliasesr7   r0   rR   r   r   r   r   rS   M   s   
 ýrS   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   rU   rV   rW   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   r7   )r   rn   r   rA   r   r   r   r7   �   s   zSvgPathImage._svgc                 C   sB   t jt  d¡fd | j¡ddœ| j¤Ž| _g | _| j | j¡ d S )Nrl   Ú zqr-path)r-   Úid)	r   r?   r=   Újoinrm   ÚQR_PATH_STYLErl   r4   r`   )r   r   r   r   Úprocess•   s   ÿ
ýüzSvgPathImage.processr!   )rG   rH   rI   rJ   rs   Úneeds_processingrl   r   r   r?   rO   rL   ÚSvgPathSquareDrawerr   rN   r
   ÚSvgPathCircleDrawerr   rY   r   r7   rt   rR   r   r   r   r   rg   o   s*   
 ü
þ
þúrg   c                   @   ó   e Zd ZdZdZdS )ÚSvgFillImagez9
    An SvgImage that fills the background to white.
    ÚwhiteN©rG   rH   rI   rJ   rT   r   r   r   r   ry   ¢   ó    ry   c                   @   rx   )ÚSvgPathFillImagez=
    An SvgPathImage that fills the background to white.
    rz   Nr{   r   r   r   r   r}   ª   r|   r}   )r*   r   Útypingr   r   r   r   Úqrcode.image.baserc   Úqrcode.compat.etreer   Ú!qrcode.image.styles.moduledrawersr	   rL   Ú&qrcode.image.styles.moduledrawers.baser
   rd   re   ÚBaseImageWithDrawerr   rS   rg   ry   r}   r   r   r   r   Ú<module>   s    B"3