o
    ë6WjÐÈ  ã                   @   s0  d Z d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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mZ dd	lmZmZ dd
lmZ  ddlm!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+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddlm7Z7m8Z8 e 9e:¡Z;dZ<e =d¡Z>G dd„ de?e3ƒZ@G dd„ deAe3ƒZBG dd„ deBƒZCdeddfdd„ZDG d d!„ d!eBƒZEG d"d#„ d#eEƒZFG d$d%„ d%eEƒZGG d&d'„ d'eFƒZH	d1d(ed)ed*edeIe
eI eeJeIf f dee3eJeIeHf fd+d,„ZKG d-d.„ d.eCƒZLG d/d0„ d0eCƒZMdS )2zMathieu Fenniakzbiziqe@mathieu.fenniak.neté    N)ÚBytesIO)ÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚUnionÚcasté   )ÚPdfWriterProtocol)
ÚWHITESPACESÚ
StreamTypeÚb_Údeprecate_with_replacementÚdeprecation_with_replacementÚhex_strÚlogger_warningÚread_non_whitespaceÚread_until_regexÚskip_over_comment)ÚCheckboxRadioButtonAttributesÚFieldDictionaryAttributes)ÚFilterTypes)ÚOutlineFontFlag)ÚStreamAttributes)ÚTypArguments)ÚTypFitArguments)ÚSTREAM_TRUNCATED_PREMATURELYÚPdfReadErrorÚPdfStreamErroré   )ÚBooleanObjectÚFloatObjectÚIndirectObjectÚ
NameObjectÚ
NullObjectÚNumberObjectÚ	PdfObjectÚTextStringObject)ÚFit)Úread_hex_string_from_streamÚread_string_from_streams   +-s   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]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
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dedededeee eeef f dd fdd„ƒZedededd fdd„ƒZdS )ÚArrayObjectF© Úpdf_destÚforce_duplicateÚignore_fields.NÚreturnc                 C   s®   z| j j|kr|s| W S W n	 ty   Y nw td|  tƒ |¡ƒ}| D ].}t|tƒr<| | |||¡|¡}| 	|j ¡ q#t
|dƒrL| 	| |||¡¡ q#| 	|¡ q#td|ƒS )úclone object into pdf_destr-   Úclone)Úindirect_referenceÚpdfÚ	Exceptionr
   Ú_reference_cloner-   Ú
isinstanceÚStreamObjectr4   ÚappendÚhasattr)Úselfr/   r0   r1   ÚarrÚdataÚdupr.   r.   ún/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PyPDF2/generic/_data_structures.pyr4   O   s$   €ÿ
ÿ

zArrayObject.clonec                 C   s   t | ƒS )zS
        Emulate DictionaryObject.items for a list
        (index, object)
        )Ú	enumerate©r=   r.   r.   rA   Úitemsj   s   zArrayObject.itemsÚstreamÚencryption_keyc                 C   s8   |  d¡ | D ]}|  d¡ | ||¡ q|  d¡ d S )Nó   [ó    s    ])ÚwriteÚwrite_to_stream)r=   rE   rF   r?   r.   r.   rA   rJ   q   s
   

zArrayObject.write_to_streamc                 C   ó   t dddƒ |  ||¡ d S ©NÚwriteToStreamrJ   ú3.0.0©r   rJ   ©r=   rE   rF   r.   r.   rA   rM   z   ó   zArrayObject.writeToStreamr6   Úforced_encodingc                 C   sŠ   t ƒ }|  d¡}|dkrtdƒ‚	 |  d¡}| ¡ r#|  d¡}| ¡ s|  dd¡ |  d¡}|dkr5	 |S |  dd¡ | t| ||ƒ¡ q)Nr!   rG   zCould not read arrayTéÿÿÿÿó   ])r-   Úreadr   ÚisspaceÚseekr;   Úread_object)rE   r6   rR   r>   ÚtmpÚtokÚ	peekaheadr.   r.   rA   Úread_from_stream€   s"   


ÿ
ýôzArrayObject.read_from_streamc                 C   ó   t dddƒ t | |¡S ©NÚreadFromStreamr\   rN   )r   r-   r\   ©rE   r6   r.   r.   rA   r_   ™   ó   zArrayObject.readFromStream©Fr.   ©N)Ú__name__Ú
__module__Ú__qualname__r   Úboolr	   r   Ústrr   r4   r   r   rD   r   ÚbytesrJ   rM   Ústaticmethodr   Úintr\   r_   r.   r.   r.   rA   r-   N   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d dededeeedf ee f ddf
dd„Z
dedefdd„Zdededefdd„Zd+dedee defdd„Zdedefdd„Zedee fdd„ƒZdee fdd„Zede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+ded$ed%edeee eeef f dd fd&d'„ƒZeded$edd fd(d)„ƒZdS ),ÚDictionaryObjectFr.   r/   r0   r1   .Nr2   c                 C   st   z| j j|kr|s| W S W n	 ty   Y nw td|  |  ¡ |¡ƒ}|du r(g }t| ¡ ƒdkr8| | |||¡ |S )r3   rl   Nr   )	r5   r6   r7   r
   r8   Ú	__class__ÚlenÚkeysÚ_clone©r=   r/   r0   r1   Úd__r.   r.   rA   r4   ¢   s   €ÿÿzDictionaryObject.cloneÚsrcc              
   C   sÒ  d|vrd|v s d|vrd|v s d|vrd|v s d|vr d|v r t |ƒ}dD ]y}|D ]t}g }||v rž|| vržt| |¡tƒržtd|| ƒ}| }	|durŒtd| | ¡ |¡ƒ}
