
    WwgC#                         d dl Z d dlZd dl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      Z G d d	e      Zd
ededededee   f
dZy)    N)ListOptional)	BaseImage)
PdfContent)rdc                   T    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d	 Zd
 ZddZd Zd Zy)PdfStreamQRImagezc
    Quick-and-dirty implementation of the Image interface required
    by the qrcode package.
    PDF)r
   )r   r   r   c                     g S N )selfkwargss     K/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/pdf_utils/qr.py	new_imagezPdfStreamQRImage.new_image   s    	    c                 >    | j                   j                  ||f       y r   )_imgappendr   rowcols      r   drawrectzPdfStreamQRImage.drawrect   s    		#s$r   c                 0    |j                  d||fz         y )Ns   %g %g 1 1 re)r   r   command_streamr   r   s       r   append_single_rectz#PdfStreamQRImage.append_single_rect   s    oc
:;r   c                 @    d| j                   z  d| j                   z  z   S )Ns   %g %g %g rg
s   %g %g %g RG)qr_colorr   s    r   format_qr_colorz PdfStreamQRImage.format_qr_color   s$     4==0T]]*
 	
r   c                 B   t        | j                  | j                  z        }t        | j                  | j                  z        }t        | j                         dt        | j                          d| d||z    d}d| j	                         |j                  d      fz  S )N 0 0   cms   %s
%sascii)r   borderbox_sizewidthr!   encode)r   brdydiffcms       r   setup_drawing_areaz#PdfStreamQRImage.setup_drawing_area$   s     t}},-4::-.4==!"%DMM):(:';1SE3;-sSD002BIIg4FGGGr   c                     | j                         g}| j                  D ]  \  }}| j                  |||        |j                  d       dj	                  |      S )N   f   
)r.   r   r   r   joinr   s       r   render_command_streamz&PdfStreamQRImage.render_command_stream,   s[    1134		 	>HC##NC=	> 	d#zz.))r   Nc                     t         r   NotImplementedErrorr   streamkinds      r   savezPdfStreamQRImage.save4       !!r   c                     t         r   r5   r    s    r   processzPdfStreamQRImage.process7   r;   r   c                 &    | j                  ||      S r   )r   )r   r   r   activecontexts        r   drawrect_contextz!PdfStreamQRImage.drawrect_context:   s    }}S#&&r   r   )__name__
__module____qualname____doc__r9   allowed_kindsr   r   r   r   r!   r.   r3   r:   r=   rA   r   r   r   r	   r	      sF    
 DMH%<

H*""'r   r	   c                        e Zd ZdZdddee   f fdZddZd Zd Z	d	 Z
d
 Zd Zd Zd Zd Z fdZ fdZ xZS )PdfFancyQRImageg?N)center_imagerI   c                F    t        |   |||fi | || _        || _        y r   )super__init___version_centerpiece)	r   r'   r)   r(   versionrI   _argsr   	__class__s	           r   rL   zPdfFancyQRImage.__init__A   s*     	;F;(r   c                     t         r   r5   r7   s      r   r:   zPdfFancyQRImage.saveO   r;   r   c                     t         r   r5   r    s    r   r=   zPdfFancyQRImage.processR   r;   r   c                 d    | j                  ||      ry |j                  t        ||dd             y )Ng?g333333?)is_position_patternextendrounded_squarer   s       r   r   z"PdfFancyQRImage.append_single_rectU   s.    ##C-nS#sC@Ar   c                     |dk  xr |dk  xs4 || j                   dz
  kD  xr |dk  xs |dk  xr || j                   dz
  kD  S )N      )r)   r   s      r   is_major_position_patternz)PdfFancyQRImage.is_major_position_patternZ   sS    1W q 4tzzA~%2374a2S4::>1	
r   c              #      K   t         j                  j                  | j                        }t	        j
                  ||      D ]  \  }}| j                  ||      r||f   y wr   )qrcodeutilpattern_positionrM   	itertoolsproductr[   )r   adj_ptnsprpcs       r   _enumerate_alignment_patternsz-PdfFancyQRImage._enumerate_alignment_patternsa   s\     ;;//>''(; 	FB --b"5b&L	s   A"A$c                 r    | j                        ryt        fd| j                         D              S )NTc              3   l   K   | ]+  \  }}t        |z
        d k  xr t        |z
        d k   - yw)   N)abs).0rc   rd   r   r   s      r   	<genexpr>z6PdfFancyQRImage.is_position_pattern.<locals>.<genexpr>n   s?      
B bMQ53sRx=A#55
s   14)r[   anyre   r   s    ``r   rU   z#PdfFancyQRImage.is_position_patternj   s9    ))#s3 
<<>
 
 	
r   c           	         dg}| j                   }|j                  t        dddd             |j                  t        d|dz
  dd             |j                  t        |dz
  ddd             | j                         D ](  \  }}|j                  t        |dz
  |dz
  dd             * |j	                  d	       |j                  t        ddd
d             |j                  t        d|dz
  dz   d
d             |j                  t        |dz
  dz   dd
