U
    Y»{jÐÈ  ã                
   @   s&  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ƒZCeddœdd„ZDG dd „ d eBƒZEG d!d"„ d"eEƒZFG d#d$„ d$eEƒZGG d%d&„ d&eFƒZHd.eeedeIe
eI eeJeIf f ee3eJeIeHf d'œd(d)„ZKG d*d+„ d+eCƒZLG d,d-„ d-eCƒZMdS )/z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eeeeedf ee df d dœdd„Z	e
e dœd	d
„Zeedeef ddœdd„Zeedeef ddœdd„Zedeeedeee eeef f d dœdd„ƒZeeed dœdd„ƒZdS )ÚArrayObjectF© .N©Úpdf_destÚforce_duplicateÚignore_fieldsÚreturnc                 C   s°   z| j j|kr|s| W S W n tk
r.   Y nX td|  tƒ |¡ƒ}| D ]\}t|tƒrz| | |||¡|¡}| 	|j ¡ qHt
|dƒrš| 	| |||¡¡ qH| 	|¡ qHtd|ƒS )úclone object into pdf_destr-   Úclone)Úindirect_referenceÚpdfÚ	Exceptionr
   Ú_reference_cloner-   Ú
isinstanceÚStreamObjectr5   ÚappendÚhasattr)Úselfr0   r1   r2   ÚarrÚdataÚdupr.   r.   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PyPDF2/generic/_data_structures.pyr5   O   s"    

 ÿ
zArrayObject.clone©r3   c                 C   s   t | ƒS )zS
        Emulate DictionaryObject.items for a list
        (index, object)
        )Ú	enumerate©r>   r.   r.   rB   Úitemsj   s    zArrayObject.items©ÚstreamÚencryption_keyr3   c                 C   s8   |  d¡ | D ]}|  d¡ | ||¡ q|  d¡ d S )Nó   [ó    s    ])ÚwriteÚwrite_to_stream)r>   rH   rI   r@   r.   r.   rB   rM   q   s
    

zArrayObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S ©NÚwriteToStreamrM   ú3.0.0©r   rM   ©r>   rH   rI   r.   r.   rB   rO   z   s    zArrayObject.writeToStream©rH   r7   Úforced_encodingr3   c                 C   s‚   t ƒ }|  d¡}|dkr tdƒ‚|  d¡}| ¡ r>|  d¡}q*|  dd¡ |  d¡}|dkr^q~|  dd¡ | t| ||ƒ¡ q |S )Nr!   rJ   zCould not read arrayéÿÿÿÿó   ])r-   Úreadr   ÚisspaceÚseekr<   Úread_object)rH   r7   rT   r?   ÚtmpÚtokZ	peekaheadr.   r.   rB   Úread_from_stream€   s    


zArrayObject.read_from_stream©rH   r7   r3   c                 C   s   t dddƒ t | |¡S ©NÚreadFromStreamr]   rP   )r   r-   r]   ©rH   r7   r.   r.   rB   r`   ™   s    zArrayObject.readFromStream)Fr.   )N)Ú__name__Ú
__module__Ú__qualname__r   Úboolr	   r   Ústrr   r5   r   r   rF   r   ÚbytesrM   rO   Ústaticmethodr   Úintr]   r`   r.   r.   r.   rB   r-   N   s<     üû þ
 þ ýü þr-   c                   @   sj  e Zd Zd'eeeeedf ee df d dœdd„Z	d eeeeedf ee f ddœd	d
„Z
eedœdd„Zeeedœdd„Zd(eee edœdd„Zeedœdd„Zeee dœdd„ƒZee dœdd„Zeee dœdd„ƒZeedeef ddœdd„Zeedeef ddœdd „Zed)eeedeee eeef f d d!œd"d#„ƒZeeed d$œd%d&„ƒZdS )*ÚDictionaryObjectFr.   .Nr/   c                 C   sv   z| j j|kr|s| W S W n tk
r.   Y nX td|  |  ¡ |¡ƒ}|dkrRg }t| ¡ ƒdkrr| | |||¡ |S )r4   rj   Nr   )	r6   r7   r8   r
   r9   Ú	__class__ÚlenÚkeysÚ_clone©r>   r0   r1   r2   Zd__r.   r.   rB   r5   ¢   s    
 ÿzDictionaryObject.clone©Úsrcr0   r1   r2   r3   c              
   C   sæ  d|krd|ksDd|kr d|ksDd|kr0d|ksDd|k�rFd|k�rFt |ƒ}dD ]ô}|D ]ê}g }||krX|| krXt| |¡tƒrXtd|| ƒ}| }	|dk	�rtd| | ¡ |¡ƒ}
| ||
f¡ |	dk	sÌt‚|
j	|	t
|ƒ< |
}	z ||krîd}ntd|| ƒ}W q’ tk
�r   d}Y q’X q’|D ] \}}| |||||g ¡ �q qXqP| ¡ D ]’\}}||k�rNt|tƒ�r®t|dƒ�s~d|_	| |||¡}|j	dk	�sœt‚|j	| | |¡< n0|| k�rNt|d	ƒ�rÒ| |||¡n|| t
|ƒ< �qNdS )
úupdate the object from srcú/Nextú/Prevú/Nú/V))rs   rt   )ru   rv   rj   Nr6   r5   )Úlistr:   Úraw_getr$   r
   r9   rk   r<   ÚAssertionErrorr6   r%   r8   rn   rF   r;   r=   r5   )r>   rq   r0   r1   r2   ÚlstÚkZobjsZcur_objZprev_objZclonÚsÚcÚvZvvr.   r.   rB   rn   ¸   sz    
