o
    \cF                     @   sH  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
 ddl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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)de'de%fddZ*dS )     N)	unhexlify)AnyCallableOptionalUnion   )_pdfdoc_encoding_rev)	
StreamTypeb_deprecate_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< defddZ	defddZ
ded  fdd	Zded  fd
dZdededeef ddfddZdS )	PdfObject).zhashlib._Hash	hash_funcreturnc                 C   s   d|    S )Nz%s)encodeself r   4lib/python3.10/site-packages/PyPDF2/generic/_base.pyhash_value_data9      zPdfObject.hash_value_datac                 C   s"   d| j j| |   f  S )Nz%s:%s)	__class____name__r   r   Z	hexdigestr   r   r   r   r   
hash_value<   s   zPdfObject.hash_valuec                 C      | S )zResolve indirect references.r   r   r   r   r   
get_objectE   s   zPdfObject.get_objectc                 C   s   t dd |  S )N	getObjectr#   )r   r#   r   r   r   r   r$   I   s   
zPdfObject.getObjectstreamencryption_keyNc                 C   s   t N)NotImplementedErrorr   r%   r&   r   r   r   write_to_streamM      zPdfObject.write_to_stream)r    
__module____qualname__hashlibZsha1r   r   __annotations__bytesr   r!   r   r#   r$   r	   r   strr*   r   r   r   r   r   5   s   
 	r   c                   @   s   e Zd Zdededeef ddfddZededd fddZ	dededeef ddfd	d
Z
defddZededd fddZdS )
NullObjectr%   r&   Nr   c                 C   s   | d d S )N   null)writer)   r   r   r   r*   T   s   zNullObject.write_to_streamc                 C   s    |  d}|dkrtdt S )N   r3   zCould not read Null object)readr   r2   )r%   Znulltxtr   r   r   read_from_streamY   s   
zNullObject.read_from_streamc                 C      t dd | || d S NwriteToStreamr*   r   r*   r)   r   r   r   r:   `      
zNullObject.writeToStreamc                 C   s   dS )Nr2   r   r   r   r   r   __repr__f   s   zNullObject.__repr__c                 C      t dd t| S NreadFromStreamr7   )r   r2   r7   r%   r   r   r   r@   i      

zNullObject.readFromStream)r    r,   r-   r	   r   r1   r0   r*   staticmethodr7   r:   r=   r@   r   r   r   r   r2   S   s(    

r2   c                   @   s   e Zd ZdeddfddZdedefddZdefd	d
Z	de
dedeef ddfddZde
dedeef ddfddZede
dd fddZede
dd fddZdS )BooleanObjectvaluer   Nc                 C   s
   || _ d S r'   rE   )r   rE   r   r   r   __init__p   s   
zBooleanObject.__init___BooleanObject__oc                 C   s.   t |tr| j|jkS t |tr| j|kS dS )NF)
isinstancerD   rE   bool)r   rH   r   r   r   __eq__s   s
   


zBooleanObject.__eq__c                 C   s   | j rdS dS )NTrueFalserF   r   r   r   r   r=   {   s   zBooleanObject.__repr__r%   r&   c                 C   s"   | j r
|d d S |d d S )N   trues   false)rE   r4   r)   r   r   r   r*   ~   s   zBooleanObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:      r<   zBooleanObject.writeToStreamc                 C   s<   |  d}|dkrtdS |dkr|  d tdS td)Nr5   rN   Ts   fals   FzCould not read Boolean object)r6   rD   r   )r%   Zwordr   r   r   r7      s   

zBooleanObject.read_from_streamc                 C   r>   r?   )r   rD   r7   rA   r   r   r   r@      rB   zBooleanObject.readFromStream)r    r,   r-   r   rG   objectrJ   rK   r1   r=   r	   r   r0   r*   r:   rC   r7   r@   r   r   r   r   rD   o   s,    


rD   c                   @   s   e Zd ZdedededdfddZdee fdd	Zde	fd
dZ
dedefddZdedefddZdedede	ef ddfddZdedede	ef ddfddZedededd fddZedededd fddZdS )IndirectObjectidnum
generationpdfr   Nc                 C   s   || _ || _|| _d S r'   )rR   rS   rT   )r   rR   rS   rT   r   r   r   rG      s   
zIndirectObject.__init__c                 C   s    | j | }|d u rd S | S r'   )rT   r#   )r   objr   r   r   r#      s   zIndirectObject.get_objectc                 C   s"   d| j d| jdt| j dS )NzIndirectObject(z, ))rR   rS   idrT   r   r   r   r   r=      s   "zIndirectObject.__repr__otherc                 C   s6   |d uot |to| j|jko| j|jko| j|ju S r'   )rI   rQ   rR   rS   rT   r   rX   r   r   r   rK      s   


zIndirectObject.__eq__c                 C   s   |  | S r'   )rK   rY   r   r   r   __ne__   r   zIndirectObject.__ne__r%   r&   c                 C   s"   | t| j d| j d d S )N z R)r4   r
   rR   rS   r)   r   r   r   r*      s   "zIndirectObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:      r<   zIndirectObject.writeToStreamc                 C   s   d}	 |  d}|stt| rn||7 }qd}	 |  d}|s&tt| r.|s-qn||7 }qt| }|dkrFtdt|   tt	|t	||S )N    TrO      Rz0Error reading indirect object reference at byte )
r6   r   r   isspacer   r   r   tellrQ   int)r%   rT   rR   tokrS   rr   r   r   r7      s4   

	zIndirectObject.read_from_streamc                 C      t dd t| |S r?   )r   rQ   r7   r%   rT   r   r   r   r@         
zIndirectObject.readFromStream)r    r,   r-   r`   r   rG   r   r   r#   r1   r=   rJ   rK   rZ   r	   r   r0   r*   r:   rC   r7   r@   r   r   r   r   rQ      s<    	

