o
    Neb'                     @   s   d Z dZddlZddlZddlmZ ddlmZ ddl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)BytesIO)	rl_config)ImageReader	isUnicode)asciiBase85EncodeasciiBase85Decode<   c                 C   s0   t dt| |D ]}|| |||   q|S Nr   )rangelenappend)srcdstZ	chunkSizei r   </usr/lib/python3/dist-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   
compressedZencodedr   r   r   makeA85Image   s&   
"

r0   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-   r.   r   r/   r   r   r   makeRawImage9   s$   
"

r1   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.utilsr3   filterreadsplitIOErrorr0   r1   openwritejoincloseverboseprint)r'   ZreturnInMemoryr(   
cachednamer3   r.   fr   r   r   cacheImageFileT   s     

rH   c                 C   sT   ddl }t| tr| | }n| }|D ]}t|r#tjr"td|  qt| qdS )zPreprocesses 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   rD   rE   rH   )specrI   Zfilelistr'   r   r   r   preProcessImagesm   s   

rM   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 )zDetermines 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   r2   bin   r   )r6   r7   r8   r   r9   isfilestat)r'   rF   Zoriginal_dateZcached_dater   r   r   r:      s   r:   r4    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.r4   
)replace)textZdesiredZunlikelyr   r   r   _normalizeLineEnds   s   rW   c                 C   s:   t | r	| d} t }|t|  |d | S )zEncodes 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   rA   binasciiZb2a_hexgetvalue)inputoutputr   r   r   _AsciiHexEncode   s   

r_   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.rX   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 )rb      )chrint).0r   strippedr   r   
<listcomp>   s   & z#_AsciiHexDecode.<locals>.<listcomp>)r   decoderB   r>   r   r   )r]   r   rg   r   _AsciiHexDecode   s   
$rk   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   r`   Nr4   )r   r   rB   )r]   columnsr^   lengthr   posr   r   r   _wrap   s   ,
rp   c                 C   s  ddl }ddlm} g d}g d}g d}d}d}|s	|d| d	}|d d
kr|d| d	}|d |v r| dd	 |d| d	}|d dkrU|d|d| d}	|	d d> |	d	  }
|d| d}	|	d d> |	d	  }|d| d	}	|	d }||
||fS |d dkr|d| d}|d d> |d	  d }| |}|d|dd }	|d|dd }|d d> |d	  |	d d> |	d	  f}n.|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   )                                 )H   r   Br      rb   rO   z#JPEG must have 8 bits per componentZBB   
      z#JPEG Unsupported JPEG marker: %0.2x)structZreportlab.pdfbase.pdfdocrq   unpackr=   seek)Zimager   rq   ZvalidMarkersZnoParamMarkersZunsupportedMarkersZdpiZdonexyZheightwidthZcolornr   r   r   readJPEGInfo   sL   
* 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   _klenre   _n)selfkr   r   r   r   __init__  s   
z_fusc.__init__c                 C   s.   |  tdtt| ttt|| jS Nr   )	_fusc__rotater   rB   maprd   _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   )	rB   r   rd   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   Z__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   re   r   r   )r   r   Zslenr   r   r   Z__fusc(  s   :z_fusc.__fuscN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r     s    r   )NF)r   N)r4   rR   )r	   )__version____doc__r6   r[   ior   Z	reportlabr   r;   r   r   Zreportlab.lib.rl_accelr   r   r   r#   r%   r0   r1   rH   rM   r:   rW   r_   rk   rp   r   r   r   r   r   r   <module>   s,   




5