o
    œœ<W™  ã                   @   sº  d Z dZdZddlZzddlZW n ey   ddlZY nw eedeƒZ	eede
ƒZeeƒ ƒZeede
ƒZejd dk r@eefnefZd	d
„ Zdd„ Zdd„ ZdBdd„ZdBdd„Zdd„ Zdd„ Zdd„ ZdCdd„ZG dd„ deƒZdd„ Zd d!„ Z d"d#„ Z!G d$d%„ d%e"ƒZ#G d&d'„ d'e#ƒZ$G d(d)„ d)e#ƒZ%G d*d+„ d+e&ƒZ'G d,d-„ d-e$ƒZ(ejd dk r²d.d/„ Z)ni Z*d0d/„ Z)d1d2„ Z+d3d4„ Z,d5d6„ Z-d7d8„ Z.d9d:„ Z/d;d<„ Z0d=d>„ Z1d?d@„ dAD ƒZ2dS )Dz$
Utility functions for PDF library.
zMathieu Fenniakzbiziqe@mathieu.fenniak.neté    NÚxrangeÚ
basestringÚunicodeé   c                 C   ó
   t | tƒS )z8Test if arg is a string. Compatible with Python 2 and 3.)Ú
isinstanceÚ_basestring©Ús© r   ú>/var/www/html/env/lib/python3.10/site-packages/PyPDF2/utils.pyÚisString4   ó   
r   c                 C   r   )z6Test if arg is an int. Compatible with Python 2 and 3.)r   Ú	int_types)Únr   r   r   ÚisInt9   r   r   c                 C   r   )z@Test if arg is a bytes instance. Compatible with Python 2 and 3.)r   Ú
bytes_type©Úbr   r   r   ÚisBytes>   r   r   c                 C   s*   |  dd¡ dd¡d }d|j| ||f S )Nú/ú\é   z%s: %s [%s:%s]
)ÚreplaceÚrsplitÚ__name__)ÚmessageÚcategoryÚfilenameÚlinenoÚlineÚfiler   r   r   ÚformatWarningD   s   r"   c                 C   sB   t dƒ}	 |  d¡}| ¡ s|s	 |S ||7 }t|ƒ|kr 	 |S q)z
    Reads non-whitespace characters and returns them.
    Stops upon encountering whitespace or when maxchars is reached.
    Ú Tr   )Úb_ÚreadÚisspaceÚlen)ÚstreamÚmaxcharsÚtxtÚtokr   r   r   ÚreadUntilWhitespaceI   s   