rQ   c                   @   s   e Zd Z	ddeeef dee dd fddZdefdd	Zde	fd
dZ
dededeef ddfddZdededeef ddfddZdS )FloatObject0NrE   contextr   c                 C   sJ   zt j| t||W S  ty$   td| dt t j| d Y S w )NzFloatObject (z) invalid; use 0.0 insteadz0.0)decimalDecimal__new__r   	Exceptionr   r    )clsrE   rh   r   r   r   rk      s   zFloatObject.__new__c                 C   s.   | |   krt| tdS | ddS )NrO   frg   )Zto_integralr1   Zquantizeri   rj   rstripr   r   r   r   r=      s   zFloatObject.__repr__c                 C      t t| dS Nutf8)floatreprr   r   r   r   r   
as_numeric      zFloatObject.as_numericr%   r&   c                 C      | t| d d S rq   r4   rt   r   r)   r   r   r   r*         zFloatObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:     r<   zFloatObject.writeToStream)rg   N)r    r,   r-   r   r1   r   r   rk   r=   rs   ru   r	   r0   r*   r:   r   r   r   r   rf      s2    

	
rf   c                   @   s   e Zd ZedZdedd fddZdefddZ	de
d	ed
eef dd
fddZde
d	ed
eef dd
fddZede
ded ef fddZede
ded ef fddZd
S )NumberObjects	   [^+-.0-9]rE   r   c                 C   sD   z	t | t |W S  ty!   td| dt t | d Y S w )NzNumberObject(z) invalid; use 0 insteadr   )r`   rk   
ValueErrorr   r    )rm   rE   r   r   r   rk     s   zNumberObject.__new__c                 C   rp   rq   )r`   rt   r   r   r   r   r   ru     rv   zNumberObject.as_numericr%   r&   Nc                 C   rw   rq   rx   r)   r   r   r   r*     ry   zNumberObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:     r<   zNumberObject.writeToStreamc                 C   s*   t | tj}|ddkrt|S t|S )N   .)r   rz   NumberPatternfindrf   )r%   Znumr   r   r   r7   "  s   zNumberObject.read_from_streamc                 C   r>   r?   )r   rz   r7   rA   r   r   r   r@   )  s   

