
    mjo                    (   d Z dZddlZddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZ dd	lmZmZmZ dd
l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#m$Z$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/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZC ddlmDZDmEZE ej                  dk\  rddlmGZG nddlHmGZG  ej                  eJ      ZK ej                  d      ZM G d deNe   e9      ZO G d dePeef   e9      ZQ G d deQ      ZRdeddfd ZS G d! d"eQ      ZT G d# d$eT      ZU G d% d&eT      ZVd'ZW G d( d)eU      ZX	 d2d*ed+ee   d,edeYeNeY   ePeZeYf   f   dee9eZeYeXf   fd-Z[ G d. d/eR      Z\ G d0 d1eR      Z]y)3zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)IterableSequence)BytesIO)ceil)AnyCallableOptionalUnioncast   )PdfReaderProtocolPdfWriterProtocolXmpInformationProtocol)	WHITESPACESBinaryStreamType
StreamTypedeprecation_no_replacementlogger_warningread_non_whitespaceread_until_regexread_until_whitespaceskip_over_comment)CheckboxRadioButtonAttributesFieldDictionaryAttributesOutlineFontFlagStreamAttributes)FilterTypes)TypArguments)TypFitArguments)STREAM_TRUNCATED_PREMATURELYLimitReachedErrorPdfReadErrorPdfStreamError   )
BooleanObjectByteStringObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObjectis_null_or_none)Fit)extract_inline__ascii85_decode extract_inline__ascii_hex_decodeextract_inline__dct_decode!extract_inline__run_length_decodeextract_inline_default)read_hex_string_from_streamread_string_from_stream)      )Selfs   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   "   e Zd Zdedd fdZ	 	 ddededeeee	e
f         dd fdZde
fdZdee   fdZd	edee   fd
Zd	edd fdZd	edefdZd	edefdZ	 ddedede	ef   ddfdZe	 ddedee   dede	ee	   ee
e	f   f   dd fd       Zy)ArrayObjectpdf_destreturnc                     t        d| j                  t               |d            }| D ]@  }t        |d      r!|j	                  |j                  |             0|j	                  |       B |S )Nr;   F	replicate)r   _reference_cloner;   hasattrappendr?   )selfr<   arrdatas       Q/root/.hermes/venv/lib/python3.12/site-packages/pypdf/generic/_data_structures.pyr?   zArrayObject.replicatef   sh     !!+-5A
  	!Dt[)

4>>(34

4 		!
 
    force_duplicateignore_fieldsc                    	 | j                   j                  |k(  r|s| S t        d| j	                  t               |d            }| D ]  }t        |t              r@|j	                  |j                  |||      ||      }|j                  |j                          Tt        |t              rat        |j                         x}t              rA|j	                  |j                  |d|      ||      }|j                  |j                          t        |d      r#|j                  |j                  |||             |j                  |        |S # t        $ r Y >w xY w)Clone object into pdf_dest.r;   T)rH   )rH   rI   clone)indirect_referencepdf	Exceptionr   r@   r;   
isinstanceStreamObjectrL   rB   r(   
get_objectrA   )rC   r<   rH   rI   rD   rE   dupresolveds           rF   rL   zArrayObject.cloneu   sD   	&&**h6 !!+-4!P
  	!D$-++JJx-H#
 

3112D.1jT__M^A^`l6m++NN8TQ^N_#
 

3112w'

4::hOP

4 %	!& 
3  		s   E 	EEc                 P    t        | j                  t        d | D              f      S )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        c              3   <   K   | ]  }|j                           y wNhash_bin).0xs     rF   	<genexpr>z'ArrayObject.hash_bin.<locals>.<genexpr>   s     *FA1::<*Fs   )hash	__class__tuplerC   s    rF   rZ   zArrayObject.hash_bin   s#     T^^U*F*F%FGHHrG   c                     t        |       S )z:Emulate DictionaryObject.items for a list (index, object).)	enumeratera   s    rF   itemszArrayObject.items   s    rG   lstc                 *   t        |t        t        t        f      rt        |      }|S t        |t              r|g}|S t        |t
              r$|d   dk(  rt        |      g}|S t        |      g}|S t        |t              rt        |      g}|S |g}|S )Nr   /)
rP   listr`   setr,   strr)   r-   bytesr&   )rC   re   results      rF   _to_lstzArrayObject._to_lst   s     cD%-.#YF  Y'UF  S!1v}$S/*  +3/0
 	 U#&s+,F  UFrG   c                 \    t        |       }|j                  | j                  |             |S )a  
        Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        Returns:
            ArrayObject with all elements

        )r;   extendrm   )rC   re   temps      rF   __add__zArrayObject.__add__   s(     4 DLL%&rG   c                 F    | j                  | j                  |             | S )a  
         Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        )ro   rm   )rC   re   s     rF   __iadd__zArrayObject.__iadd__   s     	DLL%&rG   c                 z    | j                  |      D ]  }	 | j                  |      }| |=  | S # t        $ r Y 'w xY w)zAllow to remove items)rm   index
ValueError)rC   re   r\   ru   s       rF   __isub__zArrayObject.__isub__   sN    c" 	A

1K	   s   .	::Nstreamencryption_keyc                     |t        dd       |j                  d       | D ]$  }|j                  d       |j                  |       & |j                  d       y )N/the encryption_key parameter of write_to_stream5.0.0   [    s    ])r   writewrite_to_stream)rC   rx   ry   rE   s       rF   r   zArrayObject.write_to_stream   s\     %&A7 	T 	)DLL  (	) 	UrG   rN   forced_encodingc                    t               }| j                  d      }|dk7  rt        d      	 | j                  d      }|j                         r"| j                  d      }|j                         r"|dk(  r	 |S |dk(  r| j	                  dd       t        |        o| j	                  dd       | j                  d      }|dk(  r	 |S | j	                  dd       |j                  t        | ||             )Nr$   r}   zCould not read arrayrG      %   ])r;   readr"   isspaceseekr   rB   read_object)rx   rN   r   rD   tmptok
peek_aheads          rF   read_from_streamzArrayObject.read_from_stream   s     mkk!n$;566++a.C++-kk!n ++-cz 
 d{B"!&)KKAQJT! 
 KKAJJ{63@A% rG   F rX   )__name__
__module____qualname__r   r?   boolr	   r   r
   rj   intrL   rZ   r   r   rd   rh   rm   rq   r9   rs   rw   r   rk   r   staticmethodr   dictr   r   rG   rF   r;   r;   e   s\   # 
$ !&=?	### #  sCx 9:	#
 
#JI# Ix} 3 49 $3 = &C D C D  MQ 27c58H2I	  HL'( tS$s)T#s(^CD 
	 rG   r;   c                      e Zd Zdedd fdZ	 	 d!dededeeee	e
f         dd fdZdd dededeeee	e
f         deee
e
f      dd	fd
Zde
fdZdedefdZd"de	dedefdZdededefdZd"dedee   defdZdedefdZedee   fd       Z	 d"deded	e	ef   dd	fdZede
de
dee
   dede
f
d       Z ede!dede
defd       Z"e#	 d"dedee   ded	e	ee	   e$e
e	f   f   dd fd        Z%y	)#DictionaryObjectr<   r=   c                     t        d| j                  | j                         |d            }| j                         D ]6  \  }}t	        |d      r|j                  |      n|||j                  |      <   8 |S )Nr   Fr?   )r   r@   r_   rd   rA   r?   )rC   r<   d__kvs        rF   r?   zDictionaryObject.replicate  sv     !!$.."2HeD
 JJL 	DAq)0K)@H%a H%&	 
