o
    ?Hh]                     @   sf  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/de-de+f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< de	fddZ
de	fdd	Z	
	ddededeeedf ee df dd fddZdede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IndirectObjectindirect_referencereturnc                 C   s   d|    S )Nz%s)encodeself r"   T/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/PyPDF2/generic/_base.pyhash_value_data;      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"   pdf_destforce_duplicateignore_fields.Nc                 C   s   t d)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 PdfObject)	Exceptionr!   r*   r+   r,   r"   r"   r#   cloneG   s   zPdfObject.cloner/   c                 C   s   z|j j|kr
|W S W n	 ty   Y nw t| drq| j }t|jd }|durdt|j|jvr8i |jt|j< |j|jt|j v rY|	|jt|j |j }|dusWJ |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!   r/   r*   indiobjr"   r"   r#   _reference_cloneV   s.   	
zPdfObject._reference_clonec                 C      | S )zResolve indirect references.r"   r    r"   r"   r#   r8   u      zPdfObject.get_objectc                 C   s   t ddd |  S )N	getObjectr8   3.0.0)r   r8   r    r"   r"   r#   r@   y   s   zPdfObject.getObjectstreamencryption_keyc                 C   s   t N)NotImplementedErrorr!   rB   rC   r"   r"   r#   write_to_stream}      zPdfObject.write_to_streamFr"   )r'   
__module____qualname__hashlibsha1r   r   __annotations__r   bytesr$   r)   r   boolr   r   strr   r/   r   r   r=   r8   r@   r   rG   r"   r"   r"   r#   r   6   s@   
 

r   c                
   @   s   e Zd Z		ddededeeedf ee d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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 )
NullObjectFr"   r*   r+   r,   .Nr   c                 C   s   t d| t |S )clone object into pdf_destrR   )r	   r=   rR   r.   r"   r"   r#   r/      s   zNullObject.clonerB   rC   c                 C   s   | d d S )N   null)writerF   r"   r"   r#   rG      s   zNullObject.write_to_streamc                 C   s    |  d}|dkrtdt S )N   rT   zCould not read Null object)readr   rR   )rB   nulltxtr"   r"   r#   read_from_stream   s   
zNullObject.read_from_streamc                 C      t ddd | || d S NwriteToStreamrG   rA   r   rG   rF   r"   r"   r#   r\         zNullObject.writeToStreamc                 C   s   dS )NrR   r"   r    r"   r"   r#   __repr__   s   zNullObject.__repr__c                 C      t ddd t| S NreadFromStreamrY   rA   )r   rR   rY   rB   r"   r"   r#   rb         
zNullObject.readFromStreamrI   )r'   rJ   rK   r   rP   r   r   rQ   r   r/   r   rO   rG   staticmethodrY   r\   r_   rb   r"   r"   r"   r#   rR      s>    
	

rR   c                
   @   s   e Zd ZdeddfddZ		dded	ed
eee	df e
e	 df 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 rD   rg   )r!   rg   r"   r"   r#   __init__   s   
zBooleanObject.__init__Fr"   r*   r+   r,   .c                 C   s   t d| t| j|S )rS   rf   )r	   r=   rf   rg   r.   r"   r"   r#   r/      s   zBooleanObject.clone_BooleanObject__oc                 C   s.   t |tr| j|jkS t |tr| j|kS dS )NF)
isinstancerf   rg   rP   )r!   rj   r"   r"   r#   __eq__   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__rB   rC   c                 C   s"   | j r
|d d S |d d S )N   trues   false)rg   rU   rF   r"   r"   r#   rG      s   zBooleanObject.write_to_streamc                 C   rZ   r[   r]   rF   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)NrV   ro   Ts   falsr0   FzCould not read Boolean object)rW   rf   r   )rB   wordr"   r"   r#   rY      s   

