
    Pǻi              	           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y)    )TYPE_CHECKINGOptionalUnioncast   )logger_warning   )ArrayObjectDictionaryObjectIndirectObject	PdfObjectTextStringObjectis_null_or_none)
PageObject)	PdfReader)	PdfWriterc                   N    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	y)NamedReferenceLinkzGNamed reference link being preserved until we can resolve it correctly.	reference
source_pdfr   returnNc                      || _         || _        y)z0reference: TextStringObject with named referenceN)
_reference_source_pdf)selfr   r   s      Q/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/pypdf/generic/_link.py__init__zNamedReferenceLink.__init__-   s    #%    c                     | j                   j                  j                  t        | j                              }|r|j
                  S d S N)r   named_destinationsgetstrr   page)r   destinations     r   find_referenced_pagez'NamedReferenceLink.find_referenced_page2   s:    &&99==c$//>RS#.{8D8r   
target_pdfr   new_pagec                     t        | j                        |j                  vr0|j                  t        | j                        |j                         yy)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   s@     tz'D'DD,,S-A8CWCWX Er   )
__name__
__module____qualname____doc__r   r   r   r   r&   r.    r   r   r   r   *   sV    Q&"2 & &PT &
9eND,@&A 9Y+ Y YTX Yr   r   c                   @    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y)DirectReferenceLinkzHDirect reference link being preserved until we can resolve it correctly.r   r   Nc                     || _         y)zIreference: an ArrayObject whose first element is the Page indirect objectNr   )r   r   s     r   r   zDirectReferenceLink.__init__@   s	    #r   c                      | j                   d   S )Nr   r7   )r   s    r   r&   z(DirectReferenceLink.find_referenced_pageD   s    q!!r   r'   r   r(   c                 "    || j                   d<   y)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$+ $$ $"n "&+ & &TX &r   r5   r(   r   old_pager   c                 6   | j                  dt                     j                         }|j                  dt                     j                         }t        |      r
t               }t        |      r
t               }t	        |t              rt	        |t              st        d| d| dt               g S |D cg c]  }t        ||        }}|D cg c]  }t        ||       }}t        ||      D cg c]  \  }}|r|r||f c}}S c c}w c c}w c c}}w )zExtracts links from two pages on the assumption that the two pages are
    the same. Produces one list of (new link, old link) tuples.
    z/AnnotszExpected annotation arrays:  z. Ignoring annotations.)	r"   r
   
get_objectr   
isinstancer   r/   _build_linkzip)	r(   r:   new_annotationsold_annotationslink	new_links	old_linksnew_linkold_links	            r   extract_linksrH   O   s
    ll9km<GGIOll9km<GGIO'%-'%-o{3:oWb;c*?*;1_<MMde	
 	
 :IIT8,III9HIT8,III y)$!5(H 
8  JIs   8DD5Dindirect_objectr$   c                 \   t        d|j                        }t        t        | j                               }t	        |t              r|j                  d      dk7  ry d|v r<t        t        |d         }|j                  d      dk7  ry d|vry t        |d   |      S d|v rt        |d   |      S y )	Nr   z/Subtypez/Linkz/Az/Sz/GoToz/Dz/Dest)r   pdfr   r=   r>   r"   _create_link)rI   r$   srcrC   actions        r   r?   r?   m   s    
{DHH
%C /"<"<">?Dt-.488J3G73Rt|&T
3::dw&vF4L#..$DM3//r   r   r   r   c                 r    t        | t              rt        | |      S t        | t              rt	        |       S y r    )r>   r   r   r
   r5   )r   r   s     r   rL   rL      s2    )-.!)Z88)[)"9--r   N)typingr   r   r   r   _utilsr    r
   r   r   r   r   r   _pager   _readerr   _writerr   r   r5   ReferenceLinklisttuplerH   r?   rL   r3   r   r   <module>rY      s   > 8 7 # i i"##Y Y&& & (*==>L L T%P]_lPlJmEn < | Q^H_ *I ; 8MCZ r   