| ||
f¡ |	duscJ ‚|
j|	t	|ƒ< |
}	z||krtd}ntd|| ƒ}W n t
y‡   d}Y nw |dusK|D ]\}}| |||||g ¡ qŽq*q&| ¡ D ]B\}}||vræt|tƒrÐt|dƒs¹d|_| |||¡}|jdusÇJ ‚|j| | |¡< q¤|| vræt|d	ƒrà| |||¡n|| t	|ƒ< q¤dS )
úupdate the object from srcú/Nextú/Prevú/Nú/V))ru   rv   )rw   rx   rl   Nr5   r4   )Úlistr9   Úraw_getr$   r
   r8   rm   r;   r5   r%   r7   rp   rD   r:   r<   r4   )r=   rs   r/   r0   r1   ÚlstÚkÚobjsÚcur_objÚprev_objÚclonÚsÚcÚvÚvvr.   r.   rA   rp   ¸   sj   
ÿÿþ€ÿò€ä

ÿ
ý€özDictionaryObject._cloneÚkeyc                 C   s   t  | |¡S rc   )ÚdictÚ__getitem__©r=   r…   r.   r.   rA   rz   ø   s   zDictionaryObject.raw_getÚvaluec                 C   ó2   t |tƒs	tdƒ‚t |tƒstdƒ‚t | ||¡S ©Nzkey must be PdfObjectzvalue must be PdfObject)r9   r(   Ú
ValueErrorr†   Ú__setitem__©r=   r…   r‰   r.   r.   rA   r�   û   ó
   

zDictionaryObject.__setitem__c                 C   rŠ   r‹   )r9   r(   rŒ   r†   Ú
setdefaultrŽ   r.   r.   rA   r�     r�   zDictionaryObject.setdefaultc                 C   s   t  | |¡ ¡ S rc   )r†   r‡   Ú
get_objectrˆ   r.   r.   rA   r‡   	  s   zDictionaryObject.__getitem__c                 C   sN   ddl m} |  dd¡}|du rdS | ¡ }t||ƒs%||ƒ}|| tdƒ< |S )a   
        Retrieve XMP (Extensible Metadata Platform) data relevant to the
        this object, if available.

        Stability: Added in v1.12, will exist for all future v1.x releases.
        @return Returns a {@link #xmp.XmpInformation XmlInformation} instance
        that can be used to access XMP metadata from the document.  Can also
        return None if no metadata was found on the document root.
        r   )ÚXmpInformationz	/MetadataN)Úxmpr’   Úgetr‘   r9   r%   )r=   r’   Úmetadatar.   r.   rA   Úxmp_metadata  s   
zDictionaryObject.xmp_metadatac                 C   ó   t dddƒ | jS )úW
        .. deprecated:: 1.28.3

            Use :meth:`xmp_metadata` instead.
        ÚgetXmpMetadatar–   rN   ©r   r–   rC   r.   r.   rA   r™   #  s   zDictionaryObject.getXmpMetadatac                 C   r—   )r˜   ÚxmpMetadatar–   rN   rš   rC   r.   r.   rA   r›   .  ó   zDictionaryObject.xmpMetadatarE   rF   c                 C   sZ   |  d¡ t|  ¡ ƒD ]\}}| ||¡ |  d¡ | ||¡ |  d¡ q|  d¡ d S )Nó   <<
rH   ó   
ó   >>)rI   ry   rD   rJ   )r=   rE   rF   r…   r‰   r.   r.   rA   rJ   8  s   

z DictionaryObject.write_to_streamc                 C   rK   rL   rO   rP   r.   r.   rA   rM   C  rQ   zDictionaryObject.writeToStreamr6   rR   c              
      s~  dt dt dtt  dtdt f
