o
    ë6Wj²]  ã                   @   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"   úc/home/esfera/Documents/content_generation/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_