ÿÿþþüüûûÿþý ÿ
þ

ÿýzDictionaryObject._clone)Úkeyr3   c                 C   s   t  | |¡S ©N)ÚdictÚ__getitem__©r>   r   r.   r.   rB   rx   ø   s    zDictionaryObject.raw_get)r   Úvaluer3   c                 C   s2   t |tƒstdƒ‚t |tƒs$tdƒ‚t | ||¡S ©Nzkey must be PdfObjectzvalue must be PdfObject)r:   r(   Ú
ValueErrorr�   Ú__setitem__©r>   r   r„   r.   r.   rB   r‡   û   s
    

zDictionaryObject.__setitem__c                 C   s2   t |tƒstdƒ‚t |tƒs$tdƒ‚t | ||¡S r…   )r:   r(   r†   r�   Ú
setdefaultrˆ   r.   r.   rB   r‰     s
    

zDictionaryObject.setdefaultc                 C   s   t  | |¡ ¡ S r€   )r�   r‚   Ú
get_objectrƒ   r.   r.   rB   r‚   	  s    zDictionaryObject.__getitem__rC   c                 C   sN   ddl m} |  dd¡}|dkr$dS | ¡ }t||ƒsJ||ƒ}|| 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)Zxmpr‹   ÚgetrŠ   r:   r%   )r>   r‹   Úmetadatar.   r.   rB   Úxmp_metadata  s    
zDictionaryObject.xmp_metadatac                 C   s   t dddƒ | jS )úW
        .. deprecated:: 1.28.3

            Use :meth:`xmp_metadata` instead.
        ÚgetXmpMetadatarŽ   rP   ©r   rŽ   rE   r.   r.   rB   r�   #  s    zDictionaryObject.getXmpMetadatac                 C   s   t dddƒ | jS )r�   ÚxmpMetadatarŽ   rP   r‘   rE   r.   r.   rB   r’   .  s    zDictionaryObject.xmpMetadatarG   c                 C   sZ   |  d¡ t|  ¡ ƒD ]4\}}| ||¡ |  d¡ | ||¡ |  d¡ q|  d¡ d S )Nó   <<
rK   ó   
ó   >>)rL   rw   rF   rM   )r>   rH   rI   r   r„   r.   r.   rB   rM   8  s    

z DictionaryObject.write_to_streamc                 C   s   t dddƒ |  ||¡ d S rN   rQ   rR   r.   r.   rB   rO   C  s    zDictionaryObject.writeToStreamrS   c              
      s„  t t tt  tt dœ‡ fdd„‰ tttdœ‡ fdd„}|  d¡}|dkr^td	t|  ¡ ƒ› d
�ƒ‚i }t	| ƒ}|dkrvqbn|dkr”|  
dd¡ t| ƒ qb|s ttƒ‚|dkr¶|  d¡ �q®|  
dd¡ z.t| |ƒ}t	| ƒ}|  
dd¡ t| ||ƒ}W nh tk
�rX }	 zH|d k	�r"|j�r"t|	 ¡ ƒ‚t|	 ¡ tƒ tƒ }
|
 |¡ |
 W Y ¢S d }	~	X Y nX | |¡�sp|||< qbdt|  ¡ ƒ› d|› �}|d k	�r¢|j�r¢t|ƒ‚t|tƒ qb|  ¡ }t	| ƒ}|dk�rL|  d¡dk�rL|  d¡}|dk�rú|  d¡}�qâ|dk�rtdƒ‚|dk�r2|  d¡dk�r2|  
dd¡ tj|k�rFtdƒ‚|tj }t|tƒ�rz|  ¡ }| |¡}|  
|d¡ |  ¡ }|  |¡|d< t	| ƒ}|  d¡}|| dk�rX|  ¡ }|  
dd¡ |  d ¡}|dk�rî|d d d… |d< n\|j�s|  
|d¡ || |ƒ|d< |  ¡ }n0|  
|d¡ td!t|  ¡ ƒ› d"|›d#|›d$�ƒ‚n|  
|d¡ d|k�rlt |¡S tƒ }
|
 |¡ |