‡ fdd„‰ dtdtdtf‡ fd	d
„}|  d¡}|dkr5tdt|  ¡ ƒ› d�ƒ‚i }	 t	| ƒ}|dkrAq7|dkrP|  
dd¡ t| ƒ q7|sVttƒ‚|dkr`|  d¡ nu|  
dd¡ zt| |ƒ}t	| ƒ}|  
dd¡ t| ||ƒ}W n0 ty­ }	 z$|d ur’|jr’t|	 ¡ ƒ‚t|	 ¡ tƒ tƒ }
|
 |¡ |
W  Y d }	~	S d }	~	ww | |¡s¸|||< ndt|  ¡ ƒ› d|› �}|d urÏ|jrÏt|ƒ‚t|tƒ q8|  ¡ }t	| ƒ}|dk�r¥|  d¡dk�r¥|  d¡}|dkrü|  d¡}|dksó|dv�rtdƒ‚|dk�r|  d¡dk�r|  
dd¡ tj|v�r"tdƒ‚|tj }t|tƒ�r<|  ¡ }| |¡}|  
|d ¡ |  ¡ }|  |¡|d!< t	| ƒ}|  d"¡}|| d#k�r¤|  ¡ }|  
d$d¡ |  d%¡}|d#k�rv|d! d d… |d!< n5|j�sŒ|  
|d ¡ || |ƒ|d!< |  ¡ }n|  
|d ¡ td&t|  ¡ ƒ› d'|›d(|›d)�ƒ‚n|  
|d ¡ d!|v �rµt |¡S tƒ }
|
 |¡ |
S )*NÚpÚp1Úrem_gensr6   r2   c                    s^   |j |d  }|D ]}||| kr| || k r|| }q	t|ƒdkr$|S ˆ | ||dd … |ƒS )Nr   r!   )Úxrefrn   )r    r¡   r¢   r6   ÚlÚo©Úget_next_obj_posr.   rA   r§   O  s   €z;DictionaryObject.read_from_stream.<locals>.get_next_obj_posrE   c                    sz   ˆ |   ¡ dt|jƒ|ƒd }|   ¡ }|  ||   ¡  ¡}| d¡}|dk r,td|› d�ƒ‚|  || d ¡ |d |d … S )Nl        r!   ó	   endstreamr   z6Unable to find 'endstream' marker for obj starting at Ú.é	   )Útellry   r£   rU   Úfindr   rW   )rE   r6   ÚeonÚcurrÚrwr    r¦   r.   rA   Úread_unsized_from_steam[  s   

ÿzBDictionaryObject.read_from_stream.<locals>.read_unsized_from_steamr   ó   <<zDictionary read error at byte z: stream must begin with '<<'Tó    ó   %rS   r!   ó   >z+Multiple definitions in dictionary at byte z	 for key ó   sé   s   treamrH   )rž   ó   z)Stream data must be followed by a newliner·   rž   zStream length not definedr   Ú__streamdata__é   r¨   iöÿÿÿrª   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)rk   r   r   r   ri   rU   r   r   r«   r   rW   r   r    r   rX   r7   ÚstrictÚ__repr__r   rd   rl   Úupdater”   ÚSAÚLENGTHr9   r$   r‘   r:   Úinitialize_from_dictionary)rE   r6   rR   r°   rY   r?   rZ   r…   r‰   ÚexcÚretvalÚmsgÚposr�   ÚeolÚlengthÚtÚpstartÚeÚndstreamÚendr.   r¦   rA   r\   I  sØ   ÿÿÿÿþ
ÿ


€ú


ÿÿÿ
Ú(

ÿ








ÿÿÿÿí


z!DictionaryObject.read_from_streamc                 C   r]   r^   )r   rl   r\   r`   r.   r.   rA   r_   Ñ  ra   zDictionaryObject.readFromStreamrb   rc   )rd   re   rf   r   rg   r	   r   rh   r   r4   rp   r   rz   r�   r   r�   r(   r‡   Úpropertyr–   r™   r›   r   ri   rJ   rM   rj   r   rk   r\   r_   r.   r.   r.   rA   rl   ¡   sˆ    üþýü
ûþýüû
ú@
þ	ÿÿ
þÿÿ
þýÿþýü ÿÿþrl   c                
   @   sø   e Zd Zd&dd„Zdefdd„Zdefdd„Zdefd	d
„Zde	e fdd„Z
dededdfdd„Zdededdfdd„Zdedededdfdd„Zdeddfdd„Zdededededdf
dd„Zdeddfdd„Zd&d d!„Zd&d"d#„Zd&d$d%„ZdS )'Ú
TreeObjectr2   Nc                 C   s   t  | ¡ d S rc   )rl   Ú__init__rC   r.   r.   rA   rÍ   Ú  s   zTreeObject.__init__c                 C   ó   t dddƒ |  ¡ S )NÚhasChildrenÚhas_childrenú4.0.0)r   rÐ   rC   r.   r.   rA   rÏ   Ý  ó   zTreeObject.hasChildrenc                 C   s   d| v S )Nú/Firstr.   rC   r.   r.   rA   rÐ   á  ó   zTreeObject.has_childrenc                 C   s   |   ¡ S rc   )ÚchildrenrC   r.   r.   rA   Ú__iter__ä  rÔ   zTreeObject.__iter__c                 c   sb   � |   ¡ sd S | tdƒ }| ¡ }	 |V  || tdƒ krd S | tdƒ¡}|d u r,d S | ¡ }q)NrÓ   Tú/Lastru   )rÐ   r%   r‘   r”   )r=   Ú	child_refÚchildr.   r.   rA   rÕ   ç  s   €ùzTreeObject.childrenrÙ   r6   c                 C   rK   )NÚaddChildÚ	add_childrN   )r   rÛ   ©r=   rÙ   r6   r.   r.   rA   rÚ   ö  s   zTreeObject.addChildc                 C   s   |   |d |¡ d S rc   )Úinsert_childrÜ   r.   r.   rA   rÛ   ú  s   zTreeObject.add_childÚbeforec                    sÆ  dt d ttf dtdd f‡ fdd„‰ | ¡ }|j}d| vrQ|| tdƒ< tdƒ| tdƒ< || td	ƒ< | j|td
ƒ< ˆ | | dd¡ƒ d|v rH|d= d|v rO|d= d S t	d| d	 ƒ}|j|kr�d|v rit	d|d ƒ}n/t	d|ƒ|tdƒ< |j|tdƒ< | j|td
ƒ< d|v r‡|d= || td	ƒ< ˆ | | dd¡ƒ d S |j|ks]zt
|d tƒs§J ‚||d tdƒ< |d |tdƒ< W n tyÄ   |d= Y nw ||tdƒ< ||tdƒ< | j|td
ƒ< ˆ | | dd¡ƒ d S )NÚparentÚnr2   c                    s^   | d u rd S t d|  ¡ ƒ} d| v r-tt t| tdƒ ƒ| ƒ| tdƒ< ˆ |  dd ¡|ƒ d S d S )NrÌ   ú/Countú/Parent)r
   r‘   r'   rk   r%   r”   )rß   rà   ©Úinc_parent_counterr.   rA   rä   þ  s   ÿüz3TreeObject.insert_child.<locals>.inc_parent_counterrÓ   r   rá   r×   râ   r!   ru   rv   rl   rÌ   )r	   r$   rÌ   rk   r‘   r5   r%   r'   r”   r
   r9   rl   r7   )r=   rÙ   rÞ   r6   Ú	child_objÚprevr.   rã   rA   rÝ   ý  sX   ÿÿþ

