
    zvg\              	         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZmZmZmZ dudZi d	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*i d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTZdvdVZ G dW dXe          Zdwd]Z G d^ d_e          Z G d` dae          Z G db dce          Z G dd de          Z G df dg          Z G dh diee                   Zerej        eeef         ef         Z nej        Z  G dj dke           Z! G dl dm          Z" G dn do          Z#dxdrZ$ G ds dt          Z%dS )y    )annotationsN)IOTYPE_CHECKINGAny
NamedTupleUnionsstrreturnbytesc                F    t           j        |                     d          z   S )N	utf_16_be)codecsBOM_UTF16_BEencode)r	   s    J/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/PdfParser.pyencode_textr      s    +!6!666          u   ˘   u   ˇ   u   ˆ   u   ˙   u   ˝   u   ˛   u   ˚   u   ˜   u   •   u   †   u   ‡   u   …   u   —   u   –   u   ƒ   u   ⁄   u   ‹   u   ›   u   −   u   ‰   u   „   u   “   u   ”   u   ‘   u   ’   u   ‚   u   ™   u   ﬁ   u   ﬂ   u   Ł   u   Œ   u   Š   u   Ÿu   Žu   ıu   łu   œu   šu   žu   €)                     bc                   | d t          t          j                           t          j        k    r4| t          t          j                  d                              d          S d                    d | D                       S )Nr    c              3  f   K   | ],}t                               |t          |                    V  -d S N)PDFDocEncodinggetchr).0bytes     r   	<genexpr>zdecode_text.<locals>.<genexpr>E   s8      IIt~))$D		::IIIIIIr   )lenr   r   decodejoin)r?   s    r   decode_textrM   A   sq    	#3v"##	#$(;;;V())++,33K@@@wwIIqIIIIIIr   c                      e Zd ZdZdS )PdfFormatErrorz\An error that probably indicates a syntactic or semantic error in the
    PDF file structureN)__name__
__module____qualname____doc__ r   r   rO   rO   H   s          	Dr   rO   	conditionboolerror_messageNonec                (    | st          |          d S rC   )rO   )rU   rW   s     r   check_format_conditionrZ   O   s"     ,]+++, ,r   c                  $    e Zd ZU ded<   ded<   dS )IndirectReferenceTupleint	object_id
generationN)rP   rQ   rR   __annotations__rT   r   r   r\   r\   T   s"         NNNOOOOOr   r\   c                  6    e Zd ZddZddZdd	Zdd
ZddZdS )IndirectReferencer   r
   c                &    | j          d| j         dS )N z Rr^   r_   selfs    r   __str__zIndirectReference.__str__Z   s    .664?6666r   r   c                P    |                                                      d          S Nus-ascii)rh   r   rf   s    r   	__bytes__zIndirectReference.__bytes__]   s    ||~~$$Z000r   otherobjectrV   c                    | j         |j         urdS t          |t                    sJ |j        | j        k    o|j        | j        k    S )NF)	__class__
isinstancerb   r^   r_   rg   rm   s     r   __eq__zIndirectReference.__eq__`   sK    >005%!233333$.0XU5E5XXr   c                    | |k     S rC   rT   rr   s     r   __ne__zIndirectReference.__ne__f   s    EM""r   r]   c                8    t          | j        | j        f          S rC   )hashr^   r_   rf   s    r   __hash__zIndirectReference.__hash__i   s    T^T_5666r   Nr   r
   r   r   rm   rn   r   rV   r   r]   )rP   rQ   rR   rh   rl   rs   ru   rx   rT   r   r   rb   rb   Y   s|        7 7 7 71 1 1 1Y Y Y Y# # # #7 7 7 7 7 7r   rb   c                      e Zd ZddZdS )IndirectObjectDefr   r
   c                &    | j          d| j         dS )Nrd   z objre   rf   s    r   rh   zIndirectObjectDef.__str__n   s    .884?8888r   Nry   )rP   rQ   rR   rh   rT   r   r   r~   r~   m   s(        9 9 9 9 9 9r   r~   c                  N    e Zd ZddZddZdd	Zdd
ZddZddZddZ	ddZ
dS )	XrefTabler   rX   c                B    i | _         i | _        ddi| _        d| _        d S )Nr   i   F)existing_entriesnew_entriesdeleted_entriesreading_finishedrf   s    r   __init__zXrefTable.__init__s   s6     	  	 !"5z %r   keyr]   valuetuple[int, int]c                d    | j         r|| j        |<   n
|| j        |<   || j        v r
| j        |= d S d S rC   )r   r   r   r   rg   r   r   s      r   __setitem__zXrefTable.__setitem__}   sQ      	/$)DS!!).D!#&$&&&$S))) '&r   c                X    	 | j         |         S # t          $ r | j        |         cY S w xY wrC   )r   KeyErrorr   rg   r   s     r   __getitem__zXrefTable.__getitem__   sD    	.#C(( 	. 	. 	.(----	.s    ))c                   || j         v r*| j         |         d         dz   }| j         |= || j        |<   d S || j        v r"| j        |         d         dz   }|| j        |<   d S || j        v r| j        |         }d S d| d}t          |          )N   z
object ID z+ cannot be deleted because it doesn't exist)r   r   r   
IndexError)rg   r   r_   msgs       r   __delitem__zXrefTable.__delitem__   s    $""")#.q1A5J %(2D %%%D))).s3A6:J(2D %%%D(((-c2JJJOsOOOCS//!r   rV   c                &    || j         v p|| j        v S rC   )r   r   r   s     r   __contains__zXrefTable.__contains__   s    d++Fsd6F/FFr   c                   t          t          | j                                                  t          | j                                                  z  t          | j                                                  z            S rC   )rJ   setr   keysr   r   rf   s    r   __len__zXrefTable.__len__   sl    %**,,--$"''))**+$&++--../
 
 	
r   set[int]c                    t          | j                                                  t          | j                                                  z
  t          | j                                                  z  S rC   )r   r   r   r   r   rf   s    r   r   zXrefTable.keys   s\    %**,,--D4H4M4M4O4O0P0PP %%''(() 	)r   f	IO[bytes]c                   t          t          | j                                                  t          | j                                                  z            }t          t          | j                                                            }|                                }|                    d           |rd }t          |          D ](\  }}|	|dz   |k    r|}|d |         }||d          } n|}g }|                    d|d         t          |          fz             |D ]}	|	| j        v r$|                    d| j        |	         z             /|	                    d          }
t          |	|
k    d|	 d|
            	 |d         }n# t          $ r d}Y nw xY w|                    d|| j        |	         fz             ||S )	Ns   xref
r   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)sortedr   r   r   r   tellwrite	enumeraterJ   poprZ   r   )rg   r   r   deleted_keys	startxrefprevindexr   contiguous_keysr^   this_deleted_object_idnext_in_linked_lists               r   r   zXrefTable.write   s'   c$*//1122S9M9R9R9T9T5U5UUVVc$"6";";"="=>>??FFHH			 	#D'oo 	 	
s<4!8s??DD&*6E6lO<DE"&GGJ/!"4c/6J6J!KKLLL,  	 000GG.1A)1LLMMMM-9-=-=a-@-@**!%;;BY B B)?B B  
0.:1o++% 0 0 0./+++0GG*.0DY0OPQ   9  	@ s   FFFNr   rX   )r   r]   r   r   r   rX   )r   r]   r   r   )r   r]   r   rX   )r   r]   r   rV   r|   )r   r   )r   r   r   r]   )rP   rQ   rR   r   r   r   r   r   r   r   r   rT   r   r   r   r   r   s        & & & &* * * *. . . ." " " "G G G G
 
 
 
) ) ) )
% % % % % %r   r   c                      e Zd ZU ded<   ddZddZddZddZddZe	dd            Z
 e edd                    d dD             z
  ZddZdS )PdfNamer   namePdfName | bytes | strr   rX   c                    t          |t                    r|j        | _        d S t          |t                    r	|| _        d S |                    d          | _        d S rj   )rq   r   r   r   r   )rg   r   s     r   r   zPdfName.__init__   sU    dG$$ 	0	DIIIe$$ 	0DIIIJ//DIIIr   r
   c                6    | j                             d          S rj   )r   rK   rf   s    r   name_as_strzPdfName.name_as_str   s    y
+++r   rm   rn   rV   c                b    t          |t                    o|j        | j        k    p
|| j        k    S rC   )rq   r   r   rr   s     r   rs   zPdfName.__eq__   s1    ug&&B5:+B di	 r   r]   c                *    t          | j                  S rC   )rw   r   rf   s    r   rx   zPdfName.__hash__   s    DIr   c                J    | j         j         dt          | j                   dS )N())rp   rP   reprr   rf   s    r   __repr__zPdfName.__repr__   s&    .)>>DOO>>>>r   datac                H     | t                               |                    S rC   )	PdfParserinterpret_name)clsr   s     r   from_pdf_streamzPdfName.from_pdf_stream   s     s9++D11222r   !      c                ,    h | ]}t          |          S rT   )ord)rG   cs     r   	<setcomp>zPdfName.<setcomp>   s    *I*I*Ia3q66*I*I*Ir   z#%/()<>[]{}c                    t          d          }| j        D ]9}|| j        v r|                    |           !|                    d|z             :t          |          S )N   /s   #%02X)	bytearrayr   allowed_charsappendextendr   )rg   resultr?   s      r   rl   zPdfName.__bytes__   sf    4 	, 	,AD&&&a    hl++++V}}r   N)r   r   r   rX   ry   r{   r|   )r   r   r   r   rz   )rP   rQ   rR   r`   r   r   rs   rx   r   classmethodr   r   ranger   rl   rT   r   r   r   r      s         KKK0 0 0 0, , , ,       
   ? ? ? ? 3 3 3 [3 Cb#''*I*I=*I*I*IIM     r   r   c                      e Zd ZddZdS )PdfArrayr   r   c                L    dd                     d | D                       z   dz   S )Ns   [     c              3  4   K   | ]}t          |          V  d S rC   )pdf_repr)rG   xs     r   rI   z%PdfArray.__bytes__.<locals>.<genexpr>   s(       ; ;! ; ; ; ; ; ;r   s    ])rL   rf   s    r   rl   zPdfArray.__bytes__   s-    tyy ; ;d ; ; ;;;;eCCr   Nrz   )rP   rQ   rR   rl   rT   r   r   r   r      s.        D D D D D Dr   r   c                  &    e Zd ZddZdd	ZddZdS )PdfDictr   r
   r   r   r   rX   c                    |dk    r#t           j                            | ||           d S || |                    d          <   d S )Nr   rk   )collectionsUserDict__setattr__r   r   s      r   r   zPdfDict.__setattr__  sH    &== ,,T3>>>>>+0DJ''(((r   str | time.struct_timec                   	 | |                     d                   }n"# t          $ r}t          |          |d }~ww xY wt          |t                    rt          |          }|                    d          r|                    d          r
|dd          }d}t          |          dk    rO|d         }t          |dd                   d	z  }t          |          d
k    r|t          |dd
                   z  }dd t          |          dz
           }t          j        |d t          |          dz            |          }|dv r9|d	z  }|dk    r|dz  }t          j        t          j        |          |z             }|S )Nrk   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   r   AttributeErrorrq   r   rM   endswith
startswithrJ   r]   timestrptimegmtimecalendartimegm)rg   r   r   erelationshipoffsetformats          r   __getattr__zPdfDict.__getattr__  s   	-J//0EE 	- 	- 	- %%1,	-eU## 	'&&E<< 	E%% "abb	L5zzB$RyU2b5\**R/u::??c%2,///F#$4c%jj1n$45FM%(9#f++/(9":FCCEz))"3&&bLFHOE$:$:V$CDDs    
=8=r   c                   t          d          }|                                 D ]\  }}|t          |          }|                    d           |                    t	          t          |                               |                    d           |                    |           |                    d           t	          |          S )N   <<   
r   s   
>>)r   itemsr   r   r   r   )rg   outr   r   s       r   rl   zPdfDict.__bytes__&  s    **,, 	 	JC}UOOEJJuJJuWS\\**+++JJtJJu

7Szzr   N)r   r
   r   r   r   rX   )r   r
   r   r   rz   )rP   rQ   rR   r   r   rl   rT   r   r   r   r     sP        1 1 1 1   6     r   r   c                      e Zd Zd	dZd
dZdS )	PdfBinaryr   list[int] | bytesr   rX   c                    || _         d S rC   )r   )rg   r   s     r   r   zPdfBinary.__init__5  s    			r   r   c                P    dd                     d | j        D                       z  S )Ns   <%s>r   c              3      K   | ]	}d |z  V  
dS )s   %02XNrT   rG   r?   s     r   rI   z&PdfBinary.__bytes__.<locals>.<genexpr>9  s&      !A!A!'A+!A!A!A!A!A!Ar   )rL   r   rf   s    r   rl   zPdfBinary.__bytes__8  s*    !A!Aty!A!A!AAAAAr   N)r   r  r   rX   rz   )rP   rQ   rR   r   rl   rT   r   r   r   r   4  sB           B B B B B Br   r   c                      e Zd Zd
dZddZd	S )	PdfStream
dictionaryr   bufr   r   rX   c                "    || _         || _        d S rC   )r  r	  )rg   r  r	  s      r   r   zPdfStream.__init__=  s    $r   c                F   	 | j         d         }n# t          $ r
 | j        cY S w xY w|dk    rT	 | j         d         }n# t          $ r | j         d         }Y nw xY wt          j        | j        t          |                    S dt          |           d}t          |          )Ns   Filters   FlateDecodes   DL   Length)bufsizezstream filter z unknown/unsupported)r  r   r	  zlib
decompressr]   r   NotImplementedError)rg   filterexpected_lengthr   s       r   rK   zPdfStream.decodeA  s    	_Y/FF 	 	 	8OOO	^##="&/%"8 = = ="&/)"<=?48S5I5IJJJJE4<<EEEC%c***s    $$< AAN)r  r   r	  r   r   rX   rz   )rP   rQ   rR   r   rK   rT   r   r   r  r  <  s<           + + + + + +r   r  r   r   c                   | du rdS | du rdS | dS t          | t          t          t          t          f          rt          |           S t          | t          t          f          r"t          |           	                    d          S t          | t          j                  r.dt          j        d|           	                    d          z   d	z   S t          | t                    rt          t          |                     S t          | t                    rt          t          |                     S t          | t                    rt          t!          |                     S t          | t
                    rJ|                     d
d          } |                     dd          } |                     d	d          } d| z   d	z   S t          |           S )NTs   trueFs   falses   nullrk   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rq   r   r   r   r   r   r]   floatr
   r   r   struct_timestrftimedictlistr   r   replace)r   s    r   r   r   Q  s   Dyyw	
ex	
w	A(I>	?	? Qxx	AU|	$	$ 1vv}}Z(((	At'	(	( oq99@@LLLtSS	At		 WQZZ   	At		 Xa[[!!!	As		 	A'''	Au		 IIeW%%IIdF##IIdF##ax$Qxxr   c                     e Zd ZdZ	 	 	 	 	 dddZddZddZddZddZddZ	ddZ
ddZddZddZddZ	 ddd"Zdd(Zdd)Zdd*Zedd-            Zdd.Zddd1Zd2Zd3Zd4Zd5Zed6z   Zed7z   Zd8Zd9Zeez   ez   Z e j!        ed:z   ez   d;z   ez   d<z   ez   d=z   ez   d>z   ez   d?z   e j"                  Z# e j!        ed:z   ez   d@z   ez   d<z   ez   d=z   ez   d>z   ez   e j"                  Z$ddAZ%ddCZ& e j!        e          Z' e j!        edDz   ez   dEz             Z( e j!        edFz             Z) e j!        edGz   ez             Z*e+ddK            Z, e j!        dL          Z-e+dddR            Z. e j!        edSz   ez   dEz             Z/ e j!        edTz   ez   dEz             Z0 e j!        edUz   ez   dEz             Z1 e j!        edVz   ez   dEz             Z2 e j!        edWz   ez   dEz             Z3 e j!        edXz             Z4 e j!        edYz             Z5 e j!        edZz   ez   d[z             Z6 e j!        ed\z             Z7 e j!        ed]z   ez   d]z   ez   d^z   ez   dEz             Z8 e j!        ed]z   ez   d]z   ez   d_z   ez   dEz             Z9 e j!        ed`z   ez   dEz             Z: e j!        daez   dbz   ez   dcz             Z; e j!        eddz             Z< e j!        edez   ez   dEz             Z=e+	 	 dddl            Z> e j!        dm          Z?i dndodpdqdrdsdtdudvdwdadadEdEdxdx e@dn          do e@dp          dq e@dr          ds e@dt          du e@dv          dw e@da          da e@dE          dE e@dx          dxZAe+ddz            ZB e j!        ed{z   ez             ZC e j!        ed=z   ez   d=z   ez   ez             ZD e j!        d|          ZEdd}ZFddd~ZG	 dddZHdS )r   z|Based on
    https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
    Supports PDF up to 1.4
    Nr   rbfilename
str | Noner   IO[bytes] | Noner	  bytes | bytearray | Nonestart_offsetr]   moder
   r   rX   c                   |r|rd}t          |          || _        || _        || _        || _        d| _        d| _        | |t          ||          x| _        }d| _        |?|                     |          | _        d| _        |st          |d          r|j
        | _        i | _        |  |  |  |  | j        r|                                  ndx| _        | _        t                      | _        d | _        t                      | _        d | _        t                      | _        g | _        g | _        d | _        d | _        i | _        t5                      | _        d| j        _        |r|                                  d S d S )Nz4specify buf or f or filename, but not both buf and fFTr   r   )RuntimeErrorr   r	  r   r$  should_close_bufshould_close_fileopenget_buf_from_filehasattrr   cached_objectsread_pdf_infofile_size_totalfile_size_thisr   rootroot_refinfoinfo_refpage_tree_rootpages
orig_pages	pages_reflast_xref_section_offsettrailer_dictr   
xref_tabler   seek_end)rg   r   r   r	  r$  r%  r   s          r   r   zPdfParser.__init__t  s     	$1 	$HCs### 9<( %!&AIh---DFQ%)D"=--a00DH$(D! '6 2 2 ' !<>//018 	*    9::D 4#6		DI DM		DI DM")))D24DJ79DO!DN,0D)24D'kkDO+/( 	MMOOOOO	 	r   c                    | S rC   rT   rf   s    r   	__enter__zPdfParser.__enter__  s    r   argsrn   c                .    |                                   d S rC   )close)rg   r?  s     r   __exit__zPdfParser.__exit__  s    

r   c                V    |                                   |                                  d S rC   )	close_bufr<  rf   s    r   start_writingzPdfParser.start_writing  s#    r   c                    t          | j        t          j                  r| j                                         d | _        d S rC   )rq   r	  mmaprA  rf   s    r   rD  zPdfParser.close_buf  s5    dh	** 	HNNr   c                    | j         r|                                  | j        )| j        r$| j                                         d | _        d S d S d S rC   )r(  rD  r   r)  rA  rf   s    r   rA  zPdfParser.close  sU      	NN6$"8FLLNNNDFFF r   c                b    | j         J | j                             dt          j                   d S )Nr   )r   seekosSEEK_ENDrf   s    r   r<  zPdfParser.seek_end  s.    v!!!Ar{#####r   c                L    | j         J | j                             d           d S )Ns	   %PDF-1.4
)r   r   rf   s    r   write_headerzPdfParser.write_header  s*    v!!!]#####r   r	   c                x    | j         J | j                             d| d                                           d S )Nz% 
)r   r   r   )rg   r	   s     r   write_commentzPdfParser.write_comment  s>    v!!!Z!ZZZ&&(()))))r   rb   c                   | j         J |                                  |                     | j                                                   | _        |                     d          | _        |                                  |                     | j        t          d          | j                   |                     | j        t          d          t          | j
                  | j
                   | j        S )Nr      Catalog)TypePages   Pages)rT  CountKids)r   del_rootnext_object_idr   r2  r8  rewrite_pages	write_objr   rJ   r6  rf   s    r   write_catalogzPdfParser.write_catalog  s    v!!!++DFKKMM::,,Q//t}7:+>+>dnUUUN""dj//	 	 	
 	
 	
 }r   c                Z   g }t          | j                  D ]\  }}| j        |         }| j        |j        = |                    |t          d                              || j        vrQi }|                                D ]\  }}|||	                                <   | j
        |d<    | j        di |}t          | j                  D ]\  }	}
|
|k    r
|| j        |	<   |D ]D}|r@| j        |         }|j        | j        v r| j        |j        = |                    dd           }|@Eg | _        d S )Ns   ParentParentrC   )r   r7  r-  r;  r^   r   r   r6  r   r   r8  
write_pagerE   )rg   pages_tree_nodes_to_deleteipage_ref	page_infostringified_page_infor   r   new_page_refjcur_page_refpages_tree_node_refpages_tree_nodes                r   r[  zPdfParser.rewrite_pages  s   %'"$T_55 	1 	1KAx+H5I 23&--i	8J8J.KLLLtz))$&!'oo// A A
U;@%coo&7&788.2n!(+*4?II3HIIL#,TZ#8#8 1 1<8++$0DJqM1
 $> 	K 	K% K"&"56I"J&0DOCC(;(EF&5&9&9)T&J&J#	 & K
 r   new_root_refIndirectReference | Nonec                   | j         J |r|                                  || _        | j        r |                     d | j                  | _        | j                            | j                   }t          | j                  }| j        |d}| j	        
| j	        |d<   | j        r
| j        |d<   || _	        | j                             dt          t          |                    z   d|z  z              d S )N)   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)r   rY  r2  r3  r\  r4  r;  r   rJ   r9  r   r   )rg   rk  
start_xrefnum_entriesr:  s        r   write_xref_and_trailerz PdfParser.write_xref_and_trailer  s	    v!!! 	)MMOOO(DM9 	< NN4;;DM_**4622
$/**] 0
 0
 (4$($AL!9 	2$(ML!(2%GL))**+)J67	
 	
 	
 	
 	
r   refint | IndirectReference | Noneobjsr   dict_objc                    t          |t                    r| j        |         n|}d|vrt          d          |d<   d|vr
| j        |d<    | j        |g|R i |S )NrT     Pager_  )rq   r]   r6  r   r8  r\  )rg   ru  rw  rx  obj_refs        r   r`  zPdfParser.write_page  sx     &0S%9%9B$*S//s!!&w//HV8##!%HXt~g9999999r   c                   | j         J | j         }|(|                     |                                          }n(|                                |j        f| j        |j        <   |                    t          t          |                      |	                    dd           }|t          |          |d<   |r"|                    t          |                     |D ]$}|                    t          |                     %|?|                    d           |                    |           |                    d           |                    d           |S )NstreamLengths   stream
s   
endstream
s   endobj
)r   rZ  r   r_   r;  r^   r   r   r~   r   rJ   r   )rg   ru  rw  rx  r   r}  objs          r   r\  zPdfParser.write_obj  s>    v!!!F;%%affhh//CC./ffhh-GDOCM*	'-..///h--!$VHX 	(GGHX&&''' 	# 	#CGGHSMM""""GGK   GGFOOOGG$%%%	
r   c                l    | j         d S | j        | j         j        = | j        | j        d         j        = d S )NrV  )r2  r;  r^   r1  rf   s    r   rY  zPdfParser.del_root/  s8    = FODM34ODIh/9:::r   r   bytes | mmap.mmapc                   t          | d          r|                                 S t          | d          r|                                 S 	 t          j        |                                 dt          j                  S # t          $ r Y dS w xY w)N	getbuffergetvaluer   )accessr   )r,  r  r  rG  filenoACCESS_READ
ValueError)r   s    r   r+  zPdfParser.get_buf_from_file5  s    1k"" 	;;== Q
## 	::<<yQt7GHHHH   sss   
2A= =
B
Bc                @   | j         J t          | j                   | _        | j        | j        z
  | _        |                                  t          | j                            d          d ud           | j        d         | _	        | j	        J | j                            dd           | _
        t          |                     | j	                            | _        | j
        t                      | _        n,t          |                     | j
                            | _        t          d| j        v d           t          | j        d         dk    d           t          | j                            d          d ud	           t          t          | j        d         t                     d
           | j        d         | _        | j        J |                     | j                  | _        |                     | j                  | _        | j        d d          | _        d S )Nrn  zRoot is missingrq     Typez/Type missing in RootrS  z/Type in Root is not /CatalogrV  z/Pages missing in Rootz+/Pages in Root is not an indirect reference)r	  rJ   r/  r$  r0  read_trailerrZ   r:  rE   r2  r4  r   read_indirectr1  r3  rq   rb   r8  r5  linearize_page_treer6  r7  rf   s    r   r.  zPdfParser.read_pdf_infoA  s   x###"48}}"2T5FF!!'**$68I	
 	
 	
 )'2}((()--gt<<D..t}==>>	= 		DII 2 24= A ABBDIw$)35LMMMIg*,.M	
 	
 	
 	IMM(##4/1I	
 	
 	
 	ty*,=>>9	
 	
 	
 8,~)))"00@@--d.ABB
 *QQQ-r   r   