S d S )%N)ÚpÚp1Úrem_gensr7   r3   c                    sb   |j |d  }|D ]$}||| kr| || k r|| }qt|ƒdkrH|S ˆ | ||dd … |ƒS d S )Nr   r!   )Úxrefrl   )r–   r—   r˜   r7   ÚlÚo©Úget_next_obj_posr.   rB   r�   O  s    
z;DictionaryObject.read_from_stream.<locals>.get_next_obj_posr^   c                    sz   ˆ |   ¡ dt|jƒ|ƒd }|   ¡ }|  ||   ¡  ¡}| d¡}|dk rXtd|› d�ƒ‚|  || d ¡ |d |d … S )Nl        r!   ó	   endstreamr   z6Unable to find 'endstream' marker for obj starting at Ú.é	   )Útellrw   r™   rW   Úfindr   rY   )rH   r7   ZeonÚcurrÚrwr–   rœ   r.   rB   Ú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 '<<'ó    ó   %rU   r!   ó   >z+Multiple definitions in dictionary at byte z	 for key ó   sé   s   treamrK   )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').)ri   r   r   r   rg   rW   r   r   r¡   r   rY   r   r    r   rZ   r8   ÚstrictÚ__repr__r   rb   rj   ÚupdaterŒ   ÚSAÚLENGTHr:   r$   rŠ   r;   Úinitialize_from_dictionary)rH   r7   rT   r¥   r[   r@   r\   r   r„   ÚexcÚretvalÚmsgÚposr|   ÚeolÚlengthÚtZpstartÚeZndstreamÚendr.   rœ   rB   r]   I  s®       þ
ÿ



ÿ









ÿ


z!DictionaryObject.read_from_streamr^   c                 C   s   t dddƒ t | |¡S r_   )r   rj   r]   ra   r.   r.   rB   r`   Ñ  s    zDictionaryObject.readFromStream)Fr.   )N)N)rb   rc   rd   r   re   r	   r   rf   r   r5   rn   r   rx   r‡   r   r‰   r(   r‚   ÚpropertyrŽ   r�   r’   r   rg   rM   rO   rh   r   ri   r]   r`   r.   r.   r.   rB   rj   ¡   s\     üûú@þ
 þ þ ýü  þrj   c                   @   sî   e Zd Zddœdd„Zedœdd„Zedœdd„Zedœd	d
„Ze	e dœdd„Z
eeddœdd„Zeeddœdd„Zeeeddœdd„Zeddœdd„Zeeeeddœdd„Zeddœdd„Zddœdd„Zddœdd „Zddœd!d"„ZdS )#Ú
TreeObjectNrC   c                 C   s   t  | ¡ d S r€   )rj   Ú__init__rE   r.   r.   rB   rÀ   Ú  s    zTreeObject.__init__c                 C   s   t dddƒ |  ¡ S )NÚhasChildrenÚhas_childrenú4.0.0)r   rÂ   rE   r.   r.   rB   rÁ   Ý  s    zTreeObject.hasChildrenc                 C   s   d| kS )Nú/Firstr.   rE   r.   r.   rB   rÂ   á  s    zTreeObject.has_childrenc                 C   s   |   ¡ S r€   )ÚchildrenrE   r.   r.   rB   Ú__iter__ä  s    zTreeObject.__iter__c                 c   sb   |   ¡ sd S | tdƒ }| ¡ }|V  || tdƒ kr:d S | tdƒ¡}|d krTd S | ¡ }q d S )NrÄ   ú/Lastrs   )rÂ   r%   rŠ   rŒ   )r>   Z	child_refÚchildr.   r.   rB   rÅ   ç  s    zTreeObject.children)rÈ   r7   r3   c                 C   s   t dddƒ |  ||¡ d S )NÚaddChildÚ	add_childrP   )r   rÊ   ©r>   rÈ   r7   r.   r.   rB   rÉ   ö  s    zTreeObject.addChildc                 C   s   |   |d |¡ d S r€   )Úinsert_childrË   r.   r.   rB   rÊ   ú  s    zTreeObject.add_child)rÈ   Úbeforer7   r3   c                    sÄ  t d ttf td dœ‡ fdd„‰ | ¡ }|j}d| krž|| tdƒ< tdƒ| tdƒ< || tdƒ< | j|tdƒ< ˆ | | dd	¡ƒ d
|krŒ|d
= d|krš|d= d S t	d| d ƒ}|j|k�r2d
|krÐt	d|d
 ƒ}q¬t	d|ƒ|td
ƒ< |j|tdƒ< | j|tdƒ< d
|k�r|d
= || tdƒ< ˆ | | dd	¡ƒ d S q¬z8t
|d tƒ�sHt‚||d td
ƒ< |d |tdƒ< W n tk
�r†   |d
= Y nX ||td
ƒ< ||tdƒ< | j|tdƒ< ˆ | | dd	¡ƒ d S )N)ÚparentÚnr3   c                    sZ   | d krd S t d|  ¡ ƒ} d| krVtt t| tdƒ ƒ| ƒ| tdƒ< ˆ |  dd ¡|ƒ d S )Nr¿   ú/Countú/Parent)r
   rŠ   r'   ri   r%   rŒ   )rÎ   rÏ   ©Úinc_parent_counterr.   rB   rÓ   þ  s    ÿz3TreeObject.insert_child.<locals>.inc_parent_counterrÄ   r   rÐ   rÇ   rÑ   r!   rs   rt   rj   r¿   )r	   r$   r¿   ri   rŠ   r6   r%   r'   rŒ   r
   r:   rj   ry   r8   )r>   rÈ   rÍ   r7   Ú	child_objÚprevr.   rÒ   rB   rÌ   ý  sN     þ