õ
ÿzTreeObject.insert_childc                 C   ó   t dddƒ |  |¡ d S )NÚremoveChildÚremove_childrN   )r   ré   )r=   rÙ   r.   r.   rA   rè   4  ó   zTreeObject.removeChildræ   Úprev_refÚcurÚlastc                 C   s  |  tdƒd¡}|du rP|r-| ¡ }|tdƒ= || tdƒ< t| tdƒ d ƒ| tdƒ< dS | tdƒ dks7J ‚| tdƒ= | tdƒ= tdƒ| v rN| tdƒ= dS dS |rc| ¡ }||tdƒ< ||tdƒ< n||ksiJ ‚|tdƒ= || tdƒ< t| tdƒ d ƒ| tdƒ< dS )z;Adjust the pointers of the linked list and tree node count.ru   Nrv   rÓ   rá   r!   r×   )r”   r%   r‘   r'   )r=   ræ   rë   rì   rí   Únext_refÚnext_objr.   r.   rA   Ú_remove_node_from_tree8  s.   
ÿ

ÿ
 z!TreeObject._remove_node_from_treec           
      C   sæ   |  ¡ }|j}tdƒ|vrtdƒ‚|tdƒ | krtdƒ‚d}d }d }| tdƒ }|  ¡ }| tdƒ }|  ¡ }	|d urg||krJ|  ||||	¡ d}n|}|}tdƒ|v r_|tdƒ }|  ¡ }nd }d }|d us;|smtd	ƒ‚t|ƒ d S )
Nrâ   ú/Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFrÓ   r×   Tru   z"Removal couldn't find item in tree)r‘   r5   r%   rŒ   rð   Ú_reset_node_tree_relationship)
r=   rÙ   rå   Úfoundrë   ræ   Úcur_refrì   Úlast_refrí   r.   r.   rA   ré   [  s:   
òzTreeObject.remove_childc                 C   s,   t dƒ| vr
tdƒ‚td| d ƒ | ¡ dS )z:
        remove the object from the tree it is in
        râ   rñ   rÌ   N)r%   rŒ   r
   ré   rC   r.   r.   rA   Úremove_from_tree€  s   zTreeObject.remove_from_treec                 C   s   t dddƒ |  ¡  d S )NÚ	emptyTreeÚ
empty_treerÑ   )r   rø   rC   r.   r.   rA   r÷   ‰  s   zTreeObject.emptyTreec                 C   sd   | D ]
}|  ¡ }t|ƒ qtdƒ| v r| tdƒ= tdƒ| v r#| tdƒ= tdƒ| v r0| tdƒ= d S d S )Nrá   rÓ   r×   )r‘   rò   r%   )r=   rÙ   rå   r.   r.   rA   rø   �  s   


ÿzTreeObject.empty_tree©r2   N)rd   re   rf   rÍ   rg   rÏ   rÐ   r   rÖ   r   rÕ   rÚ   r   rÛ   rÝ   rè   rð   ré   rö   r÷   rø   r.   r.   r.   rA   rÌ   Ù  s2    
7ÿÿÿÿ
þ#
%
	rÌ   rå   r2   c                 C   s>   | t dƒ= t dƒ| v r| t dƒ= t dƒ| v r| t dƒ= dS dS )z}
    Call this after a node has been removed from a tree.

    This resets the nodes attributes in respect to that tree.
    râ   ru   rv   N)r%   )rå   r.   r.   rA   rò   š  s   

ÿrò   c                       s*  e Zd Zd%dd„Zdedededeee	d	f e
e	 f ddf
‡ fd
d„Zdef‡ fdd„Zeded fdd„ƒZejd&dd„ƒZedefdd„ƒZejdeddfdd„ƒZdedede	ef ddfdd„Zedee	ef ded fdd„ƒZedee	ef ded fdd„ƒZd'd!d"„Zd'd#d$„Z‡  ZS )(r:   r2   Nc                 C   s   d | _ d | _d S rc   )Ú_StreamObject__dataÚdecoded_selfrC   r.   r.   rA   rÍ   ¨  s   
zStreamObject.__init__rs   r/   r0   r1   .c                    sh   t d|ƒj| _zt d|ƒj}|du rd| _n| |d|¡| _W n	 ty(   Y nw tƒ  ||||¡ dS )rt   r:   NT)r
   Ú_datarû   r4   r7   Úsuperrp   )r=   rs   r/   r0   r1   rû   ©rm   r.   rA   rp   ¬  s   €ÿzStreamObject._clonec                    s   t ƒ  ¡ }|t| jƒ7 }|S rc   )rý   Úhash_value_datar   rü   ©r=   r?   rþ   r.   rA   rÿ   À  s   
