o
    Zhx                     @   s  d dl Z 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 d dlm	Z	 d dl
mZmZmZmZmZmZmZmZ ejdd dkrJd dl
mZ nd dl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  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*dZ+G dd de,e'Z-G dd de.e'Z/G dd de0e'Z1G dd de2e'Z3G d d! d!e2e'Z4d"e2d#e0fd$d%Z5d&ed#eede(e*f  fd'd(Z6dS ))    N)	unhexlify)log10)iter_unpack)AnyCallableClassVarDictOptionalSequenceUnioncast   )   
   )	TypeGuard_pdfdoc_encoding_rev)PdfObjectProtocolPdfWriterProtocol)
StreamTypedeprecate_no_replacementlogger_warningread_non_whitespaceread_until_regex)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efd
dZdedd fddZ		ddededeeeee	f   dd fddZ	d dedededefddZded  fddZ	d!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      t | jj d)q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        z& does not implement .hash_bin() so farNotImplementedError	__class____name__self r*   J/var/www/html/lang_env/lib/python3.10/site-packages/pypdf/generic/_base.pyhash_bin>   s   zPdfObject.hash_binc                 C   s
   |    S N)encoder(   r*   r*   r+   hash_value_dataJ      
zPdfObject.hash_value_datac                 C   s$   | j j d| |     S )N:)r&   r'   r   r/   	hexdigestr.   r(   r*   r*   r+   
hash_valueM   s
   
zPdfObject.hash_valuepdf_destc                 C   s
   |  |S )a/  
        Clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter)
        without ensuring links. This is used in clone_document_from_root with incremental = True.

        Args:
          pdf_dest: Target to clone to.

        Returns:
          The cloned PdfObject

        )cloner)   r4   r*   r*   r+   	replicateS   s   
zPdfObject.replicateFr*   force_duplicateignore_fieldsc                 C   r"   )a  
        Clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter).

        By default, this method will call ``_reference_clone`` (see ``_reference``).


        Args:
          pdf_dest: Target to clone to.
          force_duplicate: By default, if the object has already been cloned and referenced,
            the copy will be returned; when ``True``, a new copy will be created.
            (Default value = ``False``)
          ignore_fields: List/tuple of field names (for dictionaries) that will be ignored
            during cloning (applies to children duplication as well). If fields are to be
            considered for a limited number of levels, you have to add it as integer, for
            example ``[1,"/B","/TOTO"]`` means that ``"/B"`` will be ignored at the first
            level only but ``"/TOTO"`` on all levels.

        Returns:
          The cloned PdfObject

        z! does not implement .clone so farr$   r)   r4   r8   r9   r*   r*   r+   r5   d   s   zPdfObject.cloner5   c                 C   sx  z|s|j j|kr|W S W n	 ty   Y nw z| j }W n ty'   | Y S w |jrA|durA|j|jkrA|jt|jkrA|j}nt|jd }|durt	|j|j
vrgi |j
t	|j< |j|j
t	|j d< |s|j|j
t	|j v r||j
t	|j |j }|dusJ |S ||j
t	|j |j< z	||j|d < W n ty   |j| t|j}Y nw t|d||_ |S )aX  
        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.

        Args:
          clone:
          pdf_dest:

        Returns:
          The clone

        N   Z	PreventGCr   )r    pdf	ExceptionAttributeErrorincremental_readeridnumlen_objectsid_id_translated
get_object
IndexErrorappendr   )r)   r5   r4   r8   indiobjr*   r*   r+   _reference_clone   sP   
zPdfObject._reference_clonec                 C      | S )zResolve indirect references.r*   r(   r*   r*   r+   rF         zPdfObject.get_objectNstreamencryption_keyc                 C   s   t r-   )r%   r)   rO   rP   r*   r*   r+   write_to_stream      zPdfObject.write_to_streamFr*   )Fr-   )r'   
__module____qualname__hashlibsha1r   r   __annotations__r	   intr,   bytesr/   r3   r   r7   boolr
   r   strr5   r   r   rL   rF   r   rR   r*   r*   r*   r+   r   9   sR   
 

 
:r   c                   @   s   e Zd Z		ddededeeeee	f   dd fddZ
de	fd	d
Z	d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fddZdedefddZdS )
NullObjectFr*   r4   r8   r9   r!   c                 C   s   t d| t ||S )Clone object into pdf_dest.r^   )r   rL   r^   r:   r*   r*   r+   r5      s   zNullObject.clonec                 C   s   t | jfS r#   hashr&   r(   r*   r*   r+   r,      s   zNullObject.hash_binNrO   rP   c                 C   s    |d ur	t dd |d d S )N/the encryption_key parameter of write_to_stream5.0.0   null)r   writerQ   r*   r*   r+   rR      s
   zNullObject.write_to_streamc                 C   s    |  d}|dkrtdt S )N   re   zCould not read Null object)readr   r^   )rO   Znulltxtr*   r*   r+   read_from_stream   s   