rG   rH   rI   c                 4   	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                         ||            }|g }t        |j                               dk(  r|j                  | ||||       |S # t        $ r Y ww xY w)rK   r   r   )
rM   rN   rO   ri   r   r@   r_   lenkeys_clonerC   r<   rH   rI   visitedr   s         rF   rL   zDictionaryObject.clone"  s    	&&**h6 ),!!$.."2HoN
  Msxxz?aJJtXwO
  		s   B 	BBsrcr   Nc           
      &   J t              d}|t              k  rQt        |   t              r*t	        t        |         dk  r|= |= >|xx   dz  cc<   |dz  }|t              k  rQt        fddD              rt              dD ]  }|D ]  }g }	|v s|| vst        j                  |      t              s0t        |   t              sDj                  dd      Zt	        t        |         j                  dd      7j                  dd      t	        t        |         j                  dd      k(  st	        d|         }
| }|
t	        d|
j                  |
j                         ||            }|j                  H|j                  j                  }|j                  j                  }||f|v rd}
n_|j                  ||f       |	j!                  |
|f       |J |j                  |t#        |      <   |}	 |
k(  rd}
nt	        d|
|         }
|
|	D ]  \  }}|j'                  ||||          j)                         D ]  \  }}|vst        |t*              rSt-        |d	      sd|_        |j/                  ||      }|j                  J |j                  | |j/                  |      <   n|| vsst-        |d
      r|j/                  ||      n|| t#        |      <    y# t$        $ r d}
Y w xY w)z
        Update the object from src.

        Args:
            src: "DictionaryObject":
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Nr   r$   c              3     K   | ]  }|vxr |v xr t        j                  |      t              xr t        |   t              xrs j	                  d d      du xs] t        t        |         j	                  d d      du xs6 j	                  d d      t        t        |         j	                  d d      k(    yw)/TypeN)rP   raw_getr(   r   getr   )r[   fieldrI   r   s     rF   r]   z*DictionaryObject._clone.<locals>.<genexpr>Z  s      
  & 		3;;u-~>	 3u:'78	
 &$. I(#e*599'4HDPI777D)(#e*599'4HI	
s   B?C)/Next/Prev/N/V))r   r   )r   r   r   r   rM   rL   )rh   r   rP   r   r   anyr   r(   r   r   r@   r_   rM   idnum
generationaddrB   r)   rO   r   rd   rQ   rA   rL   )rC   r   r<   rH   rI   r   r\   re   r   objscur_objprev_objclonr   r   scr   vvs    `  `              rF   r   zDictionaryObject._clone:  s`   ( (((]+#m$$-*C0]1-.!3%a(%a(a A% FA #m$$  
 8
 
 !/M9 2 1ADSTM&s{{1~~F&s1v/?@  GGGT2:#$4c!f=AA'4PX"www5#$4c!f=AA'4P Q ?C.A? @D%1#' 2 ' 8 8$+$5$5$7?!"$D  $66B(,(?(?(E(E-1-D-D-O-O
$):#6'#A.2G$) 'UJ,? @ KK$8#+#77#76:6M6MHZ]3'+H/#*c>.2G.23Ewqz.RG/ &14 %) DAqHH !8_mW]12h IIK 	DAq%a."1&:;/3,?MJB00<<<.0.C.CD*+d] #1g. /=I A'	 $- /*./s   LLLc                 l    t        | j                  t        d | j                         D              f      S )rV   c              3   F   K   | ]  \  }}||j                         f  y wrX   rY   )r[   r   r   s      rF   r]   z,DictionaryObject.hash_bin.<locals>.<genexpr>  s     #O$!QQ

$5#Os   !)r^   r_   r`   rd   ra   s    rF   rZ   zDictionaryObject.hash_bin  s.     ^^U#O$**,#OPQ
 	
rG   keyc                 .    t         j                  | |      S rX   )r   __getitem__rC   r   s     rF   r   zDictionaryObject.raw_get  s    c**rG   defaultc                     | }t               }	 t        |      }||v rt        d|d      |j                  |       ||v r||   S d|vr|S t	        d|d   j                               }\)a>  
        Returns the value of a key or from the parent if not found.
        If not found returns default.

        Args:
            key: string identifying the field to return

            default: default value to return

        Returns:
            Current key or inherited one, otherwise default value.

        zBDetected cycle in /Parent hierarchy when retrieving value for key ./Parentr   )ri   idr!   r   r   rR   )rC   r   r   currentr   obj_ids         rF   get_inheritedzDictionaryObject.get_inherited  s     E[F '*lmplsst(uvvKKg~s|#' "	"--/G rG   valuec                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S NzKey must be a PdfObjectzValue must be a PdfObject)rP   r,   rv   r   __setitem__rC   r   r   s      rF   r   zDictionaryObject.__setitem__  sC    #y)677%+899c511rG   c                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S r   )rP   r,   rv   r   
setdefaultr   s      rF   r   zDictionaryObject.setdefault  sA    #y)677%+899tS%00rG   c                 f    t        t        t        j                  | |      j	                               S rX   )r   r,   r   r   rR   r   s     rF   r   zDictionaryObject.__getitem__  s%    It//c:EEGHHrG   c                     ddl m} | j                  dd      }t        |      ry|J d       |j	                         } ||      S )u  
        Retrieve XMP (Extensible Metadata Platform) data relevant to this
        object, if available.

        See Table 347 — Additional entries in a metadata stream dictionary.

        Returns:
          Returns a :class:`~pypdf.xmp.XmpInformation` 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mypy)xmpr   r   r.   rR   )rC   r   metadatas      rF   xmp_metadatazDictionaryObject.xmp_metadata  sL     	)88K.8$#+V+#&&(h''rG   rx   ry   c                 \   |t        dd       |j                  d       | j                         D ]i  \  }}t        |      dkD  r|d   dk(  r	|d   dk(  r%|j	                  ||       |j                  d       |j	                  |       |j                  d	       k |j                  d
       y )Nr{   r|      <<
r   r$   %r   r~      
   >>)r   r   rd   r   r   )rC   rx   ry   r   r   s        rF   r   z DictionaryObject.write_to_stream  s     %&A7 	W**, 	 JC3x!|A##b'S.7LL!!&)LL	  	UrG   position_beforeposition_endgenerationsrN   c                     |}|D ]?  }|j                   |   j                         D ]  }||cxk  r|k  sn t        ||      } A |S rX   )xrefvaluesmin)clsr   r   r   rN   outr   r\   s           rF   _get_next_object_positionz*DictionaryObject._get_next_object_position  sX     % 	&JXXj)002 &"Q6,6c1+C&	& 