zStreamObject.hash_value_dataÚDecodedStreamObjectc                 C   r—   ©NÚdecodedSelfrû   rN   ©r   rû   rC   r.   r.   rA   r  Å  ó   zStreamObject.decodedSelfr‰   c                 C   ó   t dddƒ || _d S r  r  ©r=   r‰   r.   r.   rA   r  Ê  ó   
c                 C   ó   | j S rc   ©rú   rC   r.   r.   rA   rü   Ï  s   zStreamObject._datac                 C   ó
   || _ d S rc   r
  r  r.   r.   rA   rü   Ó  s   
rE   rF   c                 C   sp   t t| jƒƒ| ttjƒ< t | ||¡ | tj= | d¡ | j}|r,ddl	m
} |||ƒ}| |¡ | d¡ d S )Ns   
stream
r   )ÚRC4_encrypts
   
endstream)r'   rn   rü   r%   r½   r¾   rl   rJ   rI   Ú	_securityr  )r=   rE   rF   r?   r  r.   r.   rA   rJ   ×  s   


zStreamObject.write_to_streamr?   )ÚEncodedStreamObjectr  c                 C   s
   t  | ¡S rc   )r:   r¿   )r?   r.   r.   rA   ÚinitializeFromDictionaryæ  s   
z%StreamObject.initializeFromDictionaryc                 C   s>   t j| v r	tƒ }ntƒ }| d |_| d= | t j= | | ¡ |S )Nr¸   )r½   ÚFILTERr  r  rü   r¾   r¼   )r?   rÁ   r.   r.   rA   r¿   ì  s   


z'StreamObject.initialize_from_dictionaryr  c                 C   rÎ   )NÚflateEncodeÚflate_encoderN   )r   r  rC   r.   r.   rA   r  û  rÒ   zStreamObject.flateEncodec                 C   s�   ddl m} tj| v r1| tj }t|tƒr| dttj	ƒ¡ ntƒ }| 
tdƒ¡ | 
|¡ |}ntdƒ}tƒ }||ttjƒ< | | j¡|_|S )Nr   )ÚFlateDecoder   z/FlateDecode)Úfiltersr  r½   r  r9   r-   Úinsertr%   ÚFTÚFLATE_DECODEr;   r  Úencoderü   )r=   r  ÚfÚnewfrÁ   r.   r.   rA   r  ÿ  s   



zStreamObject.flate_encoderù   )r‰   r  r2   N)r2   r  )rd   re   rf   rÍ   rl   r   rg   r	   r   rh   r   rp   ri   rÿ   rË   r   r  Úsetterr   rü   r   rJ   rj   r   r  r¿   r  r  Ú__classcell__r.   r.   rþ   rA   r:   §  sV    
þýüûúÿÿ
þ
ÿþ
ÿþ
r:   c                   @   sL   e Zd Zdefdd„Zdedefdd„Zdefdd„Zdedd	fd
d„Zd	S )r  r2   c                 C   r	  rc   ©rü   rC   r.   r.   rA   Úget_data  s   zDecodedStreamObject.get_datar?   c                 C   r  rc   r  r   r.   r.   rA   Úset_data  ó   
zDecodedStreamObject.set_datac                 C   r—   ©NÚgetDatar  rN   )r   rü   rC   r.   r.   rA   r"    s   zDecodedStreamObject.getDataNc                 C   rç   ©NÚsetDatar  rN   ©r   r  r   r.   r.   rA   r$    rê   zDecodedStreamObject.setData)rd   re   rf   r   r  r  r"  r$  r.   r.   r.   rA   r    s
    r  c                   @   s˜   e Zd Zddd„Zeded fdd„ƒZejdeddfd	d„ƒZde	de
ef fd
d„Zde	de
ef fdd„Zdeddfdd„Zdeddfdd„ZdS )r  r2   Nc                 C   s
   d | _ d S rc   )rû   rC   r.   r.   rA   rÍ   $  r   zEncodedStreamObject.__init__r  c                 C   r—   r  r  rC   r.   r.   rA   r  '  r  zEncodedStreamObject.decodedSelfr‰   c                 C   r  r  r  r  r.   r.   rA   r  ,  r  c                 C   sn   ddl m} | jd ur| j ¡ S tƒ }|| ƒ|_t|  ¡ ƒD ]\}}|tj	tj
tjfvr0|||< q|| _|jS )Nr   )Údecode_stream_data)r  r&  rû   r  r  rü   ry   rD   r½   r¾   r  ÚDECODE_PARMS)r=   r&  Údecodedr…   r‰   r.   r.   rA   r  1  s   


