o
    ¬+ Z’&  ã                   @   sæ   d Z dZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlmZmZ g dfdd	„Zd
dddœZddddœZd*dd„Zd*dd„Zd+dd„Zdd„ Zdd„ Zd,dd„Zd d!„ Zd"d#„ Zd-d$d%„Zd&d'„ ZG d(d)„ d)ƒZdS ).z3.3.0Ú é    N)Ú	rl_config)Ú
getBytesIOÚImageReaderÚ	isUnicodeÚisPy3)ÚasciiBase85EncodeÚasciiBase85Decodeé<   c                 C   s0   t dt| ƒ|ƒD ]}| | ||| … ¡ q|S ©Nr   )ÚrangeÚlenÚappend)ÚsrcÚdstÚ	chunkSizeÚi© r   úL/var/www/html/env/lib/python3.10/site-packages/reportlab/pdfbase/pdfutils.pyÚ_chunker   s   r   ÚRGBÚCMYKÚG)r   r   ÚLé   é   é   Fc                 C   sÂ   dd l }t| ƒ}|d ur| |¡ |r| ¡ rd S | ¡ \}}| ¡ }g }|j}	|	dƒ |	d||t|j f ƒ |	dƒ t|ƒ|| t	|j  ksMJ dƒ‚| 
|¡}
t|
ƒ}t||ƒ |	dƒ |S )Nr   ÚBIz(/W %s /H %s /BPC 8 /CS /%s /F [/A85 /Fl]ÚIDúWrong amount of data for imageÚEI)Úzlibr   r   Újpeg_fhÚgetSizeÚ
getRGBDataÚ_mode2csÚmoder   Ú	_mode2bppÚcompressr   r   )ÚfilenameÚIMGÚ
detectJpegr!   ÚimgÚimgwidthÚ	imgheightÚrawÚcoder   Ú
compressedÚencodedr   r   r   ÚmakeA85Image   s&   
"

r3   c                 C   sº   dd l }t| ƒ}|d ur| |¡ |r| ¡ rd S | ¡ \}}| ¡ }g }|j}	|	dƒ |	d||t|j f ƒ |	dƒ t|ƒ|| t	|j  ksMJ dƒ‚| 
|¡}
t|
|ƒ |	dƒ |S )Nr   r   z#/W %s /H %s /BPC 8 /CS /%s /F [/Fl]r   r   r    )r!   r   r   r"   r#   r$   r%   r&   r   r'   r(   r   )r)   r*   r+   r!   r,   r-   r.   r/   r0   r   r1   r   r   r   ÚmakeRawImage8   s$   
"

r4   c                 C   sÊ   t j | ¡d tjrdpd }| |kr3t| ƒr-ddlm} |r+td||ƒ 	¡  
d¡ƒS dS td|  ƒ‚tjr<t| |ƒ}nt| |ƒ}|rE|S t|dƒ}| d |¡d ¡ | ¡  tjrctd	| ƒ dS dS )
zHProcesses image as if for encoding, saves to a file with .a85 extension.r   ú.a85z.bin)Úopen_for_readNú
zNo such cached image %sÚwbzcached image as %s)ÚosÚpathÚsplitextr   ÚuseA85ÚcachedImageExistsÚreportlab.lib.utilsr6   ÚfilterÚreadÚsplitÚIOErrorr3   r4   ÚopenÚwriteÚjoinÚcloseÚverboseÚprint)r)   ÚreturnInMemoryr*   Ú
cachednamer6   r0   Úfr   r   r   ÚcacheImageFileS   s     

ÿrL   c                 C   sT   ddl }t| tƒr|  | ¡}n| }|D ]}t|ƒr#tjr"td| ƒ qt|ƒ qdS )zòPreprocesses one or more image files.

    Accepts either a filespec ('C:\mydir\*.jpg') or a list
    of image filenames, crunches them all to save time.  Run this
    to save huge amounts of time when repeatedly building image
    documents.r   Nz#cached version of %s already exists)ÚglobÚ