zNullObject.read_from_streamc                 C   s   dS )Nr^   r*   r(   r*   r*   r+   __repr__   s   zNullObject.__repr__otherc                 C   s
   t |tS r-   )
isinstancer^   r)   rk   r*   r*   r+   __eq__   r0   zNullObject.__eq__rT   r-   )r'   rU   rV   r   r\   r	   r
   r   r]   rZ   r5   r,   r   r[   rR   staticmethodri   rj   objectrn   r*   r*   r*   r+   r^      s2    

	r^   c                   @   s   e Zd ZdeddfddZ		dded	ed
eee	e
ef   dd fddZdefddZdedefddZde
fddZ	ddede	de
ef 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-   rr   )r)   rr   r*   r*   r+   __init__   r0   zBooleanObject.__init__Fr*   r4   r8   r9   c                 C   s   t d| t| j||S )r_   rq   )r   rL   rq   rr   r:   r*   r*   r+   r5      s   zBooleanObject.clonec                 C      t | j| jfS r`   )rb   r&   rr   r(   r*   r*   r+   r,        zBooleanObject.hash_binoc                C   s.   t |tr| j|jkS t |tr| j|kS dS )NF)rl   rq   rr   r\   r)   rw   r*   r*   r+   rn     s
   


zBooleanObject.__eq__c                 C   s   | j rdS dS )NTrueFalsers   r(   r*   r*   r+   rj     s   zBooleanObject.__repr__rO   rP   c                 C   s4   |d ur	t dd | jr|d d S |d d S )Nrc   rd      trues   false)r   rr   rf   rQ   r*   r*   r+   rR     s   zBooleanObject.write_to_streamc                 C   s<   |  d}|dkrtdS |dkr|  d tdS td)Nrg   r{   Ts   falsr;   FzCould not read Boolean object)rh   rq   r   )rO   wordr*   r*   r+   ri   $  s   

zBooleanObject.read_from_streamrT   r-   )r'   rU   rV   r   rt   r   r\   r	   r
   r   r]   rZ   r5   r,   rp   rn   rj   r   r[   rR   ro   ri   r*   r*   r*   r+   rq      s4    


rq   c                   @   s  e Zd ZdedededdfddZdefdd	Zdefd
dZdeddfddZ			d<dede
deeeeef   dd fddZed=ddZded fddZdedd fddZded fddZdedefd d!Zd"edefd#d$Zd"ede
fd%d&Zdefd'd(Zdefd)d*Zdefd+d,Zdefd-d.Zdefd/d0Zd1ede
fd2d3Zd1ede
fd4d5Z	d>d6e d7edee!f ddfd8d9Z"e#d6e dedd fd:d;Z$dS )?r   rA   
generationr<   r!   Nc                 C   s   || _ || _|| _d S r-   )rA   r}   r<   )r)   rA   r}   r<   r*   r*   r+   rt   0  s   
zIndirectObject.__init__c                 C   s   t | j| jt| jfS r-   )rb   rA   r}   rD   r<   r(   r*   r*   r+   __hash__5  s   zIndirectObject.__hash__c                 C   s   t | j| j| jt| jfS r`   )rb   r&   rA   r}   rD   r<   r(   r*   r*   r+   r,   8  s   zIndirectObject.hash_binr4   r   c                 C   s   t | j| j|S r-   )r   rA   r}   r6   r*   r*   r+   r7   B  s   zIndirectObject.replicateFr*   r8   r9   c                 C   s  | j |kr	|s	| S t| j |jvri |jt| j < | j|jt| j  v rN||jt| j  | j }|rM|dus:J |jdusAJ |j}t|j|j|j S n |  }|du rdt }t	| tfsaJ | |_|
||||}|dusvJ d|jdusJ d|jS )r_   Nmypy)r<   rD   rE   rA   rF   r    r   r}   r^   rl   Z_add_objectr5   )r)   r4   r8   r9   dupZidrefrK   r*   r*   r+   r5   H  s.   zIndirectObject.clonec                 C   rM   r-   r*   r(   r*   r*   r+   r    k  rN   z!IndirectObject.indirect_referencec                 C   s   | j | S r-   )r<   rF   r(   r*   r*   r+   rF   o     zIndirectObject.get_objectmemoc                 C   s   t | j| j| jS r-   )r   rA   r}   r<   )r)   r   r*   r*   r+   __deepcopy__r     zIndirectObject.__deepcopy__c                 C   s0   |   }t|trt|   d|  |S )Nz references an IndirectObject )rF   rl   r   r   rj   rx   r*   r*   r+   _get_object_with_checku  s   
z%IndirectObject._get_object_with_checknamec                 C   s0   zt |  |W S  ty   td| dw )NzNo attribute z* found in IndirectObject or pointed object)getattrr   r>   )r)   r   r*   r*   r+   __getattr__~  s   
zIndirectObject.__getattr__keyc                 C   s   |   | S r-   r   r)   r   r*   r*   r+   __getitem__     zIndirectObject.__getitem__c                 C   s   ||   v S r-   r   r   r*   r*   r+   __contains__  r   zIndirectObject.__contains__c                 C      |    S r-   )r   __iter__r(   r*   r*   r+   r     r   zIndirectObject.__iter__c                 C   r   r-   )rF   	__float__r(   r*   r*   r+   r     r   zIndirectObject.__float__c                 C   r   r-   )rF   __int__r(   r*   r*   r+   r     r   zIndirectObject.__int__c                 C   r   r-   )rF   __str__r(   r*   r*   r+   r     r   zIndirectObject.__str__c                 C   s"   d| j d| jdt| j dS )NzIndirectObject(z, ))rA   r}   rD   r<   r(   r*   r*   r+   rj     s   "zIndirectObject.__repr__rk   c                 C   s6   |d uot |to| j|jko| j|jko| j|ju S r-   )rl   r   rA   r}   r<   rm   r*   r*   r+   rn     s   


