
    
gP                        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dS )    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                      j        |i | |                     | j                  | _        d S )Nr   )r
   register_namespace_SVG_namespacesuper__init__unitsbox_size	unit_sizeselfargskwargs	__class__s      B/var/www/api/venv/lib/python3.11/site-packages/qrcode/image/svg.pyr   zSvgFragmentImage.__init__   sN    
eT%8999$)&)))DM22    pixelstextFreturnc                     d S N r   r!   r"   s      r   r   zSvgFragmentImage.units   s    SVSVr    Tc                     d S r%   r&   r'   s      r   r   zSvgFragmentImage.units    s    UXUXr    c                 v   t          |          dz  }|s|S |                    t          d                    }t          j        t          j        g          }	 t          d          t          d          t          d          fD ]}|                    ||          }n# t          j        $ r Y nw xY 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-   ds         r   r   zSvgFragmentImage.units#   s     "$ 	Lww//00/(9:::	foowu~~ws||D ; ;q'::; 	 	 	D	|||s   AB! !B32B3Nc                 \    |                      |           |                     |           d S )N)kind)
check_kind_write)r   streamr5   s      r   savezSvgFragmentImage.save3   s.    T"""Fr    c                 0    t          j        | j        fi |S r%   )r
   tostring_imgr   r   s     r   	to_stringzSvgFragmentImage.to_string7   s    {49/////r    c                      | j         di |S )Nr&   )_svgr=   s     r   	new_imagezSvgFragmentImage.new_image:   s    ty""6"""r    1.1c                     |t          j        | j        d          }|                     | j                  }t          j        |f|||d|S )Nr   )widthheightversion)r
   QNamer   r   
pixel_sizeElement)r   tagrF   r   	dimensions        r   r@   zSvgFragmentImage._svg=   sb    ;(4.66CJJt//	z
	
 

 
 
 	
r    c                 b    t          j        | j                                      |d           d S )NF)xml_declarationr
   ElementTreer<   writer   r8   s     r   r7   zSvgFragmentImage._writeI   s-    
ty!!'''FFFFFr    )Tr%   )NrB   )__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      sH          2NDM1<1L$~.LLL3 3 3 3 3 VE#w,/Vwu~V'VVV XVXXE#w,/Xwt}XPSXXX XX       0 0 0# # #

 

 

 

G G G G G G 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_aliasesr   c           
           t                      j        dd|i|}|                    d| j                   | j        r2|                    t          j        d| j        dddd                     |S )NrJ   xmlnsrectr,   z100%)fillxyrD   rE   r&   )r   r@   setr   r`   appendr
   rI   )r   rJ   r   r   r   s       r   r@   zSvgImage._svg[   s    eggl--s-f--,---? 
	JJ
 !  	 	 	 
r    c                 d    t          j        | j                                      |dd           d S )NzUTF-8T)encodingrM   rN   rQ   s     r   r7   zSvgImage._writek   s0    
ty!!''RV'WWWWWr    r   )rR   rS   rT   rU   r`   r   r[   rY   rW   SvgCircleDrawerr   rX   re   qrcodeimagebaseDrawerAliasesr@   r7   r\   r]   s   @r   r_   r_   M   s           !%J$$$.3%5ggcll7ST%5ggcll7ST7 7NFL%3         X X X X X X 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)ri   zfill-opacityz	fill-rulestrokeTNpathr   ra   rb   rc   c                 H    g | _          t                      j        |i | d S r%   )	_subpathsr   r   r   s      r   r   zSvgPathImage.__init__   s,    $&$)&)))))r    c                     |2|                      | j        d          }d                    |          } t                      j        dd|i|S )NF)r"   z0 0 {d} {d})r3   viewBoxr&   )r   rH   formatr   r@   )r   r   r   rK   r   s       r   r@   zSvgPathImage._svg   sV    ?

4?
??I#**Y*77Guww|66G6v666r    c                     t          j        t          j        d          fd                    | j                  dd| j        | _        g | _        | j                            | j                   d S )Nr{    zqr-path)r3   id)	r
   rI   rG   joinr}   QR_PATH_STYLEr{   r<   rm   )r   s    r   processzSvgPathImage.process   sv     JHV
ggdn%%
 
  	
 
	 	#####r    r%   )rR   rS   rT   rU   r   needs_processingr{   r   r
   rI   rY   rW   SvgPathSquareDrawerr   r   r   SvgPathCircleDrawerr   re   r   r@   r   r\   r]   s   @r   rv   rv   o   s          	 M !%D(2:
%%%1<1P$~.PPP2B7+773<<(

 +773<<(

 
N* * * * *7 7 7 7 7 7
$ 
$ 
$ 
$ 
$ 
$ 
$r    rv   c                       e Zd ZdZdZdS )SvgFillImagez9
    An SvgImage that fills the background to white.
    whiteNrR   rS   rT   rU   r`   r&   r    r   r   r                JJJr    r   c                       e Zd ZdZdZdS )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.baserq   qrcode.compat.etreer
   !qrcode.image.styles.moduledrawersr   rW   &qrcode.image.styles.moduledrawers.baser   rr   rs   BaseImageWithDrawerr   r_   rv   r   r   r&   r    r   <module>r      s          A A A A A A A A A A A A A A A A     " " " " " " @ @ @ @ @ @ A A A A A A?G ?G ?G ?G ?Gv|(< ?G ?G ?GDX X X X X X X XD0$ 0$ 0$ 0$ 0$8 0$ 0$ 0$f    8       |     r    