int | Nonec                    	 t          t          | j                                                  dz   d          }n # t          $ r t          dd          }Y nw xY w||df| j        |j        <   |S )Nr   r   )rb   maxr;  r   r  r^   )rg   r   	references      r   rZ  zPdfParser.next_object_ide  s    	0)#do.B.B.D.D*E*E*I1MMII 	0 	0 	0)!Q//III	04:A;DOI/0s   7: AAs   [][()<>{}/%]s$   [][()<>{}/%\000\011\012\014\015\040]s   [\000\011\012\014\015\040]s#   [\000\011\012\014\015\0400-9a-fA-F]   *   +s   [\000\011\014\040]*s   [\r\n]+s   trailers   <<(.*>>)s	   startxrefs   ([0-9]+)s   %%EOF   $s	   <<(.*?>>)c                   | j         J t          | j                   dz
  }|| j        k     r| j        }| j                            | j         |          }t          |d ud           |}|r9|}| j                            | j         |                                dz             }|9|s|}|J |                    d          }t          |                    d                    | _	        | 
                    |          | _        t                      | _        |                     | j	                   d| j        v r"|                     | j        d                    d S d S )N @  ztrailer end not found   r   r   xref_section_offsetrp  )r	  rJ   r$  re_trailer_endsearchrZ   startgroupr]   r9  interpret_trailerr:  r   r;  read_xref_tableread_prev_trailer)rg   search_start_offsetm