zIndirectObject.__eq__c                 C   s   |  | S r-   )rn   rm   r*   r*   r+   __ne__  r   zIndirectObject.__ne__rO   rP   c                 C   s4   |d ur	t dd || j d| j d  d S )Nrc   rd    z R)r   rf   rA   r}   r.   rQ   r*   r*   r+   rR     s
   "zIndirectObject.write_to_streamc                 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    Tr;      Rz0Error reading indirect object reference at byte )
rh   r   r   isspacer   r   hextellr   rZ   )rO   r<   rA   tokr}   rr*   r*   r+   ri     s4   

	zIndirectObject.read_from_streamrT   )r!   r   r-   )%r'   rU   rV   rZ   r   rt   r~   r,   r   r7   r\   r	   r
   r   r]   r5   propertyr    rF   r   r   r   r   r   r   r   r   r   rj   rp   rn   r   r   r[   rR   ro   ri   r*   r*   r*   r+   r   /  sZ    

	
#			
	r      c                   @   s   e Zd Z	ddedee dd fddZ			dd
ededeeee	e
f   dd fddZde
fddZde	fddZde	fddZdefddZ	ddedede	ef ddfddZdS )FloatObject0.0Nrr   contextr!   c              
   C   s^   zt |}t | |W S  ty. } zt| d| dt t | dW  Y d }~S d }~ww )Nz : FloatObject (z) invalid; use 0.0 insteadg        )float__new__r=   r   r'   )clsrr   r   er*   r*   r+   r     s   zFloatObject.__new__Fr*   r4   r8   r9   c                 C      t d| t| ||S )r_   r   )r   rL   r   r:   r*   r*   r+   r5        zFloatObject.clonec                 C   ru   r`   rb   r&   