zBooleanObject.read_from_streamc                 C   r`   ra   )r   rf   rY   rc   r"   r"   r#   rb      rd   zBooleanObject.readFromStreamrI   )r'   rJ   rK   r   ri   r   rP   r   r   rQ   r   r/   objectrl   r_   r   rO   rG   r\   re   rY   rb   r"   r"   r"   r#   rf      sB    



rf   c                
   @   s"  e Zd ZdedededdfddZ			d&d
ededee	e
df ee
 df dd fddZed'ddZded 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 )(r   r7   
generationr1   r   Nc                 C   s   || _ || _|| _d S rD   )r7   rr   r1   )r!   r7   rr   r1   r"   r"   r#   ri      s   
zIndirectObject.__init__Fr"   r*   r+   r,   .c                 C   s   | j |kr	|s	| S t| j |jvri |jt| j < |s5| j|jt| j  v r5||jt| j  | j }n|  }|dus?J ||||}|dusLJ |jdusSJ |jS )rS   N)r1   r5   r6   r7   r8   r/   r   )r!   r*   r+   r,   dupr<   r"   r"   r#   r/      s   zIndirectObject.clonec                 C   r>   rD   r"   r    r"   r"   r#   r      r?   z!IndirectObject.indirect_referencer   c                 C   s    | j | }|d u rd S | S rD   )r1   r8   )r!   r<   r"   r"   r#   r8     s   zIndirectObject.get_objectc                 C   s"   d| j d| jdt| j dS )NzIndirectObject(z, ))r7   rr   r5   r1   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 rD   )rk   r   r7   rr   r1   r!   ru   r"   r"   r#   rl     s   


zIndirectObject.__eq__c                 C   s   |  | S rD   )rl   rv   r"   r"   r#   __ne__  r%   zIndirectObject.__ne__rB   rC   c                 C   s"   | t| j d| j d d S )N z R)rU   r   r7   rr   rF   r"   r"   r#   rG     s   "zIndirectObject.write_to_streamc                 C   rZ   r[   r]   rF   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    Tr0      Rz0Error reading indirect object reference at byte )
rW   r   r   isspacer   r   r   tellr   int)rB   r1   r7   tokrr   rr"   r"   r#   rY   "  s4   

	zIndirectObject.read_from_streamc                 C      t ddd t| |S ra   )r   r   rY   rB   r1   r"   r"   r#   rb   =     zIndirectObject.readFromStreamrI   )r   r   )r'   rJ   rK   r}   r   ri   r   rP   r   r   rQ   r   r/   propertyr   r   r8   r_   rl   rw   r   rO   rG   r\   re   rY   rb   r"   r"   r"   r#   r      sV    
	

r   c                
   @   s   e Zd Z	ddeeef dee dd fddZ			dd
ededee	edf e
e df 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   r-   r   r'   )clsrg   r   r"   r"   r#   r   F  s   zFloatObject.__new__Fr"   r*   r+   r,   .c                 C      t d| t| |S )rS   r   )r	   r=   r   r.   r"   r"   r#   r/   Q     zFloatObject.clonec                 C   s.   | |   krt| tdS | ddS )Nr0   fr   )to_integralrQ   quantizer   r   rstripr    r"   r"   r#   r_   Z  s   zFloatObject.__repr__c                 C      t t| dS Nutf8)floatreprr   r    r"   r"   r#   
as_numericc     zFloatObject.as_numericrB   rC   c                 C      | t| d d S r   rU   r   r   rF   r"   r"   r#   rG   f     zFloatObject.write_to_streamc                 C   rZ   r[   r]   rF   r"   r"   r#   r\   k  r^   zFloatObject.writeToStream)r   NrI   )r'   rJ   rK   r   rQ   r   r   r   rP   r   r   r/   r_   r   r   r   rO   rG   r\   r"   r"   r"   r#   r   E  sH    


		
r   c                
   @   s   e Zd ZedZdedd fddZ		dded	ed
e	e
edf ee df 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 fddZedede	d 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   )r}   r   
ValueErrorr   r'   )r   rg   r"   r"   r#   r   u  s   zNumberObject.__new__Fr"   r*   r+   r,   .Nc                 C   r   )rS   r   )r	   r=   r   r.   r"   r"   r#   r/   |  r   zNumberObject.clonec                 C   r   r   )r}   r   r   r    r"   r"   r#   r     r   zNumberObject.as_numericrB   rC   c                 C   r   r   r   rF   r"   r"   r#   rG     r   zNumberObject.write_to_streamc                 C   rZ   r[   r]   rF   r"   r"   r#   r\     r^   zNumberObject.writeToStream)r   r   c                 C   s*   t | tj}|ddkrt|S t|S )N   .)r   r   NumberPatternfindr   )rB   numr"   r"   r#   rY     s   zNumberObject.read_from_streamc                 C   r`   ra   )r   r   rY   rc   r"   r"   r#   rb     s   
zNumberObject.readFromStreamrI   )r'   rJ   rK   recompiler   r   r   rP   r   r   rQ   r   r/   r}   r   r   rO   rG   r\   re   rY   rb   r"   r"   r"   r#   r   r  sJ    


	