rG   lengthc                   |j                         }	 |j                  dt        j                         |j                         }|j                  |       | j	                  ||t        |j                        |      }||z
  }||k\  rt        d| d      |j                  |      }|j                  d      }	|	dk  rt        d| d      |j                  ||	z   dz          |d |	d	z
   S # |j                  |       w xY w)
Nr   )r   r   r   rN   zRequested length of   exceeds maximum allowed length.	   endstreamz6Unable to find 'endstream' marker for obj starting at r   	   r$   )tellr   osSEEK_ENDr   rh   r   r!   r   findr"   )
r   rx   rN   r   current_positionstream_lengthobject_positionbytes_to_read
read_valueendstream_positions
             rF   _read_unsized_from_streamz*DictionaryObject._read_unsized_from_stream"  s    ";;=	*KK2;;'"KKMMKK()77,=VZ[^[c[cVdjm 8 
 (*::F"#&:=/Ii$jkk [[/
'__\:!HIYHZZ[\  	$'99A=>2.233' KK()s   0C) )C<r   c           	      
   | j                  d      }|dk7  r&t        dt        | j                                d      i }	 t	        |       }|dk(  r|dk(  r| j                  dd       t        |        5|st        t              |d	k(  r| j                  d       n| j                  dd       	 	 t        | |      }t        |t              rnt        |t              st        d
|      	 t	        |       }| j                  dd       t        | ||      }|j-                  |      s|||<   nLd}
t        | j                               |d}||j                  rt        |
|z        t        |
fdt        i| ;| j                         }t	        |       }|dk(  r| j                  d      dk(  r| j                  d      }|dk(  r| j                  d      }|dk(  r|dvrt        d      |dk(  r&| j                  d      dk7  r| j                  dd       t.        j0                  |vr^||j                  rt        d      t        dt        | j                                t3        d      |t        t.        j0                        <   |t.        j0                     }t        |t4              r<| j                         }|J d       |j7                  |      }| j                  |d       |d}| j                         }ddlm} |dk\  r)||kD  rt#        d| d      | j                  |      |d <   n$t=        | t?        j@                  d!      |"      |d <   t	        |       }| j                  d#      }||z   d!k7  r| j                         }| j                  d$d       | j                  d%      }|d!k(  r|d    d d |d <   n|J|j                  s>| j                  |d       t(        jC                  | ||&      |d <   | j                         }nP| j                  |d       t        d't        | j                                d(|d)|d*      | j                  |d       d |v rtD        jG                  |      S t)               }	|	j+                  |       |	S # t        $ r,}||j                  r t        dt        |       Y d }~~d }~ww xY w# t         t"        f$ r}t        |j%                               d }~wt&        $ r`}|%|j                  rt        |j%                               t        dt        |       t)               }	|	j+                  |       |	cY d }~S d }~ww xY w)+Nr      <<zDictionary read error at byte z: stream must begin with '<<'    r   r   r$      >z)Expecting a NameObject for key but found z%(exception)r)source	exceptionzGMultiple definitions in dictionary at byte %(position)s for key %(key)s)positionr   r      s   s   treamr~   )r      z)Stream data must be followed by a newliner   r   zStream length not definedz+Stream length not defined @pos=%(position)d)r   r   r   r   )MAX_DECLARED_STREAM_LENGTHzDeclared stream length of r   __streamdata__r   rx   regexr      ir   )rx   rN   r   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)$r   r"   hexr   r   r   r   r#   r    r   rP   r*   r)   strictr   r   RecursionErrorr!   __repr__rO   r   updater   r   LENGTHr+   r(   rR   filtersr   r   recompiler   rQ   initialize_from_dictionary)rx   rN   r   r   rE   r   r   excr   retvalmsgr   posr   eolr   tpstartr   endstreamends                         rF   r   z!DictionaryObject.read_from_streamB  s    kk!n%<0V[[]1C0D E. .   "%f-Cg~d{B"!&)$%ABBd{AKKA%fc2C!#z2%c:6*GwO  7 *&1B"#FCA 88C=!S	3  '*&++-&8E?szz&sV|44s>8>v>k n kkm'9Q83++a.C +kk!n +.($%PQQe|A% 7B"&&d2?szz()DEEA##[[]
 =I<LZ 0 7 789*112F&.1KKM../Aq!~[[]F<{66+.HPp,qrr)/V)<%&)9!L)AJd*%& $F+A{{1~HH- kkmC#kk!n,&-12B-CCR-HD)*_SZZKK*-=-W-W%37Q .X .D)* !++-CKKQ'&Qv{{}-.fXLsT 
 KKQt#::4@@!#dU $ 3::"?8sS	 #$56 3"3<<>22 ?szz&s||~66x3O)+d#sU   0R R ++S 	S!R=7S =SS US--U9AUUUr   rX   )&r   r   r   r   r?   r   r	   r   r
   rj   r   rL   ri   r`   r   rZ   r   r   r   r   r   r,   r   propertyr   r   r   rk   r   classmethodrh   r   r   r   r   r   r   r   r   rG   rF   r   r     sv   # 
" !&=?	#   sCx 9:	
 
0oo $o 	o
  sCx 9:o U38_%o 
ob

# 

+3 +3 +" "s "c "H2s 23 23 21c 1(3- 13 1Is Iy I (h'=> ( (. MQ 27c58H2I	" "%58GKCyWh	  4,43D4NQ4	4 4>  HLNN'(N tS$s)T#s(^CDN 
	N NrG   r   c                      e Zd Zddee   ddfdZdefdZdefdZ	de
e   fdZded	eddfd
Zdeded f   deddfdZdeded f   deddfdZ	 ddeded	edeedef      def
dZdededededdf
dZdeddfdZddZddZy)
TreeObjectNdctr=   c                 V    t         j                  |        |r| j                  |       y y rX   )r   __init__r  )rC   r  s     rF   r  zTreeObject.__init__  s$    !!$'KK rG   c                 
    d| v S )N/Firstr   ra   s    rF   has_childrenzTreeObject.has_children  s    4rG   c                 "    | j                         S rX   )childrenra   s    rF   __iter__zTreeObject.__iter__  s    }}rG   c              #     K   | j                         sy | t        d         }| t        d         }|j                         }t               }	 t	        |      }||v rt        dt        |       y |j                  |       | ||k(  ry |j                  t        d            }t        |      ry |j                         }tw)Nr  /Lastz1Detected cycle in outline structure for %(child)s)r   childr   )
r   r)   rR   ri   r   r   r   r   r   r.   )rC   	child_reflastr&  r   child_ids         rF   r"  zTreeObject.children  s       "H-.	Jw'($$&E%yH7"R[ckpqKK!K}		*W"56Iy)((*E s   B=B?r&  rN   c                 *    | j                  |d |       y rX   )insert_child)rC   r&  rN   s      rF   	add_childzTreeObject.add_child  s    %s+rG   parentnc                 ,   t        |      ry |J d       t        d|j                               }d|v rat        t	        dt        t
        |t        d               |z               |t        d      <   | j                  |j                  dd       |       y y )Nr   r  /Countr   r   )	r.   r   rR   r+   maxr   r)   inc_parent_counter_defaultr   )rC   r-  r.  s      rF   r2  z%TreeObject.inc_parent_counter_default  s     6"!)6)!lF$5$5$78v+7AtC
8(<!=>BC,F:h'( ++FJJy$,GK	 rG   c                 x   t        |      ry |J d       t        d|j                               }|j                  dd      dk(  }t        t        |j                  dd            }|dk  rt        |      }t        ||z   |rdndz        |t        d      <   |sy | j                  |j                  d	d       |       y )
Nr   r  z
/%is_open%Tr0  r   r$   r   r   )	r.   r   rR   r   r   absr+   r)   inc_parent_counter_outline)rC   r-  r.  opnr   s        rF   r5  z%TreeObject.inc_parent_counter_outline  s     6"!)6)!lF$5$5$78jjt,4fjj1-.q5AA'3QUCqR4P'Qz(#$''

9d(CQGrG   beforeinc_parent_counter.c                 0   || j                   }|j                         }|j                  J d       |j                  }d| vrt|| t        d      <   t	        d      | t        d      <   || t        d      <   | j                  |t        d      <    || |j                  dd             d|v r|d= d	|v r|d	= |S t        d
| d         }|j                  |k7  rd|v rt        d|d         }nxt        d|      |t        d      <   |j                  |t        d	      <   | j                  |t        d      <   d|v r|d= || t        d      <    || |j                  dd             |S |j                  |k7  r	 t        |d	   t              sJ ||d	   t        d      <   |d	   |t        d	      <   ||t        d      <   ||t        d	      <   | j                  |t        d      <    || |j                  dd             |S # t        $ r |j                  dd        Y lw xY w)Nr   r  r   r0  r%  r   r$   r   r   r   r  )r2  rR   rM   r)   r+   r   r   rP   r   rO   pop)rC   r&  r7  rN   r8  	child_objchild_referenceprevs           rF   r+  zTreeObject.insert_child  s@    %!%!@!@$$&	''3;V;3*/*B*B 4)8DH%&)5aDH%&(7DG$%/3/F/FIj+,tY]]8Q%?@)#g&)#g&""&W6%%/$L$w-8,0,OZ()151H1H	*W-.373J3J	*Y/0i'!'*,;Z()"4x)CD&& %%/	)d7m-=>>>1@DM*W-.-1']Ij)* *.	*W%&$3Z !+/+B+B	*Y'(4x!;<  	)MM'4(	)s   17G7 7HHr=  prev_refcurr(  c                 L   |j                  t        d      d      }||rQ|j                         }|t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   yt        d      | t        d      <   | t        d      = t        d      | v r| t        d      = yy|r-|j                         }||t        d      <   ||t        d      <   n!||k(  sJ |t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   y)	z
        Adjust the pointers of the linked list and tree node count.

        Args:
            prev:
            prev_ref:
            cur:
            last:

        r   Nr   r  r0  r$   r   r%  )r   r)   rR   r+   )rC   r=  r>  r?  r(  next_refnext_objs          rF   _remove_node_from_treez!TreeObject._remove_node_from_treeL  s1    77:g.5<#..0Z01-5Z)*-9H-.2.Z)* .:!_Z)*H-.g&$.Z01 / #..008G,-,4Z() d{"{G,-,4Z())5d:h;O6PST6T)UDH%&rG   c                    |j                         }|j                  }t        d      |vrt        d      |t        d         | k7  rt        d      d}d }d }| t        d         }|j                         }| t        d         }|j                         }	|S||k(  r| j	                  ||||	       d}n7|}|}t        d      |v r|t        d         }|j                         }nd }d }|S|st        d	      t        |       y )
Nr   /Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFr  r%  Tr   z"Removal couldn't find item in tree)rR   rM   r)   rv   rC  _reset_node_tree_relationship)
rC   r&  r;  foundr>  r=  cur_refr?  last_refr(  s
             rF   remove_childzTreeObject.remove_childw  s$   $$&	,,i 	1NOOZ	*+t3IJJ!%j&:!;(/(:(:(<
7+,""$oi++D(CF HD'"c)j12((* o  ABB%i0rG   c                 p    t        d      | vrt        d      t        d| d         j                  |        y)z)Remove the object from the tree it is in.r   rE  r  N)r)   rv   r   rJ  ra   s    rF   remove_from_treezTreeObject.remove_from_tree  s4    i ,NOO\4	?+88>rG   c                     | D ]  }|j                         }t        |        t        d      | v r| t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = y y )Nr0  r  r%  )rR   rF  r)   )rC   r&  r;  s      rF   
empty_treezTreeObject.empty_tree  s|     	5E((*I))4	5 h4'Z)*h4'Z)*g$&Z() 'rG   rX   r=   N)r   r   r   r	   r   r  r   r   r   r#  r   r"  r   r,  r
   r(   r   r2  r5  r   r+  rC  rJ  rL  rN  r   rG   rF   r  r    sT   H%56 $ 
 d  # +(3- +0,s ,): ,t ,LD.,>?LDGL	LHD.,>?HDGH	H, <@11 1 	1
 %Xc3h%781 
1f)V)V#&)V-0)V8;)V	)VV#1# #1$ #1J?
*rG   r  r;  r=   c                     | t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = yy)z
    Call this after a node has been removed from a tree.

    This resets the nodes attributes in respect to that tree.

    Args:
        child_obj:

    r   r   r   N)r)   )r;  s    rF   rF  rF    sJ     	*Y'('i'j)*'i'j)* (rG   c                   8    e Zd ZddZdedd fdZdedededee	e
eef         d	eeeef      ddf fd
Zdef fdZdefdZdeddfdZdef fdZ	 ddede
deef   ddfdZedeeef   de
d   fd       ZddeddfdZdde
eeef   df   defdZ xZS )rQ   r=   Nc                      d| _         d | _        y NrG   )_datadecoded_selfra   s    rF   r  zStreamObject.__init__  s    
;?rG   r<   c                    t        d| j                  | j                         |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)NrQ   FDecodedStreamObjectr?   )	r   r@   r_   rT  rU  r?   rO   rd   rA   rC   r<   r   rU  r   r   s         rF   r?   zStreamObject.replicate  s     !!$.."2HeD
 JJ			,,L#$(!$()<+A+A(+K%!
 JJL 	DAq)0K)@H%a H%&	 
  		s   6B? ?	C
Cr   rH   rI   r   c                    t        d|      j                  | _        	 t        d|      j                  }|d| _        n"t        d|j                  |||            | _        t
        |   |||||       y# t        $ r Y w xY w)
        Update the object from src.

        Args:
            src:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        rQ   NrW  )r   rT  rU  rL   rO   superr   )rC   r   r<   rH   rI   r   rU  r_   s          rF   r   zStreamObject._clone  s    $ .#.44

	4AAL#$(!$() &&x-P%! 	sHo}gN  		s   AA4 4	B ?B c                 J    t        t        | 	         | j                  f      S )rV   )r^   r[  rZ   rT  )rC   r_   s    rF   rZ   zStreamObject.hash_bin  s!     UW%'455rG   c                     | j                   S rX   rT  ra   s    rF   get_datazStreamObject.get_data	  s    zzrG   rE   c                     || _         y rX   r^  )rC   rE   s     rF   set_datazStreamObject.set_data  s	    
rG   c                 J    t         |          }|| j                         z  }|S rX   )r[  hash_value_datar_  rC   rE   r_   s     rF   rc  zStreamObject.hash_value_data  s%    w&(rG   rx   ry   c                 X   |t        dd       t        t        | j                              | t	        t
        j                        <   t        j                  | |       | t
        j                  = |j                  d       |j                  | j                         |j                  d       y )Nr{   r|   s   
stream
s
   
endstream)
r   r+   r   rT  r)   r   r  r   r   r   )rC   rx   ry   s      rF   r   zStreamObject.write_to_stream  s     %&A7 5ATZZ4QZ(//01((v6!(()]#TZZ ^$rG   )EncodedStreamObjectrW  c                     t         j                  | v rt               }n
t               }| d   |_        | d= t         j
                  | v r| t         j
                  = |j                  |        |S )Nr   )r   FILTERrf  rW  rT  r  r  )rE   r  s     rF   r  z'StreamObject.initialize_from_dictionary"  sf    
 ""d*(*F(*F,-!"""d*%,,-drG   levelrf  c           	         ddl m} t        j                  | v r| t        j                     }t	        |t
              rct        t        t        j                        g|      }	 t        t               g| j                  t        j                  t                           }n{t        t        t        j                        |g      }t        t               | j                  t        j                  t                     g      }nt        t        j                        }d }t               }|j                  |        ||t        t        j                        <   |||t        t        j                        <   |j                  | j                   |      |_        |S # t        $ r> t        t               | j                  t        j                  t                     g      }Y w xY w)Nr   FlateDecode)r	  rl  r   rh  rP   r;   r)   FTFLATE_DECODEr*   r   DECODE_PARMS	TypeErrorrf  r  encoderT  )rC   ri  rl  fparamsr  s         rF   flate_encodezStreamObject.flate_encode2  sn   )""d*%,,-A![)BOO!< Aq AB(#_1A1N1NP[P](^_F  BOO!<a @A$\488,<,I,I:<#XY 2??+AF$&d67z*1123@FF:.;;<="))$**e<' ! (#txx0@0M0M{}']^Fs   "<F AGGpillow_parametersc                     ddl m} | j                  dd      dk7  r	 t        dt        | j
                          || |      \  }}}|y
|S # t        $ r t        dt        | 	       Y /w xY w)a  
        Try to decode the stream object as an image

        Args:
            pillow_parameters: parameters provided to Pillow Image.save() method,
                cf. <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save>

        Returns:
            a PIL image if proper decoding has been found
        Raises:
            Exception: Errors during decoding will be reported.
                It is recommended to catch exceptions to prevent
                stops in your program.

        r$   )_xobj_to_imagez/Subtype z/Imagez3%(indirect_reference)s does not seem to be an Image)r   rM   z+%(obj)r object does not seem to be an Image)r   objN)_image_xobjectrw  r   r   r   rM   AttributeError)rC   ru  rw  	extension_imgs         rF   decode_as_imagezStreamObject.decode_as_imageR  s|      	388J#x/I#'+'>'> +41BC	1c
 " A#s   A A)(A)rO  rX   )r   )r   r   r   r  r   r?   r   r   r	   r   r
   rj   r   ri   r`   r   rZ   rk   r_  ra  rc  r   r   r   r   r   r  rt  r  __classcell__r_   s   @rF   rQ   rQ     sZ   @# 
2OO $O 	O
  sCx 9:O U38_%O 
O@	6# 	6% U t   MQ% %27c58H2I%	% 38n	;	< # /D @"tCH~t7K1L "X[ "rG   rQ   c                       e Zd Zy)rW  N)r   r   r   r   rG   rF   rW  rW  w  s    rG   rW  c                   <     e Zd ZddZdefdZdeddf fdZ xZS )rf  r=   Nc                     d | _         y rX   )rU  ra   s    rF   r  zEncodedStreamObject.__init__|  s
    ;?rG   c                 h   ddl m} | j                  | j                  j                         S t	               }|j                   ||              | j                         D ]<  \  }}|t        j                  t        j                  t        j                  fvs8|||<   > || _        |j                         S )Nr   )decode_stream_data)r	  r  rU  r_  rW  ra  rd   r   r  rh  ro  )rC   r  decodedr   r   s        rF   r_  zEncodedStreamObject.get_data  s    0($$--// &'+D12**, 	%JC+224D4K4KM]MjMjkk$	% $!!rG   rE   c                    ddl m} | j                  t        j                  d      t
        j                  t
        j                  gfv rt        |t              st        d      | j                  | j                          | j                  J d       | j                  j                  |       t        | 1  |j                  |             y t        d      )Nr   rk  rx  zData must be bytesr   zJStreams encoded with a filter different from FlateDecode are not supported)r	  rl  r   r   rh  rm  rn  rP   rk   rp  rU  r_  ra  r[  rq  r"   )rC   rE   rl  r_   s      rF   ra  zEncodedStreamObject.set_data  s    )88$++R0R__rFW4XXdE* 455  ($$08&80&&t,G[//56\ rG   rO  )r   r   r   r  rk   r_  ra  r  r  s   @rF   rf  rf  {  s-    @"% ""U t  rG   rf  i'  c                       e Zd ZdZdZ	 ddedededeee   e	e
ef   f   ddf fdZd	edd fd
Z	 	 dd	ededeeeee
f         dd fdZded	ededeeeee
f         deee
e
f      ddf fdZdeddfdZdede	eef   fdZdefdZdeddf fdZedeeeef      fd       Zej<                  deeeef      ddfd       ZddZ	 ddededeef   ddf fdZ  xZ!S )ContentStreama  
    In order to be fast, this data structure can contain either:

    * raw data in ._data
    * parsed stream operations in ._operations.

    At any time, ContentStream object can either have both of those fields defined,
    or one field defined and the other set to None.

    These fields are "rebuilt" lazily, when accessed:

    * when .get_data() is called, if ._data is None, it is rebuilt from ._operations.
    * when .operations is called, if ._operations is None, it is rebuilt from ._data.

    Conversely, these fields can be invalidated:

    * when .set_data() is called, ._operations is set to None.
    * when .operations is set, ._data is set to None.
       Nrx   rN   r   r=   c                    || _         g | _        |t        |   d       || _        y |j	                         }t        |t              rddlm} t        |      x}t        kD  rt        d| dt         d      t               }d}|D ]  }|j	                         }	t        |	t              r$t        |	t              s&t        dt         t#        |	      j                          n:|	j%                         }
