
    g5              	         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 djd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+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPZdQ Z G dR dSe      ZdkdTZ G dU dVe      Z G dW dXe      Z G dY dZe      Z G d[ d\      Z G d] d^      Z G d_ d`ee         Zerej8                  eeef   ef   Znej8                  Z G da dbe      Z  G dc dd      Z! G de df      Z"dg Z# G dh di      Z$y)l    )annotationsN)TYPE_CHECKINGAnyList
NamedTupleUnionc                F    t         j                  | j                  d      z   S )N	utf_16_be)codecsBOM_UTF16_BEencode)ss    B/var/www/openai/venv/lib/python3.12/site-packages/PIL/PdfParser.pyencode_textr      s    +!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   €)                     c                    | d t        t        j                         t        j                  k(  r+| t        t        j                        d  j                  d      S dj	                  d | D              S )Nr
    c              3  Z   K   | ]#  }t         j                  |t        |             % y wN)PDFDocEncodinggetchr).0bytes     r   	<genexpr>zdecode_text.<locals>.<genexpr>E   s"     Iqt~))$D	:qs   )+)lenr   r   decodejoin)bs    r   decode_textrJ   A   s\    	#3v""#$(;(;;V(()+,33K@@wwIqIIIr   c                      e Zd ZdZy)PdfFormatErrorz\An error that probably indicates a syntactic or semantic error in the
    PDF file structureN)__name__
__module____qualname____doc__ r   r   rL   rL   H   s     	r   rL   c                    | st        |      y r?   )rL   )	conditionerror_messages     r   check_format_conditionrU   O   s    ]++ r   c                  "    e Zd ZU ded<   ded<   y)IndirectReferenceTupleint	object_id
generationN)rM   rN   rO   __annotations__rQ   r   r   rW   rW   T   s    NOr   rW   c                  2    e Zd ZddZddZd	dZd Zd
dZy)IndirectReferencec                :    | j                    d| j                   dS )N z RrY   rZ   selfs    r   __str__zIndirectReference.__str__Z   s    ..!4??"3266r   c                @    | j                         j                  d      S Nus-ascii)rc   r   ra   s    r   	__bytes__zIndirectReference.__bytes__]   s    ||~$$Z00r   c                    | j                   |j                   uryt        |t              sJ |j                  | j                  k(  xr |j                  | j                  k(  S )NF)	__class__
isinstancer]   rY   rZ   rb   others     r   __eq__zIndirectReference.__eq__`   sM    >>0%!2333$..0XU5E5E5XXr   c                    | |k(   S r?   rQ   rk   s     r   __ne__zIndirectReference.__ne__f   s    EM""r   c                D    t        | j                  | j                  f      S r?   )hashrY   rZ   ra   s    r   __hash__zIndirectReference.__hash__i   s    T^^T__566r   Nreturnstrrt   bytes)rl   objectrt   boolrt   rX   )rM   rN   rO   rc   rg   rm   ro   rr   rQ   r   r   r]   r]   Y   s    71Y#7r   r]   c                      e Zd ZddZy)IndirectObjectDefc                :    | j                    d| j                   dS )Nr_   z objr`   ra   s    r   rc   zIndirectObjectDef.__str__n   s    ..!4??"3488r   Nrs   )rM   rN   rO   rc   rQ   r   r   r|   r|   m   s    9r   r|   c                  >    e Zd Zd Zd Zd Zd Zd Zd
dZd Z	d Z
y	)	XrefTablec                @    i | _         i | _        ddi| _        d| _        y )Nr   i   F)existing_entriesnew_entriesdeleted_entriesreading_finishedra   s    r   __init__zXrefTable.__init__s   s&     " !5z %r   c                    | j                   r|| j                  |<   n|| j                  |<   || j                  v r| j                  |= y y r?   )r   r   r   r   rb   keyvalues      r   __setitem__zXrefTable.__setitem__y   sL      $)DS!).D!!#&$&&&$$S) 'r   c                ^    	 | j                   |   S # t        $ r | j                  |   cY S w xY wr?   )r   KeyErrorr   rb   r   s     r   __getitem__zXrefTable.__getitem__   s8    	.##C(( 	.((--	.s    ,,c                F   || j                   v r2| j                   |   d   dz   }| j                   |= || j                  |<   y || j                  v r%| j                  |   d   dz   }|| j                  |<   y || j                  v r| j                  |   }y d| d}t        |      )N   z
object ID z+ cannot be deleted because it doesn't exist)r   r   r   
IndexError)rb   r   rZ   msgs       r   __delitem__zXrefTable.__delitem__   s    $"""))#.q1A5J  %(2D  %D)))..s3A6:J(2D  %D(((--c2Jse#NOCS/!r   c                >    || j                   v xs || j                  v S r?   )r   r   r   s     r   __contains__zXrefTable.__contains__   s#    d+++Fsd6F6F/FFr   c                    t        t        | j                  j                               t        | j                  j                               z  t        | j
                  j                               z        S r?   )rF   setr   keysr   r   ra   s    r   __len__zXrefTable.__len__   s^    %%**,-$""'')*+$&&++-./
 	
r   c                    t        | j                  j                               t        | j                  j                               z
  t        | j                  j                               z  S r?   )r   r   r   r   r   ra   s    r   r   zXrefTable.keys   sS    %%**,-D4H4H4M4M4O0PP  %%'() 	)r   c                   t        t        | j                  j                               t        | j                  j                               z        }t        t        | j                  j                                     }|j                         }|j                  d       |rd }t        |      D ]  \  }}||dz   |k(  r|}|d | }||d  } n |}d }|j                  d|d   t        |      fz         |D ]  }	|	| j                  v r"|j                  d| j                  |	   z         3|j                  d      }
t        |	|
k(  d|	 d|
        	 |d   }|j                  d|| j                  |	   fz          |r|S # t        $ r d}Y 7w xY w)	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	enumeraterF   poprU   r   )rb   fr   deleted_keys	startxrefprevindexr   contiguous_keysrY   this_deleted_object_idnext_in_linked_lists               r   r   zXrefTable.write   s   c$**//12S9M9M9R9R9T5UUVc$"6"6";";"=>?FFH			D'o
s<4!8s?D&*6ElO<D . #'GGJ/!"4c/6J!KKL,	 0 00GG.1A1A)1LLM-9-=-=a-@**!%;;DYK P))?(@B
0.:1o+ GG*.0D0DY0OPQ - @  & 0./+0s   E>>FFNrz   )rM   rN   rO   r   r   r   r   r   r   r   r   rQ   r   r   r   r   r   s+    &*."G
)
%r   r   c            	          e Zd Zd ZddZd ZddZddZed        Z	 e
 edd            d	D  ch c]  }t        |       c}}} z
  Zdd
Zyc c}}} w )PdfNamec                    t        |t              r|j                  | _        y t        |t              r|| _        y |j	                  d      | _        y re   )rj   r   namerw   r   )rb   r   s     r   r   zPdfName.__init__   s8    dG$		DIe$DIJ/DIr   c                8    | j                   j                  d      S re   )r   rG   ra   s    r   name_as_strzPdfName.name_as_str   s    yy
++r   c                z    t        |t              xr |j                  | j                  k(  xs || j                  k(  S r?   )rj   r   r   rk   s     r   rm   zPdfName.__eq__   s4    ug&B5::+B dii	 r   c                ,    t        | j                        S r?   )rq   r   ra   s    r   rr   zPdfName.__hash__   s    DIIr   c                `    | j                   j                   dt        | j                         dS )N())ri   rM   reprr   ra   s    r   __repr__zPdfName.__repr__   s)    ..))*!DO+<A>>r   c                8     | t         j                  |            S r?   )	PdfParserinterpret_name)clsdatas     r   from_pdf_streamzPdfName.from_pdf_stream   s    9++D122r   !      z#%/()<>[]{}c                    t        d      }| j                  D ]6  }|| j                  v r|j                  |       #|j	                  d|z         8 t        |      S )N   /s   #%02X)	bytearrayr   allowed_charsappendextendrw   )rb   resultrI   s      r   rg   zPdfName.__bytes__   sO    4AD&&&a hl+	 
 V}r   Nrs   rz   rv   )rM   rN   rO   r   r   rm   rr   r   classmethodr   r   rangeordr   rg   )rC   cr   s   000r   r   r      sd    0, 
? 3 3 b#'=*I=a3q6=*IIM +Js   A
r   c                      e Zd ZddZy)PdfArrayc                >    ddj                  d | D              z   dz   S )Ns   [     c              3  2   K   | ]  }t        |        y wr?   )pdf_repr)rC   xs     r   rE   z%PdfArray.__bytes__.<locals>.<genexpr>   s      ;d!ds   s    ])rH   ra   s    r   rg   zPdfArray.__bytes__   s!    tyy ;d ;;;eCCr   Nrv   )rM   rN   rO   rg   rQ   r   r   r   r      s    Dr   r   c                       e Zd Zd Zd ZddZy)PdfDictc                z    |dk(  r"t         j                  j                  | ||       y || |j                  d      <   y )Nr   rf   )collectionsUserDict__setattr__r   r   s      r   r   zPdfDict.__setattr__   s4    &=  ,,T3>+0DJ'(r   c                `   	 | |j                  d         }t        |t              rt        |      }|j                  d      r|j                  d      r|dd  }d}t        |      dkD  r5|d   }t        |dd       d	z  }t        |      d
kD  r|t        |dd
       z  }dd t        |      dz
   }t        j                  |d t        |      dz    |      }|dv r:d	z  }|dk(  r|dz  }t        j                  t        j                  |      |z         }|S # t        $ r}t        |      |d }~ww xY w)Nrf   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   r   AttributeErrorrj   rw   rJ   endswith
startswithrF   rX   timestrptimegmtimecalendartimegm)rb   r   r   erelationshipoffsetformats          r   __getattr__zPdfDict.__getattr__  s:   	-J/0E eU#&E<<%ab	L5zB$RyU2b\*R/u:?c%2,//F#$4c%j1n5FMM%(9#f+/":FCEz)"3&bLFHOOE$:V$CD-  	- %1,	-s   D 	D-D((D-c                H   t        d      }| j                         D ]i  \  }}|	t        |      }|j                  d       |j                  t	        t        |                   |j                  d       |j                  |       k |j                  d       t	        |      S )N   <<   
r   s   
>>)r   itemsr   r   rw   r   )rb   outr   r   s       r   rg   zPdfDict.__bytes__   s    **,JC}UOEJJuJJuWS\*+JJtJJu ' 	

7Szr   Nrv   )rM   rN   rO   r   r   rg   rQ   r   r   r   r      s    16r   r   c                      e Zd Zd ZddZy)	PdfBinaryc                    || _         y r?   )r   )rb   r   s     r   r   zPdfBinary.__init__/  s	    	r   c                L    ddj                  d | j                  D              z  S )Ns   <%s>r   c              3  &   K   | ]	  }d |z    yw)s   %02XNrQ   rC   rI   s     r   rE   z&PdfBinary.__bytes__.<locals>.<genexpr>3  s     !Ay!'A+ys   )rH   r   ra   s    r   rg   zPdfBinary.__bytes__2  s     !Atyy!AAAAr   Nrv   )rM   rN   rO   r   rg   rQ   r   r   r   r   .  s    Br   r   c                      e Zd Zd Zd Zy)	PdfStreamc                     || _         || _        y r?   )
dictionarybuf)rb   r   r   s      r   r   zPdfStream.__init__7  s    $r   c                   	 | j                   j                  }|dk(  rA	 | j                   j                  }t        j                  | j                  t        |            S dt        | j                   j                         d}t        |      # t        $ r | j                  cY S w xY w# t        $ r | j                   j
                  }Y w xY w)Ns   FlateDecode)bufsizezstream filter z unknown/unsupported)r   Filterr   r   DLLengthzlib
decompressrX   r   NotImplementedError)rb   filterexpected_lengthr   s       r   rG   zPdfStream.decode;  s    	__++F ^#9"&//"4"4 ??488S5IJJ"4(>(>#?"@@TUC%c**  	88O	
 " 9"&//"8"89s"   B B' B$#B$'C	C	N)rM   rN   rO   r   rG   rQ   r   r   r   r   6  s    +r   r   c                   | du ry| du ry| yt        | t        t        t        t        f      rt        |       S t        | t        t        f      rt        |       j                  d      S t        | t        j                        r+dt        j                  d|       j                  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
              r>| j#                  d
d      } | j#                  dd      } | j#                  d	d      } d| z   d	z   S t        |       S )NTs   trueFs   falses   nullrf   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rj   r   r   r   r   rw   rX   floatru   r   r   struct_timestrftimedictlistr   r   replace)r   s    r   r   r   K  s-   Dy	
e	
	A(I>	?Qx	AU|	$1v}}Z((	At''	(oq9@@LLtSS	At	WQZ  	At	Xa[!!	As	A''	Au	IIeW%IIdF#IIdF#ax$Qxr   c                     e Zd ZdZdSdZdTdZdUdZdVdZdVdZdVdZ	dVd	Z
dVd
Zd ZdWdZdVdZdXdZd Zd ZdVdZed        ZdVdZdXdZdZdZdZdZedz   Zedz   ZdZdZeez   ez   Z e jB                  edz   ez   dz   ez   dz   ez   d z   ez   d!z   ez   d"z   e jD                        Z# e jB                  edz   ez   d#z   ez   dz   ez   d z   ez   d!z   ez   e jD                        Z$d$ Z%d% Z& e jB                  e      Z' e jB                  ed&z   ez   d'z         Z( e jB                  ed(z         Z) e jB                  ed)z   ez         Z*e+d*        Z, e jB                  d+      Z-e+dYd,       Z. e jB                  ed-z   ez   d'z         Z/ e jB                  ed.z   ez   d'z         Z0 e jB                  ed/z   ez   d'z         Z1 e jB                  ed0z   ez   d'z         Z2 e jB                  ed1z   ez   d'z         Z3 e jB                  ed2z         Z4 e jB                  ed3z         Z5 e jB                  ed4z   ez   d5z         Z6 e jB                  ed6z         Z7 e jB                  ed7z   ez   d7z   ez   d8z   ez   d'z         Z8 e jB                  ed7z   ez   d7z   ez   d9z   ez   d'z         Z9 e jB                  ed:z   ez   d'z         Z: e jB                  d;ez   d<z   ez   d=z         Z; e jB                  ed>z         Z< e jB                  ed?z   ez   d'z         Z=e+dZd@       Z> e jB                  dA      Z?i dBdCdDdEdFdGdHdIdJdKd;d;d'd'dLdL e@dB      dC e@dD      dE e@dF      dG e@dH      dI e@dJ      dK e@d;      d; e@d'      d' e@dL      dLZAe+dM        ZB e jB                  edNz   ez         ZC e jB                  ed z   ez   d z   ez   ez         ZD e jB                  dO      ZEdP ZFd[dQZGdXdRZHy)\r   z|Based on
    https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
    Supports PDF up to 1.4
    Nc                   |r|rd}t        |      || _        || _        || _        || _        d| _        d| _        ||t        ||      x| _        }d| _        |>| j                  |      x| _        }d| _        |st        |d      r|j                  | _        i | _        |r| j                          nsdx| _        | _        t               | _        d | _        t               | _        d | _        i | _        g | _        g | _        d | _        d | _        i | _        t5               | _        d| j6                  _        |r| j;                          y y )Nz4specify buf or f or filename, but not both buf and fFTr   r   )RuntimeErrorfilenamer   r   start_offset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)rb   r  r   r   r  moder   s          r   r   zPdfParser.__init__n  s>   1HCs## ( %!&AIh--DFQ%)D"=!33A66DHs$(D!6 2 !  9::D 4#6	DI DM	DI DM"$DDJ DO!DN,0D) "D'kDO+/(MMO r   c                    | S r?   rQ   ra   s    r   	__enter__zPdfParser.__enter__  s    r   c                $    | j                          y r?   )close)rb   argss     r   __exit__zPdfParser.__exit__  s    

r   c                D    | j                          | j                          y r?   )	close_bufr.  ra   s    r   start_writingzPdfParser.start_writing  s    r   c                t    	 | j                   j                          d | _         y # t        $ r
 Y d | _         y w xY wr?   )r   r3  r   ra   s    r   r7  zPdfParser.close_buf  s9    	HHNN   		s   $ 	77c                    | j                   r| j                          | j                  /| j                  r"| j                  j	                          d | _        y y y r?   )r  r7  r   r  r3  ra   s    r   r3  zPdfParser.close  sC      NN66$"8"8FFLLNDF #9r   c                X    | j                   j                  dt        j                         y )Nr   )r   seekosSEEK_ENDra   s    r   r.  zPdfParser.seek_end  s    Ar{{#r   c                :    | j                   j                  d       y )Ns	   %PDF-1.4
)r   r   ra   s    r   write_headerzPdfParser.write_header  s    ]#r   c                ^    | j                   j                  d| dj                                y )Nz% 
)r   r   r   )rb   r   s     r   write_commentzPdfParser.write_comment  s#    r!BZ&&()r   c                   | j                          | j                  | j                  j                               | _        | j                  d      | _        | j                          | j                  | j                  t        d      | j
                         | j                  | j
                  t        d      t        | j                        | j                         | j                  S )Nr      Catalog)TypePages   Pages)rF  CountKids)del_rootnext_object_idr   r   r$  r*  rewrite_pages	write_objr   rF   r(  ra   s    r   write_catalogzPdfParser.write_catalog  s    ++DFFKKM:,,Q/t}}7:+>dnnUNN"djj/	 	 	
 }}r   c                   g }t        | j                        D ]  \  }}| j                  |   }| j                  |j                  = |j                  |t        d                || j                  vrXi }|j                         D ]  \  }}|||j                         <    | j                  |d<    | j                  di |}t        | j                        D ]  \  }	}
|
|k(  s|| j                  |	<     |D ]X  }|s| j                  |   }|j                  | j                  v r| j                  |j                  = |j                  dd       }|rSZ g | _        y )Ns   ParentParentr?   )r   r)  r  r-  rY   r   r   r(  r   r   r*  
write_pagerA   )rb   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   rM  zPdfParser.rewrite_pages  sM   %'"$T__5KAx++H5I 2 23&--i	8J.KLtzz)$&!'oo/
U;@%coo&78 0 /3nn!(+*4??I3HIL#,TZZ#8<8+$0DJJqM $9 6& $>%"&"5"56I"J&00DOOC(;(E(EF&5&9&9)T&J#	 & $> r   c                   |r| j                          || _        | j                  r!| j                  d | j                        | _        | j
                  j                  | j                        }t        | j
                        }| j                  |d}| j                  | j                  |d<   | j                  r| j                  |d<   || _	        | j                  j                  dt        t        |            z   d|z  z          y )N)   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)rK  r$  r%  rN  r&  r-  r   r   rF   r+  rw   r   )rb   new_root_ref
start_xrefnum_entriesr,  s        r   write_xref_and_trailerz PdfParser.write_xref_and_trailer  s    MMO(DM99 NN4;DM__**4662
$//*!%E((4$($A$AL!99$(MML!(2%GL)*+)J67	
r   c                    t        |t              r| j                  |   }d|vrt        d      |d<   d|vr| j                  |d<    | j
                  |g|i |S )NrF     PagerQ  )rj   rX   r(  r   r*  rN  )rb   refobjsdict_objs       r   rR  zPdfParser.write_page  sa    c3**S/C!&w/HV8#!%HXt~~c5D5H55r   c                R   | j                   }| | j                  |j                               }n3|j                         |j                  f| j                  |j
                  <   |j                  t        t        |              |j                  dd       }|t        |      |d<   |r|j                  t        |             |D ]  }|j                  t        |              |3|j                  d       |j                  |       |j                  d       |j                  d       |S )Nstreamr  s   stream
s   
endstream
s   endobj
)r   rL  r   rZ   r-  rY   r   rw   r|   r   rF   r   )rb   rh  ri  rj  r   rl  objs          r   rN  zPdfParser.write_obj  s    FF;%%affh/C./ffh-GDOOCMM*	'-./h-!$VHXGGHX&'CGGHSM" GGK GGFOGG$%	
r   c                    | j                   y | j                  | j                   j                  = | j                  | j                  d   j                  = y )NrH  )r$  r-  rY   r#  ra   s    r   rK  zPdfParser.del_root  s@    == OODMM334OODIIh/99:r   c                    t        | d      r| j                         S t        | d      r| j                         S 	 t        j                  | j	                         dt        j
                        S # t        $ r Y yw xY w)N	getbuffergetvaluer   )accessr   )r  rp  rq  mmapfilenoACCESS_READ
ValueError)r   s    r   r  zPdfParser.get_buf_from_file  sd    1k";;= Q
#::<yyQt7G7GHH s   3A. .	A:9A:c                   t        | j                        | _        | j                  | j                  z
  | _        | j                          | j                  d   | _        | j                  j                  dd       | _	        t        | j                  | j                              | _        | j                  t               | _        n)t        | j                  | j                              | _        t        d| j                  v d       t        | j                  d   dk(  d       t        d| j                  v d       t        t        | j                  d   t               d	       | j                  d   | _        | j                  | j"                        | _        | j'                  | j$                        | _        | j(                  d d  | _        y )
Nr^  ra     Typez/Type missing in RootrE  z/Type in Root is not /CatalogrH  z/Pages missing in Rootz+/Pages in Root is not an indirect reference)rF   r   r!  r  r"  read_trailerr,  r$  rA   r&  r   read_indirectr#  r%  rU   rj   r]   r*  r'  linearize_page_treer(  r)  ra   s    r   r   zPdfParser.read_pdf_info$  sc   "488}"22T5F5FF))'2))--gt<D..t}}=>	== 	DI 2 24== ABDIw$))35LMIIg*,.M	
 	x49946NOtyy*,=>9	
 8,"00@--d.A.AB
 **Q-r   c                    	 t        t        | j                  j                               dz   d      }||df| j                  |j
                  <   |S # t        $ r t        dd      }Y 6w xY w)Nr   r   )r]   maxr-  r   rv  rY   )rb   r   	references      r   rL  zPdfParser.next_object_id@  sm    	0)#doo.B.B.D*E*I1MI 4:A;DOOI//0	  	0)!Q/I	0s   0A 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                   t        | j                        dz
  }|| j                  k  r| j                  }| j                  j	                  | j                  |      }t        |d       |}|r<|}| j                  j	                  | j                  |j                         dz         }|r<|s|}|j                  d      }t        |j                  d            | _	        | j                  |      | _        t               | _        | j                  | j                         d| j                  v r| j                  | j                  d          y y )N @  ztrailer end not found   r   r   xref_section_offsetr`  )rF   r   r  re_trailer_endsearchrU   startgrouprX   r+  interpret_trailerr,  r   r-  read_xref_tableread_prev_trailer)rb   search_start_offsetm
last_matchtrailer_datas        r   ry  zPdfParser.read_trailerr  s   !$((me3!2!22"&"3"3&&txx1DEq"9:
J##**488QWWY^DA  Awwqz(+AGGAJ% 22<@#+1N1NOd'''""4#4#4W#=> (r   c                Z   | j                  |      }| j                  j                  | j                  ||dz          }t	        |d       |j                  d      }t	        t        |j                  d            |k(  d       | j                  |      }d|v r| j                  |d          y y )Nr  r  zprevious trailer not foundr   r   zGxref section offset in previous trailer doesn't match what was expectedr`  )	r  re_trailer_prevr  r   rU   r  rX   r  r  )rb   r  trailer_offsetr  r  r,  s         r   r  zPdfParser.read_prev_trailer  s    --BU-V  ''HH^nu&<=
 	q">?wwqz
O22U	
 --l;l"""<#89 #r   s   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r  r   s   >>c           	        i }d}	 | j                   j                  ||      }|sV| j                  j                  ||      }t        |xr |j	                         t        |      k(  dt        ||d        z          nI| j                  |j                  d            }| j                  ||j	                               \  }}|||<   t        d|v xr t        |d   t              d       t        d|v xr t        |d   t              d       |S )Nr   z+name not found in trailer, remaining data: r   r_  z&/Size not in trailer or not an integerr^  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endrU   endrF   r   r   r  	get_valuerj   rX   r]   )r   r  trailerr   r  r   r   s          r   r  zPdfParser.interpret_trailer  s   !!,7AOO)),?&6!%%'S%66A<012
 $$QWWQZ0CMM,@ME6 GCL  	wD:gg.>#D4	
 	wR:gg.>@Q#R?	
 r   s   ([^#]*)(#([0-9a-fA-F]{2}))?c                ^   d}| j                   j                  |      D ]p  }|j                  d      rI||j                  d      t        j	                  |j                  d      j                  d            z   z  }]||j                  d      z  }r |r|j                  d      S t        |      S )Nr      r   rf   zutf-8)re_hashes_in_namefinditerr  r   fromhexrG   rw   )r   rawas_textr   r  s        r   r   zPdfParser.interpret_name  s    &&//4Awwqz
Y%6%6qwwqz7H7H7T%UUU
"	 5
 ;;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(?=c                   |dk(  ry| j                   j                  ||      }|r|j                         }| j                  j                  ||      }|rt	        t        |j                  d            dkD  d       t	        t        |j                  d            dk\  d       t	        |d u xs? |t        t        |j                  d            t        |j                  d                  k(  d       | j                  ||j                         |dz
        \  }}||d fS | j                  j                  ||      }t	        |d	       ||j                         fS t	        | d
       | j                  j                  ||      }|rt	        t        |j                  d            dkD  d       t	        t        |j                  d            dk\  d       t        t        |j                  d            t        |j                  d                  |j                         fS | j                  j                  ||      }|rt|j                         }i }| j                  j                  ||      }|sd| j                  |||dz
        \  }}||d fS | j                  |||dz
        \  }	}|	||<   ||d fS | j                  j                  ||      }|sd|j                         }| j                  j                  ||      }|r	 |j                  d      }