ýùr,   c                 C   s&   t d }|t v r|  d¡}|t v s|S )zQ
    Finds and reads the next non-whitespace character (ignores whitespace).
    r   r   ©ÚWHITESPACESr%   ©r(   r+   r   r   r   ÚreadNonWhitespaceY   s
   
ÿr0   c                 C   s6   t d }d}|t v r|  d¡}|d7 }|t v s
|dkS )zq
    Similar to readNonWhitespace, but returns a Boolean if more than
    one whitespace character was read.
    r   r   r-   )r(   r+   Úcntr   r   r   ÚskipOverWhitespacec   s   
þr2   c                 C   s`   |   d¡}|  dd¡ |tdƒkr,|tdƒtdƒfvr.|   d¡}|tdƒtdƒfvsd S d S d S )Nr   éÿÿÿÿú%Ú
ú)r%   Úseekr$   r/   r   r   r   ÚskipOverCommentp   s   

ÿÿr8   Fc                 C   sz   t dƒ}	 |  d¡}|s|dkr|S tdƒ‚| |¡}|dur8||d| ¡ … 7 }|  | ¡ t|ƒ d¡ 	 |S ||7 }q)zÑ
    Reads until the regular expression pattern matched (ignore the match)
    Raise PdfStreamError on premature end-of-file.
    :param bool ignore_eof: If true, ignore end-of-line and return immediately
    r#   Té   zStream has ended unexpectedlyNr   )r$   r%   ÚPdfStreamErrorÚsearchÚstartr7   r'   )r(   ÚregexÚ
ignore_eofÚnamer+   Úmr   r   r   ÚreadUntilRegexx   s   

ÿórA   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚConvertFunctionsToVirtualListc                 C   s   || _ || _d S ©N)ÚlengthFunctionÚgetFunction)ÚselfrD   rE   r   r   r   Ú__init__‘   s   
z&ConvertFunctionsToVirtualList.__init__c                 C   s   |   ¡ S rC   )rD   )rF   r   r   r   Ú__len__•   s   z%ConvertFunctionsToVirtualList.__len__c                    s„   t |tƒrt| tˆƒ¡Ž ‰ tˆƒ}|ˆ j‡ ‡fdd„ƒS t|ƒs%tdƒ‚tˆƒ}|dk r1|| }|dk s9||kr=t	dƒ‚ˆ 
|¡S )Nc                    s   ˆˆ |   S rC   r   )Úidx©ÚindicesrF   r   r   Ú<lambda>œ   s    z;ConvertFunctionsToVirtualList.__getitem__.<locals>.<lambda>z!sequence indices must be integersr   zsequence index out of range)r   ÚsliceÚ	xrange_fnrK   r'   ÚtyperH   r   Ú	TypeErrorÚ
IndexErrorrE   )rF   ÚindexÚclsÚlen_selfr   rJ   r   Ú__getitem__˜   s   

z)ConvertFunctionsToVirtualList.__getitem__N)r   Ú
__module__Ú__qualname__rG   rH   rU   r   r   r   r   rB   �   s    rB   c                 C   sò   dd„ t dƒD ƒ}d}t dƒD ]!}|||  t| |t| ƒ  ƒ d }|| || ||< ||< qd\}}tdƒ}t t|ƒƒD ]7}|d d }|||  d }|| || ||< ||< ||| ||  d  }|ttt|| ƒ|A ƒƒ7 }q?|S )Nc                 S   s   g | ]}|‘qS r   r   )Ú.0Úir   r   r   Ú
<listcomp>©   s    zRC4_encrypt.<locals>.<listcomp>é   r   )r   r   r#   r   )ÚrangeÚord_r'   r$   Úchr)ÚkeyÚ	plaintextÚSÚjrY   ÚretvalÚxÚtr   r   r   ÚRC4_encrypt¨   s   $rf   c                    s   ‡ fdd„| D ƒS )Nc                    s"   g | ]‰ ‡ fd d„t ˆŽ D ƒ‘qS )c                    s$   g | ]}t d d„ tˆ |ƒD ƒƒ‘qS )c                 S   s    g | ]\}}t |ƒt |ƒ ‘qS r   )Úfloat)rX   rY   rb   r   r   r   rZ   º   s    ÿz8matrixMultiply.<locals>.<listcomp>.<listcomp>.<listcomp>)ÚsumÚzip)rX   Úcol©Úrowr   r   rZ   º   s
    þÿz-matrixMultiply.<locals>.<listcomp>.<listcomp>)ri   )rX   r   rk   r   rZ   º   s
    
ý
þz"matrixMultiply.<locals>.<listcomp>r   )Úar   r   r   r   ÚmatrixMultiply¹   s   
ýrn   c                 C   s`   d}|   | d¡ tddƒ}| |  |¡¡ | d¡ | |  |¡¡ | ¡  |   | d¡ dS )z6Creates text file showing current location in context.iˆ  r   zPyPDF2_pdfLocation.txtÚwÚHEREN)r7   ÚopenÚwriter%   Úclose)r(   ÚRADIUSÚ	outputDocr   r   r   ÚmarkLocationÀ   s   

rv   c                   @   ó   e Zd ZdS )Ú
PyPdfErrorN©r   rV   rW   r   r   r   r   rx   Í   ó    rx   c                   @   rw   )ÚPdfReadErrorNry   r   r   r   r   r{   Ñ   rz   r{   c                   @   rw   )ÚPageSizeNotDefinedErrorNry   r   r   r   r   r|   Õ   rz   r|   c                   @   rw   )ÚPdfReadWarningNry   r   r   r   r   r}   Ù   rz   r}   c                   @   rw   )r:   Nry   r   r   r   r   r:   Ý   rz   r:   c                 C   s   | S rC   r   r	   r   r   r   r$   â   s   r$   c                 C   sF   t }| |v r
||  S t| ƒtkr| S |  d¡}t| ƒdk r!||| < |S )Núlatin-1é   )ÚB_CACHErO   ÚbytesÚencoder'   )r
   ÚbcÚrr   r   r   r$   ç   s   
c                 C   s   t jd dk rt| dƒS | S )Nr   r   Úunicode_escape)ÚsysÚversion_infor   r	   r   r   r   Úu_ô   s   
rˆ   c                 C   s,   t jd dk r	| S t| ƒtkr|  d¡S | S )Nr   r   r~   )r†   r‡   rO   r�   Údecoder   r   r   r   Ústr_û   s
   
rŠ   c                 C   s&   t jd dk st| ƒtkrt| ƒS | S ©Nr   r   )r†   r‡   rO   ÚstrÚordr   r   r   r   r]     s   r]   c                 C   ó   t jd dk r	| S t| ƒS r‹   )r†   r‡   r^   )Úcr   r   r   Úchr_  ó   r�   c                 C   rŽ   r‹   )r†   r‡   Ú	bytearrayr   r   r   r   Úbarray  r‘   r“   c                 C   s6   t jd dk r|  d¡S dd l}| d¡}|| ƒd S )Nr   r   ÚhexÚ	hex_codec)r†   r‡   r‚   ÚcodecsÚ
getencoder)r   r–   Úcoderr   r   r   Ú	hexencode  s
   

r™   c                 C   s   t | ƒ dd¡S )NÚLr#   )r”   r   )Únumr   r   r   ÚhexStr#  s   rœ   c                 C   s   g | ]}t |ƒ‘qS r   )r$   )rX   rd   r   r   r   rZ   '  s    rZ   )ú r5   r6   ú	ú rC   )F)3Ú__doc__Ú
__author__Ú__author_email__r†   Ú__builtin__ÚbuiltinsÚImportErrorÚgetattrr\   rN   rŒ   r   rO   r�   r   Ústring_typer‡   ÚintÚlongr   r   r   r   r"   r,   r0   r2   r8   rA   ÚobjectrB   rf   rn   rv   Ú	Exceptionrx   r{   r|   ÚUserWarningr}   r:   r$   r€   rˆ   rŠ   r]   r�   r“   r™   rœ   r.   r   r   r   r   Ú<module>   sX   ÿ






	