last_matchtrailer_datas        r   r  zPdfParser.read_trailer  s`   x###!$(mme3!222"&"3&&tx1DEEq}.EFFF
 	EJ#**48QWWYY^DDA  	E  	A}}}wwqzz(+AGGAJJ% 22<@@#++1NOOOd'''""4#4W#=>>>>> ('r   r  c                   | j         J |                     |          }| j                            | j         ||dz                      }t	          |d ud           |J |                    d          }t	          t          |                    d                    |k    d           |                     |          }d|v r|                     |d                    d S d S )Nr  r  zprevious trailer not foundr   r   zGxref section offset in previous trailer doesn't match what was expectedrp  )	r	  r  re_trailer_prevr  rZ   r  r]   r  r  )rg   r  trailer_offsetr  r  r:  s         r   r  zPdfParser.read_prev_trailer  s    x###--BU-VV ''H^nu&<<=
 
 	q}.JKKK}}}wwqzz

OO22U	
 	
 	
 --l;;l""""<#899999 #"r   s   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r  r   s   >>r  r   dict[bytes, Any]c           	        i }d}	 | j                             ||          }|sk| j                            ||          }t          |d uo$|                                t          |          k    dt          ||d                    z              nu|                     |                    d                    }t          |t                    sJ |                     ||                                          \  }}|||<   |n|}t          d|v ot          |d         t                    d           t          d|v ot          |d         t                    d           |S )	Nr   Tz+name not found in trailer, remaining data: r   ro  z&/Size not in trailer or not an integerrn  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endrZ   endrJ   r   r   r  rq   r   	get_valuer]   rb   )r   r  trailerr   r  r   r   value_offsets           r   r  zPdfParser.interpret_trailer  sx   	"!!,77A O)),??&TMBaeegg\1B1B&BA<0112  
 $$QWWQZZ00Cc5)))))"%--aeegg"F"FE< GCL#!F!	"" 	wD:gg.>#D#D4	
 	
 	
 	wR:gg.>@Q#R#R?	
 	
 	
 r   s   ([^#]*)(#([0-9a-fA-F]{2}))?Frawas_textrV   str | bytesc                   d}| j                             |          D ]}|                    d          rZ||                    d          t                              |                    d                              d                    z   z  }q||                    d          z  }|r|                    d          S t          |          S )Nr      r   rk   zutf-8)re_hashes_in_namefinditerr  r   fromhexrK   r   )r   r  r  r   r  s        r   r   zPdfParser.interpret_name  s    &//44 	# 	#Awwqzz #

Y%6%6qwwqzz7H7H7T7T%U%UUU

" 	;;w''';;r   s   null(?=s   true(?=s   false(?=s   ([-+]?[0-9]+)(?=s)   ([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=s   \[   ]s   <(s   *)>r  s   ([-+]?[0-9]+)s   R(?=s   obj(?=s	   endobj(?=r  s	   %[^\r\n]*s   )*s   stream\r?\ns   endstream(?=r   r   bytes | bytearray | mmap.mmapexpect_indirectmax_nestingtuple[Any, int | None]c                J   |dk    rdS | j                             ||          }|r|                                }| j                            ||          }|rKt	          t          |                    d                    dk    d           t	          t          |                    d                    dk    d           t	          |d u pS|t          t          |                    d                    t          |                    d                              k    d           |                     ||                                |dz
            \  }}||d fS | j	                            ||          }t	          |d ud	           |J ||                                fS t	          | d
           | j
                            ||          }|rt	          t          |                    d                    dk    d           t	          t          |                    d                    dk    d           t          t          |                    d                    t          |                    d                              |                                fS | j                            ||          }|r|                                }i }| j                            ||          }|}	|sn|	J |                     ||	|dz
            \  }
}	|	|d fS |                     ||	|dz
            \  }}	|||
<   |	|d fS | j                            ||	          }|n|                                }	| j                            ||	          }|r|                    d          }|t          |t
                    sd| d}t!          |          ||                                |                                |z            }| j                            ||                                |z             }t	          |d ud           |J |                                }	t%          t'          |          |          |	fS t'          |          |	fS | j                            ||          }|r|                                }g }| j                            ||          }|}	|sZ|	J |                     ||	|dz
            \  }}	|                    |           |	|d fS | j                            ||	          }|Z||                                fS | j                            ||          }|rd |                                fS | j                            ||          }|rd|                                fS | j                            ||          }|rd|                                fS | j                            ||          }|rIt7          |                     |                    d                              |                                fS | j                            ||          }|r6t          |                    d                    |                                fS | j                            ||          }|r6t?          |                    d                    |                                fS | j                             ||          }|rtC          d |                    d          D                       }tE          |          dz  dk    r"|                    tG          d                     tB          $                    |%                    d                    |                                fS | j&                            ||          }|r(| '                    ||                                          S dtQ          |||dz                       }t!          |          )Nr   )NNr   z<indirect object definition: object ID must be greater than 0r   z;indirect object definition: generation must be non-negativez2indirect object definition different than expected)r  z(indirect object definition end not foundz$indirect object definition not foundz;indirect object reference: object ID must be greater than 0z:indirect object reference: generation must be non-negativer  z&bad or missing Length in stream dict (r   zstream end not foundTFc              3  "   K   | ]
}|d v |V  dS )s   0123456789abcdefABCDEFNrT   r  s     r   rI   z&PdfParser.get_value.<locals>.<genexpr>  s6       # #.G)G)G)G)G)G)G# #r      0rk   zunrecognized object:     ))
re_commentr  r  re_indirect_def_startrZ   r]   r  rb   r  re_indirect_def_endre_indirect_referencere_dict_startr  re_stream_startrE   rq   rO   re_stream_endr  r   re_array_startre_array_endr   re_nullre_truere_falser  r   r   re_intre_realr  re_string_hexr   rJ   r   r  rK   re_string_litget_literal_stringr   )r   r   r   r  r  r  rn   object_offsetr   current_offsetr   r   
stream_lenr   stream_dataresults
hex_strings                    r   r  zPdfParser.get_value(  s    !:N  v.. 	UUWWF%++D&99 	#"AGGAJJ!#N   #AGGAJJ1$M   #4' G"$S__c!''!**ooFFGD	   %(MMaeegg;? %2 % %!FM $t|#'--dMBBA"I   ===15577?"!G	
 	
 	
 %++D&99 		P"AGGAJJ!#M   #AGGAJJ1$L   %S__c!''!**ooFFOO##D&11  	3UUWWF%'F%%dF33A)/N @%111&)mm.kAo '4 ' '#^ ")!4<'(+.kAo )6 ) )%~ $s!)!4<'O))$??  @ UUWWN#))$??A 
O#ZZ	22
%Z
C-H-H%P:PPPC(---"15577QUUWWz-A#AB%++D!%%''J2FGG&q}6LMMM}}}!" +>>NN6??N22$$T622 	$UUWWFG &&tV44A#N A%111(+.kAo )6 ) )%~ u%%%!)"D=($**4@@  A AEEGG##KdF++ 	!= KdF++ 	!= LtV,, 	"!%%''>!KdF++ 	D3--aggajj99::AEEGGCCJT6** 	,qwwqzz??AEEGG++KdF++ 	.$$aeegg--##D&11 	M" # #771::# # #  J :"a''!!#d)),,,$$Z%6%6z%B%BCCQUUWWLL##D&11 	9))$888Hd4"0D+E&F&FHHS!!!r   sF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr      r      t   	   b      f   r  tuple[bytes, int]c                   d}t                      }| j                            ||          D ]}|                    |||                                                    |                    d          r;|                    | j        |                    d          d                             n|                    d          r?|                    t          |                    d          dd          d                     n|                    d          rn|                    d          r|                    d           n|                    d          r|                    d	           |dz  }nZ|                    d
          rE|dk    r%t          |          |
                                fc S |                    d           |dz  }|
                                }d}t          |          )Nr   r   r      r     r      r     r  zunfinished literal string)r   re_lit_str_tokenr  r   r  r  escaped_charsr   r]   r   r  rO   )r   r   r   nesting_depthr   r  r   s          r   r  zPdfParser.get_literal_string  s    %..tV<< 	 	AMM$v		12333wwqzz #c/

1>???? #c!''!**QRR.!445555 # 	#e$$$$ #d###" # A%% ==!%%''1111d###"UUWWFF)S!!!r   s   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c                   | j         J d}| j                            | j         || j        z             }t	          |d ud           |J |                                }	 | j                            | j         |          }|st	          |d           n0d}|                                }t          |                    d                    }t          |                    d                    }t          |||z             D ]}| j
                            | j         |          }t	          |d ud           |J |                                }|                    d          d	k    }|sYt          |                    d                    }	t          |                    d                    |	f}
|| j        vr
|
| j        |<   d|S )
NFzxref section start not foundTzxref subsection start not foundr   r   zxref entry not foundr  r  )r	  re_xref_section_startr  r$  rZ   r  re_xref_subsection_startr]   r  r   re_xref_entryr;  )rg   r  subsection_foundr  r   first_objectnum_objectsrb  is_freer_   	new_entrys              r   r  zPdfParser.read_xref_table  s   x### &,,H)D,==
 
 	q}.LMMM}}}	7-33DHfEEA &$&G   #UUWWFqwwqzz??Laggajj//K<)CDD 
7 
7&,,TXv>>&q}6LMMM}}}''!**, 7!$QWWQZZJ!$QWWQZZ* =I//-6*+	7, r   c                "   | j         |d                  \  }}t          ||d         k    d|d          d|d          d| d|            | j        J |                     | j        || j        z   t          | |          d         }|| j        |<   |S )Nr   r   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )r  r  )r;  rZ   r	  r  r$  rb   r-  )rg   ru  r  r   r_   r   s         r   r  zPdfParser.read_indirect  s    !_SV4
#a& O3q6 O O#a& O O/9O OFLO O	
 	
 	

 x###HT&&-s3#	  
 

  $)C r   nodePdfDict | Nonelist[IndirectReference]c                *   ||n| j         }t          |d         dk    d           g }|d         D ]b}|                     |          }|d         dk    r|                    |           9|                    |                     |                     c|S )Nr  rV  z%/Type of page tree node is not /Pagess   Kidsrz  )r  )r5  rZ   r  r   r   r  )rg   r  	page_noder6  kid
kid_objects         r   r  zPdfParser.linearize_page_tree#  s     !,DD$2E	g(*,S	
 	
 	
 W% 	H 	HC++C00J'"g--S!!!!T55:5FFGGGGr   )NNNr   r  )r   r!  r   r"  r	  r#  r$  r]   r%  r
   r   rX   )r   r   )r?  rn   r   rX   r   )r	   r
   r   rX   )r   rb   rC   )rk  rl  r   rX   )ru  rv  rw  r   rx  r   r   rb   )ru  rl  rw  r   rx  r   r   rb   )r   r   r   r  )r   r  r   rb   )r  r]   r   rX   )r  r   r   r  )F)r  r   r  rV   r   r  )Nr   )
r   r  r   r]   r  rl  r  r]   r   r  )r   r  r   r]   r   r  )r  r]   r   r]   )r   )ru  rb   r  r]   r   r   )r  r  r   r  )IrP   rQ   rR   rS   r   r>  rB  rE  rD  rA  r<  rN  rQ  r]  r[  rt  r`  r\  rY  staticmethodr+  r.  rZ  	delimiterdelimiter_or_ws
whitespacewhitespace_or_hexwhitespace_optionalwhitespace_mandatorywhitespace_optional_no_nlnewline_onlynewlinerecompileDOTALLr  r  r  r  re_whitespace_optionalr  r  r  r   r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  rT   r   r   r   r   n  s          $"(,/ / / / /b            
   $ $ $ $$ $ $ $* * * *      < 8<
 
 
 
 
