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