
    є j?              	       *   d dl 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 erddlmZ ddlmZ ddlmZ  G d	 d
          Z G d d          Zeeef         Zdddddeeeef                  fdZde
dddee         fdZdedddee         fdZdS )    )TYPE_CHECKINGOptionalUnioncast   )logger_warning   )ArrayObjectDictionaryObjectIndirectObject	PdfObjectTextStringObjectis_null_or_none)
PageObject)	PdfReader)	PdfWriterc                   V    e Zd ZdZdeddddfdZdeedf         fdZd	d
deddfdZ	dS )NamedReferenceLinkzGNamed reference link being preserved until we can resolve it correctly.	reference
source_pdfr   returnNc                 "    || _         || _        dS )z0reference: TextStringObject with named referenceN)
_reference_source_pdf)selfr   r   s      gC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pypdf/generic/_link.py__init__zNamedReferenceLink.__init__-   s    #%    c                 z    | j         j                            t          | j                            }|r|j        nd S N)r   named_destinationsgetstrr   page)r   destinations     r   find_referenced_pagez'NamedReferenceLink.find_referenced_page2   s8    &9==c$/>R>RSS#.8{D8r   
target_pdfr   new_pagec                     t          | j                  |j        vr/|                    t          | j                  |j                   dS dS )2target_pdf: PdfWriter which the new link went intoN)r#   r   r!   add_named_destinationpage_numberr   r'   r(   s      r   patch_referencez"NamedReferenceLink.patch_reference6   sT     tz'DD 	Y,,S-A-A8CWXXXXX	Y 	Yr   )
__name__
__module____qualname____doc__r   r   r   r   r&   r.    r   r   r   r   *   s        QQ&"2 & &PT & & & &
9eND,@&A 9 9 9 9Y+ Y YTX Y Y Y Y Y Yr   r   c                   B    e Zd ZdZdeddfdZdefdZddd	eddfd
ZdS )DirectReferenceLinkzHDirect reference link being preserved until we can resolve it correctly.r   r   Nc                     || _         dS )zIreference: an ArrayObject whose first element is the Page indirect objectNr   )r   r   s     r   r   zDirectReferenceLink.__init__@   s    #r   c                 B    t          t          | j        d                   S )Nr   )r   r   r   )r   s    r   r&   z(DirectReferenceLink.find_referenced_pageD   s    NDOA$6777r   r'   r   r(   c                     || j         d<   dS )r*   r   Nr7   r-   s      r   r.   z#DirectReferenceLink.patch_referenceG   s    %r   )	r/   r0   r1   r2   r
   r   r   r&   r.   r3   r   r   r5   r5   =   s        RR$+ $$ $ $ $ $8n 8 8 8 8&+ & &TX & & & & & &r   r5   r(   r   old_pager   c                                           dt                                                                }                     dt                                                                }t          |          rt                      }t          |          rt                      }t	          |t                    rt	          |t                    st          d| d| dt                     g S  fd|D             }fd|D             }t          |          t          |          k    rt          d| d| t                     t          t          ||                    S )	a!  Extracts links from two pages on the assumption that the two pages are
    the same. Produces one list of (new link, old link) tuples.

    Non-link annotations are ignored before pairing to avoid dropping valid
    links when one page includes additional non-link annotation entries.
    z/AnnotszExpected annotation arrays:  z. Ignoring annotations.c                 8    g | ]}t          |          xS r    _build_link).0
annotationlinkr(   s     r   
<listcomp>z!extract_links.<locals>.<listcomp>b   >       
H555D  r   c                 8    g | ]}t          |          xS r    r>   )r@   rA   rB   r:   s     r   rC   z!extract_links.<locals>.<listcomp>g   rD   r   zAnnotation sizes differ: z vs. )
r"   r
   
get_objectr   
isinstancer   r/   lenlistzip)r(   r:   new_annotationsold_annotations	new_links	old_linksrB   s   ``    @r   extract_linksrO   O   s    ll9kmm<<GGIIOll9kmm<<GGIIO'' (%--'' (%--o{33 :oWb;c;c e?ee_eee	
 	
 	
 	    )  I
    )  I 9~~Y' 
C	CC	CC	
 	
 	

 Iy))***r   indirect_objectr$   c                    t          d|j                  }t          t          |                                           }t	          |t                    r|                    d          dk    rd S d|v rRt          t          |d                   }|                    d          dk    rd S d|vrd S t          |d         |          S d|v rt          |d         |          S d S )	Nr   z/Subtypez/Linkz/Az/Sz/GoToz/Dz/Dest)r   pdfr   rF   rG   r"   _create_link)rP   r$   srcrB   actions        r   r?   r?   v   s    
{DH
%
%C /"<"<">">??Dt-.. 488J3G3G73R tt| /&T
33::dw& 	4v 	4F4L#...$ 0DM3///4r   r   r   r   c                     t          | t                    rt          | |          S t          | t                    rt	          |           S d S r    )rG   r   r   r
   r5   )r   r   s     r   rS   rS      sJ    )-.. 9!)Z888)[)) ."9---4r   N)typingr   r   r   r   _utilsr    r
   r   r   r   r   r   _pager   _readerr   _writerr   r   r5   ReferenceLinkrI   tuplerO   r?   rS   r3   r   r   <module>r_      s  > 8 7 7 7 7 7 7 7 7 7 7 7 # # # # # # i i i i i i i i i i i i i i i i $""""""############Y Y Y Y Y Y Y Y&& & & & & & & & (*==>$+L $+L $+T%P]_lPlJmEn $+ $+ $+ $+N | Q^H_    *I ; 8MCZ      r   