U
    Y»{j²]  ã                   @   sd  d dl 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
mZmZmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZmZm Z  d	Z!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j'e#ƒZ(G dd„ de)e#ƒZ*G dd„ de+e#ƒZ,G dd„ de-e#ƒZ.G dd„ de-e#ƒZ/e-e+dœdd„Z0dS ) é    N)Ú	unhexlify)ÚAnyÚCallableÚListÚOptionalÚTupleÚUnionÚcasté   )Ú_pdfdoc_encoding_rev)ÚPdfObjectProtocolÚPdfWriterProtocol)	Ú
StreamTypeÚb_Údeprecation_with_replacementÚhex_strÚ	hexencodeÚlogger_warningÚread_non_whitespaceÚread_until_regexÚstr_)ÚSTREAM_TRUNCATED_PREMATURELYÚPdfReadErrorÚPdfStreamErrorzMathieu Fenniakzbiziqe@mathieu.fenniak.netc                   @   sÆ   e Zd ZU ejZed ed< ed ed< e	dœdd„Z
e	dœdd	„Zdeeeeedf ee df d dœdd„Zeeedœdd„Zed  dœdd„Zed  dœdd„Zeedee	f ddœdd„ZdS )Ú	PdfObject).zhashlib._HashÚ	hash_funcÚIndirectObjectÚindirect_reference©Úreturnc                 C   s   d|    ¡ S )Nz%s)Úencode©Úself© r#   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PyPDF2/generic/_base.pyÚhash_value_data;   s    zPdfObject.hash_value_datac                 C   s"   d| j j|  |  ¡ ¡ ¡ f  ¡ S )Nz%s:%s)Ú	__class__Ú__name__r   r%   Ú	hexdigestr    r!   r#   r#   r$   Ú
hash_value>   s    þÿÿzPdfObject.hash_valueFr#   .N©Úpdf_destÚforce_duplicateÚignore_fieldsr   c                 C   s   t dƒ‚dS )a  
        clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter)
        force_duplicate: in standard if the object has been already cloned and reference,
                         the copy is returned; when force_duplicate == True, a new copy is always performed
        ignore_fields : list/tuple of Fields names (for dictionaries that will be ignored during cloning (apply also to childs duplication)
        in standard, clone function call _reference_clone (see _reference)
        zclone PdfObjectN)Ú	Exception©r"   r+   r,   r-   r#   r#   r$   ÚcloneG   s    zPdfObject.clone)r0   r+   r   c                 C   sè   z|j j|kr|W S W n tk
r*   Y nX t| dƒrä| j }t|jƒd }|dk	rÊt|jƒ|jkrri |jt|jƒ< |j|jt|jƒ kr´| 	|jt|jƒ |j ¡}|dk	s°t
‚|S ||jt|jƒ |j< |j |¡ t|d|ƒ|_ |S )zü
        reference the object within the _objects of pdf_dest only if
        indirect_reference attribute exists (which means the objects
        was already identified in xref/xobjstm)
        if object has been already referenced do nothing
        r   é   Nr   )r   Úpdfr.   ÚhasattrÚlenÚ_objectsÚidÚ_id_translatedÚidnumÚ
get_objectÚAssertionErrorÚappendr   )r"   r0   r+   ÚindÚiÚobjr#   r#   r$   Ú_reference_cloneV   s*    	

ÿzPdfObject._reference_clonec                 C   s   | S )zResolve indirect references.r#   r!   r#   r#   r$   r9   u   s    zPdfObject.get_objectc                 C   s   t dddƒ |  ¡ S )NÚ	getObjectr9   ú3.0.0)r   r9   r!   r#   r#   r$   r@   y   s    zPdfObject.getObject©ÚstreamÚencryption_keyr   c                 C   s   t ‚d S ©N)ÚNotImplementedError©r"   rC   rD   r#   r#   r$   Úwrite_to_stream}   s    zPdfObject.write_to_stream)Fr#   )r'   Ú
__module__Ú__qualname__ÚhashlibÚsha1r   r   Ú__annotations__r   Úbytesr%   r)   r   Úboolr   r   Ústrr   r0   r   r   r?   r9   r@   r   rH   r#   r#   r#   r$   r   6   s,   
  üû þ þr   c                   @   s¦   e Zd Zdeeeeedf ee df d dœdd„Z	e