|t        |
      z  }||kD  rt        d	| d| d
      ||
z  }t        |      dk(  s	|dd  dk7  s|dz  }|dz  } t        |   t'        |             || _        y |j%                         }|J t        |   |       || _        y )NrG   r   )$MAX_ARRAY_BASED_STREAM_OUTPUT_LENGTHzArray-based stream has z > z
 elements.zFExpected StreamObject, got %(type_name)s instead. Data might be wrong.)r   	type_namez Array-based stream has at least z output bytes.r   r   r$   )rN   _operationsr[  ra  rR   rP   r;   pypdf.filtersr  r   CONTENT_STREAM_ARRAY_MAX_LENGTHr!   	bytearrayr*   rQ   r   r   typer_  rk   r   )rC   rx   rN   r   r  r   rE   r   r   
s_resolvednew_datastream_datar_   s               rF   r  zContentStream.__init__  s    46 >GS!T  /Q &&(F&+.N%([0M4SS+1-DcCddno  !{ &A!"J!*j9 %j,? 'd#+&*:&6&?&? $.#6#6#8#h-/!$HH"3"B6(##G"H!X#  (4yA~bce);!1&2  t-
  / %oo/"... -.rG   r<   c           	         t        d| j                  | j                  d d       |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)Nr  FrW  r?   )r   r@   r_   rT  rU  r?   rO   rd   rA   ra  rN   rh   r  r   rX  s         rF   r?   zContentStream.replicate  s     !!$..t"<hN
 JJ			,,L#$(!$()<+A+A(+K%!
 JJL 	DAq)0K)@H%a H%&	 
  		s    6C 	CCrH   rI   c           	          	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                  dd      ||            }|g }|j                  | ||||       |S # t        $ r Y ]w xY w)z
        Clone object into pdf_dest.

        Args:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Returns:
            The cloned ContentStream

        r  N)rM   rN   rO   ri   r   r@   r_   r   r   s         rF   rL   zContentStream.clone  s    $	&&**h6 ),!!tT*Ho
  M