t        |
      }||j                         |j                         |z    }| j$                  j                  ||j                         |z         }t	        |d       |j                         }t'        t)        |      |      }||fS t)        |      }||fS | j*                  j                  ||      }|r|j                         }g }| j,                  j                  ||      }|sP| j                  |||dz
        \  }	}|j/                  |	       ||d fS | j,                  j                  ||      }|sP||j                         fS | j0                  j                  ||      }|rd |j                         fS | j2                  j                  ||      }|rd|j                         fS | j4                  j                  ||      }|rd|j                         fS | j6                  j                  ||      }|r9t9        | j;                  |j                  d                  |j                         fS | j<                  j                  ||      }|r*t        |j                  d            |j                         fS | j>                  j                  ||      }|r*tA        |j                  d            |j                         fS | jB                  j                  ||      }|rtE        d |j                  d      D              }tG        |      dz  dk(  r|j/                  tI        d             tD        jK                  |jM                  d            |j                         fS | jN                  j                  ||      }|r | jQ                  ||j                               S dtS        |||dz           }t#        |      # t        t         f$ r}d
 d}t#        |      |d }~ww xY w)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)max_nestingz(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-negatives   Lengthz&bad or missing Length in stream dict (r   zstream end not foundTFc              3  *   K   | ]  }|d v s|  yw)s   0123456789abcdefABCDEFNrQ   r   s     r   rE   z&PdfParser.get_value.<locals>.<genexpr>g  s      #%a.G)G:s   	   0rf   zunrecognized object:     )*