edeef ddœd	d
„Zee
d dœdd„ƒZe
edeef ddœdd„Zedœdd„Zee
d dœdd„ƒZdS )Ú
NullObjectFr#   .Nr*   c                 C   s   t d|  tƒ |¡ƒS )úclone object into pdf_destrQ   )r	   r?   rQ   r/   r#   r#   r$   r0   „   s    zNullObject.clonerB   c                 C   s   |  d¡ d S )Nó   null)ÚwriterG   r#   r#   r$   rH   �   s    zNullObject.write_to_stream©rC   r   c                 C   s    |   d¡}|dkrtdƒ‚tƒ S )Né   rS   zCould not read Null object)Úreadr   rQ   )rC   Znulltxtr#   r#   r$   Úread_from_stream’   s    
zNullObject.read_from_streamc                 C   s   t dddƒ |  ||¡ d S ©NÚwriteToStreamrH   rA   ©r   rH   rG   r#   r#   r$   rZ   ™   s    zNullObject.writeToStreamr   c                 C   s   dS )NrQ   r#   r!   r#   r#   r$   Ú__repr__Ÿ   s    zNullObject.__repr__c                 C   s   t dddƒ t | ¡S ©NÚreadFromStreamrX   rA   )r   rQ   rX   ©rC   r#   r#   r$   r^   ¢   s    zNullObject.readFromStream)Fr#   )r'   rI   rJ   r   rO   r   r   rP   r   r0   r   rN   rH   ÚstaticmethodrX   rZ   r\   r^   r#   r#   r#   r$   rQ   ƒ   s*     üû
 þ þrQ   c                   @   sÆ   e Zd Zeddœdd„Zdeeeee	df e
e	 df d dœd	d
„Zeedœdd„Ze	dœdd„Zeede	ef ddœdd„Zeede	ef ddœdd„Zeed dœdd„ƒZeed dœdd„ƒZdS )ÚBooleanObjectN©Úvaluer   c                 C   s
   || _ d S rE   ©rc   )r"   rc   r#   r#   r$   Ú__init__©   s    zBooleanObject.__init__Fr#   .r*   c                 C   s   t d|  t| jƒ|¡ƒS )rR   ra   )r	   r?   ra   rc   r/   r#   r#   r$   r0   ¬   s     ÿzBooleanObject.clone)Ú_BooleanObject__or   c                 C   s2   t |tƒr| j|jkS t |tƒr*| j|kS dS d S )NF)Ú
isinstancera   rc   rO   )r"   rf   r#   r#   r$   Ú__eq__·   s
    


zBooleanObject.__eq__r   c                 C   s   | j r
dS dS )NÚTrueÚFalserd   r!   r#   r#   r$   r\   ¿   s    zBooleanObject.__repr__rB   c                 C   s    | j r| d¡ n
| d¡ d S )Nó   trues   false)rc   rT   rG   r#   r#   r$   rH   Â   s    zBooleanObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ   Ê   s    zBooleanObject.writeToStreamrU   c                 C   s@   |   d¡}|dkrtdƒS |dkr4|   d¡ tdƒS tdƒ‚d S )NrV   rk   Ts   falsr1   FzCould not read Boolean object)rW   ra   r   )rC   Úwordr#   r#   r$   rX   Ð   s    