4?M7K
  		s   A1 1	A=<A=r   r   c                     t        d|      }t        | 	  |j                         || _        t        |j                        | _        |j                  | _        y)rZ  r  N)r   r[  ra  rT  rN   rh   r  r   )rC   r   r<   rH   rI   r   src_csr_   s          rF   r   zContentStream._clone5  sJ    $ os+& 2 23%55rG   c                 (   |j                  dd       g }	 t        |      }|dv ry |j                  dd       |j                         s|dv rt        |t        j
                  | j                        }|dk(  r6|g k(  sJ | j                  |      }| j                  j                  |df       nf| j                  j                  ||f       g }nF|d	k(  r|d
vr=|j                  d      }|d
vrn&|j                  t        |d | j                               )Nr   )rG   r   r   r$   )   '   "r      BI   INLINE IMAGEr   )r   r   rG   )r   r   isalphar   r)   delimiter_pattern_OPERATOR_LENGTH_LIMIT_read_inline_imager  rB   r   r   r   )rC   rx   operandspeekoperatoriis         rF   _parse_content_streamz#ContentStream._parse_content_streamO  s   Aq57&v.DxKKA||~!5+!)E)EdNiNi u$ $r>)>008B$$++R,AB$$++Xx,@A!H "55!;;q>D "55 FD$:N:N OP7 rG   c                    t               }	 t        |      }|st        d      |j                  dd       |dk(  rnOt	        || j
                        }t        |      }|j                  dd       t	        || j
                        }|||<   |j                  d      }|d d dk(  sJ |j                  d|j                  d	d
            }|j                         }t        |t              r	|r|d   nd
}t        |t              sd
}d|v sd|v rt        |      }	nwd|v sd|v rt        |      }	nbd|v sd|v rt        |      }	nMd|v sd|v rt        |      }	n8|d
k(  r'|j                  dd      }
t        |
t              r	|
r|
d   nd}
t        |
t              sd}
d|
v rd}nMd|
v rd}nF|j                  d|
dv rdnd      }t        |t         t"        f      r|dkD  r|dz  }nt%        |      }	d}|j                  d      }|j                  d      }|dkD  rAt        |t               r1t        |t               r!|j                  t'        ||z        |z        }	n|dkD  rt%        |      }	t        |      }|j                  dd       nt%        |      }	|j                  d      }t)        |      dk(  r|j                  dd       |dd }|d d dk7  s|d k7  r~|t*        vrv|j                  |d       t%        |      }	|j                  d      }t)        |      dk(  r|j                  dd       |dd }|d d dk7  s|d k7  r|t*        vrt-        d!|      |	d"S )#NzUnexpected end of stream.r   r$      Ir7   r   s   ID/Fz/Filterznot setr   AHxASCIIHexDecodeA85ASCII85DecodeRLRunLengthDecodeDCT	DCTDecodez/CSrx  RGBCMYK   z/BPC>   /G/I/Indexed/DeviceGrayr  g       @z/Wz/H   EIrG   zHCould not extract inline image, even using fallback. Expected 'EI', got )settingsrE   )r   r   r"   r   r   rN   r   r   r   rP   rh   rj   r1   r0   r3   r2   r   floatr4   r   r   r   r#   )rC   rx   r  r   r   r   r   filtrsavposrE   cslcsbitswidthheighteiei_trailings                    rF   r  z ContentStream._read_inline_imagep  s\    $%%f-C"#>??KKAd{fdhh/C%f-CKKA1E!HSM  kk!n2Aw%T8<<	9#EFeT" %E!H9E%% EE>-63F;De^%71&9DU]/584V<De^{e3-f5DieR(B"d# RUbb#&{2||FFAB dS%L1dQh*C1&9DCLL&E\\$'FQw:eS1j6M{{4#4v#=>q .f5$V,BKKA)&1D[[^ r7a<KKA1gbq6U?{c1k6TKK")&1DQB2w!|B"Qq'K"1vs"{+'E
 %^_a^de  %d33rG   c                 J   | j                   st               }| j                  D ]  \  }}|dk(  r|j                  d       t               }|d   j	                  |       |j                  |j                         dd        |j                  d       |j                  |d          |j                  d       n:|D ]$  }|j	                  |       |j                  d	       & |j                  |       |j                  d
        |j                         | _         | j                   S )Nr  r  r  r   s   ID rE   r  r~   r   )rT  r   r  r   r   getvalue)rC   r  r  r  	dict_textops         rF   r_  zContentStream.get_data  s    zzyH&*&6&6 &"(.NN5) '	IZ(88CNN9#5#5#7"#=>NN6*NN8F#34NN5)& -**84 t,- NN8,u%& "**,DJzzrG   rE   c                 2    t         |   |       g | _        y rX   )r[  ra  r  rd  s     rF   ra  zContentStream.set_data  s    rG   c                     | j                   s7| j                  r+| j                  t        | j                               d| _        | j                   S rS  )r  rT  r  r   ra   s    rF   