zTreeObject.insert_child)rÈ   r3   c                 C   s   t dddƒ |  |¡ d S )NÚremoveChildÚremove_childrP   )r   r×   )r>   rÈ   r.   r.   rB   rÖ   4  s    zTreeObject.removeChild)rÕ   Úprev_refÚcurÚlastr3   c                 C   s   |  tdƒd¡}|dkr˜|rX| ¡ }|tdƒ= || tdƒ< t| tdƒ d ƒ| tdƒ< qü| tdƒ dkslt‚| tdƒ= | tdƒ= tdƒ| krü| tdƒ= nd|r¾| ¡ }||tdƒ< ||tdƒ< n"||ksÊt‚|tdƒ= || tdƒ< t| tdƒ d ƒ| tdƒ< dS )z;Adjust the pointers of the linked list and tree node count.rs   Nrt   rÄ   rÐ   r!   rÇ   )rŒ   r%   rŠ   r'   ry   )r>   rÕ   rØ   rÙ   rÚ   Znext_refZnext_objr.   r.   rB   Ú_remove_node_from_tree8  s,    
ÿ


z!TreeObject._remove_node_from_treec           
      C   sâ   |  ¡ }|j}tdƒ|kr$tdƒ‚n|tdƒ | kr<tdƒ‚d}d }d }| tdƒ }|  ¡ }| tdƒ }|  ¡ }	|d k	rÊ||kr–|  ||||	¡ d}qÊ|}|}tdƒ|krÀ|tdƒ }|  ¡ }qpd }d }qp|sÖt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Ç   Trs   z"Removal couldn't find item in tree)rŠ   r6   r%   r†   rÛ   Ú_reset_node_tree_relationship)
r>   rÈ   rÔ   ÚfoundrØ   rÕ   Zcur_refrÙ   Zlast_refrÚ   r.   r.   rB   r×   [  s8    

zTreeObject.remove_childc                 C   s.   t dƒ| krtdƒ‚ntd| d ƒ | ¡ dS )z:
        remove the object from the tree it is in
        rÑ   rÜ   r¿   N)r%   r†   r
   r×   rE   r.   r.   rB   Úremove_from_tree€  s    