as_numericr(   r*   r*   r+   r,     rv   zFloatObject.hash_binc                 C   sB   | dkrdS t ttt|  }| dtd| dddS )Nr   r   .r;   f0)FLOAT_WRITE_PRECISIONrZ   r   absmaxrstrip)r)   nbr*   r*   r+   myrepr  s   "zFloatObject.myreprc                 C   s   |   S r-   )r   r(   r*   r*   r+   rj        zFloatObject.__repr__c                 C   s   t | S r-   )r   r(   r*   r*   r+   r     r   zFloatObject.as_numericrO   rP   c                 C   s*   |d ur	t dd ||  d d S Nrc   rd   utf8)r   rf   r   r.   rQ   r*   r*   r+   rR     
   zFloatObject.write_to_stream)r   NrT   r-   )r'   rU   rV   r   r	   r   r\   r
   r   r]   rZ   r5   r,   r   rj   r   r   r   r[   rR   r*   r*   r*   r+   r     s@    


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eef   dd fddZdefddZdefddZ	ddededeef ddfddZededed fddZdS )NumberObjects	   [^+-.0-9]rr   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   )rZ   r   
ValueErrorr   r'   )r   rr   r*   r*   r+   r     s   zNumberObject.__new__Fr*   r4   r8   r9   c                 C   r   )r_   r   )r   rL   r   r:   r*   r*   r+   r5     r   zNumberObject.clonec                 C   s   t | j|  fS r`   r   r(   r*   r*   r+   r,   %     zNumberObject.hash_binc                 C   s   t t| dS )Nr   )rZ   reprr.   r(   r*   r*   r+   r   /  r   zNumberObject.as_numericNrO   rP   c                 C   s*   |d ur	t dd |t| d d S r   )r   rf   r   r.   rQ   r*   r*   r+   rR   2  r   zNumberObject.write_to_stream)r   r   c                 C   s$   t | tj}d|v rt|S t|S )N   .)r   r   NumberPatternr   )rO   numr*   r*   r+   ri   ;  s   zNumberObject.read_from_streamrT   r-   )r'   rU   rV   recompiler   r   r   r\   r	   r
   r   r]   rZ   r5   r,   r   r   r[   rR   ro   ri   r*   r*   r*   r+   r     s4    




	r   c                   @   s   e Zd ZdZ		ddededeeee	e
f   dd fdd	Zde
fd
dZedefddZ	ddedede	ef ddfddZde	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*   r4   r8   r9   r!   c                 C   s   t d| tt| ||S )r_   r   )r   rL   r   r[   r:   r*   r*   r+   r5   L  s   zByteStringObject.clonec                 C   s   t | jt| fS r`   )rb   r&   r[   r(   r*   r*   r+   r,   Z  r   zByteStringObject.hash_binc                 C   rM   )z7For compatibility with TextStringObject.original_bytes.r*   r(   r*   r*   r+   original_bytesd  rS   zByteStringObject.original_bytesNrO   rP   c                 C   s:   |d ur	t dd |d |t|  |d d S )Nrc   rd      <   >)r   rf   binasciihexlifyrQ   r*   r*   r+   rR   i  s   
z ByteStringObject.write_to_streamc              	   C   sD   dgt tj}|D ]}z| |W   S  ty   Y q
w td)Nutf-16zCannot decode ByteStringObject.)list
NameObjectCHARSETSdecodeUnicodeDecodeErrorr   )r)   Zcharset_to_tryencr*   r*   r+   r   t  s   zByteStringObject.__str__rT   r-   )r'   rU   rV   __doc__r   r\   r	   r
   r   r]   rZ   r5   r,   r   r[   r   r   rR   r   r*   r*   r*   r+   r   C  s2    


r   c                   @   s   e Zd ZU dZeed< eed< eed< dZee ed< de	dd fd	d
Z
		dde	dedeeeeef   dd fddZdefddZedefddZdefddZdefddZ	ddededeef ddfddZdS ) TextStringObjectz
    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.
    autodetect_pdfdocencodingautodetect_utf16	utf16_bomN_original_bytesrr   r!   c              
   C   s   d }t |tr|}|d}t| |}||_d|_d|_d|_|	drt|d us-J dzt| |d}W n, t
yd } z t|d|jt t| |jd |j d}W Y d }~nd }~ww ||_d|_|d d	 |_|S z
t| d|_W |S  ty   d|_tj|_Y |S w )
NcharmapFr   )u   þÿu   ÿþr   r   z
initial string:Tr   )rl   r[   r   r]   r   r   r   r   r   
startswithr   r   rp   r'   startencode_pdfdocencodingUnicodeEncodeErrorcodecsBOM_UTF16_BE)r   rr   orgrw   excr*   r*   r+   r     sD   


*
zTextStringObject.__new__Fr*   r4   r8   r9   c                 C   s<   t | }| j|_| j|_| j|_| j|_td| |||S )r_   r   )r   r   r   r   r   r   rL   )r)   r4   r8   r9   rK   r*   r*   r+   r5     s   zTextStringObject.clonec                 C   ru   r`   )rb   r&   r   r(   r*   r*   r+   r,     rv   zTextStringObject.hash_binc                 C   s   | j dur| j 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.
        N)r   get_original_bytesr(   r*   r*   r+   r     s   
zTextStringObject.original_bytesc                 C   s^   | j r$| jtjkrtj| d S | jtjkrtj| d S | dS | jr+t| S td)Nutf-16leutf-16bez#no information about original bytes)	r   r   r   BOM_UTF16_LEr.   r   r   r   r=   r(   r*   r*   r+   r     s   
z#TextStringObject.get_original_bytesc                 C   s   z| j d ur
| j W S | jrtdddddt| }W |S  tyL   | jtjkr3tj| d }Y |S | jtjkrDtj| d }Y |S | d}Y |S w )N Zforcedr   r   )	r   r   r   r   r   r   r   r.   r   )r)   bytearrr*   r*   r+   get_encoded_bytes  s"   