d             | j                         D ]"  \  }}|j                  t        ||dd             $ |j	                  d       dj                  |      S )Ns   q
1 0 0 1 0.5 0.5 cm
0.7 wr         rY   rh      gffffff?s   S
Q   g333333?g?r0   r1   )r)   rV   rW   re   r   r2   )r   r   szrc   rd   s        r   draw_position_patternsz&PdfFancyQRImage.draw_position_patternss   sf    ::ZZnQ1a89nQQ1=>nR!VQ1=>88: 	JFB!!.aaC"HI	Jg& 	nQ1c:;nQQ
AsCDnR!VaZAsCD88: 	BFB!!.RC"@A	Bd#zz.))r   c                    | j                         \  }}}| j                  j                  j                  }| j                  j                  j                  }ddg}|j                  t        |||| j                  |z               |j                  d       t        ||z        }t        ||z        }d}	t        d|	z
  |z  dz        }
t        d|	z
  |z  dz        }|j                  ||	z   d| |	z   d||
|z  z    d||z   ||z  z
   d	j                  d
             |j                  | j                  j                                |j                  d       dj                  |      S )N   q   0.2 ws   S
Q
qg333333?ro   rh   r#   r$   r%   r&      Qr1   )_measure_out_centerpiecerN   boxr)   heightrV   rW   centerpiece_corner_radiusr   r   r*   renderr2   )r   c_xc_yc_szc_wc_hcenterpiece_commandsx_scaley_scaleshrinkx_shifty_shifts               r   draw_centerpiecez PdfFancyQRImage.draw_centerpiece   s}   668S$##))##** !%h/##S$ > > E	

 	##J/ TCZ.TCZ.
 a&jC'!+,a&jC'!+,## wh&7%8Ww&&'qtg6G)G(H I&/	
 	##D$5$5$<$<$>?##D)zz.//r   c                     d| j                   z  }| j                   |z
  dz  }| j                   |z
  dz  }t        |      t        |      t        |      fS )NgQ?rh   )r)   r   )r   r   r}   r~   s       r   rx   z(PdfFancyQRImage._measure_out_centerpiece   sQ     djj zzD A%zzD A%#w3D))r   c                    t         |          }|g}| j                  t        | j                        }|j                  d       |j                  d       |j                  d| d| d| d| d	j                  d             | j                         \  }}}|j                  t        |||| j                  |z               |j                  d       d	j                  |      S )
Nru   rv   z0 0 m 0 z l r$   z 0 l hr&   s   W nr1   )rK   r.   rN   r   r)   r   r*   rx   rV   rW   r{   r2   )r   basic_setupcommandswr}   r~   r   rQ   s          r   r.   z"PdfFancyQRImage.setup_drawing_area   s    g02=( 4::AOOD!OOH%OO1#S1QCs1#V4;;GD "::<NCdOOdD$B$BT$I
 OOF#zz(##r   c                     t         |          | j                         g}| j                  r0|j	                  d       |j	                  | j                                dj                  |      S )Nrw   r1   )rK   r3   rs   rN   r   r   r2   )r   partsrQ   s     r   r3   z%PdfFancyQRImage.render_command_stream   sW    .0$2M2M2OPLLLL..01zz%  r   r   )rB   rC   rD   r{   r   r   rL   r:   r=   r   r[   re   rU   rs   r   rx   r.   r3   __classcell__)rQ   s   @r   rH   rH   >   s`     # .2) z*)""B


*.#0J*$4! !r   rH   x_posy_posrr   radreturnc                     dt        j                  d      dz
  z  dz  |z  }g  fddt        ffdfd} ||d	d
        |||z
  d	d        ||z
  d	f||f||fgd        ||||z
  d        |||z
  f||z
  |f||z
  |fgd        |||d        ||fd	||z
  fd	||z
  fgd        |d	|d        d	|f|d	f|d	fgd       j                  d       S )a  
    Add a subpath of a square with rounded corners at the given position.
    Doesn't include any painting or clipping operations.

    The path is drawn counterclockwise.

    :param x_pos:
        The x-coordinate of the enveloping square's lower left corner.
    :param y_pos:
        The y-coordinate of the enveloping square's lower left corner.
    :param sz:
        The side length of the enveloping square.
    :param rad:
        The corner radius.

    :return:
        A list of graphics operators.
    rp   rh   ro   rq   c                     t        | z         }t        |z         }j                  | d| dj                  d             y )Nr$   r&   )r   r   r*   )xypxpyresultr   r   s       r   fmtzrounded_square.<locals>.fmt   s@    	]	]AbTm**734r   opcc                 l    | D ]  \  }} ||        j                  |j                  d             y )Nr&   )r   r*   )ptsr   r   r   r   r   s       r   opzrounded_square.<locals>.op   s4     	DAq1I	cjj)*r   c                      | |fg|       y r   r   )r   r   r   r   s      r   uopzrounded_square.<locals>.uop   s    
QF8Sr   r   mlc   h)mathsqrtstrr   )	r   r   rr   r   c_offr   r   r   r   s	   ``    @@@r   rW   rW      s&   , $))A,"#a'3.EF5
+S +
 QS!SeQ"er3i0#6BHcR%Z2:r*R#XrN;SARae_q"s(m4c:3E
UAJa)3/
MM$Mr   )r`   r   typingr   r   qrcode.utilr]   qrcode.image.baser   pyhanko.pdf_utils.contentr   pyhanko.pdf_utils.miscr   r	   rH   floatbytesrW   r   r   r   <module>r      sh      !  ' 0 %/'y /'dY!& Y!x111$)1051	%[1r   