
    PhW              	           d dl mZmZmZmZ ddl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   )ArrayObjectDictionaryObjectIndirectObject	PdfObjectTextStringObject   )
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      M/var/www/html/saasai/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_page1   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_reference5   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   r5   )r   s    r   r$   z(DirectReferenceLink.find_referenced_pageC   s    q!!r   r%   r   r&   c                 "    || j                   d<   y)r(   r   Nr5   r+   s      r   r,   z#DirectReferenceLink.patch_referenceF   s    %r   )	r-   r.   r/   r0   r   r   r
   r$   r,   r1   r   r   r3   r3   <   s?    R$+ $$ $"n "&+ & &TX &r   r3   r&   r   old_pager   c                    | j                  dg       D cg c]  }t        ||        }}|j                  dg       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/Annots)r    _build_linkzip)r&   r8   link	new_links	old_linksnew_linkold_links          r   extract_linksrA   N   s     :BiQS9TU9TT8,9TIU9AiQS9TU9TT8,9TIU y)$$ "6(H 
8$  VUs   A8A="B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	   
get_object
isinstancer    _create_link)rB   r"   srcr<   actions        r   r:   r:   \   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   )rF   r   r   r   r3   )r   r   s     r   rG   rG   q   s2    )-.!)Z88)[)"9--r   N)typingr   r   r   r    r   r	   r
   r   r   _pager   _readerr   _writerr   r   r3   ReferenceLinklisttuplerA   r:   rG   r1   r   r   <module>rS      s   > 8 7 X X"##Y Y&& & (*==>L L T%P]_lPlJmEn  | Q^H_ *I ; (=BY r   