zNumberObject.readFromStream)r    r,   r-   recompiler~   r   rk   r`   ru   r	   r   r1   r0   r*   r:   rC   rf   r7   r@   r   r   r   r   rz   
  s4    



rz   c                   @   sb   e Zd ZdZedefddZdedede	ef ddfdd	Z
dedede	ef ddf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.
    r   c                 C   r"   )z7For compatibility with TextStringObject.original_bytes.r   r   r   r   r   original_bytes9  r+   zByteStringObject.original_bytesr%   r&   Nc                 C   sD   | }|rddl m} |||}|d |t| |d d S )Nr   RC4_encrypt   <   >)	_securityr   r4   r   )r   r%   r&   bytearrr   r   r   r   r*   >  s   

z ByteStringObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:   J  r<   zByteStringObject.writeToStream)r    r,   r-   __doc__propertyr0   r   r	   r   r1   r*   r:   r   r   r   r   r   1  s$    
r   c                   @   sx   e Zd ZdZdZdZedefddZdefddZ	de
d	ed
eef dd
fddZde
d	ed
eef dd
f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   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   s,   | j rtj| d S | jrt| S td)Nutf-16bez#no information about original bytes)autodetect_utf16codecsBOM_UTF16_BEr   autodetect_pdfdocencodingencode_pdfdocencodingrl   r   r   r   r   r   f  s
   z#TextStringObject.get_original_bytesr%   r&   Nc                 C   s   zt | }W n ty   tj| d }Y nw |r1ddlm} |||}t|}||d  d S |	d |D ]}t
| sN|dkrN|	td|  q8|	tt
| q8|	d d S )Nr   r   r      (    z\%03o   ))r   UnicodeEncodeErrorr   r   r   r   r   r   r*   r4   chrisalnumr
   )r   r%   r&   r   r   rU   cr   r   r   r*   s  s    

z TextStringObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:     r<   zTextStringObject.writeToStream)r    r,   r-   r   r   r   r   r0   r   r   r	   r   r1   r*   r:   r   r   r   r   r   Q  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	de
deef ddfddZde	de
deef ddfddZdefddZededefddZede	dedd fddZede	dedd fddZdS )
NameObjects   \s+|[\(\)<>\[\]{}/%]   /s   #23s   #28s   #29s   #2F)#(rV   /c                 C   s"   i | ]}t |d |d qS )r   02X)r   r   ).0ir   r   r   
<dictcomp>  s   " zNameObject.<dictcomp>!   r%   r&   Nr   c                 C   s   | |   d S r'   )r4   renumberr)   r   r   r   r*     s   zNameObject.write_to_streamc                 C   r8   r9   r;   r)   r   r   r   r:     r<   zNameObject.writeToStreamc              	   C   s   | d  d}|dkrtd|  dt | dd  D ]2}|dkr3| dD ]}|d|d	  7 }q%qz	|| j| 7 }W q tyL   || d7 }Y qw |S )
Nr   utf-8r   z$Incorrect first char in NameObject:(rV   rO   ~r   r   )r   r   r    renumber_tableKeyError)r   outr   xr   r   r   r     s   zNameObject.renumbersinc                 C   s   |  dd}|dkr@z$| d | t| |d |d   | |d d   } |  d|d }W n ty;   |d }Y nw |dks
| S )N   #r   rO      )r   r   r{   )r   r   r   r   r   unnumber  s   4zNameObject.unnumberrT   c              
   C   s   |  d}|tjkrtd|t| tjdd7 }z(t|}dD ]}z||}t|W   W S  ty8   Y q w t	d|ddd t
t	fyt } z&|jsetd	t| d
t t|dW  Y d }~S td	t| d
|d }~ww )NrO   zname read errorT)Z
ignore_eof)r   gbk r   zCode Not Foundz"Illegal character in Name Object (rV   charmap)r6   r   surfixr   r   delimiter_patternr   decoderl   UnicodeDecodeErrorr   strictr   rt   r    )r%   rT   nameencreter   r   r   r7     s6   



zNameObject.read_from_streamc                 C   rc   r?   )r   r   r7   rd   r   r   r   r@     re   zNameObject.readFromStream)r    r,   r-   r   r   r   r   ranger   r	   r   r1   r0   r*   r:   r   rC   r   r   r7   r@   r   r   r   r   r     sJ    


r   unicode_stringr   c              
   C   sH   d}| D ]}z|t tt| 7 }W q ty!   td|dddw |S )Nr\   Zpdfdocencodingr}   z#does not exist in translation table)r
   r   r   r   r   )r   Zretvalr   r   r   r   r     s   
r   )+r   ri   r.   r   Zbinasciir   typingr   r   r   r   _codecsr   Z_utilsr	   r
   r   r   r   r   r   r   r   errorsr   r   r   
__author__Z__author_email__r   r2   rD   rQ   rj   rf   r`   rz   r0   r   r1   r   r   r   r   r   r   r   <module>   s*   ,.I$' FV