zBooleanObject.read_from_streamc                 C   s   t dddƒ t | ¡S r]   )r   ra   rX   r_   r#   r#   r$   r^   Û   s    zBooleanObject.readFromStream)Fr#   )r'   rI   rJ   r   re   r   rO   r   r   rP   r   r0   Úobjectrh   r\   r   rN   rH   rZ   r`   rX   r^   r#   r#   r#   r$   ra   ¨   s.     üû þ	 þ
ra   c                   @   s  e Zd Zeeeddœdd„Zd"eeee	e
df ee
 df d dœd	d
„Zed dœdd„ƒZed dœdd„Ze
dœdd„Zeedœdd„Zeedœdd„Zeede
ef ddœdd„Zeede
ef ddœdd„Zeeed dœdd„ƒZeeed dœd d!„ƒZdS )#r   N)r8   Ú
generationr2   r   c                 C   s   || _ || _|| _d S rE   )r8   rn   r2   )r"   r8   rn   r2   r#   r#   r$   re   â   s    zIndirectObject.__init__Fr#   .r*   c                 C   s¬   | j |kr|s| S t| j ƒ|jkr2i |jt| j ƒ< |sj| j|jt| j ƒ krj| |jt| j ƒ | j ¡}n"|  ¡ }|dk	s~t‚| |||¡}|dk	s˜t‚|jdk	s¦t‚|jS )rR   N)r2   r6   r7   r8   r9   r:   r0   r   )r"   r+   r,   r-   Údupr>   r#   r#   r$   r0   ç   s    zIndirectObject.cloner   c                 C   s   | S rE   r#   r!   r#   r#   r$   r   þ   s    z!IndirectObject.indirect_referencer   c                 C   s    | j  | ¡}|d krd S | ¡ S rE   )r2   r9   )r"   r>   r#   r#   r$   r9     s    zIndirectObject.get_objectc                 C   s"   d| j ›d| j›dt| jƒ› d�S )NzIndirectObject(z, ú))r8   rn   r6   r2   r!   r#   r#   r$   r\     s    zIndirectObject.__repr__)Úotherr   c                 C   s6   |d k	o4t |tƒo4| j|jko4| j|jko4| j|jkS rE   )rg   r   r8   rn   r2   ©r"   rq   r#   r#   r$   rh     s    ÿ
þ
ý
ûzIndirectObject.__eq__c                 C   s   |   |¡ S rE   )rh   rr   r#   r#   r$   Ú__ne__  s    zIndirectObject.__ne__rB   c                 C   s"   |  t| j› d| j› d�ƒ¡ d S )Nú z R)rT   r   r8   rn   rG   r#   r#   r$   rH     s    zIndirectObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ     s    zIndirectObject.writeToStream©rC   r2   r   c                 C   sœ   d}|   d¡}|sttƒ‚| ¡ r$q.||7 }qd}|   d¡}|sHttƒ‚| ¡ rX|sbq2qb||7 }q2t| ƒ}|dkrˆtdt|  ¡ ƒ› �ƒ‚tt	|ƒt	|ƒ|ƒS )Nó    r1   ó   Rz0Error reading indirect object reference at byte )
rW   r   r   Úisspacer   r   r   Útellr   Úint)rC   r2   r8   Útokrn   Úrr#   r#   r$   rX   "  s,    