re_commentr  r  re_indirect_def_startrU   rX   r  r]   r  re_indirect_def_endre_indirect_referencere_dict_startr  re_stream_startrA   	TypeErrorrv  rL   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   rF   r   r  rG   re_string_litget_literal_stringr   )r   r   r   expect_indirectr  r  rx   r   r   r   stream_len_str
stream_lenr   r   stream_data
hex_strings                   r   r  zPdfParser.get_value  sU   !NN  v.UUWF%%++D&9"AGGAJ!#N #AGGAJ1$M #4' G"$S_c!''!*oFGD	 !]]4kTUo]VNFF~t|#''--dF;A"1&PQ1557?"!G	
 %%++D&9"AGGAJ!#M #AGGAJ1$L %S_c!''!*oFOO##D&1UUWFF%%dF3A!mmD&kTUomVV>!4<' #dFVW Xv#s>!4<'OO))$7  UUWF##))$7A5%+ZZ	%:N!$^!4J #1557QUUWz-AB%%++D!%%'J2FG&q*@A"76?K@ 6>! !6>!$$T62UUWFF  &&tV4A #dFVW Xve$>!4<'$$**48  1557?"KKdF+= KKdF+= LLtV,!%%'>!KKdF+3--aggaj9:AEEGCCJJT6*qwwqz?AEEG++KKdF+$aeeg--##D&1" #771:# J :"a'!!#d),$$Z%6%6z%BCQUUWLL##D&1))$88%d4"+E&F%GHS!!s ":. 5B>BRRSTC(-145s    [ [9"[44[9sF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr      r      t   	   b      f   r  c                ,   d}t               }| j                  j                  ||      D ]\  }|j                  |||j	                                 |j                  d      r1|j                  | j                  |j                  d      d             n|j                  d      r.|j                  t        |j                  d      dd  d             n|j                  d      rn|j                  d      r|j                  d       nq|j                  d      r|j                  d	       |dz  }nI|j                  d
      r8|dk(  rt        |      |j                         fc S |j                  d       |dz  }|j                         }_ d}t        |      )Nr   r   r      r     r      r     r  zunfinished literal string)r   re_lit_str_tokenr  r   r  r  escaped_charsr   rX   rw   r  rL   )r   r   r   nesting_depthr   r  r   s          r   r  zPdfParser.get_literal_string  s?   %%..tV<AMM$v	23wwqzc//
