o
    vhB#                     @   s   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 deZG dd	 d	eZd
ededededee f
ddZdS )    N)ListOptional)
PdfContent)rd)	BaseImagec                   @   sf   e Zd ZdZdZdZdZdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdddZdd Zdd ZdS )PdfStreamQRImagezc
    Quick-and-dirty implementation of the Image interface required
    by the qrcode package.
    PDF)r   )r   r   r   c                 K   s   g S N )selfkwargsr
   r
   R/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/pyhanko/pdf_utils/qr.py	new_image      zPdfStreamQRImage.new_imagec                 C   s   | j ||f d S r	   )_imgappendr   rowcolr
   r
   r   drawrect      zPdfStreamQRImage.drawrectc                 C   s   | d||f  d S )Ns   %g %g 1 1 re)r   r   command_streamr   r   r
   r
   r   append_single_rect   s   z#PdfStreamQRImage.append_single_rectc                 C   s   d| j  d| j   S )Ns   %g %g %g rg
s   %g %g %g RG)qr_colorr   r
   r
   r   format_qr_color   s   z PdfStreamQRImage.format_qr_colorc                 C   sd   t | j| j }t | j| j }t | j dt | j  d| d||  d}d|  |df S )N 0 0   cms   %s
%sascii)r   borderbox_sizewidthr   encode)r   brdydiffcmr
   r
   r   setup_drawing_area#   s   .z#PdfStreamQRImage.setup_drawing_areac                 C   s<   |   g}| jD ]\}}| ||| q|d d|S )N   f   
)r(   r   r   r   joinr   r
   r
   r   render_command_stream+   s
   


z&PdfStreamQRImage.render_command_streamNc                 C      t r	   NotImplementedErrorr   streamkindr
   r
   r   save3   r   zPdfStreamQRImage.savec                 C   r-   r	   r.   r   r
   r
   r   process6   r   zPdfStreamQRImage.processc                 C   s   |  ||S r	   )r   )r   r   r   activecontextr
   r
   r   drawrect_context9   s   z!PdfStreamQRImage.drawrect_contextr	   )__name__
__module____qualname____doc__r2   allowed_kindsr   r   r   r   r   r(   r,   r3   r4   r7   r
   r
   r
   r   r      s    
r   c                       s   e Zd ZdZdddee f fddZdddZd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Z fddZ fddZ  ZS )PdfFancyQRImageg?N)center_imager>   c                   s(   t  j|||fi | || _|| _d S r	   )super__init___version_centerpiece)r   r!   r#   r"   versionr>   _argsr   	__class__r
   r   r@   @   s   

zPdfFancyQRImage.__init__c                 C   r-   r	   r.   r0   r
   r
   r   r3   N   r   zPdfFancyQRImage.savec                 C   r-   r	   r.   r   r
   r
   r   r4   Q   r   zPdfFancyQRImage.processc                 C   s(   |  ||rd S |t||dd d S )Ng?g333333?)is_position_patternextendrounded_squarer   r
   r
   r   r   T   s   z"PdfFancyQRImage.append_single_rectc                 C   s<   |dk r|dk p|| j d ko|dk p|dk o|| j d kS )N      )r#   r   r
   r
   r   is_major_position_patternY   s
   z)PdfFancyQRImage.is_major_position_patternc                 c   sB    t j| j}t||D ]\}}| ||rq||fV  qd S r	   )qrcodeutilpattern_positionrA   	itertoolsproductrL   )r   adj_ptnsprpcr
   r
   r   _enumerate_alignment_patterns`   s   z-PdfFancyQRImage._enumerate_alignment_patternsc                    s,   |   rdS t fdd|  D S )NTc                 3   s4    | ]\}}t | d kot  | d kV  qdS )   N)abs).0rS   rT   r   r   r
   r   	<genexpr>m   s
    
z6PdfFancyQRImage.is_position_pattern.<locals>.<genexpr>)rL   anyrU   r   r
   rY   r   rG   i   s
   z#PdfFancyQRImage.is_position_patternc                 C   s  dg}| j }|tdddd |td|d dd |t|d ddd |  D ]\}}|t|d |d dd q,|d	 |tddd
d |td|d d d
d |t|d d dd
d |  D ]\}}|t||dd qn|d d|S )Ns   q
1 0 0 1 0.5 0.5 cm
0.7 wr         rJ   rV      gffffff?s   S
Q   g333333?g?r)   r*   )r#   rH   rI   rU   r   r+   )r   r   szrS   rT   r
   r
   r   draw_position_patternsr   s   


z&PdfFancyQRImage.draw_position_patternsc                 C   s   |   \}}}| jjj}| jjj}ddg}|t|||| j|  |d t	|| }t	|| }d}	t	d|	 | d }
t	d|	 | d }|||	  d| |	  d||
|   d|| ||   d	
d
 || j  |d d|S )N   q   0.2 ws   S
Q
qg333333?r]   rV   r   r   r   r       Qr*   )_measure_out_centerpiecerB   boxr#   heightrH   rI   centerpiece_corner_radiusr   r   r$   renderr+   )r   c_xc_yc_szc_wc_hcenterpiece_commandsx_scaley_scaleshrinkx_shifty_shiftr
   r
   r   draw_centerpiece   s4   





z PdfFancyQRImage.draw_centerpiecec                 C   s<   d| j  }| j | d }| j | d }t|t|t|fS )NgQ?rV   )r#   r   )r   rl   rj   rk   r
   r
   r   re      s   
z(PdfFancyQRImage._measure_out_centerpiecec                    s   t   }|g}| jd urJt| j}|d |d |d| d| d| d| d	d |  \}}}|t	|||| j
|  |d d	|S )
Nrb   rc   z0 0 m 0 z l r   z 0 l hr    s   W nr*   )r?   r(   rB   r   r#   r   r$   re   rH   rI   rh   r+   )r   basic_setupcommandswrj   rk   rl   rE   r
   r   r(      s"   




"

z"PdfFancyQRImage.setup_drawing_areac                    s:   t   |  g}| jr|d ||   d|S )Nrd   r*   )r?   r,   ra   rB   r   ru   r+   )r   partsrE   r
   r   r,      s
   

z%PdfFancyQRImage.render_command_streamr	   )r8   r9   r:   rh   r   r   r@   r3   r4   r   rL   rU   rG   ra   ru   re   r(   r,   __classcell__r
   r
   rE   r   r=   =   s"    	
		%r=   x_posy_posr`   radreturnc                    s(  dt dd  d | }g fdd dtf fdd	fd
d}||dd ||| dd || df||f||fgd |||| d ||| f|| |f|| |fgd |||d ||fd|| fd|| fgd |d|d d|f|df|dfgd 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.
    r^   rV   r]   r_   c                    s8   t |  }t | } | d| dd d S )Nr   r    )r   r   r$   )xypxpy)resultr{   r|   r
   r   fmt   s    zrounded_square.<locals>.fmtopcc                    s,   | D ]	\}} || q |d d S )Nr    )r   r$   )ptsr   r   r   )r   r   r
   r   op   s   zrounded_square.<locals>.opc                    s    | |fg| d S r	   r
   )r   r   r   )r   r
   r   uop   r   zrounded_square.<locals>.uopr   mlc   h)mathsqrtstrr   )r{   r|   r`   r}   c_offr   r
   )r   r   r   r{   r|   r   rI      s     ($
rI   )rP   r   typingr   r   qrcode.utilrM   pyhanko.pdf_utils.contentr   pyhanko.pdf_utils.miscr   qrcode.image.baser   r   r=   floatbytesrI   r
   r
   r
   r   <module>   s*    2 