ÿzIndirectObject.read_from_streamc                 C   s   t dddƒ t | |¡S r]   )r   r   rX   ©rC   r2   r#   r#   r$   r^   =  s    zIndirectObject.readFromStream)Fr#   )r'   rI   rJ   rz   r   re   r   rO   r   r   rP   r   r0   Úpropertyr   r   r9   r\   rh   rs   r   rN   rH   rZ   r`   rX   r^   r#   r#   r#   r$   r   á   s<     üû	 þ þ þr   c                   @   s¬   e Zd Zdeeef ee d dœdd„Zdeeee	edf e
e df d d	œd
d„Zedœdd„Zedœdd„Zeedeef ddœdd„Zeedeef ddœdd„ZdS )ÚFloatObjectÚ0N)rc   Úcontextr   c                 C   sP   zt j | t|ƒ|¡W S  tk
rJ   td|› d�tƒ t j | d¡ Y S X d S )NzFloatObject (z) invalid; use 0.0 insteadz0.0)ÚdecimalÚDecimalÚ__new__r   r.   r   r'   )Úclsrc   r�   r#   r#   r$   r„   F  s
    zFloatObject.__new__Fr#   .r*   c                 C   s   t d|  t| ƒ|¡ƒS )rR   r   )r	   r?   r   r/   r#   r#   r$   r0   Q  s    zFloatObject.cloner   c                 C   s2   | |   ¡ kr t|  t d¡¡ƒS | d› d¡S d S )Nr1   Úfr€   )Úto_integralrP   Úquantizer‚   rƒ   Úrstripr!   r#   r#   r$   r\   Z  s    zFloatObject.__repr__c                 C   s   t t| ƒ d¡ƒS ©NÚutf8)ÚfloatÚreprr    r!   r#   r#   r$   Ú
as_numericc  s    zFloatObject.as_numericrB   c                 C   s   |  t| ƒ d¡¡ d S rŠ   ©rT   r�   r    rG   r#   r#   r$   rH   f  s    zFloatObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ   k  s    zFloatObject.writeToStream)r€   N)Fr#   )r'   rI   rJ   r   rP   r   r   r„   rO   r   r   r0   r\   rŒ   rŽ   r   rN   rH   rZ   r#   r#   r#   r$   r   E  s2      ÿ
 þ  üû		 þ þr   c                   @   sÈ   e Zd Ze d¡Zed dœdd„Zdeee	e
edf ee df d d	œd
d„Zedœdd„Zee	deef ddœdd„Zee	deef ddœdd„Zeee	d dœdd„ƒZeee	d dœdd„ƒZdS )ÚNumberObjects	   [^+-.0-9]rb   c                 C   sJ   zt  | t |ƒ¡W S  tk
rD   td|› d�tƒ t  | d¡ Y S X d S )NzNumberObject(z) invalid; use 0 insteadr   )rz   r„   Ú
ValueErrorr   r'   )r…   rc   r#   r#   r$   r„   u  s
    zNumberObject.__new__Fr#   .Nr*   c                 C   s   t d|  t| ƒ|¡ƒS )rR   r�   )r	   r?   r�   r/   r#   r#   r$   r0   |  s    zNumberObject.cloner   c                 C   s   t t| ƒ d¡ƒS rŠ   )rz   r�   r    r!   r#   r#   r$   rŽ   …  s    zNumberObject.as_numericrB   c                 C   s   |  t| ƒ d¡¡ d S rŠ   r�   rG   r#   r#   r$   rH   ˆ  s    zNumberObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ   �  s    zNumberObject.writeToStream)r�   r   rU   c                 C   s*   t | tjƒ}| d¡dkr"t|ƒS t|ƒS )Nó   .éÿÿÿÿ)r   r�   ÚNumberPatternÚfindr   )rC   Únumr#   r#   r$   rX   “  s    zNumberObject.read_from_streamc                 C   s   t dddƒ t | ¡S r]   )r   r�   rX   r_   r#   r#   r$   r^   š  s    zNumberObject.readFromStream)Fr#   )r'   rI   rJ   ÚreÚcompiler”   r   r„   rO   r   r   rP   r   r0   rz   rŽ   r   rN   rH   rZ   r`   rX   r^   r#   r#   r#   r$   r�   r  s2   

  üû	 þ þþr�   c                   @   s†   e Zd ZdZdeeeeedf e	e df d dœdd„Z
