
    @wgP                        d dl Z d dl mZ d dlmZmZ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e
j$                  j&                  j(                        Z G d	 d
e      Z G d de      Z G d de      Z G d de      Zy)    N)Decimal)ListOptionalTypeUnionoverloadLiteral)ETsvg)QRModuleDrawerc                        e Zd ZU dZdZdZdZej                  Z	e
e   ed<    fdZedeeef   ded	   d
efd       Zeddeeef   ded   d
efd       ZddZddZd Zd ZddZd Z x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                     t        j                  d| j                         t        |   |i | | j                  | j                        | _        y )Nr   )r
   register_namespace_SVG_namespacesuper__init__unitsbox_size	unit_sizeselfargskwargs	__class__s      G/var/www/horilla/myenv/lib/python3.12/site-packages/qrcode/image/svg.pyr   zSvgFragmentImage.__init__   s?    
eT%8%89$)&)DMM2    pixelstextFreturnc                      y N r   r!   r"   s      r   r   zSvgFragmentImage.units   s    SVr    Tc                      y r%   r&   r'   s      r   r   zSvgFragmentImage.units    s    UXr    c                 T   t        |      dz  }|s|S |j                  t        d            }t        j                  t        j                  g      }	 t        d      t        d      t        d      fD ]  }|j                  ||      } 	 | dS # t        j                  $ r Y w xY w)	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-   ds         r   r   zSvgFragmentImage.units#   s     "$Lww/0//(9:	fowu~ws|D ;q':; |  		s   8B B'&B'c                 J    | j                  |       | j                  |       y )N)kind)
check_kind_write)r   streamr5   s      r   savezSvgFragmentImage.save3   s    T"Fr    c                 B    t        j                  | j                  fi |S r%   )r
   tostring_imgr   r   s     r   	to_stringzSvgFragmentImage.to_string7   s    {{499///r    c                 &     | j                   di |S )Nr&   )_svgr=   s     r   	new_imagezSvgFragmentImage.new_image:   s    tyy"6""r    c                     | t        j                  | j                  d      }| j                  | j                        }t        j
                  |f|||d|S )Nr   )widthheightversion)r
   QNamer   r   
pixel_sizeElement)r   tagrE   r   	dimensions        r   r@   zSvgFragmentImage._svg=   s[    ;((4..6CJJt/	zz
	

 
 	
r    c                 d    t        j                  | j                        j                  |d       y )NF)xml_declarationr
   ElementTreer<   writer   r8   s     r   r7   zSvgFragmentImage._writeI   s"    
tyy!'''Fr    )Tr%   )Nz1.1)__name__
__module____qualname____doc__r   r5   allowed_kindssvg_drawersSvgSquareDrawerr   r   r   __annotations__r   r   r   intr   r	   r   strr9   r>   rA   r@   r7   __classcell__r   s   @r   r   r      s     2NDM1<1L1L$~.L3 VE#w,/Vwu~V'V VXE#w,/Xwt}XPSX X 0#

Gr    r   c                        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	Zd	 Z x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_aliasesc           
          t        |   dd|i|}|j                  d| j                         | j                  r4|j                  t        j                  d| j                  dddd             |S )NrI   xmlnsrectr,   z100%)fillxyrC   rD   r&   )r   r@   setr   r_   appendr
   rH   )r   rI   r   r   r   s       r   r@   zSvgImage._svg[   si    gl-s-f-,,-??JJ

 !	 
r    c                 f    t        j                  | j                        j                  |dd       y )NzUTF-8T)encodingrL   rM   rP   s     r   r7   zSvgImage._writek   s%    
tyy!''RV'Wr    r   )rQ   rR   rS   rT   r_   r   rZ   rX   rV   SvgCircleDrawerr   rW   rd   qrcodeimagebaseDrawerAliasesr@   r7   r[   r\   s   @r   r^   r^   M   s}     !%J$..3%55gcl7ST%55gcl7ST7NFLL%%33  Xr    r^   c                       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Zd fd	Zd Z xZS )SvgPathImagezs
    SVG image builder with one single <path> element (removes white spaces
    between individual QR points).
    z#0000001nonzeronone)rh   zfill-opacityz	fill-rulestrokeTNpathr   r`   ra   rb   c                 2    g | _         t        |   |i | y r%   )	_subpathsr   r   r   s      r   r   zSvgPathImage.__init__   s    $&$)&)r    c                     |/| j                  | j                  d      }dj                  |      }t        |   dd|i|S )NF)r"   z0 0 {d} {d})r3   viewBoxr&   )r   rG   formatr   r@   )r   r~   r   rJ   r   s       r   r@   zSvgPathImage._svg   sH    ?

4??
?I#**Y*7Gw|6G6v66r    c                    t        j                  t        j                  d      fdj                  | j                        dd| j
                  | _        g | _        | j                  j                  | j                         y )Nrz    zqr-path)r3   id)	r
   rH   rF   joinr|   QR_PATH_STYLErz   r<   rl   )r   s    r   processzSvgPathImage.process   sg     JJHHV
ggdnn%
   	
	 		#r    r%   )rQ   rR   rS   rT   r   needs_processingrz   r   r
   rH   rX   rV   SvgPathSquareDrawerr   r   r   SvgPathCircleDrawerr   rd   r   r@   r   r[   r\   s   @r   ru   ru   o   s     	M !%D(2::
%1<1P1P$~.P22B7++73<(

 ++73<(

N*7
$r    ru   c                       e Zd ZdZdZy)SvgFillImagez9
    An SvgImage that fills the background to white.
    whiteNrQ   rR   rS   rT   r_   r&   r    r   r   r           Jr    r   c                       e Zd ZdZdZy)SvgPathFillImagez=
    An SvgPathImage that fills the background to white.
    r   Nr   r&   r    r   r   r      r   r    r   )r0   r   typingr   r   r   r   r   r	   qrcode.image.baserp   qrcode.compat.etreer
   !qrcode.image.styles.moduledrawersr   rV   &qrcode.image.styles.moduledrawers.baser   rq   rr   BaseImageWithDrawerr   r^   ru   r   r   r&   r    r   <module>r      sq      A A  " @ A?Gv||((<< ?GDX XD0$8 0$f8 | r    