€zEncodedStreamObject.get_datac                 C   rÎ   r!  )r   r  rC   r.   r.   rA   r"  B  rÒ   zEncodedStreamObject.getDatar?   c                 C   s   t dƒ‚)Nz7Creating EncodedStreamObject is not currently supported)r   r   r.   r.   rA   r  F  rÔ   zEncodedStreamObject.set_datac                 C   s   t dddƒ |  |¡S r#  r%  r   r.   r.   rA   r$  I  s   
zEncodedStreamObject.setDatarù   )rd   re   rf   rÍ   rË   r   r  r  r  r	   rh   ri   r  r"  r   r  r$  r.   r.   r.   rA   r  #  s    
r  c                   @   s  e Zd Z	ddedededeee eeef f 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de
deeedf ee f ddf
dd„Zdeddfdd„Zdedeeef fdd„Zedefdd„ƒZejdeeef ddfdd„ƒZdS )ÚContentStreamNrE   r6   rR   r2   c           	      C   s®   || _ g | _|d urU| ¡ }t|tƒr9d}|D ]}|t| ¡  ¡ ƒ7 }t|ƒdks/|d dkr3|d7 }qt|ƒ}n| ¡ }|d usCJ ‚t|ƒ}t|ƒ}|| _	|  
|¡ d S d S )Nó    r   rS   rž   )r6   Ú
operationsr‘   r9   r-   r   r  rn   r   rR   Ú$_ContentStream__parse_content_stream)	r=   rE   r6   rR   r?   r�   Ústream_bytesÚstream_dataÚstream_data_bytesr.   r.   rA   rÍ   O  s&   
€
ñzContentStream.__init__Fr.   r/   r0   r1   .c                 C   sh   z| j j|kr|s| W S W n	 ty   Y nw td|  |  dd¡|¡ƒ}|du r*g }| | |||¡ |S )r3   r)  N)r5   r6   r7   r
   r8   rm   rp   rq   r.   r.   rA   r4   o  s   €ÿÿzContentStream.cloners   c                 C   s*   || _ ttd|ƒjƒ| _td|ƒj| _dS )rt   r)  N)r6   ry   r
   r+  rR   )r=   rs   r/   r0   r1   r.   r.   rA   rp   „  s   zContentStream._clonec                 C   sØ   |  dd¡ g }	 t|ƒ}|dks|dkrd S |  dd¡ | ¡ s%|dv rOt|tjdƒ}|dkrD|g ks6J ‚|  |¡}| j |df¡ n'| j ||f¡ g }n|d	kra|d
vr`| 	d¡}|d
vsWn
| t
|d | jƒ¡ q	)Nr   Tr*  rS   r!   )ó   'ó   "ó   BIó   INLINE IMAGEr³   ©r·   rž   )rW   r   Úisalphar   r%   Údelimiter_patternÚ_read_inline_imager+  r;   rU   rX   rR   )r=   rE   ÚoperandsÚpeekÚoperatorÚiir.   r.   rA   Ú__parse_content_stream“  s,   

ÿ€çz$ContentStream.__parse_content_streamc                 C   s˜  t ƒ }	 t|ƒ}| dd¡ |dkrnt|| jƒ}t|ƒ}| dd¡ t|| jƒ}|||< q| d¡}|d d… dks=J ‚tƒ }	 | d¡}|sLtd	ƒ‚| d
¡}	|	dkr[| 	|¡ ni| 	|d|	… ¡ | |	t
|ƒ d¡ | d¡}| d¡}
|
dkr¹||	d |	… tv r¹| d¡}||
 }d}|tv r¤d}||7 }| d¡}|tv s•|r­| dd¡ n| dd¡ | 	|¡ n| dd¡ | 	|¡ qA|| ¡ dœS )NTrS   r!   ó   Ié   r   s   IDi    zUnexpected end of streamó   Er   F)Úsettingsr?   )rl   r   rW   rX   r6   rU   r   r   r¬   rI   rn   r   Úgetvalue)r=   rE   r@  rZ   r…   r‰   rY   r?   ÚbufÚlocÚtok2Útok3ÚinfoÚhas_q_whitespacer.   r.   rA   r7  ±  sX   ö






ý
Û&z ContentStream._read_inline_imagec                 C   s¸   t ƒ }| jD ]Q\}}|dkr;| d¡ t ƒ }|d  |d ¡ | | ¡ dd… ¡ | d¡ | |d ¡ | d¡ n|D ]}| |d ¡ | d	¡ q=| t|ƒ¡ | d
¡ q| ¡ S )Nr3  r2  r@  r   éþÿÿÿs   ID r?   s   EIrH   rž   )r   r+  rI   rJ   rA  r   )r=   Únewdatar8  r:  ÚdicttextÚopr.   r.   rA   rü   í  s    

zContentStream._datar‰   c                 C   s   |   tt|ƒƒ¡ d S rc   )r,  r   r   r  r.   r.   rA   rü     s   rc   rb   )rd   re   rf   r   r	   rh   r   r   rk   rÍ   rg   r   r4   rl   r   rp   r   r,  r7  rË   ri   rü   r  r.   r.   r.   rA   r)  N  sN    üþýü
û#üþýü
ûþýüû
ú< r)  rE   r6   rR   c              	   C   s¶  |   d¡}|  dd¡ |dkrt | |¡S |dkr4|   d¡}|  dd¡ |dkr/t | ||¡S t| |ƒS |dkr?t | ||¡S |d	ksG|d
krLt | ¡S |dkrUt| |ƒS |dkri|   d¡dkri|  dd¡ t	ƒ S |dkrrt	 | ¡S |dkr�|dvr�|   d¡}t
|ƒdkr‰tdƒ‚|dvszt| ƒ}|  dd¡ t| ||ƒS |dv rÁ|   d¡}|  t
|ƒ d¡ t |¡d ur¼t | |¡S t | ¡S |  dd¡ td|›d|  ¡ › d|   d¡ ¡ › �ƒ‚)Nr!   rS   ó   /ó   <r   rH  r±   rG   ó   tó   fó   (ó   eé   s   endobjiúÿÿÿó   nr³   r4  r   zFile ended unexpectedly.s   0123456789+-.é   iìÿÿÿz(Invalid Elementary Object starting with z @z: éP   )rU   rW   r%   r\   rl   r+   r-   r"   r,   r&   rn   r    r   rX   ÚIndirectPatternÚmatchr$   r'   r   r«   r»   )rE   r6   rR   rZ   r9  r.   r.   rA   rX     sP   






û

"ÿrX   c                   @   st  e Zd ZdZdeeef ddfdd„Zede	e
 fdd„ƒZede	e
 fd	d
„ƒZede	e fdd„ƒZede	d fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fdd„ƒZede	e fd d!„ƒZede	e fd"d#„ƒZede	e fd$d%„ƒZdS )&ÚFieldzŒ
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<PyPDF2.PdfReader.get_fields>`
    r?   r2   Nc              	   C   sN   t  | ¡ t ¡ t ¡  }|D ]}z