operationszContentStream.operations  s;    DJJ&&wtzz':;DJrG   r  c                      || _         d| _        y rS  )r  rT  )rC   r  s     rF   r  zContentStream.operations  s    %
rG   c                     | j                   r<| j                   j                  dg df       | j                   j                  g df       y | j                  rd| j                  z   dz   | _        y y )Nr      q   Qs   q
s   
Q
)r  insertrB   rT  ra   s    rF   isolate_graphics_statez$ContentStream.isolate_graphics_state  s^    ##ADz2##RJ/ZZ$**,x7DJ rG   ry   c                 v    | j                   s| j                  r| j                          t        |   ||       y rX   )rT  r  r_  r[  r   )rC   rx   ry   r_   s      rF   r   zContentStream.write_to_stream  s,     zzd..MMO7rG   rX   r   rO  )"r   r   r   __doc__r  r   r
   rj   rh   r   r   r  r   r?   r   r	   r   rL   r   ri   r`   r   r   r  r  rk   r_  ra  r  r  setterr  r   r  r  s   @rF   r  r    s   & ! HL	6/6/ 6/ tS$s)T#s(^CD	6/
 
6/p# 
B !&=?	"" "  sCx 9:	"
 
"H66 $6 	6
  sCx 9:6 U38_%6 
64QJ Q4 QB]4 ]4S#X ]4@% ,U t   DsEz!23     T%U
*;%<   8 MQ8 827c58H2I8	8 8rG   r  rx   rN   r   c                 R   | j                  d      }| j                  dd       |dk(  rt        j                  | |      S |dk(  rK| j                  d      }| j                  dd       |dk(  rt        j                  | ||      S t        | |      S |dk(  rt        j                  | ||      S |d	v rt        j                  |       S |d
k(  rt        | |      S |dk(  r| j                  d      dk(  r
t               S |dk(  rt        j                  |       S |dk(  r5t        |        t        |       }| j                  dd       t        | ||      S |dv rv| j                  d      }| j                  t        |       d       t        j                  |      |J d       t!        j                  | |      S t#        j                  |       S | j%                         }| j                  dd       | j                  d      }| j                  |       t'        |        t)        d|d| d|      )Nr$   r      /   <r   r  r   r}   )   t   f   (   e   s   endobj   nr   s   0123456789+-.   r   iP   z(Invalid Elementary Object starting with z @z: )r   r   r)   r   r   r5   r;   r%   r6   r*   r   r   r   r   IndirectPatternmatchr(   r+   r   r   r"   )rx   rN   r   r   r  r  stream_extracts          rF   r   r     s   
 ++a.C
KKA
d{**6377
d{{{1~B5=#44VS/RR*6?CC
d{++FCII
l--f55
d{&v??
d{v{{1~2|
d{**622
d{&!!&)B6388
{{2SYJ"  &2?*F*?!2263??,,V44
++-C
KKQ[[_N
KK&!

23'C5>BTU rG   c                   8   e Zd ZdZdeddfdZedee   fd       Z	edee   fd       Z
eded   fd	       Zedee   fd
       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zy)Fieldz
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<pypdf.PdfReader.get_fields>`
    rE   r=   Nc                    t         j                  |        t        j                         t	        j                         z   }|j
                  | _        |D ]  }	 ||   | t        |      <    t        | j                  d      t              rst        t        | t        d               j                         }t        |t              r|j                         }n|d}nt        d      t!        |      | t        d      <   y y # t        $ r Y w xY w)Nr   rx  zShould never happen)r   r  r   