1>?c!''!*QR.!45e$d#" A% =!%%'11d#"UUWF% =& *S!!r   s   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c                &   d}| j                   j                  | j                  || j                  z         }t	        |d       |j                         }	 | j                  j                  | j                  |      }|st	        |d       	 |S d}|j                         }t        |j                  d            }t        |j                  d            }t        |||z         D ]  }| j                  j                  | j                  |      }t	        |d       |j                         }|j                  d      d	k(  }|r\t        |j                  d            }	t        |j                  d            |	f}
|| j                  vs|
| j                  |<    @)
NFzxref section start not foundTzxref subsection start not foundr   r   zxref entry not foundr  r  )re_xref_section_startr  r   r  rU   r  re_xref_subsection_startrX   r  r   re_xref_entryr-  )rb   r  subsection_foundr  r   first_objectnum_objectsrT  is_freerZ   	new_entrys              r   r  zPdfParser.read_xref_table  s`    &&,,HH)D,=,==
 	q"@A--33DHHfEA&$&G    $UUWFqwwqz?Laggaj/K<)CD&&,,TXXv>&q*@A''!*,!$QWWQZJ!$QWWQZ* =I/-6* E r   c                    | j                   |d      \  }}t        ||d   k(  d|d    d|d    d| d|        | 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-  rU   r  r   r  r]   r  )rb   rh  r  r   rZ   r   s         r   rz  zPdfParser.read_indirect  s    !__SV4
#a& *3q6(/#a& J//9l+fXO	

 HHT&&&-s3#	  

  $)C r   c                    || j                   }t        |d   dk(  d       g }|d   D ]N  }| j                  |      }|d   dk(  r|j                  |       .|j	                  | j                  |             P |S )Nrx  rH  z%/Type of page tree node is not /Pagess   Kidsrg  )node)r'  rU   rz  r   r   r{  )rb   r  r(  kid
kid_objects        r   r{  zPdfParser.linearize_page_tree  s    <&&DMX%'N	
 =C++C0J'"g-S!T55:5FG ! r   )NNNr   rb)rt   r   )r4  rx   rt   None)rt   r  )rt   r]   r?   )F)Nr   )r   )IrM   rN   rO   rP   r   r1  r5  r8  r7  r3  r.  r@  rC  rO  rM  re  rR  rN  rK  staticmethodr  r   rL  	delimiterdelimiter_or_ws
whitespacewhitespace_or_hexwhitespace_optionalwhitespace_mandatorywhitespace_optional_no_nlnewline_onlynewlinerecompileDOTALLr  r  ry  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  rz  r{  rQ   r   r   r   r   h  sp   
$L$$*:
(6*; 	 	(8 !I>O/J?$t+%, 7L',69RRGRZZ
	
	 	 		
 	 	 	 	 		 
	 	 			N !bjj
	
	 	 		
 	 	 	 	 		 
	 			O?*: (RZZ(;<bjj
-	.
	 	G BJJ2V;<M"**069<OOPK 4 #

#BC
 
 bjj,{:_LuTUGbjj,{:_LuTUGrzz-<NQVVWHRZZ22_DuLF bjj
7	8
	 	G  RZZ 3f <=N2::1E9:LBJJf$'887BM BJJ2V;<M&BJJ
	
	 	 		
 	 	 		 'BJJ
	
	 	 		
 	 	 		 %"**m+o=E ##m3g=FJ !bjj!4!FGOBJJ..@5HM w" w"r "rzz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& " "2 'BJJ':X'E'OP)rzz
	
	 	 		
 	  BJJNOM< r   r   )r   ru   rt   rw   )rS   ry   rT   ru   rt   r  )%
__future__r   r   r   r   rs  r=  r  r   r  typingr   r   r   r   r   r   r@   rJ   r  rL   rU   rW   r]   r|   r   r   r   r   ru   rw   	_DictBaser   r   r   r   r   rQ   r   r   <module>r     s   "     	 	   > >
7*(*(* 	(* 	(	*
 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(*  	(!*" 	(#*$ 	(%*& 	('*( 	()** 	(+*, 	(-*. 	(/*0 	(1*2 	(3*4 	(5*6 	(7*8 	(9*: 	(;*< 	(=*> 	(?*@ 	(A*B 	(C*D 	(E*F 





S*ZJ	\ 	,
Z 
7. 7(9) 9
W Wt$ $NDtCy D
 $$U3:%6%;<I$$I-i -`B B+ +*:C
 C
r   