eed	œd
d„ƒZeedeef ddœdd„Zeedeef ddœdd„ZdS )ÚByteStringObjecta=  
    Represents a string object where the text encoding could not be determined.
    This occurs quite often, as the PDF spec doesn't provide an alternate way to
    represent strings -- for example, the encryption data stored in files (like
    /O) is clearly not text, but is still stored in a "String" object.
    Fr#   .Nr*   c                 C   s   t d|  tt| ƒƒ|¡ƒS )rR   r™   )r	   r?   r™   rN   r/   r#   r#   r$   r0   ª  s    þzByteStringObject.cloner   c                 C   s   | S )z7For compatibility with TextStringObject.original_bytes.r#   r!   r#   r#   r$   Úoriginal_bytes¶  s    zByteStringObject.original_bytesrB   c                 C   sD   | }|rddl m} |||ƒ}| d¡ | t|ƒ¡ | d¡ d S )Nr
   ©ÚRC4_encryptó   <ó   >)Ú	_securityrœ   rT   r   )r"   rC   rD   Úbytearrrœ   r#   r#   r$   rH   »  s    

z ByteStringObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ   Ç  s    zByteStringObject.writeToStream)Fr#   )r'   rI   rJ   Ú__doc__r   rO   r   r   rP   r   r0   r~   rN   rš   r   rH   rZ   r#   r#   r#   r$   r™   ¢  s&   
  üû þ þr™   c                   @   sœ   e Zd ZdZdeeeeedf e	e df d dœdd„Z
dZdZeed	œd
d„ƒZed	œdd„Zeedeef ddœdd„Zeedeef ddœdd„ZdS )ÚTextStringObjectzõ
    Represents a string object that has been decoded into a real unicode string.
    If read from a PDF document, this string appeared to match the
    PDFDocEncoding, or contained a UTF-16BE BOM mark to cause UTF-16 decoding to
    occur.
    Fr#   .Nr*   c                 C   s*   t | ƒ}| j|_| j|_td|  ||¡ƒS )rR   r¢   )r¢   Úautodetect_pdfdocencodingÚautodetect_utf16r	   r?   )r"   r+   r,   r-   r>   r#   r#   r$   r0   Ö  s    zTextStringObject.cloner   c                 C   s   |   ¡ S )a-  
        It is occasionally possible that a text string object gets created where
        a byte string object was expected due to the autodetection mechanism --
        if that occurs, this "original_bytes" property can be used to
        back-calculate what the original encoded bytes were.
        )Úget_original_bytesr!   r#   r#   r$   rš   å  s    zTextStringObject.original_bytesc                 C   s0   | j rtj|  d¡ S | jr$t| ƒS tdƒ‚d S )Núutf-16bez#no information about original bytes)r¤   ÚcodecsÚBOM_UTF16_BEr    r£   Úencode_pdfdocencodingr.   r!   r#   r#   r$   r¥   ï  s
    z#TextStringObject.get_original_bytesrB   c                 C   s¾   zt | ƒ}W n$ tk
r0   tj|  d¡ }Y nX |rbddlm} |||ƒ}t|ƒ}| |d ¡ nX| 	d¡ |D ]>}t
|ƒ ¡ sœ|dkrœ| 	td| ƒ¡ qp| 	tt
|ƒƒ¡ qp| 	d¡ d S )Nr¦   r
   r›   ó   (ó    z\%03oó   ))r©   ÚUnicodeEncodeErrorr§   r¨   r    rŸ   rœ   r™   rH   rT   ÚchrÚisalnumr   )r"   rC   rD   r    rœ   r>   Úcr#   r#   r$   rH   ü  s    

z TextStringObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ     s    zTextStringObject.writeToStream)Fr#   )r'   rI   rJ   r¡   r   rO   r   r   rP   r   r0   r£   r¤   r~   rN   rš   r¥   r   rH   rZ   r#   r#   r#   r$   r¢   Î  s,   
  üû	 þ þr¢   c                   @   sì   e Zd Ze d¡ZdZdddddœdd	„ ed
