a
    8Xh]                     @   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#   Y/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/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y(   Y n0 t| dr| j }t|jd }|durt|j|jvrpi |jt|j< |j|jt|j v r|	|jt|j |j }|dusJ |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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"   rB   rC   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   rG   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_destrP   )r	   r>   rP   r/   r#   r#   r$   r0      s    zNullObject.clonerA   c                 C   s   | d d S )N   null)writerF   r#   r#   r$   rG      s    zNullObject.write_to_streamrB   r   c                 C   s    |  d}|dkrtdt S )N   rR   zCould not read Null object)readr   rP   )rB   Znulltxtr#   r#   r$   read_from_stream   s    
zNullObject.read_from_streamc                 C   s   t ddd | || d S NwriteToStreamrG   r@   r   rG   rF   r#   r#   r$   rY      s    zNullObject.writeToStreamr   c                 C   s   dS )NrP   r#   r!   r#   r#   r$   __repr__   s    zNullObject.__repr__c                 C   s   t ddd t| S NreadFromStreamrW   r@   )r   rP   rW   rB   r#   r#   r$   r]      s    zNullObject.readFromStream)Fr#   )r'   rH   rI   r   rN   r   r   rO   r   r0   r   rM   rG   staticmethodrW   rY   r[   r]   r#   r#   r#   r$   rP      s&     
rP   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 rD   rb   )r"   rb   r#   r#   r$   __init__   s    zBooleanObject.__init__Fr#   .r*   c                 C   s   t d| t| j|S )rQ   r`   )r	   r>   r`   rb   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)
isinstancer`   rb   rN   )r"   re   r#   r#   r$   __eq__   s
    


zBooleanObject.__eq__r   c                 C   s   | j r
dS dS )NTrueFalserc   r!   r#   r#   r$   r[      s    zBooleanObject.__repr__rA   c                 C   s    | j r|d n
|d d S )N   trues   false)rb   rS   rF   r#   r#   r$   rG      s    zBooleanObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY      s    zBooleanObject.writeToStreamrT   c                 C   s@   |  d}|dkrtdS |dkr4|  d tdS tdd S )NrU   rj   Ts   falsr1   FzCould not read Boolean object)rV   r`   r   )rB   wordr#   r#   r$   rW      s    

zBooleanObject.read_from_streamc                 C   s   t ddd t| S r\   )r   r`   rW   r^   r#   r#   r$   r]      s    zBooleanObject.readFromStream)Fr#   )r'   rH   rI   r   rd   r   rN   r   r   rO   r   r0   objectrg   r[   r   rM   rG   rY   r_   rW   r]   r#   r#   r#   r$   r`      s*     	
r`   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 rD   )r8   rm   r2   )r"   r8   rm   r2   r#   r#   r$   rd      s    zIndirectObject.__init__Fr#   .r*   c                 C   s   | j |kr|s| S t| j |jvr2i |jt| j < |sj| j|jt| j  v rj||jt| j  | j }n"|  }|dus~J ||||}|dusJ |jdusJ |jS )rQ   N)r2   r6   r7   r8   r9   r0   r   )r"   r+   r,   r-   dupr=   r#   r#   r$   r0      s    zIndirectObject.cloner   c                 C   s   | S rD   r#   r!   r#   r#   r$   r      s    z!IndirectObject.indirect_referencer   c                 C   s    | j | }|d u rd S | S rD   )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   rm   r6   r2   r!   r#   r#   r$   r[     s    zIndirectObject.__repr__)otherr   c                 C   s6   |d uo4t |to4| j|jko4| j|jko4| j|ju S rD   )rf   r   r8   rm   r2   r"   rp   r#   r#   r$   rg     s    


zIndirectObject.__eq__c                 C   s   |  | S rD   )rg   rq   r#   r#   r$   __ne__  s    zIndirectObject.__ne__rA   c                 C   s"   | t| j d| j d d S )N z R)rS   r   r8   rm   rF   r#   r#   r$   rG     s    zIndirectObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY     s    zIndirectObject.writeToStreamrB   r2   r   c                 C   s   d}|  d}|stt| r$q.||7 }qd}|  d}|sHtt| rX|sbq2qb||7 }q2t| }|dkrtdt|   tt	|t	||S )N    r1      Rz0Error reading indirect object reference at byte )
rV   r   r   isspacer   r   r   tellr   int)rB   r2   r8   tokrm   rr#   r#   r$   rW   "  s,    



zIndirectObject.read_from_streamc                 C   s   t ddd t| |S r\   )r   r   rW   rB   r2   r#   r#   r$   r]   =  s    zIndirectObject.readFromStream)Fr#   )r'   rH   rI   ry   r   rd   r   rN   r   r   rO   r   r0   propertyr   r   r9   r[   rg   rr   r   rM   rG   rY   r_   rW   r]   r#   r#   r#   r$   r      s6     	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)rb   contextr   c                 C   sN   zt j| t||W S  tyH   td| dt t j| d Y S 0 d S )NzFloatObject (z) invalid; use 0.0 insteadz0.0)decimalDecimal__new__r   r.   r   r'   )clsrb   r   r#   r#   r$   r   F  s
    zFloatObject.__new__Fr#   .r*   c                 C   s   t d| t| |S )rQ   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_integralrO   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_numericrA   c                 C   s   | t| d d S r   rS   r   r    rF   r#   r#   r$   rG   f  s    zFloatObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY   k  s    zFloatObject.writeToStream)r   N)Fr#   )r'   rH   rI   r   rO   r   r   r   rN   r   r   r0   r[   r   r   r   rM   rG   rY   r#   r#   r#   r$   r~   E  s*      		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]ra   c                 C   sH   zt | t |W S  tyB   td| dt t | d Y S 0 d S )NzNumberObject(z) invalid; use 0 insteadr   )ry   r   
ValueErrorr   r'   )r   rb   r#   r#   r$   r   u  s
    zNumberObject.__new__Fr#   .Nr*   c                 C   s   t d| t| |S )rQ   r   )r	   r>   r   r/   r#   r#   r$   r0   |  s    zNumberObject.cloner   c                 C   s   t t| dS r   )ry   r   r    r!   r#   r#   r$   r     s    zNumberObject.as_numericrA   c                 C   s   | t| d d S r   r   rF   r#   r#   r$   rG     s    zNumberObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY     s    zNumberObject.writeToStream)r   r~   rT   c                 C   s*   t | tj}|ddkr"t|S t|S )N   .)r   r   NumberPatternfindr~   )rB   numr#   r#   r$   rW     s    zNumberObject.read_from_streamc                 C   s   t ddd t| S r\   )r   r   rW   r^   r#   r#   r$   r]     s    zNumberObject.readFromStream)Fr#   )r'   rH   rI   recompiler   r   r   rN   r   r   rO   r   r0   ry   r   r   rM   rG   rY   r_   rW   r]   r#   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
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 )rQ   r   )r	   r>   r   rM   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_bytesrA   c                 C   sD   | }|rddl m} |||}|d |t| |d d S )Nr
   RC4_encrypt   <   >)	_securityr   rS   r   )r"   rB   rC   bytearrr   r#   r#   r$   rG     s    

z ByteStringObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY     s    zByteStringObject.writeToStream)Fr#   )r'   rH   rI   __doc__r   rN   r   r   rO   r   r0   r}   rM   r   r   rG   rY   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 )rQ   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_bytesrA   c                 C   s   zt | }W n" ty.   tj| d }Y n0 |r`ddlm} |||}t|}||d  nX|	d |D ]>}t
| s|dkr|	td|  qn|	tt
| qn|	d d S )Nr   r
   r      (    z\%03o   ))r   UnicodeEncodeErrorr   r   r    r   r   r   rG   rS   chrisalnumr   )r"   rB   rC   r   r   r=   cr#   r#   r$   rG     s    

z TextStringObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY     s    zTextStringObject.writeToStream)Fr#   )r'   rH   rI   r   r   rN   r   r   rO   r   r0   r   r   r}   rM   r   r   r   rG   rY   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)#(ro   /c                 C   s"   i | ]}t |d |d qS )r   02X)r   r    ).0r<   r#   r#   r$   
<dictcomp>(  ru   zNameObject.<dictcomp>!   Fr#   .Nr*   c                 C   s   t d| t| |S )rQ   r   )r	   r>   r   r/   r#   r#   r$   r0   +  s    zNameObject.clonerA   c                 C   s   | |   d S rD   )rS   renumberrF   r#   r#   r$   rG   4  s    zNameObject.write_to_streamc                 C   s   t ddd | || d S rX   rZ   rF   r#   r#   r$   rY   9  s    zNameObject.writeToStreamr   c              	   C   s   | d  d}|dkr(td|  dt | dd  D ]f}|dkrf| dD ]}|d|d	  7 }qJq4z|| j| 7 }W q4 ty   || d7 }Y q40 q4|S )
Nr   utf-8r   z$Incorrect first char in NameObject:(ro   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rzzH| d | t| |d |d   | |d d   } |  d|d }W q tyv   |d }Y q0 q| S )N   #r   r1      )r   r   r   )r   r<   r#   r#   r$   unnumberN  s    4zNameObject.unnumberrt   c              
   C   s  |  d}|tjkrtd|t| tjdd7 }zVt|}dD ]2}z||}t|W   W S  typ   Y q@0 q@t	d|dddW nv t
t	f y } zX|jstd	t| d
t t|dW  Y d }~S td	t| d
|W Y d }~n
d }~0 0 d S )Nr1   zname read errorT)Z
ignore_eof)r   gbk r   zCode Not Foundz"Illegal character in Name Object (ro   charmap)rV   r   surfixr   r   delimiter_patternr   decoder.   UnicodeDecodeErrorr   strictr   r   r'   )rB   r2   nameencreter#   r#   r$   rW   [  s0    



zNameObject.read_from_streamc                 C   s   t ddd t| |S r\   )r   r   rW   r|   r#   r#   r$   r]   w  s    zNameObject.readFromStream)Fr#   )r'   rH   rI   r   r   r   r   ranger   r   rN   r   r   rO   r   r0   r   rM   rG   rY   r   r_   r   rW   r]   r#   r#   r#   r$   r      s@   
  
r   )unicode_stringr   c              
   C   sN   d}| D ]@}z|t tt| 7 }W q tyF   td|dddY q0 q|S )Nru   Zpdfdocencodingr   z#does not exist in translation table)r   r   r   r   r   )r   retvalr   r#   r#   r$   r     s    
r   )1r   r   rJ   r   binasciir   typingr   r   r   r   r   r   r	   _codecsr   Z
_protocolsr   r   _utilsr   r   r   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   rP   r`   r   r   r~   ry   r   rM   r   rO   r   r   r   r#   r#   r#   r$   <module>   s*   $,M%9d-0,R_