zTreeObject.remove_from_treec                 C   s   t dddƒ |  ¡  d S )NÚ	emptyTreeÚ
empty_treerÃ   )r   rá   rE   r.   r.   rB   rà   ‰  s    zTreeObject.emptyTreec                 C   s`   | D ]}|  ¡ }t|ƒ qtdƒ| kr0| tdƒ= tdƒ| krF| tdƒ= tdƒ| kr\| tdƒ= d S )NrÐ   rÄ   rÇ   )rŠ   rÝ   r%   )r>   rÈ   rÔ   r.   r.   rB   rá   �  s    


zTreeObject.empty_tree)rb   rc   rd   rÀ   re   rÁ   rÂ   r   rÆ   r   rÅ   rÉ   r   rÊ   rÌ   rÖ   rÛ   r×   rß   rà   rá   r.   r.   r.   rB   r¿   Ù  s&   7   þ#%	r¿   )rÔ   r3   c                 C   s:   | t dƒ= t dƒ| kr | t dƒ= t dƒ| kr6| t dƒ= 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Ñ   rs   rt   N)r%   )rÔ   r.   r.   rB   rÝ   š  s
    

rÝ   c                       s*  e Zd Zddœdd„Zeeeeee	df e
e	 f ddœ‡ fdd„Zedœ‡ fd	d
„Zeed dœdd„ƒZejdddœdd„ƒZeedœdd„ƒZejeddœdd„ƒZeede	ef ddœdd„Zeee	ef ed dœdd„ƒZeee	ef ed dœdd„ƒZddœdd„Zddœdd „Z‡  ZS )!r;   NrC   c                 C   s   d | _ d | _d S r€   )Ú_StreamObject__dataÚdecoded_selfrE   r.   r.   rB   rÀ   ¨  s    zStreamObject.__init__.rp   c                    sj   t d|ƒj| _z0t d|ƒj}|dkr,d| _n| |d|¡| _W n tk
rR   Y nX tƒ  ||||¡ dS )rr   r;   NT)r
   Ú_datarã   r5   r8   Úsuperrn   )r>   rq   r0   r1   r2   rã   ©rk   r.   rB   rn   ¬  s    zStreamObject._clonec                    s   t ƒ  ¡ }|t| jƒ7 }|S r€   )rå   Úhash_value_datar   rä   ©r>   r@   ræ   r.   rB   rç   À  s    
zStreamObject.hash_value_dataÚDecodedStreamObjectc                 C   s   t dddƒ | jS ©NÚdecodedSelfrã   rP   ©r   rã   rE   r.   r.   rB   rë   Å  s    zStreamObject.decodedSelf©r„   r3   c                 C   s   t dddƒ || _d S rê   rì   ©r>   r„   r.   r.   rB   rë   Ê  s    c                 C   s   | j S r€   ©râ   rE   r.   r.   rB   rä   Ï  s    zStreamObject._datac                 C   s
   || _ d S r€   rï   rî   r.   r.   rB   rä   Ó  s    rG   c                 C   sp   t t| jƒƒ| ttjƒ< t | ||¡ | tj= | d¡ | j}|rXddl	m
} |||ƒ}| |¡ | d¡ d S )Ns   
stream
r   )ÚRC4_encrypts
   
endstream)r'   rl   rä   r%   r²   r³   rj   rM   rL   Z	_securityrð   )r>   rH   rI   r@   rð   r.   r.   rB   rM   ×  s    


zStreamObject.write_to_stream)ÚEncodedStreamObjectré   ©r@   r3   c                 C   s
   t  | ¡S r€   )r;   r´   )r@   r.   r.   rB   ÚinitializeFromDictionaryæ  s    z%StreamObject.initializeFromDictionaryc                 C   s>   t j| krtƒ }ntƒ }| d |_| d= | t j= | | ¡ |S )Nr­   )r²   ÚFILTERrñ   ré   rä   r³   r±   )r@   r¶   r.   r.   rB   r´   ì  s    


z'StreamObject.initialize_from_dictionaryrñ   c                 C   s   t dddƒ |  ¡ S )NÚflateEncodeÚflate_encoderP   )r   rö   rE   r.   r.   rB   rõ   û  s    zStreamObject.flateEncodec                 C   s�   ddl m} tj| krb| tj }t|tƒr>| dttj	ƒ¡ qjtƒ }| 
tdƒ¡ | 
|¡ |}ntdƒ}tƒ }||ttjƒ< | | j¡|_|S )Nr   )ÚFlateDecoder   z/FlateDecode)Úfiltersr÷   r²   rô   r:   r-   Úinsertr%   ÚFTZFLATE_DECODEr<   rñ   Úencoderä   )r>   r÷   ÚfZnewfr¶   r.   r.   rB   rö   ÿ  s    



zStreamObject.flate_encode)rb   rc   rd   rÀ   rj   r   re   r	   r   rf   r   rn   rg   rç   r¾   r   rë   Úsetterr   rä   r   rM   rh   r   ró   r´   rõ   rö   Ú__classcell__r.   r.   ræ   rB   r;   §  s<   ú þ
þ
þr;   c                   @   sH   e Zd Zedœdd„Zeedœdd„Zedœdd„Zed	dœd
d„Zd	S )ré   rC   c                 C   s   | j S r€   ©rä   rE   r.   r.   rB   Úget_data  s    zDecodedStreamObject.get_datarò   c                 C   s
   || _ d S r€   rÿ   rè   r.   r.   rB   Úset_data  s    zDecodedStreamObject.set_datac                 C   s   t dddƒ | jS ©NÚgetDatar   rP   )r   rä   rE   r.   r.   rB   r    s    zDecodedStreamObject.getDataNc                 C   s   t dddƒ |  |¡ d S ©NÚsetDatar  rP   ©r   r  rè   r.   r.   rB   r    s    zDecodedStreamObject.setData)rb   rc   rd   r   r   r  r  r  r.   r.   r.   rB   ré     s   ré   c                   @   s–   e Zd Zddœdd„Zeed dœdd„ƒZejeddœd	d„ƒZe	de
ef dœd
d„Ze	de
ef dœdd„Zeddœdd„Zeddœdd„ZdS )rñ   NrC   c                 C   s
   d | _ d S r€   )rã   rE   r.   r.   rB   rÀ   $  s    zEncodedStreamObject.__init__ré   c                 C   s   t dddƒ | jS rê   rì   rE   r.   r.   rB   rë   '  s    zEncodedStreamObject.decodedSelfrí   c                 C   s   t dddƒ || _d S rê   rì   rî   r.   r.   rB   rë   ,  s    c                 C   sr   ddl m} | jd k	r | j ¡ S tƒ }|| ƒ|_t|  ¡ ƒD ]$\}}|tj	tj
tjfkr<|||< q<|| _|jS d S )Nr   )Údecode_stream_data)rø   r  rã   r   ré   rä   rw   rF   r²   r³   rô   ZDECODE_PARMS)r>   r  Údecodedr   r„   r.   r.   rB   r   1  s    



zEncodedStreamObject.get_datac                 C   s   t dddƒ |  ¡ S r  )r   r   rE   r.   r.   rB   r  B  s    zEncodedStreamObject.getDatarò   c                 C   s   t dƒ‚d S )Nz7Creating EncodedStreamObject is not currently supported)r   rè   r.   r.   rB   r  F  s    zEncodedStreamObject.set_datac                 C   s   t dddƒ |  |¡S r  r  rè   r.   r.   rB   r  I  s    zEncodedStreamObject.setData)rb   rc   rd   rÀ   r¾   r   rë   rý   ré   r	   rf   rg   r   r  r   r  r  r.   r.   r.   rB   rñ   #  s   rñ   c                
   @   sè   e Zd Zdeeedeee eeef f ddœdd„Z	dee
eeedf ee df d dœd	d
„Zeee
eeedf ee f ddœdd„Zeddœdd„Zeeeef dœdd„Zeedœdd„ƒZejeeef ddœdd„ƒZdS )ÚContentStreamNrS   c           	      C   sª   || _ g | _|d k	r¦| ¡ }t|tƒrrd}|D ]8}|t| ¡  ¡ ƒ7 }t|ƒdks^|d dkr.|d7 }q.t|ƒ}n$| ¡ }|d k	s†t	‚t|ƒ}t|ƒ}|| _
|  |¡ d S )Nó    r   rU   r”   )r7   Ú
operationsrŠ   r:   r-   r   r   rl   r   ry   rT   Ú$_ContentStream__parse_content_stream)	r>   rH   r7   rT   r@   r|   Zstream_bytesZstream_dataZstream_data_bytesr.   r.   rB   rÀ   O  s"    


zContentStream.__init__Fr.   .r/   c                 C   sj   z| j j|kr|s| W S W n tk
r.   Y nX td|  |  dd¡|¡ƒ}|dkrVg }| | |||¡ |S )r4   r	  N)r6   r7   r8   r
   r9   rk   rn   ro   r.   r.   rB   r5   o  s    
 ÿzContentStream.clonerp   c                 C   s*   || _ ttd|ƒjƒ| _td|ƒj| _dS )rr   r	  N)r7   rw   r
   r  rT   )r>   rq   r0   r1   r2   r.   r.   rB   rn   „  s    zContentStream._clone)rH   r3   c                 C   sÒ   |  dd¡ g }t|ƒ}|dksÎ|dkr*qÎ|  dd¡ | ¡ sF|dkršt|tjdƒ}|dkr„|g ksht‚|  |¡}| j 	|df¡ qÌ| j 	||f¡ g }q|d	kr¸|d
krÌ| 
d¡}q¢q| 	t|d | jƒ¡ qd S )Nr   r
  rU   r!   )ó   'ó   "Tó   BIó   INLINE IMAGEr¨   ©r¬   r”   )rY   r   Úisalphar   r%   Zdelimiter_patternry   Ú_read_inline_imager  r<   rW   rZ   rT   )r>   rH   ÚoperandsÚpeekÚoperatorÚiir.   r.   rB   Z__parse_content_stream“  s$    
z$ContentStream.__parse_content_streamc                 C   sœ  t ƒ }t|ƒ}| dd¡ |dkr$qZt|| jƒ}t|ƒ}| dd¡ t|| jƒ}|||< q| d¡}|d d… dksxt‚tƒ }| d¡}|s”tdƒ‚| 	d	¡}	|	dkr²| 
|¡ q~| 
|d
|	… ¡ | |	t|ƒ d¡ | d¡}| d¡}
|
dk�rv||	d |	… tk�rv| d¡}||
 }d}|tk�rFd}||7 }| d¡}�q"|�r^| dd¡ �qŽn| dd¡ | 
|¡ q~| dd¡ | 
|¡ q~|| ¡ dœS )NrU   r!   ó   Ié   r   s   IDi    zUnexpected end of streamó   Er   FT)Úsettingsr@   )rj   r   rY   rZ   r7   rW   ry   r   r   r¢   rL   rl   r   Úgetvalue)r>   rH   r  r\   r   r„   r[   r@   ÚbufÚlocZtok2Ztok3ÚinfoZhas_q_whitespacer.   r.   rB   r  ±  sN    





 

z ContentStream._read_inline_imagerC   c                 C   s¸   t ƒ }| jD ]¢\}}|dkrv| d¡ t ƒ }|d  |d ¡ | | ¡ dd… ¡ | d¡ | |d ¡ | d¡ n.|D ]}| |d ¡ | d	¡ qz| t|ƒ¡ | d
¡ q| ¡ S )Nr  r  r  r   éþÿÿÿs   ID r@   s   EIrK   r”   )r   r  rL   rM   r  r   )r>   Únewdatar  r  ZdicttextÚopr.   r.   rB   rä   í  s     

zContentStream._datarí   c                 C   s   |   tt|ƒƒ¡ d S r€   )r  r   r   rî   r.   r.   rB   rä     s    )N)Fr.   )rb   rc   rd   r   r	   rf   r   r   ri   rÀ   re   r   r5   rj   r   rn   r   r  r  r¾   rg   rä   rý   r.   r.   r.   rB   r	  N  s6    üû#  üûú<r	  rS   c              	   C   sÆ  |   d¡}|  dd¡ |dkr*t | |¡S |dkrl|   d¡}|  dd¡ |dkr^t | ||¡S t| |ƒS �nV|dkr‚t | ||¡S |d	ks’|d
krœt | ¡S |dkr®t| |ƒS |dkrÖ|   d¡dkrÖ|  dd¡ t	ƒ S |dkrèt	 | ¡S |dk�r@|dk�r |   d¡}t
|ƒdk� ròtdƒ‚� qòt| ƒ}|  dd¡ t| ||ƒS |dk�rŽ|   d¡}|  t
|ƒ d¡ t |¡d k	�r‚t | |¡S t | ¡S n4|  dd¡ td|›d|  ¡ › d|   d¡ ¡ › �ƒ‚d S )Nr!   rU   ó   /ó   <r   r   r¦   rJ   ó   tó   fó   (ó   eé   s   endobjiúÿÿÿó   nr¨   r  r   zFile ended unexpectedly.s   0123456789+-.é   iìÿÿÿz(Invalid Elementary Object starting with z @z: éP   )rW   rY   r%   r]   rj   r+   r-   r"   r,   r&   rl   r    r   rZ   ÚIndirectPatternÚmatchr$   r'   r   r¡   r°   )rH   r7   rT   r\   r  r.   r.   rB   rZ     sN    









"ÿrZ   c                   @   sr  e Zd ZdZeeef ddœdd„Zee	e
 dœdd„ƒZee	e
 dœd	d
„ƒZee	e dœdd„ƒZee	d dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœd d!„ƒZee	e dœd"d#„ƒZee	e dœd$d%„ƒZdS )&ÚFieldzŒ
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<PyPDF2.PdfReader.get_fields>`
    Nrò   c              	   C   sR   t  | ¡ t ¡ t ¡  }|D ].}z|| | t|ƒ< W q tk