z"TextStringObject.get_encoded_bytesrO   rP   c                 C   s~   |d ur	t dd |  }|d td|D ] }tt|d }| s2|dkr2|dt|  q|| q|d d S )	Nrc   rd      (cr       s   \%03o   ))r   r   rf   r   r   r[   isalnumord)r)   rO   rP   r   Zc_r   r*   r*   r+   rR     s   
z TextStringObject.write_to_streamrT   r-   )r'   rU   rV   r   r\   rY   r[   r   r	   r   r   r
   r   r]   rZ   r5   r,   r   r   r   r   r   rR   r*   r*   r*   r+   r   ~  s>   
 #

r   c                   @   s   e Zd ZU edZdZddddddd	d
 edD Ze	e
eef  ed< 		d%dededeeeeef   dd fddZdefddZ	d&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d!Zeded"edd fd#d$ZdS )'r   s   \s+|[\(\)<>\[\]{}/%]   /s   #23s   #28s   #29s   #2Fs   #25)#(r   /%c                 C   s"   i | ]}t |d |d qS )r   02X)chrr.   ).0rJ   r*   r*   r+   
<dictcomp>  s   " zNameObject.<dictcomp>!   renumber_tableFr*   r4   r8   r9   r!   c                 C   r   )r_   r   )r   rL   r   r:   r*   r*   r+   r5     r   zNameObject.clonec                 C   s   t | j| fS r`   ra   r(   r*   r*   r+   r,   #  s   zNameObject.hash_binNrO   rP   c                 C   s$   |d ur	t dd ||   d S )Nrc   rd   )r   rf   renumberrQ   r*   r*   r+   rR   -  s
   zNameObject.write_to_streamc              	   C   s   | d  d}|dkrtd|  dd | 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, should start with '/': (r   z6.0.0r;   ~r   r   )r.   r   r   KeyError)r)   outr   xr*   r*   r+   r   6  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   r;   r   )findr   r   )r   rJ   r*   r*   r+   unnumberH  s   4zNameObject.unnumber)r   gbklatin1r<   c              
   C   s   |  d}|tjkrtd|t| tj7 }z)t|}tjD ]}z||}t|W   W S  t	y7   Y qw t
d|ddd tt
fyo } z"|jsbtd|dt t|dW  Y d }~S td|d	|d }~ww )
Nr;   zName read errorr   r   zCode Not Foundz!Illegal character in NameObject (z-), you may need to adjust NameObject.CHARSETSr   z.). You may need to adjust NameObject.CHARSETS.)rh   r   surfixr   r   delimiter_patternr   r   r   r=   r   r   strictr   r'   )rO   r<   r   r   retr   r*   r*   r+   ri   W  s8   






zNameObject.read_from_streamrT   r-   )r'   rU   rV   r   r   r  r  ranger   r   r   r]   r[   rY   r   r\   r	   r
   r   rZ   r5   r,   r   rR   r   ro   r   r   ri   r*   r*   r*   r+   r     sJ   
 


	r   unicode_stringr!   c              	   C   s4   z
t dd | D W S  ty   td| dddw )Nc                 S   s   g | ]}t | qS r*   r   )r   kr*   r*   r+   
<listcomp>x  s    z)encode_pdfdocencoding.<locals>.<listcomp>Zpdfdocencodingr   z#does not exist in translation table)r[   r   r   )r  r*   r*   r+   r   v  s   r   r   c                 C   s,   | du pt | to|  du pt |  tS )z<
    Returns:
        True if x is None or NullObject.

    N)rl   r   rF   r^   )r   r*   r*   r+   is_null_or_none  s   
r
  )7r   r   rW   r   sysr   mathr   structr   typingr   r   r   r   r	   r
   r   r   version_infor   typing_extensions_codecsr   Z
_protocolsr   r   Z_utilsr   r   r   r   r   errorsr   r   r   
__author____author_email__r   r^   rq   r   r   r   r   rZ   r   r[   r   r]   r   r   r   r
  r*   r*   r*   r+   <module>   sB   ( -; #;4; k$