isinstanceÚstrr=   r   rG   rH   rL   )ÚspecrM   Úfilelistr)   r   r   r   ÚpreProcessImagesl   s   
€
ûrR   c                 C   sZ   t j | ¡d tjrdpd }t j |¡r+t  | ¡d }t  |¡d }||kr)dS dS dS )z­Determines if a cached image already exists for a given file.

    Determines if a cached image exists which has the same name
    and equal or newer date to the given file.r   r5   Úbiné   r   )r9   r:   r;   r   r<   ÚisfileÚstat)r)   rJ   Úoriginal_dateÚcached_dater   r   r   r=   ƒ   s   r=   r7   ú c                 C   s$   |   d|¡  d|¡  d|¡  ||¡S )zzNormalizes different line end character(s).

    Ensures all instances of CR, LF and CRLF end up as
    the specified one.r7   úÚ
)Úreplace)ÚtextÚdesiredÚunlikelyr   r   r   Ú_normalizeLineEnds›   s   ür`   c                 C   s:   t | ƒr	|  d¡} tƒ }| t | ¡¡ | d¡ | ¡ S )zÂEncodes input using ASCII-Hex coding.

    This is a verbose encoding used for binary data within
    a PDF file.  One byte binary becomes two bytes of ASCII.
    Helper function used by images.úutf-8ó   >)r   Úencoder   rD   ÚbinasciiÚb2a_hexÚgetvalue)ÚinputÚoutputr   r   r   Ú_AsciiHexEncode§   s   

ri   c                    s|   t | ƒs	|  d¡} d |  ¡ ¡‰ ˆ d dksJ dƒ‚ˆ dd… ‰ tˆ ƒd dks,J d	ƒ‚d ‡ fd
d„tdtˆ ƒdƒD ƒ¡S )zeDecodes input using ASCII-Hex coding.

    Not used except to provide a test of the inverse function.ra   r   éÿÿÿÿú>z'Invalid terminator for Ascii Hex StreamNé   r   z(Ascii Hex stream has odd number of bytesc                    s&   g | ]}t tˆ ||d  … dƒƒ‘qS )rl   é   )ÚchrÚint)Ú.0r   ©Ústrippedr   r   Ú
<listcomp>Â   s   & z#_AsciiHexDecode.<locals>.<listcomp>)r   ÚdecoderE   rA   r   r   )rg   r   rq   r   Ú_AsciiHexDecodeµ   s   
$ru   c                 C   s”   g }t | ƒ}d}|| }||k r'| | ||| … ¡ |d }|| }||k st |d ƒdkrE|d dd… |d d |d  g|dd…< d |¡S )z>Wraps input at a given column size by inserting 
 characters.r   r   rj   éþÿÿÿNr7   )r   r   rE   )rg   Úcolumnsrh   Úlengthr   Úposr   r   r   Ú_wrapÄ   s   ý,
rz   c                 C   sx  ddl }ddlm} g d¢}g d¢}g d¢}d}|sº| d|  d¡¡}|d d	kr¶| d|  d¡¡}|d |v r‰|  d
d¡ | d|  d¡¡}|d dkrQ|dƒ‚| d|  d
¡¡}|d d> |d  }	| d|  d
¡¡}|d d> |d  }
| d|  d¡¡}|d }|
|	|fS |d |v r—|d|d  ƒ‚|d |vr¶| d|  d
¡¡}|  |d d> |d  d
 d¡ |rdS dS )z@Read width, height and number of components from open JPEG file.r   N)ÚPDFError)éÀ   éÁ   éÂ   )
éÐ   éÑ   éÒ   éÓ   éÔ   éÕ   éÖ   é×   éØ   r   )éÃ   éÅ   éÆ   éÇ   éÈ   éÉ   éÊ   éË   éÍ   éÎ   éÏ   ÚBr   éÿ   rl   rT   z#JPEG must have 8 bits per componentÚBBz#JPEG Unsupported JPEG marker: %0.2x)ÚstructÚreportlab.pdfbase.pdfdocr{   Úunpackr@   Úseek)Úimager–   r{   ÚvalidMarkersÚnoParamMarkersÚunsupportedMarkersÚdoneÚxÚyÚheightÚwidthÚcolorr   r   r   ÚreadJPEGInfoÞ   s<   ÿÿ
 èr¤   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú_fuscc                 C   s.   |sJ dƒ‚|| _ t|ƒ| _t|ƒpd| _d S )Nz'Argument k should be a non empty stringé   )Ú_kr   Ú_klenro   Ú_n)ÚselfÚkÚnr   r   r   Ú__init__  s   
z_fusc.__init__c                 C   s.   |   td tt|  ttt|ƒƒ¡ƒ¡ƒ| j¡S ©Nr   )	Ú_fusc__rotater   rE   Úmaprn   Ú_fusc__fuscÚlistÚordr©   ©rª   Úsr   r   r   Úencrypt  s   .z_fusc.encryptc                 C   s0   d  tt|  tttt|  || j ¡ƒƒƒ¡ƒ¡S r®   )	rE   r°   rn   r±   r²   r³   r	   r¯   r©   r´   r   r   r   Údecrypt  s   0z_fusc.decryptc                 C   sF   t |ƒ}|dk r|| }||; }|s|S || d … |d || …  S r   )r   )rª   rµ   r¬   Úlr   r   r   Ú__rotate  s
   z_fusc.__rotatec              
   C   sB   t |ƒ}ttdd„ |tttt|| j ƒd | j d |… ƒƒƒƒS )Nc                 S   s   | |A S )Nr   )rŸ   r    r   r   r   Ú<lambda>"  s    z_fusc.__fusc.<locals>.<lambda>r   )r   r²   r°   r³   ro   r¨   r§   )rª   rµ   Úslenr   r   r   Ú__fusc   s   :z_fusc.__fuscN)Ú__name__Ú
__module__Ú__qualname__r­   r¶   r·   r¯   r±   r   r   r   r   r¥     s    r¥   )NF)r   N)r7   rY   )r
   )Ú__version__Ú__doc__Úsysr9   rd   Ú	reportlabr   r>   r   r   r   r   Úreportlab.lib.rl_accelr   r	   r   r%   r'   r3   r4   rL   rR   r=   r`   ri   ru   rz   r¤   r¥   r   r   r   r   Ú<module>   s,   




.