rJ   Y qX qd S r€   )rj   rÀ   r   Ú
attributesr   r%   ÚKeyError)r>   r@   Zfield_attributesÚattrr.   r.   rB   rÀ   E  s    
ÿÿzField.__init__rC   c                 C   s   |   tj¡S )z4Read-only property accessing the type of this field.)rŒ   r   rú   rE   r.   r.   rB   Ú
field_typeR  s    zField.field_typec                 C   s   t dddƒ | jS )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`field_type` instead.
        Ú	fieldTyper3  rP   )r   r3  rE   r.   r.   rB   r4  W  s    zField.fieldTypec                 C   s   |   tj¡S )z6Read-only property accessing the parent of this field.)rŒ   r   ZParentrE   r.   r.   rB   rÎ   a  s    zField.parentr-   c                 C   s   |   tj¡S )z4Read-only property accessing the kids of this field.)rŒ   r   ZKidsrE   r.   r.   rB   Úkidsf  s    z
Field.kidsc                 C   s   |   tj¡S )z4Read-only property accessing the name of this field.)rŒ   r   ÚTrE   r.   r.   rB   Únamek  s    z
Field.namec                 C   s   |   tj¡S )z>Read-only property accessing the alternate name of this field.)rŒ   r   ZTUrE   r.   r.   rB   Úalternate_namep  s    zField.alternate_namec                 C   s   t dddƒ | jS )z\
        .. deprecated:: 1.28.3

            Use :py:attr:`alternate_name` instead.
        ÚaltNamer8  rP   )r   r8  rE   r.   r.   rB   r9  u  s    zField.altNamec                 C   s   |   tj¡S )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   ZTMrE   r.   r.   rB   Úmapping_name  s    zField.mapping_namec                 C   s   t dddƒ | jS )zZ
        .. deprecated:: 1.28.3

            Use :py:attr:`mapping_name` instead.
        ÚmappingNamer:  rP   )r   r:  rE   r.   r.   rB   r;  ˆ  s    zField.mappingNamec                 C   s   |   tj¡S )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   ZFfrE   r.   r.   rB   Úflags’  s    zField.flagsc                 C   s   |   tj¡S )zr
        Read-only property accessing the value of this field. Format
        varies based on field type.
        )rŒ   r   ÚVrE   r.   r.   rB   r„   š  s    zField.valuec                 C   s   |   tj¡S )z=Read-only property accessing the default value of this field.)rŒ   r   ZDVrE   r.   r.   rB   Údefault_value¢  s    zField.default_valuec                 C   s   t dddƒ | jS )z[
        .. deprecated:: 1.28.3

            Use :py:attr:`default_value` instead.
        ÚdefaultValuer>  rP   )r   r>  rE   r.   r.   rB   r?  §  s    zField.defaultValuec                 C   s   |   tj¡S )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   ZAArE   r.   r.   rB   Úadditional_actions±  s    zField.additional_actionsc                 C   s   t dddƒ | jS )z`
        .. deprecated:: 1.28.3

            Use :py:attr:`additional_actions` instead.
        ÚadditionalActionsr@  rP   )r   r@  rE   r.   r.   rB   rA  º  s    zField.additionalActions)rb   rc   rd   Ú__doc__r   rf   r   rÀ   r¾   r   r%   r3  r4  rj   rÎ   r5  r7  r8  r9  r:  r;  ri   r<  r„   r>  r?  r@  rA  r.   r.   r.   rB   r/  =  s@   				r/  c                   @   s€  e Zd ZU dZdZee ed< g Ze	e
 ed< eeeeeef eddœdd„Zedd	œd
d„ƒZdd	œdd„Zeedeef ddœdd„Zeee d	œdd„ƒZeee d	œdd„ƒZeee d	œdd„ƒZeee d	œdd„ƒZeee d	œdd„ƒZeee d	œdd„ƒZeee d	œdd„ƒZ eee d	œdd „ƒZ!eed d	œd!d"„ƒZ"eee# d	œd#d$„ƒZ$eee d	œ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Úfitr3   c                 C   st  |j }|j}t | ¡ t|ƒ| tdƒ< || tdƒ< || tdƒ< |dkrp|\| ttjƒ< | ttjƒ< | tdƒ< �n |t	j
kr°|\| ttjƒ< | ttjƒ< | ttjƒ< | ttjƒ< nÀ|t	jt	jfk� rþz|\| ttjƒ< W n$ tk
rú   tƒ | ttjƒ< Y nX nr|t	jt	jfk�rNz|\| ttjƒ< W n& tk
�rJ   tƒ | ttjƒ< Y nX n"|t	jt	jfk�rbntd|›�ƒ‚d S )Nú/Titleú/Pageú/Typez/XYZú/ZoomzUnknown Destination Type: )Zfit_typeZfit_argsrj   rÀ   r)   r%   ÚTAZLEFTZTOPÚTFZFIT_RZBOTTOMZRIGHTZFIT_HZFIT_BHr8   r&   ZFIT_VZFIT_BVZFITZFIT_Br   )r>   rF  rG  rH  ÚtypÚargsr.   r.   rB   rÀ   Ø  sD    
ü
ý
ûüzDestination.__init__r-   rC   c                    s(   t ˆ  d¡ˆ d g‡ fdd„dD ƒ ƒS )NrJ  rK  c                    s   g | ]}|ˆ krˆ | ‘qS r.   r.   )Ú.0ÚxrE   r.   rB   Ú
<listcomp>  s   þz*Destination.dest_array.<locals>.<listcomp>)ú/Leftú/Bottomú/Rightú/ToprL  )r-   rx   rE   r.   rE   rB   Ú
dest_array  s    
þÿÿzDestination.dest_arrayc                 C   s   t dddƒ | jS )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`dest_array` instead.
        ÚgetDestArrayrX  rP   )r   rX  rE   r.   r.   rB   rY    s    zDestination.getDestArrayrG   c                 C   s„   |  d¡ tdƒ}| ||¡ |  d¡ | j}| ||¡ tdƒ}| ||¡ |  d¡ tdƒ}| ||¡ |  d¡ |  d¡ d S )Nr“   z/DrK   z/Sz/GoTor”   r•   )rL   r%   rM   rX  )r>   rH   rI   r   r„   Zvalue_sr.   r.   rB   rM     s    



zDestination.write_to_streamc                 C   s
   |   d¡S )z3Read-only property accessing the destination title.rI  ©rŒ   rE   r.   r.   rB   rF  *  s    zDestination.titlec                 C   s
   |   d¡S )z9Read-only property accessing the destination page number.rJ  rZ  rE   r.   r.   rB   rG  /  s    zDestination.pagec                 C   s
   |   d¡S )z2Read-only property accessing the destination type.rK  rZ  rE   r.   r.   rB   rO  4  s    zDestination.typc                 C   s   |   dd¡S )z-Read-only property accessing the zoom factor.rL  NrZ  rE   r.   r.   rB   Úzoom9  s    zDestination.zoomc                 C   s   |   dd¡S )z<Read-only property accessing the left horizontal coordinate.rT  NrZ  rE   r.   r.   rB   Úleft>  s    zDestination.leftc                 C   s   |   dd¡S )z=Read-only property accessing the right horizontal coordinate.rV  NrZ  rE   r.   r.   rB   ÚrightC  s    zDestination.rightc                 C   s   |   dd¡S )z9Read-only property accessing the top vertical coordinate.rW  NrZ  rE   r.   r.   rB   ÚtopH  s    zDestination.topc                 C   s   |   dd¡S )z<Read-only property accessing the bottom vertical coordinate.rU  NrZ  rE   r.   r.   rB   ÚbottomM  s    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#   rE   r.   r.   rB   ÚcolorR  s     ÿzDestination.colorc                 C   s   |   dd¡S )zDRead-only property accessing the font type. 1=italic, 2=bold, 3=bothz/Fr   rZ  rE   r.   r.   rB   Úfont_formatY  s    zDestination.font_formatc                 C   s   |   dd¡S )z¿
        Read-only property accessing the outline count.
        positive = expanded
        negative = collapsed
        absolute value = number of visible descendents at all levels
        rÐ   NrZ  rE   r.   r.   rB   Úoutline_count^  s    zDestination.outline_count)&rb   rc   rd   rB  rD  r   rj   Ú__annotations__rE  r   r   rf   r	   r'   r$   r&   r*   rÀ   r¾   rX  rY  r   rg   rM   rF  ri   rG  rO  r[  r#   r\  r]  r^  r_  r`  r   ra  rb  r.   r.   r.   rB   rC  Å  sP   
þÿû+

 þrC  )N)NÚ
__author__Ú__author_email__ÚloggingÚreÚior   Útypingr   r   r   r   r   r   r	   r
   Z
_protocolsr   Z_utilsr   r   r   r   r   r   r   r   r   r   Ú	constantsr   r   r   rú   r   r   r²   r   rM  r   rN  Úerrorsr   r   r    Z_baser"   r#   r$   r%   r&   r'   r(   r)   Z_fitr*   r+   r,   Ú	getLoggerrb   ÚloggerZNumberSignsÚcompiler-  rw   r-   r�   rj   r¿   rÝ   r;   ré   rñ   r	  rf   ri   rZ   r/  rC  r.   r.   r.   rB   Ú<module>   sT   (0(


S  : Bl+ < ýü7 	