r   c                
   @   s   e Zd ZdZ		ddededeeedf e	e df d	d fd
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.
    Fr"   r*   r+   r,   .Nr   c                 C   s   t d| tt| |S )rS   r   )r	   r=   r   rO   r.   r"   r"   r#   r/     s   zByteStringObject.clonec                 C   r>   )z7For compatibility with TextStringObject.original_bytes.r"   r    r"   r"   r#   original_bytes  rH   zByteStringObject.original_bytesrB   rC   c                 C   sD   | }|rddl m} |||}|d |t| |d d S )Nr
   RC4_encrypt   <   >)	_securityr   rU   r   )r!   rB   rC   bytearrr   r"   r"   r#   rG     s   

z ByteStringObject.write_to_streamc                 C   rZ   r[   r]   rF   r"   r"   r#   r\     r^   zByteStringObject.writeToStreamrI   )r'   rJ   rK   __doc__r   rP   r   r   rQ   r   r/   r   rO   r   r   rG   r\   r"   r"   r"   r#   r     s:    


r   c                
   @   s   e Zd ZdZ		ddededeeedf e	e df d	d fd
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"   r*   r+   r,   .Nr   c                 C   s*   t | }| j|_| j|_td| ||S )rS   r   )r   autodetect_pdfdocencodingautodetect_utf16r	   r=   )r!   r*   r+   r,   r<   r"   r"   r#   r/     s   zTextStringObject.clonec                 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)r   codecsBOM_UTF16_BEr   r   encode_pdfdocencodingr-   r    r"   r"   r#   r     s
   z#TextStringObject.get_original_bytesrB   rC   c                 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   rG   rU   chrisalnumr   )r!   rB   rC   r   r   r<   cr"   r"   r#   rG     s    

z TextStringObject.write_to_streamc                 C   rZ   r[   r]   rF   r"   r"   r#   r\     r^   zTextStringObject.writeToStreamrI   )r'   rJ   rK   r   r   rP   r   r   rQ   r   r/   r   r   r   rO   r   r   r   rG   r\   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%de	de
deeedf ee df dd 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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)#(rt   /c                 C   s"   i | ]}t |d |d qS )r   02X)r   r   ).0r;   r"   r"   r#   
<dictcomp>(  s   " zNameObject.<dictcomp>!   Fr"   r*   r+   r,   .Nr   c                 C   r   )rS   r   )r	   r=   r   r.   r"   r"   r#   r/   +  r   zNameObject.clonerB   rC   c                 C   s   | |   d S rD   )rU   renumberrF   r"   r"   r#   rG   4  s   zNameObject.write_to_streamc                 C   rZ   r[   r]   rF   r"   r"   r#   r\   9  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:(rt   r0   ~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   r0      )r   r   r   )r   r;   r"   r"   r#   unnumberN  s   4zNameObject.unnumberr1   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 )Nr0   zname read errorT)
ignore_eof)r   gbk r   zCode Not Foundz"Illegal character in Name Object (rt   charmap)rW   r   surfixr   r   delimiter_patternr   decoder-   UnicodeDecodeErrorr   strictr   r   r'   )rB   r1   nameencreter"   r"   r#   rY   [  s6   



zNameObject.read_from_streamc                 C   r   ra   )r   r   rY   r   r"   r"   r#   rb   w  r   zNameObject.readFromStreamrI   )r'   rJ   rK   r   r   r   r   ranger   r   rP   r   r   rQ   r   r/   r   rO   rG   r\   r   re   r   rY   rb   r"   r"   r"   r#   r      s`    

	

r   unicode_stringr   c              
   C   sH   d}| D ]}z|t tt| 7 }W q ty!   td|dddw |S )Nry   pdfdocencodingr   z#does not exist in translation table)r   r   r   r   r   )r   retvalr   r"   r"   r#   r     s   
r   )1r   r   rL   r   binasciir   typingr   r   r   r   r   r   r	   _codecsr   
_protocolsr   r   _utilsr   r   r   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   rR   rf   r   r   r   r}   r   rO   r   rQ   r   r   r   r"   r"   r"   r#   <module>   s,   $,M%9d-0,R_