4: : : :   0; ; ; ; 	 	 	 \	"( "( "( "(H     !I>O/J?$t+%, 7L',69RRGRZ
	
	 	 		
 	 	 	 	 		 
	 	 		 N !bj
	
	 	 		
 	 	 	 	 		 
	 		 O? ? ? ?.: : : :" (RZ(;<<bj
-	.
	 	 G BJ2V;<<M"*069<OOPPK   [< #
#BCC
 
 
 
 [
 bj,{:_LuTUUGbj,{:_LuTUUGrz-<NQVVWWHRZ22_DuL F bj
7	8
	 	 G  RZ 3f <==N2:1E9::LBJf$'887B M BJ2V;<<M&BJ
	
	 	 		
 	 	 		 	 'BJ
	
	 	 		
 	 	 		 	 %"*m+o=E  ##m3g=F J !bj!4!FGGOBJ..@5H M 
 59I" I" I" I" [I"V "rzR ee 	e 	e	
 	e 	d 	d 	u 	D		5 	D		5 	D		5 	D		5 	D		5 	D		4 	D		4  	E

E!M& " " " ["6 'BJ':X'E'OPP)rz
	
	 	 		
 	    BJNOOM   B    $ &*      r   r   )r	   r
   r   r   )r?   r   r   r
   )rU   rV   rW   r
   r   rX   )r   r   r   r   )&
__future__r   r   r   r   rG  rK  r  r   r  typingr   r   r   r   r   r   rD   rM   r'  rO   rZ   r\   rb   r~   r   r   r  r   r   r
   r   	_DictBaser   r   r  r   r   rT   r   r   <module>r     s   " " " " " "        				 				   < < < < < < < < < < < < < <
7 7 7 7*(*(* 	(* 	(	*
 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(*  	(!*" 	(#* *$ 	(%*& 	('*( 	()** 	(+*, 	(-*. 	(/*0 	(1*2 	(3*4 	(5*6 	(7*8 	(9*: 	(;*< 	(=*> 	(?*@ 	(A*B 	(C*D 	(E* *F 





S* * *ZJ J J J	 	 	 	 	\ 	 	 	, , , ,
    Z   
7 7 7 7 7. 7 7 7(9 9 9 9 9) 9 9 9
[ [ [ [ [ [ [ [|& & & & & & & &RD D D D DtCy D D D
  %$U3:%6%;<II$I- - - - -i - - -`B B B B B B B B+ + + + + + + +*   :C C C C C C C C C Cr   