o
    eF                     @   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   DD:\Projects\ConvertPro\env\Lib\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   	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__hashlib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   r5   zCould not read Null object)readr   r4   )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 )Nr4   r   r   r   r   r   __repr__f   s   zNullObject.__repr__c                 C      t dd t| S NreadFromStreamr9   )r   r4   r9   r&   r   r   r   rB   i      

zNullObject.readFromStream)r    r-   r.   r	   r   r3   r2   r+   staticmethodr9   r<   r?   rB   r   r   r   r   r4   S   s(    

r4   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(   rG   )r   rG   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)
isinstancerF   rG   bool)r   rJ   r   r   r   __eq__s   s
   


zBooleanObject.__eq__c                 C   s   | j rdS dS )NTrueFalserH   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)rG   r6   r*   r   r   r   r+   ~   s   zBooleanObject.write_to_streamc                 C   r:   r;   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)Nr7   rP   Ts   fals   FzCould not read Boolean object)r8   rF   r   )r&   wordr   r   r   r9      s   

zBooleanObject.read_from_streamc                 C   r@   rA   )r   rF   r9   rC   r   r   r   rB      rD   zBooleanObject.readFromStream)r    r-   r.   r   rI   objectrL   rM   r3   r?   r	   r   r2   r+   r<   rE   r9   rB   r   r   r   r   rF   o   s,    


rF   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(   )rU   rV   rW   )r   rU   rV   rW   r   r   r   rI      s   
zIndirectObject.__init__c                 C   s    | j | }|d u rd S | S r(   )rW   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, ))rU   rV   idrW   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(   )rK   rT   rU   rV   rW   r   r[   r   r   r   rM      s   


zIndirectObject.__eq__c                 C   s   |  | S r(   )rM   r\   r   r   r   __ne__   r   zIndirectObject.__ne__r&   r'   c                 C   s"   | t| j d| j d d S )N z R)r6   r
   rU   rV   r*   r   r   r   r+      s   "zIndirectObject.write_to_streamc                 C   r:   r;   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    TrQ      Rz0Error reading indirect object reference at byte )
r8   r   r   isspacer   r   r   tellrT   int)r&   rW   rU   tokrV   rr   r   r   r9      s4   

	zIndirectObject.read_from_streamc                 C      t dd t| |S rA   )r   rT   r9   r&   rW   r   r   r   rB         
zIndirectObject.readFromStream)r    r-   r.   rc   r   rI   r   r   r$   r3   r?   rL   rM   r]   r	   r   r2   r+   r<   rE   r9   rB   r   r   r   r   rT      s<    	

rT   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0NrG   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    )clsrG   rk   r   r   r   rn      s   zFloatObject.__new__c                 C   s.   | |   krt| tdS | ddS )NrQ   frj   )to_integralr3   quantizerl   rm   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 rv   r6   ry   r   r*   r   r   r   r+         zFloatObject.write_to_streamc                 C   r:   r;   r=   r*   r   r   r   r<     r>   zFloatObject.writeToStream)rj   N)r    r-   r.   r   r3   r   r   rn   r?   rx   rz   r	   r2   r+   r<   r   r   r   r   ri      s2    

	
ri   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]rG   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   )rc   rn   
ValueErrorr   r    )rp   rG   r   r   r   rn     s   zNumberObject.__new__c                 C   ru   rv   )rc   ry   r   r   r   r   r   rz     r{   zNumberObject.as_numericr&   r'   Nc                 C   r|   rv   r}   r*   r   r   r   r+     r~   zNumberObject.write_to_streamc                 C   r:   r;   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   r   NumberPatternfindri   )r&   numr   r   r   r9   "  s   zNumberObject.read_from_streamc                 C   r@   rA   )r   r   r9   rC   r   r   r   rB   )  s   

zNumberObject.readFromStream)r    r-   r.   recompiler   r   rn   rc   rz   r	   r   r3   r2   r+   r<   rE   ri   r9   rB   r   r   r   r   r   
  s4    



r   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   r6   r   )r   r&   r'   bytearrr   r   r   r   r+   >  s   

z ByteStringObject.write_to_streamc                 C   r:   r;   r=   r*   r   r   r   r<   J  r>   zByteStringObject.writeToStream)r    r-   r.   __doc__propertyr2   r   r	   r   r3   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_pdfdocencodingro   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+   r6   chrisalnumr
   )r   r&   r'   r   r   rX   cr   r   r   r+   s  s    

z TextStringObject.write_to_streamc                 C   r:   r;   r=   r*   r   r   r   r<     r>   zTextStringObject.writeToStream)r    r-   r.   r   r   r   r   r2   r   r   r	   r   r3   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)#(rY   /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(   )r6   renumberr*   r   r   r   r+     s   zNameObject.write_to_streamc                 C   r:   r;   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:(rY   rQ   ~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   rQ      )r   r   r   )r   r   r   r   r   unnumber  s   4zNameObject.unnumberrW   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 )NrQ   zname read errorT)Z
ignore_eof)r   gbk r   zCode Not Foundz"Illegal character in Name Object (rY   charmap)r8   r   surfixr   r   delimiter_patternr   decodero   UnicodeDecodeErrorr   strictr   ry   r    )r&   rW   nameencreter   r   r   r9     s6   



zNameObject.read_from_streamc                 C   rf   rA   )r   r   r9   rg   r   r   r   rB     rh   zNameObject.readFromStream)r    r-   r.   r   r   r   r   ranger   r	   r   r3   r2   r+   r<   r   rE   r   r   r9   rB   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   retvalr   r   r   r   r     s   
r   )+r   rl   r/   r   binasciir   typingr   r   r   r   _codecsr   _utilsr	   r
   r   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   r4   rF   rT   rm   ri   rc   r   r2   r   r3   r   r   r   r   r   r   r   <module>   s*   ,.I$' FV