|| | t|ƒ< W q ty$   Y qw d S rc   )rl   rÍ   r   Ú
attributesr   r%   ÚKeyError)r=   r?   Úfield_attributesÚattrr.   r.   rA   rÍ   E  s   
ÿÿÿýzField.__init__c                 C   ó   |   tj¡S )z4Read-only property accessing the type of this field.)r”   r   r  rC   r.   r.   rA   Ú
field_typeR  ó   zField.field_typec                 C   r—   )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`field_type` instead.
        Ú	fieldTyper^  rN   )r   r^  rC   r.   r.   rA   r`  W  rœ   zField.fieldTypec                 C   r]  )z6Read-only property accessing the parent of this field.)r”   r   ÚParentrC   r.   r.   rA   rß   a  r_  zField.parentr-   c                 C   r]  )z4Read-only property accessing the kids of this field.)r”   r   ÚKidsrC   r.   r.   rA   Úkidsf  r_  z
Field.kidsc                 C   r]  )z4Read-only property accessing the name of this field.)r”   r   ÚTrC   r.   r.   rA   Únamek  r_  z
Field.namec                 C   r]  )z>Read-only property accessing the alternate name of this field.)r”   r   ÚTUrC   r.   r.   rA   Úalternate_namep  r_  zField.alternate_namec                 C   r—   )z\
        .. deprecated:: 1.28.3

            Use :py:attr:`alternate_name` instead.
        ÚaltNamerg  rN   )r   rg  rC   r.   r.   rA   rh  u  rœ   zField.altNamec                 C   r]  )zÓ
        Read-only property accessing the mapping name of this field. This
        name is used by PyPDF2 as a key in the dictionary returned by
        :meth:`get_fields()<PyPDF2.PdfReader.get_fields>`
        )r”   r   ÚTMrC   r.   r.   rA   Úmapping_name  ó   zField.mapping_namec                 C   r—   )zZ
        .. deprecated:: 1.28.3

            Use :py:attr:`mapping_name` instead.
        ÚmappingNamerj  rN   )r   rj  rC   r.   r.   rA   rl  ˆ  rœ   zField.mappingNamec                 C   r]  )z¢
        Read-only property accessing the field flags, specifying various
        characteristics of the field (see Table 8.70 of the PDF 1.7 reference).
        )r”   r   ÚFfrC   r.   r.   rA   Úflags’  ó   zField.flagsc                 C   r]  )zr
        Read-only property accessing the value of this field. Format
        varies based on field type.
        )r”   r   ÚVrC   r.   r.   rA   r‰   š  ro  zField.valuec                 C   r]  )z=Read-only property accessing the default value of this field.)r”   r   ÚDVrC   r.   r.   rA   Údefault_value¢  r_  zField.default_valuec                 C   r—   )z[
        .. deprecated:: 1.28.3

            Use :py:attr:`default_value` instead.
        ÚdefaultValuerr  rN   )r   rr  rC   r.   r.   rA   rs  §  rœ   zField.defaultValuec                 C   r]  )zÙ
        Read-only property accessing the additional actions dictionary.
        This dictionary defines the field's behavior in response to trigger events.
        See Section 8.5.2 of the PDF 1.7 reference.
        )r”   r   ÚAArC   r.   r.   rA   Úadditional_actions±  rk  zField.additional_actionsc                 C   r—   )z`
        .. deprecated:: 1.28.3

            Use :py:attr:`additional_actions` instead.
        ÚadditionalActionsru  rN   )r   ru  rC   r.   r.   rA   rv  º  rœ   zField.additionalActions)rd   re   rf   Ú__doc__r   rh   r   rÍ   rË   r   r%   r^  r`  rl   rß   rc  re  rg  rh  rj  rl  rk   rn  r‰   rr  rs  ru  rv  r.   r.   r.   rA   rX  =  sB    				rX  c                   @   s‚  e Zd ZU dZdZee ed< g Ze	e
 ed< dedeeeeef deddfd	d
„Zed*dd„ƒZd*dd„Zdededeef ddfdd„Zedee fdd„ƒZedee fdd„ƒZedee fdd„ƒZedee fdd„ƒZedee fdd„ƒZedee fdd„ƒZedee fd d!„ƒZ edee fd"d#„ƒZ!eded fd$d%„ƒZ"edee# fd&d'„ƒZ$edee fd(d)„ƒZ%dS )+ÚDestinationa·  
    A class representing a destination within a PDF file.
    See section 8.2.1 of the PDF 1.6 reference.

    :param str title: Title of this destination.
    :param IndirectObject page: Reference to the page of this destination. Should
        be an instance of :class:`IndirectObject<PyPDF2.generic.IndirectObject>`.
    :param Fit fit: How the destination is displayed.
    :raises PdfReadError: If destination type is invalid.


    NÚnodeÚchildsÚtitleÚpageÚfitr2   c                 C   sl  |j }|j}t | ¡ t|ƒ| tdƒ< || tdƒ< || tdƒ< |dkr8|\| ttjƒ< | ttjƒ< | tdƒ< d S |t	j
krY|\| ttjƒ< | ttjƒ< | ttjƒ< | ttjƒ< d S |t	jt	jfv rz|\| ttjƒ< W d S  ty~   tƒ | ttjƒ< Y d S w |t	jt	jfv r¥z|\| ttjƒ< W d S  ty¤   tƒ | ttjƒ< Y d S w |t	jt	jfv r¯d S td|›�ƒ‚)Nú/Titleú/Pageú/Typez/XYZú/ZoomzUnknown Destination Type: )Úfit_typeÚfit_argsrl   rÍ   r)   r%   ÚTAÚLEFTÚTOPÚTFÚFIT_RÚBOTTOMÚRIGHTÚFIT_HÚFIT_BHr7   r&   ÚFIT_VÚFIT_BVÚFITÚFIT_Br   )r=   r{  r|  r}  ÚtypÚargsr.   r.   rA   rÍ   Ø  sD   
ü
ûÿÿzDestination.__init__r-   c                    s(   t ˆ  d¡ˆ d g‡ fdd„dD ƒ ƒS )Nr  r€  c                    s   g | ]
}|ˆ v rˆ | ‘qS r.   r.   )Ú.0ÚxrC   r.   rA   Ú
<listcomp>  s
    þz*Destination.dest_array.<locals>.<listcomp>)ú/Leftú/Bottomú/Rightú/Topr�  )r-   rz   rC   r.   rC   rA   Ú
dest_array  s   
þÿÿzDestination.dest_arrayc                 C   r—   )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`dest_array` instead.
        ÚgetDestArrayrš  rN   )r   rš  rC   r.   r.   rA   r›    s   zDestination.getDestArrayrE   rF   c                 C   s„   |  d¡ tdƒ}| ||¡ |  d¡ | j}| ||¡ tdƒ}| ||¡ |  d¡ tdƒ}| ||¡ |  d¡ |  d¡ d S )Nr�   z/DrH   z/Sz/GoTorž   rŸ   )rI   r%   rJ   rš  )r=   rE   rF   r…   r‰   Úvalue_sr.   r.   rA   rJ     s   



zDestination.write_to_streamc                 C   ó
   |   d¡S )z3Read-only property accessing the destination title.r~  ©r”   rC   r.   r.   rA   r{  *  ó   
zDestination.titlec                 C   r�  )z9Read-only property accessing the destination page number.r  rž  rC   r.   r.   rA   r|  /  rŸ  zDestination.pagec                 C   r�  )z2Read-only property accessing the destination type.r€  rž  rC   r.   r.   rA   r‘  4  rŸ  zDestination.typc                 C   ó   |   dd¡S )z-Read-only property accessing the zoom factor.r�  Nrž  rC   r.   r.   rA   Úzoom9  r_  zDestination.zoomc                 C   r   )z<Read-only property accessing the left horizontal coordinate.r–  Nrž  rC   r.   r.   rA   Úleft>  r_  zDestination.leftc                 C   r   )z=Read-only property accessing the right horizontal coordinate.r˜  Nrž  rC   r.   r.   rA   ÚrightC  r_  zDestination.rightc                 C   r   )z9Read-only property accessing the top vertical coordinate.r™  Nrž  rC   r.   r.   rA   ÚtopH  r_  zDestination.topc                 C   r   )z<Read-only property accessing the bottom vertical coordinate.r—  Nrž  rC   r.   r.   rA   ÚbottomM  r_  zDestination.bottomc                 C   s"   |   dttdƒtdƒtdƒgƒ¡S )zGRead-only property accessing the color in (R, G, B) with values 0.0-1.0z/Cr   )r”   r-   r#   rC   r.   r.   rA   ÚcolorR  s   ÿzDestination.colorc                 C   r   )zDRead-only property accessing the font type. 1=italic, 2=bold, 3=bothz/Fr   rž  rC   r.   r.   rA   Úfont_formatY  r_  zDestination.font_formatc                 C   r   )z¿
        Read-only property accessing the outline count.
        positive = expanded
        negative = collapsed
        absolute value = number of visible descendents at all levels
        rá   Nrž  rC   r.   r.   rA   Úoutline_count^  s   zDestination.outline_count)r2   r-   )&rd   re   rf   rw  ry  r   rl   Ú__annotations__rz  r   r   rh   r	   r'   r$   r&   r*   rÍ   rË   rš  r›  r   ri   rJ   r{  rk   r|  r‘  r¡  r#   r¢  r£  r¤  r¥  r¦  r   r§  r¨  r.   r.   r.   rA   rx  Å  s`   
 þÿþýü
û+

	ÿÿ
þrx  rc   )NÚ
__author__Ú__author_email__ÚloggingÚreÚior   Útypingr   r   r   r   r   r   r	   r
   Ú
_protocolsr   Ú_utilsr   r   r   r   r   r   r   r   r   r   Ú	constantsr   r   r   r  r   r   r½   r   r„  r   r‡  Úerrorsr   r   r    Ú_baser"   r#   r$   r%   r&   r'   r(   r)   Ú_fitr*   r+   r,   Ú	getLoggerrd   ÚloggerÚNumberSignsÚcompilerV  ry   r-   r†   rl   rÌ   rò   r:   r  r  r)  rh   rk   rX   rX  rx  r.   r.   r.   rA   Ú<module>   s\   (0(


S  : Bl+ <ýÿþý
ü7 	