o
    j?                  	   @   s   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r6ddlmZ ddlmZ ddlmZ G d	d
 d
ZG dd dZeeef Zdddddeeeef  fddZde
dddee fddZdedddee fddZdS )    )TYPE_CHECKINGOptionalUnioncast   )logger_warning   )ArrayObjectDictionaryObjectIndirectObject	PdfObjectTextStringObjectis_null_or_none)
PageObject)	PdfReader)	PdfWriterc                   @   sR   e Zd ZdZdeddddfddZdeedf fd	d
ZdddeddfddZ	dS )NamedReferenceLinkzGNamed reference link being preserved until we can resolve it correctly.	reference
source_pdfr   returnNc                 C   s   || _ || _dS )z0reference: TextStringObject with named referenceN)
_reference_source_pdf)selfr   r    r   Y/var/www/html/fyndo/pharma/fyndo/venv/lib/python3.10/site-packages/pypdf/generic/_link.py__init__-   s   
zNamedReferenceLink.__init__c                 C   s"   | j jt| j}|r|jS d S N)r   named_destinationsgetstrr   page)r   destinationr   r   r   find_referenced_page2   s   z'NamedReferenceLink.find_referenced_page
target_pdfr   new_pagec                 C   s,   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$   r   r   r   patch_reference6   s   z"NamedReferenceLink.patch_reference)
__name__
__module____qualname____doc__r   r   r   r   r"   r)   r   r   r   r   r   *   s
    r   c                   @   sF   e Zd ZdZdeddfddZdefddZd	d
deddfddZdS )DirectReferenceLinkzHDirect reference link being preserved until we can resolve it correctly.r   r   Nc                 C   s
   || _ dS )zIreference: an ArrayObject whose first element is the Page indirect objectNr   )r   r   r   r   r   r   @   s   
zDirectReferenceLink.__init__c                 C   s   t t| jd S )Nr   )r   r   r   )r   r   r   r   r"   D   s   z(DirectReferenceLink.find_referenced_pager#   r   r$   c                 C   s   || j d< dS )r%   r   Nr/   r(   r   r   r   r)   G   s   z#DirectReferenceLink.patch_reference)	r*   r+   r,   r-   r	   r   r   r"   r)   r   r   r   r   r.   =   s
    r.   r$   r   old_pager   c                    s    dt  } dt  }t|rt }t|r t }t|tr*t|ts8td| d| dt g S  fdd|D } fd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                    "   g | ]}t |  d ur qS r   _build_link.0
annotation)linkr$   r   r   
<listcomp>b   
    z!extract_links.<locals>.<listcomp>c                    r2   r   r3   r5   )r8   r0   r   r   r9   g   r:   zAnnotation sizes differ: z vs. )
r   r	   
get_objectr   
isinstancer   r*   lenlistzip)r$   r0   new_annotationsold_annotations	new_links	old_linksr   )r8   r$   r0   r   extract_linksO   s0   rD   indirect_objectr    c                 C   s   t d|j}t t|  }t|tr|ddkrd S d|v r<t t|d }|ddkr/d S d|vr5d S t|d |S d|v rGt|d |S d S )	Nr   z/Subtypez/Linkz/Az/Sz/GoToz/Dz/Dest)r   pdfr
   r;   r<   r   _create_link)rE   r    srcr8   actionr   r   r   r4   v   s   r4   r   r   r   c                 C   s*   t | tr
t| |S t | trt| S d S r   )r<   r   r   r	   r.   )r   r   r   r   r   rG      s
   


rG   N)typingr   r   r   r   _utilsr    r	   r
   r   r   r   r   _pager   _readerr   _writerr   r   r.   ReferenceLinkr>   tuplerD   r4   rG   r   r   r   r   <module>   s    "'