attributesr   rM   r)   KeyErrorrP   r   rf  r   r_  rk   decoderO   r-   )rC   rE   field_attributesattrdd_strs         rF   r  zField.__init__@  s    !!$'%002+6689 	 #'"9"9$ 	D)-dZ%&	
 dhhtn&9:($z$/?*@AJJLA!U#
 566%5e%<DD!" ;  s   C<<	DDc                 @    | j                  t        j                        S )z4Read-only property accessing the type of this field.)r   r   rm  ra   s    rF   
field_typezField.field_typeW       xx14455rG   c                 @    | j                  t        j                        S )z6Read-only property accessing the parent of this field.)r   r   Parentra   s    rF   r-  zField.parent\  s     xx18899rG   r;   c                 @    | j                  t        j                        S )z4Read-only property accessing the kids of this field.)r   r   Kidsra   s    rF   kidsz
Field.kidsa  s     xx16677rG   c                 @    | j                  t        j                        S )z4Read-only property accessing the name of this field.)r   r   Tra   s    rF   namez
Field.namef  s     xx13344rG   c                 @    | j                  t        j                        S )z>Read-only property accessing the alternate name of this field.)r   r   TUra   s    rF   alternate_namezField.alternate_namek  r  rG   c                 @    | j                  t        j                        S )z
        Read-only property accessing the mapping name of this field.

        This name is used by pypdf as a key in the dictionary returned by
        :meth:`get_fields()<pypdf.PdfReader.get_fields>`
        )r   r   TMra   s    rF   mapping_namezField.mapping_namep       xx14455rG   c                 @    | j                  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   Ffra   s    rF   flagszField.flagsz  s     xx14455rG   c                 @    | j                  t        j                        S )zs
        Read-only property accessing the value of this field.

        Format varies based on field type.
        )r   r   Vra   s    rF   r   zField.value  s     xx13344rG   c                 @    | j                  t        j                        S )z=Read-only property accessing the default value of this field.)r   r   DVra   s    rF   default_valuezField.default_value  r  rG   c                 @    | j                  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   AAra   s    rF   additional_actionszField.additional_actions  r  rG   )r   r   r   r  r   r  r  r	   r)   r  r-  r  rj   r  r  r   r   r  r   r   r	  r  r   rG   rF   r  r  8  sW   =- =$ =. 6HZ0 6 6 :!12 : : 8h}- 8 8 5hsm 5 5 6 6 6 6hsm 6 6 6x} 6 6 5x} 5 5 6x} 6 6 6H-=$> 6 6rG   r  c                      e Zd ZU dZdZee   ed<   dee	e
f   deeeeef   deddfdZedd
       Z	 ddedede	e
