
    )c~                        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	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      2/usr/lib/python3/dist-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       r    Tc                      y r%   r&   r'   s      r   r   zSvgFragmentImage.units#   r(   r    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   streamr6   s      r   savezSvgFragmentImage.save7   s    T"Fr    c                 B    t        j                  | j                  fi |S r%   )r
   tostring_imgr   r   s     r   	to_stringzSvgFragmentImage.to_string;   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   tagrF   r   	dimensions        r   rA   zSvgFragmentImage._svgA   s[    ;((4..6CJJt/	zz
	

 
 	
r    c                 d    t        j                  | j                        j                  |d       y )NF)xml_declarationr
   ElementTreer=   writer   r9   s     r   r8   zSvgFragmentImage._writeM   s"    
tyy!'''Fr    )Tr%   )Nz1.1)__name__
__module____qualname____doc__r   r6   allowed_kindssvg_drawersSvgSquareDrawerr   r   r   __annotations__r   r   r   intr   r	   r   strr:   r?   rB   rA   r8   __classcell__r   s   @r   r   r      s     2NDM1<1L1L$~.L3 E#w,/ wu~ '   E#w,/ wt} PS   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 )NrJ   xmlnsrectr-   z100%)fillxyrD   rE   r&   )r   rA   setr   r`   appendr
   rI   )r   rJ   r   r   r   s       r   rA   zSvgImage._svg_   si    gl-s-f-,,-??JJ

 !	 
r    c                 f    t        j                  | j                        j                  |dd       y )NzUTF-8T)encodingrM   rN   rQ   s     r   r8   zSvgImage._writeo   s%    
tyy!''RV'Wr    r   )rR   rS   rT   rU   r`   r   r[   rY   rW   SvgCircleDrawerr   rX   re   qrcodeimagebaseDrawerAliasesrA   r8   r\   r]   s   @r   r_   r_   Q   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)ri   zfill-opacityz	fill-rulestrokeTNpathr   ra   rb   rc   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})r4   viewBoxr&   )r   rH   formatr   rA   )r   r   r   rK   r   s       r   rA   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 )Nr{    zqr-path)r4   id)	r
   rI   rG   joinr}   QR_PATH_STYLEr{   r=   rm   )r   s    r   processzSvgPathImage.process   sg     JJHHV
ggdnn%
   	
	 		#r    r%   )rR   rS   rT   rU   r   needs_processingr{   r   r
   rI   rY   rW   SvgPathSquareDrawerr   r   r   SvgPathCircleDrawerr   re   r   rA   r   r\   r]   s   @r   rv   rv   s   s     	M !%D(2::
%1<1P1P$~.P22B7++73<(

 ++73<(

N*7
$r    rv   c                       e Zd ZdZdZy)SvgFillImagez9
    An SvgImage that fills the background to white.
    whiteNrR   rS   rT   rU   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   )r1   r   typingr   r   r   r   r   typing_extensionsr	   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      sv      8 8 %  " @ AAGv||((<< AGHX XD0$8 0$f8 | r    