ƒD ƒ–Zd"e	e
eeedf ee df d dœdd„Zeedeef ddœdd„Zeedeef ddœdd„Zedœdd„Zeeedœdd„ƒZeee	d dœdd„ƒZeee	d dœd d!„ƒZdS )#Ú
NameObjects   \s+|[\(\)<>\[\]{}/%]ó   /s   #23s   #28s   #29s   #2F)ú#ú(rp   ú/c                 C   s"   i | ]}t |ƒd |d›� ¡ “qS )r³   Ú02X)r®   r    )Ú.0r=   r#   r#   r$   Ú
<dictcomp>(  s      zNameObject.<dictcomp>é!   Fr#   .Nr*   c                 C   s   t d|  t| ƒ|¡ƒS )rR   r±   )r	   r?   r±   r/   r#   r#   r$   r0   +  s    zNameObject.clonerB   c                 C   s   |  |  ¡ ¡ d S rE   )rT   ÚrenumberrG   r#   r#   r$   rH   4  s    zNameObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rY   r[   rG   r#   r#   r$   rZ   9  s    zNameObject.writeToStreamr   c              	   C   s¢   | d   d¡}|dkr(td| › d�tƒ | dd … D ]h}|dkrf|  d¡D ]}|d|d	›�  ¡ 7 }qJq4z|| j| 7 }W q4 tk
rš   ||  d¡7 }Y q4X q4|S )
Nr   úutf-8r²   z$Incorrect first char in NameObject:(rp   r1   ú~r³   r¶   )r    r   r'   Úrenumber_tableÚKeyError)r"   Úoutr°   Úxr#   r#   r$   rº   ?  s    zNameObject.renumber)Úsinr   c                 C   s€   |   dd¡}|dkr|zH| d |… t| |d |d … ƒ | |d d …  } |   d|d ¡}W q tk
rx   |d }Y qX q| S )Nó   #r   r1   é   )r•   r   r‘   )rÁ   r=   r#   r#   r$   ÚunnumberN  s    4zNameObject.unnumberru   c              
   C   sü   |   d¡}|tjkrtdƒ‚|t| tjdd�7 }zXt |¡}dD ]4}z| |¡}t|ƒW   W S  tk
rr   Y q@X q@t	d|dddƒ‚W nn t
t	fk
rö } zL|jsÐtd	t|ƒ› d
�tƒ t| d¡ƒ W Y ¢S td	t|ƒ› d
�ƒ|‚W 5 d }~X Y nX d S )Nr1   zname read errorT)Z
ignore_eof)r»   ÚgbkÚ r   zCode Not Foundz"Illegal character in Name Object (rp   Úcharmap)rW   r±   Úsurfixr   r   Údelimiter_patternrÄ   Údecoder.   ÚUnicodeDecodeErrorr­   Ústrictr   r�   r'   )rC   r2   ÚnameÚencÚretÚer#   r#   r$   rX   [  s2    



 ÿÿþzNameObject.read_from_streamc                 C   s   t dddƒ t | |¡S r]   )r   r±   rX   r}   r#   r#   r$   r^   w  s    zNameObject.readFromStream)Fr#   )r'   rI   rJ   r—   r˜   rÉ   rÈ   Úranger½   r   rO   r   r   rP   r   r0   r   rN   rH   rZ   rº   r`   rÄ   rX   r^   r#   r#   r#   r$   r±      sF   
üû  üû
 þ þ þr±   )Úunicode_stringr   c              
   C   sP   d}| D ]B}z|t tt| ƒƒ7 }W q tk
rH   td|dddƒ‚Y qX q|S )Nrv   Zpdfdocencodingr“   z#does not exist in translation table)r   r®   r   r¾   r­   )rÒ   Úretvalr°   r#   r#   r$   r©     s        ÿr©   )1r§   r‚   rK   r—   Úbinasciir   Útypingr   r   r   r   r   r   r	   Ú_codecsr   Z
_protocolsr   r   Z_utilsr   r   r   r   r   r   r   r   r   Úerrorsr   r   r   Ú
__author__Ú__author_email__r   rQ   ra   r   rƒ   r   rz   r�   rN   r™   rP   r¢   r±   r©   r#   r#   r#   r$   Ú<module>   s*   $,M%9d-0,R_