f   ddfdZedee	   fd       Zedee   fd       Zedee	   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zeded	   fd       Zedee   fd       Z edee   fd       Z!y)Destinationa  
    A class representing a destination within a PDF file.

    See section 12.3.2 of the PDF 2.0 reference.

    Args:
        title: Title of this destination.
        page: Reference to the page of this destination. Should
            be an instance of :class:`IndirectObject<pypdf.generic.IndirectObject>`.
        fit: How the destination is displayed.

    Raises:
        PdfReadError: If destination type is invalid.

    Nnodetitlepagefitr=   c                    g | _         |j                  }|j                  }t        j	                  |        t        |      | t        d      <   || t        d      <   || t        d      <   |dk(  rt        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             |d d \  | t        t        j                        <   | t        t        j                        <   | t        d	      <   y t        |      d
k(  ry |t        j                  k(  rt        |      dk(  rp|\  | t        t        j                        <   | t        t        j                        <   | t        t        j                         <   | t        t        j                        <   y t#               t#               t#               t#               f\  | t        t        j                        <   | t        t        j                        <   | t        t        j                         <   | t        t        j                        <   y |t        j$                  t        j&                  fv r 	 |\  | t        t        j                        <   y |t        j*                  t        j,                  fv r 	 |\  | t        t        j                        <   y |t        j.                  t        j0                  fv ry t3        d|      # t(        $ r' t#               | t        t        j                        <   Y y w xY w# t(        $ r' t#               | t        t        j                        <   Y y w xY w)N/Title/Pager   z/XYZr$   g        r   r7   /Zoomr   r  zUnknown Destination Type: )_filtered_childrenfit_typefit_argsr   r  r-   r)   r   rB   r+   TALEFTTOPTFFIT_RBOTTOMRIGHTr*   FIT_HFIT_BHrO   FIT_VFIT_BVFITFIT_Br"   )rC   r  r  r  typargss         rF   r  zDestination.__init__  s    .0ll||!!$'%5e%<Z!"$(Z !$'Z ! &=4y1}L-.4y1}L-.4y1}L-. Ra	Z()Z'(Z()Y!^BHH_4yA~ BGG,-BII./BHH-.BFF+,  \:<z|LBGG,-BII./BHH-.BFF+,RXXryy))>.2+j() RXXryy))?/3,j)* RVVRXX&&!;C7CDD  >/9|j()>
  ?0:j)*?s$   L 	M -M	M	-M<;M<r;   c                 z    t        | j                  d      | d   gdD cg c]  }|| v r| |    c}z         S c c}w )Nr  r   )/Left/Bottom/Right/Topr  )r;   r   )rC   r\   s     rF   
dest_arrayzDestination.dest_array  sR    \\'"DM2 I9 Q
 	
s   8
rx   ry   c                    |t        dd       |j                  d       t        d      }|j                  |       |j                  d       | j                  }|j                  |       t        d      }|j                  |       |j                  d       t        d      }|j                  |       |j                  d       |j                  d	       y )
Nr{   r|   r   z/Dr~   z/Sz/GoTor   r   )r   r   r)   r   r.  )rC   rx   ry   r   r   value_ss         rF   r   zDestination.write_to_stream  s     %&A7 	WF#Tf%F#TW%'UUrG   c                 $    | j                  d      S )z3Read-only property accessing the destination title.r  r   ra   s    rF   r  zDestination.title  s     xx!!rG   c                 $    | j                  d      S )zHRead-only property accessing the IndirectObject of the destination page.r  r2  ra   s    rF   r  zDestination.page       xx  rG   c                 $    | j                  d      S )z2Read-only property accessing the destination type.r   r2  ra   s    rF   r'  zDestination.typ  r4  rG   c                 &    | j                  dd      S )z-Read-only property accessing the zoom factor.r  Nr2  ra   s    rF   zoomzDestination.zoom       xx&&rG   c                 &    | j                  dd      S )z<Read-only property accessing the left horizontal coordinate.r*  Nr2  ra   s    rF   leftzDestination.left$  r8  rG   c                 &    | j                  dd      S )z=Read-only property accessing the right horizontal coordinate.r,  Nr2  ra   s    rF   rightzDestination.right)  s     xx$''rG   c                 &    | j                  dd      S )z9Read-only property accessing the top vertical coordinate.r-  Nr2  ra   s    rF   topzDestination.top.  s     xx%%rG   c                 &    | j                  dd      S )z<Read-only property accessing the bottom vertical coordinate.r+  Nr2  ra   s    rF   bottomzDestination.bottom3  s     xx	4((rG   c                     t        d| j                  dt        t        d      t        d      t        d      g                  S )zHRead-only property accessing the color in (R, G, B) with values 0.0-1.0.r;   z/Cr   )r   r   r;   r'   ra   s    rF   colorzDestination.color8  s;     HHT;AATU'WXY
 	
rG   c                 8    t        | j                  dd            S )z_
        Read-only property accessing the font type.

        1=italic, 2=bold, 3=both
        r  r   )r   r   ra   s    rF   font_formatzDestination.font_format@  s     txxa011rG   c                 &    | j                  dd      S )z
        Read-only property accessing the outline count.

        positive = expanded
        negative = collapsed
        absolute value = number of visible descendants at all levels
        r0  Nr2  ra   s    rF   outline_countzDestination.outline_countI  s     xx$''rG   )r=   r;   rX   )"r   r   r   r  r  r	   r   __annotations__r
   rj   rk   r+   r(   r*   r/   r  r  r.  r   r   r  r  r'  r   r7  r'   r:  r<  r>  r@  rB  r   rD  rF  r   rG   rF   r  r    s	   $ 	 	( <ES%Z <E L.*>NNO<E 	<E
 
<E| 
 
 MQ 27c58H2I	. "x} " " !h~. ! ! !Xc] ! ! 'hsm ' ' 'h{+ ' ' (x, ( ( &Xk* & & )- ) ) 
x. 
 
 2Xo6 2 2 (x} ( (rG   r  rX   )^
__author____author_email__loggingr   r
  syscollections.abcr   r   ior   mathr   typingr   r   r	   r
   r   
_protocolsr   r   r   _utilsr   r   r   r   r   r   r   r   r   	constantsr   r   r   r   r   rm  r   r  r   r  errorsr    r!   r"   r#   _baser%   r&   r'   r(   r)   r*   r+   r,   r-   r.   _fitr/   _image_inliner0   r1   r2   r3   r4   r5   r6   version_infor9   typing_extensions	getLoggerr   loggerr  r  rh   r;   r   r   r  rF  rQ   rW  rf  r  r  rj   r   r   r  r  r   rG   rF   <module>r[     s  : 
/   	 	 
 .    V U
 
 
  * * - b b     Iw&			8	$"**@Ak$s)Y k\~tCH~y ~BX*! X*v+S +T +"t# tn	, 	$, $N #) ^8' ^8H DH//	#	$/ 4d3ic3h?@/ 9c3-.	/d`6J `6Fw(* w(rG   