
    ]Hj              	         S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  SSKJr  Sr\(       a  S SK
Jr  \R"                  \\-  \4   rO\R"                  rSnS jr0 S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_S)S*_0 S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL_ESMSNSOSPSQSRSSST.ErSoSU jr " SV SW\5      rSpSX jr " SY SZ\5      r " S[ S\\5      r " S] S^\5      r " S_ S`5      r " Sa Sb5      r " Sc Sd\ \   5      r! " Se Sf\5      r" " Sg Sh5      r# " Si Sj5      r$SqSk jr% " Sl Sm5      r&g)r    )annotationsN)Any
NamedTuple   )	ImageFileF)IOc                F    [         R                  U R                  S5      -   $ )N	utf_16_be)codecsBOM_UTF16_BEencode)ss    O/Users/admin/workspace/tools/venv/lib/python3.13/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                    U S [        [        R                  5       [        R                  :X  a+  U [        [        R                  5      S  R                  S5      $ SR	                  S U  5       5      $ )Nr
    c              3  `   #    U  H$  n[         R                  U[        U5      5      v   M&     g 7fN)PDFDocEncodinggetchr).0bytes     r   	<genexpr>decode_text.<locals>.<genexpr>O   s$     Iqt~))$D	::qs   ,.)lenr   r   decodejoin)bs    r   decode_textrK   K   s\    	#3v""#$(;(;;V(()+,33K@@wwIqIIIr   c                      \ rS rSrSrSrg)PdfFormatErrorR   zXAn error that probably indicates a syntactic or semantic error in the
PDF file structure N)__name__
__module____qualname____firstlineno____doc____static_attributes__rO   r   r   rM   rM   R   s     	r   rM   c                (    U (       d  [        U5      eg r?   )rM   )	conditionerror_messages     r   check_format_conditionrY   Y   s    ]++ r   c                  *    \ rS rSr% S\S'   S\S'   Srg)IndirectReferenceTuple^   int	object_id
generationrO   N)rP   rQ   rR   rS   __annotations__rU   rO   r   r   r[   r[   ^   s    NOr   r[   c                  F    \ rS rSrS	S jrS
S jrSS jrSS jrSS jrSr	g)IndirectReferencec   c                :    U R                    SU R                   S3$ )N z Rr^   r_   selfs    r   __str__IndirectReference.__str__d   s    ..!4??"3266r   c                @    U R                  5       R                  S5      $ Nus-ascii)ri   r   rg   s    r   	__bytes__IndirectReference.__bytes__g   s    ||~$$Z00r   c                    U R                   UR                   La  g[        U[        5      (       d   eUR                  U R                  :H  =(       a    UR                  U R                  :H  $ )NF)	__class__
isinstancerb   r^   r_   rh   others     r   __eq__IndirectReference.__eq__j   sP    >>0%!23333$..0XU5E5E5XXr   c                    X:X  + $ r?   rO   rs   s     r   __ne__IndirectReference.__ne__p   s    ""r   c                D    [        U R                  U R                  45      $ r?   )hashr^   r_   rg   s    r   __hash__IndirectReference.__hash__s   s    T^^T__566r   rO   Nreturnstrr   bytesrt   objectr   boolr   r]   )
rP   rQ   rR   rS   ri   rn   ru   rx   r|   rU   rO   r   r   rb   rb   c   s    71Y#7r   rb   c                      \ rS rSrSS jrSrg)IndirectObjectDefw   c                :    U R                    SU R                   S3$ )Nre   z objrf   rg   s    r   ri   IndirectObjectDef.__str__x   s    ..!4??"3488r   rO   Nr~   )rP   rQ   rR   rS   ri   rU   rO   r   r   r   r   w   s    9r   r   c                  d    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)	XrefTable|   c                @    0 U l         0 U l        SS0U l        SU l        g )Nr   i   F)existing_entriesnew_entriesdeleted_entriesreading_finishedrg   s    r   __init__XrefTable.__init__}   s0     	  	 !"5z %r   c                    U R                   (       a  X R                  U'   OX R                  U'   XR                  ;   a  U R                  U	 g g r?   )r   r   r   r   rh   keyvalues      r   __setitem__XrefTable.__setitem__   sF      $)S!).!!#&&&&$$S) 'r   c                `     U R                   U   $ ! [         a    U R                  U   s $ f = fr?   )r   KeyErrorr   rh   r   s     r   __getitem__XrefTable.__getitem__   s8    	.##C(( 	.((--	.s    --c                H   XR                   ;   a1  U R                   U   S   S-   nU R                   U	 X R                  U'   g XR                  ;   a$  U R                  U   S   S-   nX R                  U'   g XR                  ;   a  U R                  U   ng SU S3n[        U5      e)Nr   z
object ID z+ cannot be deleted because it doesn't exist)r   r   r   
IndexError)rh   r   r_   msgs       r   __delitem__XrefTable.__delitem__   s    """))#.q1A5J  %(2  %)))..s3A6:J(2  %(((--c2Jse#NOCS/!r   c                H    XR                   ;   =(       d    XR                  ;   $ r?   )r   r   r   s     r   __contains__XrefTable.__contains__   s    +++Fs6F6F/FFr   c                    [        [        U R                  R                  5       5      [        U R                  R                  5       5      -  [        U R
                  R                  5       5      -  5      $ r?   )rG   setr   keysr   r   rg   s    r   __len__XrefTable.__len__   s^    %%**,-$""'')*+$&&++-./
 	
r   c                    [        U R                  R                  5       5      [        U R                  R                  5       5      -
  [        U R                  R                  5       5      -  $ r?   )r   r   r   r   r   rg   s    r   r   XrefTable.keys   sS    %%**,-D4H4H4M4M4O0PP  %%'() 	)r   c                >   [        [        U R                  R                  5       5      [        U R                  R                  5       5      -  5      n[        [        U R                  R                  5       5      5      nUR                  5       nUR                  S5        U(       a  S n[        U5       H  u  pgUb	  US-   U:X  a  UnM  US U nX&S  n  O   Un/ nUR                  SUS   [        U5      4-  5        U H  n	XR                  ;   a#  UR                  SU R                  U	   -  5        M5  UR                  S5      n
[        X:H  SU	 SU
 35         US   nUR                  SXR                  U	   4-  5        M     U(       a  M  U$ ! [         a    Sn N?f = f)	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	enumeraterG   poprY   r   )rh   fr   deleted_keys	startxrefprevindexr   contiguous_keysr^   this_deleted_object_idnext_in_linked_lists               r   r   XrefTable.write   s   c$**//12S9M9M9R9R9T5UUVc$"6"6";";"=>?FFH			#D'o
<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 - d@  & 0./+0s   FFF)r   r   r   r   Nr   None)r   r]   r   tuple[int, int]r   r   )r   r]   r   r   )r   r]   r   r   )r   r]   r   r   r   )r   zset[int])r   	IO[bytes]r   r]   )rP   rQ   rR   rS   r   r   r   r   r   r   r   r   rU   rO   r   r   r   r   |   s+    &*."G
)
%r   r   c            	          \ rS rSr% S\S'   SS jrSS jrSS jrSS jrSS jr	\
SS	 j5       r\" \" S
S5      5      S V VVs1 s H  n[        U5      iM     snnn -
  rSS jrSrgs  snnn f )PdfName   r   namec                    [        U[        5      (       a  UR                  U l        g [        U[        5      (       a  Xl        g UR	                  S5      U l        g rl   )rr   r   r   r   r   )rh   r   s     r   r   PdfName.__init__   s<    dG$$		DIe$$IJ/DIr   c                8    U R                   R                  S5      $ rl   )r   rH   rg   s    r   name_as_strPdfName.name_as_str   s    yy
++r   c                    [        U[        5      =(       a    UR                  U R                  :H  =(       d    XR                  :H  $ r?   )rr   r   r   rs   s     r   ru   PdfName.__eq__   s2    ug&B5::+B ii	 r   c                ,    [        U R                  5      $ r?   )r{   r   rg   s    r   r|   PdfName.__hash__   s    DIIr   c                `    U R                   R                   S[        U R                  5       S3$ )N())rq   rP   reprr   rg   s    r   __repr__PdfName.__repr__   s)    ..))*!DO+<A>>r   c                8    U " [         R                  U5      5      $ r?   )	PdfParserinterpret_name)clsdatas     r   from_pdf_streamPdfName.from_pdf_stream   s    9++D122r   !      z#%/()<>[]{}c                    [        S5      nU R                   H9  nX R                  ;   a  UR                  U5        M%  UR	                  SU-  5        M;     [        U5      $ )N   /s   #%02X)	bytearrayr   allowed_charsappendextendr   )rh   resultrJ   s      r   rn   PdfName.__bytes__   sM    4A&&&a hl+	 
 V}r   )r   N)r   zPdfName | bytes | strr   r   r~   r   r   )r   r   r   r   r   )rP   rQ   rR   rS   r`   r   r   ru   r|   r   classmethodr   r   rangeordr   rn   rU   )rC   cr   s   000r   r   r      si    
K0, 
? 3 3 b#'=*I=a3q6=*IIM +Js   A(
r   c                      \ rS rSrSS jrSrg)PdfArrayi  c                >    SSR                  S U  5       5      -   S-   $ )Ns   [     c              3  8   #    U  H  n[        U5      v   M     g 7fr?   )pdf_repr)rC   xs     r   rE   %PdfArray.__bytes__.<locals>.<genexpr>  s      ;d!ds   s    ])rI   rg   s    r   rn   PdfArray.__bytes__  s!    tyy ;d ;;;eCCr   rO   Nr   )rP   rQ   rR   rS   rn   rU   rO   r   r   r   r     s    Dr   r   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
PdfDicti  c                x    US:X  a!  [         R                  R                  XU5        g X UR                  S5      '   g )Nr   rm   )collectionsUserDict__setattr__r   r   s      r   r   PdfDict.__setattr__	  s0    &=  ,,T>+0J'(r   c                    XR                  S5         n[        U[        5      (       a  [        U5      nUR                  S5      (       a  UR                  S5      (       a  USS  nSn[        U5      S:  a6  US   n[        USS 5      S	-  n[        U5      S
:  a  U[        USS
 5      -  nSS [        U5      S-
   n[        R                  " US [        U5      S-    U5      nUS;   a=  WS	-  nUS:X  a  US-  n[        R                  " [        R                  " U5      U-   5      nU$ ! [         a  n[        U5      UeS nAff = f)Nrm   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r  )r   r   AttributeErrorrr   r   rK   endswith
startswithrG   r]   timestrptimegmtimecalendartimegm)rh   r   r   erelationshipoffsetformats          r   __getattr__PdfDict.__getattr__  sA   	-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) )
E3D??Ec                N   [        S5      nU R                  5        Hk  u  p#Uc  M
  [        U5      nUR                  S5        UR                  [	        [        U5      5      5        UR                  S5        UR                  U5        Mm     UR                  S5        [	        U5      $ )N   <<   
r   s   
>>)r   itemsr   r   r   r   )rh   outr   r   s       r   rn   PdfDict.__bytes__*  s    **,JC}UOEJJuJJuWS\*+JJtJJu ' 	

7Szr   rO   N)r   r   r   r   r   r   )r   r   r   zstr | time.struct_timer   )rP   rQ   rR   rS   r   r  rn   rU   rO   r   r   r   r     s    16r   r   c                  (    \ rS rSrSS jrSS jrSrg)	PdfBinaryi8  c                    Xl         g r?   r   )rh   r   s     r   r   PdfBinary.__init__9  s    	r   c                L    SSR                  S U R                   5       5      -  $ )Ns   <%s>r   c              3  ,   #    U  H
  nS U-  v   M     g7f)s   %02XNrO   rC   rJ   s     r   rE   &PdfBinary.__bytes__.<locals>.<genexpr>=  s     !Ay!'A+ys   )rI   r   rg   s    r   rn   PdfBinary.__bytes__<  s     !Atyy!AAAAr   r  N)r   zlist[int] | bytesr   r   r   )rP   rQ   rR   rS   r   rn   rU   rO   r   r   r  r  8  s    Br   r  c                  B    \ rS rSrSS jr\R                  4SS jjrSrg)	PdfStreami@  c                    Xl         X l        g r?   )
dictionarybuf)rh   r)  r*  s      r   r   PdfStream.__init__A  s    $r   c                <    U R                   S   nUS:X  aQ  [        R                  " 5       nUR                  U R                  U5      nUR                  (       a  Sn[        U5      eU$ S[        U5       S3n[        U5      e! [         a    U R                  s $ f = f)Ns   Filters   FlateDecodezDecompressed data too largezstream filter z unknown/unsupported)
r)  r   r*  zlibdecompressobj
decompressunconsumed_tail
ValueErrorr   NotImplementedError)rh   
max_lengthfilterdobj	plaintextr   s         r   rH   PdfStream.decodeE  s    	__Y/F ^#%%'D*=I##3 o%"4<.0DEC%c**  	88O	s   B BB)r*  r)  N)r)  r   r*  r   r   r   )r3  r]   r   r   )	rP   rQ   rR   rS   r   r   	SAFEBLOCKrH   rU   rO   r   r   r'  r'  @  s     (1':': + +r   r'  c                4   U SL a  gU SL a  gU c  g[        U [        [        [        [        45      (       a  [        U 5      $ [        U [        [        45      (       a  [        U 5      R                  S5      $ [        U [        R                  5      (       a,  S[        R                  " SU 5      R                  S5      -   S	-   $ [        U [        5      (       a  [        [        U 5      5      $ [        U [        5      (       a  [        [        U 5      5      $ [        U [        5      (       a  [        [!        U 5      5      $ [        U [
        5      (       a>  U R#                  S
S5      n U R#                  SS5      n U R#                  S	S5      n SU -   S	-   $ [        U 5      $ )NTs   trueFs   falses   nullrm   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rr   r   r   r   r  r   r]   floatr   r   r  struct_timestrftimedictlistr   r   replace)r   s    r   r   r   V  sB   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                     \ rS rSrSr     SU           SVS jjrSWS jrSXS jrSYS jrSYS jr	SYS	 jr
SYS
 jrSYS jrSZS jrS[S jrSYS jr S\   S]S jjr        S^S jr        S_S jrSYS jr\S`S j5       rSYS jrS\SaS jjrSrSrSrSr\S-   r\S-   rSrSr\\-   \-   r \!RD                  " \S-   \-   S-   \ -   S -   \ -   S!-   \ -   S"-   \-   S#-   \!RF                  5      r$\!RD                  " \S-   \-   S$-   \ -   S -   \ -   S!-   \ -   S"-   \-   \!RF                  5      r%SYS% jr& S\     SbS& jjr'\!RD                  " \5      r(\!RD                  " \S'-   \-   S(-   5      r)\!RD                  " \S)-   5      r*\!RD                  " \S*-   \-   5      r+\,ScS+ j5       r-\!RD                  " S,5      r.\,SdSeS- jj5       r/\!RD                  " \S.-   \-   S(-   5      r0\!RD                  " \S/-   \-   S(-   5      r1\!RD                  " \S0-   \-   S(-   5      r2\!RD                  " \S1-   \-   S(-   5      r3\!RD                  " \S2-   \-   S(-   5      r4\!RD                  " \S3-   5      r5\!RD                  " \S4-   5      r6\!RD                  " \S5-   \-   S6-   5      r7\!RD                  " \S7-   5      r8\!RD                  " \S8-   \-   S8-   \-   S9-   \-   S(-   5      r9\!RD                  " \S8-   \-   S8-   \-   S:-   \-   S(-   5      r:\!RD                  " \S;-   \-   S(-   5      r;\!RD                  " S<\-   S=-   \ -   S>-   5      r<\!RD                  " \S?-   5      r=\!RD                  " \S@-   \-   S(-   5      r>\,  Sf         SgSA jj5       r?\!RD                  " SB5      r@0 SCSD_SESF_SGSH_SISJ_SKSL_S<S<_S(S(_SMSM_\A" SC5      SD_\A" SE5      SF_\A" SG5      SH_\A" SI5      SJ_\A" SK5      SL_\A" S<5      S<_\A" S(5      S(_\A" SM5      SM_rB\,      ShSN j5       rC\!RD                  " \SO-   \ -   5      rD\!RD                  " \S!-   \-   S!-   \-   \-   5      rE\!RD                  " SP5      rFSiSQ jrGSjSkSR jjrH S\   SlSS jjrISTrJg)mr   is  zpBased on
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
Supports PDF up to 1.4
Nc                @   U(       a  U(       a  Sn[        U5      eXl        X0l        X l        X@l        SU l        SU l        Ub  Uc  [        X5      =U l        nSU l        UbF  U R                  U5      U l        SU l        U(       d"  [        US5      (       a  UR                  U l        0 U l        U   U   U   U   U R                  (       a   U R                  5         O{S=U l        U l        [#        5       U l        S U l        [#        5       U l        S U l        [#        5       U l        / U l        / U l        S U l        S U l        0 U l        [9        5       U l        SU R:                  l        U(       a  U R?                  5         g g ! [         a    U R                  5         e f = f)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_inforM   close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)rh   rG  r   r*  rH  moder   s          r   r   PdfParser.__init__y  sj    1HCs## FI( %!&AIh--DFQ%)D"=--a0DH$(D!6 2 2 !<>88""$
 :;:D 4#6	DI DM	DI DM"))D24DJ79DO!DN,0D)24D'kDO+/(MMO # " 

s   F Fc                    U $ r?   rO   rg   s    r   	__enter__PdfParser.__enter__  s    r   c                $    U R                  5         g r?   )rP  )rh   argss     r   __exit__PdfParser.__exit__  s    

r   c                D    U R                  5         U R                  5         g r?   )	close_bufr^  rg   s    r   start_writingPdfParser.start_writing  s    r   c                   [        U R                  [        5      (       a  U R                  R                  5         OC[        U R                  [        R                  5      (       a  U R                  R                  5         S U l        g r?   )rr   r*  
memoryviewreleasemmaprP  rg   s    r   ri  PdfParser.close_buf  sM    dhh
++HH$)),,HHNNr   c                    U R                   (       a  U R                  5         U R                  b4  U R                  (       a"  U R                  R	                  5         S U l        g g g r?   )rI  ri  r   rJ  rP  rg   s    r   rP  PdfParser.close  sC      NN66$"8"8FFLLNDF #9r   c                v    U R                   c   eU R                   R                  S[        R                  5        g )Nr   )r   seekosSEEK_ENDrg   s    r   r^  PdfParser.seek_end  s(    vv!!!Ar{{#r   c                X    U R                   c   eU R                   R                  S5        g )Ns	   %PDF-1.4
)r   r   rg   s    r   write_headerPdfParser.write_header  s"    vv!!!]#r   c                |    U R                   c   eU R                   R                  SU S3R                  5       5        g )Nz% 
)r   r   r   )rh   r   s     r   write_commentPdfParser.write_comment  s3    vv!!!r!BZ&&()r   c                   U R                   c   eU R                  5         U R                  U R                   R                  5       5      U l        U R                  S5      U l        U R                  5         U R                  U R                  [        S5      U R
                  S9  U R                  U R
                  [        S5      [        U R                  5      U R                  S9  U R                  $ )Nr      Catalog)TypePages   Pages)r  CountKids)r   del_rootnext_object_idr   rT  rZ  rewrite_pages	write_objr   rG   rX  rg   s    r   write_catalogPdfParser.write_catalog  s    vv!!!++DFFKKM:,,Q/t}}7:+>dnnUNN"djj/	 	 	
 }}r   c                   / n[        U R                  5       H  u  p#U R                  U   nU R                  UR                  	 UR                  U[        S5         5        X0R                  ;  a  MY  0 nUR                  5        H  u  pgXuUR                  5       '   M     U R                  US'   U R                  " S0 UD6n[        U R                  5       H  u  pX:X  d  M  XR                  U	'   M     M     U Hg  nU(       d  M  U R                  U   nUR                  U R                  ;   a  U R                  UR                  	 UR                  SS 5      nU(       a  M[  Mi     / U l        g )Ns   ParentParentr?   )r   rY  rN  r]  r^   r   r   rX  r  r   rZ  
write_pagerA   )rh   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  PdfParser.rewrite_pages  sB   %'"$T__5KA++H5I 2 23&--i	8J.KLzz)$&!'oo/
;@coo&78 0 /3nn!(+??I3HIL#,TZZ#8+$0JJqM $9 6& $>%%"&"5"56I"J&00DOOC(;(E(EF&5&9&9)T&J#	 &% $> r   c                B   U R                   c   eU(       a  U R                  5         Xl        U R                  (       a!  U R	                  S U R                  5      U l        U R                  R                  U R                   5      n[        U R                  5      nU R                  US.nU R                  b  U R                  US'   U R                  (       a  U R
                  US'   X l	        U R                   R                  S[        [        U5      5      -   SU-  -   5        g )N)   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)r   r  rT  rU  r  rV  r]  r   rG   r[  r   r   )rh   new_root_ref
start_xrefnum_entriesr\  s        r   write_xref_and_trailer PdfParser.write_xref_and_trailer  s     vv!!!MMO(M99 NN4;DM__**4662
$//*]] 0
 ((4$($A$AL!99$(MML!(2%GL)*+)J67	
r   c                    [        U[        5      (       a  U R                  U   OUnSU;  a  [        S5      US'   SU;  a  U R                  US'   U R
                  " U/UQ70 UD6$ )Nr     Pager  )rr   r]   rX  r   rZ  r  )rh   refobjsdict_objobj_refs        r   r  PdfParser.write_page  se     &0S%9%9$**S/s!&w/HV8#!%HX~~g9999r   c                   U R                   c   eU R                   nUc   U R                  UR                  5       5      nO3UR                  5       UR                  4U R                  UR
                  '   UR                  [        [        U6 5      5        UR                  SS 5      nUb  [        U5      US'   U(       a  UR                  [        U5      5        U H  nUR                  [        U5      5        M     Ub3  UR                  S5        UR                  U5        UR                  S5        UR                  S5        U$ )NstreamLengths   stream
s   
endstream
s   endobj
)r   r  r   r_   r]  r^   r   r   r   r   rG   r   )rh   r  r  r  r   r  objs          r   r  PdfParser.write_obj"  s     vv!!!FF;%%affh/C./ffh-GDOOCMM*	'-./h-!$VHXGGHX&'CGGHSM" GGK GGFOGG$%	
r   c                    U R                   c  g U R                  U R                   R                  	 U R                  U R                  S   R                  	 g )Nr  )rT  r]  r^   rS  rg   s    r   r  PdfParser.del_root:  s@    == OODMM334OODIIh/99:r   c                   [        U S5      (       a  U R                  5       $ [        U S5      (       a  U R                  5       $  [        R                  " U R	                  5       S[        R
                  S9$ ! [         a     gf = f)N	getbuffergetvaluer   )accessr   )rM  r  r  ro  filenoACCESS_READr1  )r   s    r   rL  PdfParser.get_buf_from_file@  sj    1k"";;= Q
##::<yyQt7G7GHH s   1A6 6
BBc                Z   U R                   c   e[        U R                   5      U l        U R                  U R                  -
  U l        U R                  5         [        U R                  R                  S5      S LS5        U R                  S   U l	        U R                  c   eU R                  R                  SS 5      U l
        [        U R                  U R                  5      5      U l        U R                  c  [        5       U l        O)[        U R                  U R                  5      5      U l        [        SU R                  ;   S5        [        U R                  S   S:H  S5        [        U R                  R                  S5      S LS	5        [        [        U R                  S   [         5      S
5        U R                  S   U l        U R"                  c   eU R                  U R"                  5      U l        U R'                  U R$                  5      U l        U R(                  S S  U l        g )Nr  zRoot is missingr     Typez/Type missing in Rootr  z/Type in Root is not /Catalogr  z/Pages missing in Rootz+/Pages in Root is not an indirect reference)r*  rG   rQ  rH  rR  read_trailerrY   r\  rA   rT  rV  r   read_indirectrS  rU  rr   rb   rZ  rW  linearize_page_treerX  rY  rg   s    r   rO  PdfParser.read_pdf_infoL  s   xx###"488}"22T5F5FF!!'*$68I	
 ))'2}}((())--gt<D..t}}=>	== 	DI 2 24== ABDIw$))35LMIIg*,.M	
 	IIMM(#4/1I	
 	tyy*,=>9	
 8,~~)))"00@--d.A.AB
 **Q-r   c                     [        [        U R                  R                  5       5      S-   S5      nUb  US4U R                  UR
                  '   U$ ! [         a    [        SS5      n N8f = f)Nr   r   )rb   maxr]  r   r1  r^   )rh   r  	references      r   r  PdfParser.next_object_idp  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                   U R                   c   e[        U R                   5      S-
  nXR                  :  a  U R                  nU R                  R	                  U R                   U5      n[        US LS5        UnU(       aB  UnU R                  R	                  U R                   UR                  5       S-   5      nU(       a  MB  U(       d  UnUc   eUR                  S5      n[        UR                  S5      5      U l	        U R                  U5      U l        [        5       U l        U R                  U R                  S9  SU R                  ;   a  U R                  U R                  S   5        g g )N @  ztrailer end not found   r   r   xref_section_offsetr  )r*  rG   rH  re_trailer_endsearchrY   startgroupr]   r[  interpret_trailerr\  r   r]  read_xref_tableread_prev_trailer)rh   search_start_offsetm
last_matchtrailer_datas        r   r  PdfParser.read_trailer  s7   xx###!$((me3!2!22"&"3"3&&txx1DEq}.EF
J##**488QWWY^DA a A}}wwqz(+AGGAJ% 22<@#+1N1NOd'''""4#4#4W#=> (r   c                   U R                   c   eU R                  US9nU R                  R                  U R                   X3S-    5      n[	        US LS5        Uc   eUR                  S5      n[	        [        UR                  S5      5      U:H  S5        U R                  U5      nSU;   a>  Uc  / nUR                  U5        [	        US   U;  S5        U R                  US   U5        g g )	Nr  r  zprevious trailer not foundr   r   zGxref section offset in previous trailer doesn't match what was expectedr  ztrailer loop found)
r*  r  re_trailer_prevr  rY   r  r]   r  r   r  )rh   r  processed_offsetstrailer_offsetr  r  r\  s          r   r  PdfParser.read_prev_trailer  s    xx###--BU-V  ''HH^u&<=
 	q}.JK}}wwqz
O22U	
 --l;l" ($&!$$%89"W%->>@T ""<#8:KL #r   s   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r:  r  s   >>c           	     v   0 nSn U R                   R                  X5      nU(       d[  U R                  R                  X5      n[        US L=(       a    UR	                  5       [        U5      :H  S[        XS  5      -   5        OdU R                  UR                  S5      5      n[        U[        5      (       d   eU R                  XR	                  5       5      u  pgXbU'   Uc  OUnM  [        SU;   =(       a    [        US   [        5      S5        [        SU;   =(       a    [        US   [        5      S5        U$ )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_endrY   endrG   r   r   r  rr   r   	get_valuer]   rb   )r   r  trailerr  r  r   r   value_offsets           r   r  PdfParser.interpret_trailer  s(   !!,7AOO)),?&TMBaeeg\1B&BA<012
 $$QWWQZ0Cc5))))"%--eeg"FE CL#!F! " 	wD:gg.>#D4	
 	wR:gg.>@Q#R?	
 r   s   ([^#]*)(#([0-9a-fA-F]{2}))?c                t   SnU R                   R                  U5       Hu  nUR                  S5      (       aI  X4R                  S5      [        R	                  UR                  S5      R                  S5      5      -   -  nMb  X4R                  S5      -  nMw     U(       a  UR                  S5      $ [        U5      $ )Nr      r   rm   zutf-8)re_hashes_in_namefinditerr  r   fromhexrH   r   )r   rawas_textr   r  s        r   r   PdfParser.interpret_name  s    &&//4Awwqzz
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                   US:X  a  gU R                   R                  X5      nU(       a  UR                  5       nU R                  R                  X5      nU(       Ga  [	        [        UR                  S5      5      S:  S5        [	        [        UR                  S5      5      S:  S5        [	        US L =(       d?    U[        [        UR                  S5      5      [        UR                  S5      5      5      :H  S5        U R                  XR                  5       US-
  S9u  pgUc  US 4$ U R                  R                  X5      n[	        US LS	5        Uc   eXeR                  5       4$ [	        U(       + S
5        U R                  R                  X5      nU(       a  [	        [        UR                  S5      5      S:  S5        [	        [        UR                  S5      5      S:  S5        [        [        UR                  S5      5      [        UR                  S5      5      5      UR                  5       4$ U R                  R                  X5      nU(       Ga  UR                  5       n0 nU R                  R                  X5      nUn	U(       de  U	c   eU R                  XUS-
  S9u  pU	c  US 4$ U R                  XUS-
  S9u  pXU
'   U	c  US 4$ U R                  R                  X5      nU(       d  Me  UR                  5       n	U R                  R                  X5      nU(       a  UR                  S5      nUb  [        U[
        5      (       d  SU S3n[!        U5      e[#        XR                  5       UR                  5       U-    5      nU R$                  R                  XR                  5       U-   5      n[	        US LS5        Uc   eUR                  5       n	['        [)        U5      U5      U	4$ [)        U5      U	4$ U R*                  R                  X5      nU(       a  UR                  5       n/ nU R,                  R                  X5      nUn	U(       dV  U	c   eU R                  XUS-
  S9u  pUR/                  U5        U	c  US 4$ U R,                  R                  X5      nU(       d  MV  XR                  5       4$ U R0                  R                  X5      nU(       a  S UR                  5       4$ U R2                  R                  X5      nU(       a  SUR                  5       4$ U R4                  R                  X5      nU(       a  SUR                  5       4$ U R6                  R                  X5      nU(       a9  [9        U R;                  UR                  S5      5      5      UR                  5       4$ U R<                  R                  X5      nU(       a*  [        UR                  S5      5      UR                  5       4$ U R>                  R                  X5      nU(       a*  [A        UR                  S5      5      UR                  5       4$ U RB                  R                  X5      nU(       a  [E        S UR                  S5       5       5      n[G        U5      S-  S:X  a  UR/                  [I        S5      5        [D        RK                  URM                  S5      5      UR                  5       4$ U RN                  R                  X5      nU(       a  U RQ                  XR                  5       5      $ S[S        XUS-    5       3n[!        U5      e)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  4   #    U  H  oS ;   d  M
  Uv   M     g7f)s   0123456789abcdefABCDEFNrO   r#  s     r   rE   &PdfParser.get_value.<locals>.<genexpr>  s      #%a.G)G:s   		   0rm   zunrecognized object:     )*
re_commentr  r  re_indirect_def_startrY   r]   r  rb   r  re_indirect_def_endre_indirect_referencere_dict_startr  re_stream_startrA   rr   rM   r   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   rG   r   r  rH   re_string_litget_literal_stringr   )r   r   r  expect_indirectr  r  r   object_offsetr   current_offsetr   r   
stream_lenr   stream_dataresults
hex_strings                    r   r  PdfParser.get_value;  s]    !NN  .UUWF%%++D9"AGGAJ!#N #AGGAJ1$M #4' G"$S_c!''!*oFGD	 %(MMeeg;? %2 %!F $t|#''--dBA"I = =557?"!G	
 %%++D9"AGGAJ!#M #AGGAJ1$L %S_c!''!*oFOO##D1UUWF%'F%%d3A)/N%111&)mmkAo '4 '# ")!4<'(+kAo )6 )% $s!)!4<'OO))$? a UUWN##))$?A#ZZ	2
%Z
C-H-HB:,aPC(--#D1557Z3G$HI%%++D%%'J2FG&q}6LM}$}!" +>NN6?N22$$T2UUWFG  &&t4A#N%111(+kAo )6 )% u%!)"D=($$**4@ a EEG##KKd+= KKd+= LLt,!%%'>!KKd+3--aggaj9:AEEGCCJJT*qwwqz?AEEG++KKd+$aeeg--##D1" #771:# J :"a'!!#d),$$Z%6%6z%BCQUUWLL##D1))$88%d4"+E&F%GHS!!r   sF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr     r      t   	   b      f   r;  c                j   Sn[        5       nU R                  R                  X5       GH{  nUR                  XUR	                  5        5        UR                  S5      (       a1  UR                  U R                  UR                  S5      S      5        OUR                  S5      (       a.  UR                  [        UR                  S5      SS  S5      5        OUR                  S5      (       a  OUR                  S5      (       a  UR                  S5        O|UR                  S5      (       a  UR                  S	5        US-  nOOUR                  S
5      (       a9  US:X  a  [        U5      UR                  5       4s  $ UR                  S5        US-  nUR                  5       nGM~     Sn[        U5      e)Nr   r   r      r     r     r<     r:  zunfinished literal string)r   re_lit_str_tokenr  r   r  r  escaped_charsr   r]   r   r  rM   )r   r   r  nesting_depthr   r  r   s          r   r  PdfParser.get_literal_string  sI    %%..t<AMM$	23wwqzz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                z   U R                   c   eSnU R                  R                  U R                   XR                  -   5      n[	        US LS5        Uc   eUR                  5       n U R                  R                  U R                   U5      nU(       d  [	        US5         U$ SnUR                  5       n[        UR                  S5      5      n[        UR                  S5      5      n[        XUU-   5       H  nU R                  R                  U R                   U5      n[	        US LS5        Uc   eUR                  5       nUR                  S5      S	:H  nU(       a  Mi  [        UR                  S5      5      n	[        UR                  S5      5      U	4n
XpR                  ;  d  M  XR                  U'   M     GMU  )
NFzxref section start not foundTzxref subsection start not foundr   r   zxref entry not foundr  r  )r*  re_xref_section_startr  rH  rY   r  re_xref_subsection_startr]   r  r   re_xref_entryr]  )rh   r  subsection_foundr  r  first_objectnum_objectsr  is_freer_   	new_entrys              r   r  PdfParser.read_xref_table  s   xx### &&,,HH),=,==
 	q}.LM}}--33DHHfEA&$&G     $UUWFqwwqz?Laggaj/K<)CD&&,,TXXv>&q}6LM}$}''!*,w!$QWWQZJ!$QWWQZ* =I/-6* E r   c                   U R                   US      u  p4[        XAS   :H  SUS    SUS    SU SU 35        U R                  c   eU R                  U R                  X0R                  -   [        U6 US9S   nXPR                  U'   U$ )Nr   r   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )r  r  )r]  rY   r*  r  rH  rb   rN  )rh   r  r  r  r_   r   s         r   r  PdfParser.read_indirect%  s    !__SV4a& *3q6(/#a& J//9l+fXO	

 xx###HH&&&-s3#	  

  $)C r   c                    Ub  UOU R                   n[        US   S:H  S5        / nUS    HN  nU R                  U5      nUS   S:X  a  UR                  U5        M0  UR	                  U R                  US95        MP     U$ )Nr  r  z%/Type of page tree node is not /Pagess   Kidsr  )node)rW  rY   r  r   r   r  )rh   r,  	page_noderX  kid
kid_objects         r   r  PdfParser.linearize_page_tree6  s     !,D$2E2E	g(*,S	
 W%C++C0J'"g-S!T55:5FG & r   )r*  rN  r   rR  rQ  rG  rU  rV  r[  rY  rW  rX  rZ  rS  rT  rI  rJ  rH  r\  r]  )NNNr   rb)rG  z
str | Noner   zIO[bytes] | Noner*  zbytes | bytearray | NonerH  r]   r_  r   r   r   )r   r   )re  r   r   r   r   )r   r   r   r   )r   rb   r?   )r  IndirectReference | Noner   r   )r  zint | IndirectReference | Noner  r   r  r   r   rb   )r  r2  r  r   r  r   r   rb   )r   r   r   zbytes | mmap.mmap)r  z
int | Noner   rb   )r  r]   r  zlist[int] | Noner   r   )r  r   r   zdict[bytes, Any])F)r  r   r  r   r   zstr | bytes)Nr  )
r   *bytes | bytearray | memoryview | mmap.mmapr  r]   r  r2  r  r]   r   ztuple[Any, int | None])r   r3  r  r]   r   ztuple[bytes, int])r  r]   r   r]   )r  )r  rb   r  r]   r   r   )r,  zPdfDict | Noner   zlist[IndirectReference])KrP   rQ   rR   rS   rT   r   rb  rf  rj  ri  rP  r^  ry  r}  r  r  r  r  r  r  staticmethodrL  rO  r  	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  rU   rO   r   r   r   r   s  sp     $"(,33 3 &	3
 3 3 
3j$$*< 8<
4
	
4:1::=:KN:	:+47EH	0; 	 	"(H !I>O/J?$t+%, 7L',69RRGZZ
	
	 	 		
 	 	 	 	 		 
	 	 			N jj
	
	 	 		
 	 	 	 	 		 
	 			O?0 OSM#&M;KM	M2  ZZ(;<jj
-	.
	 	G JJ2V;<M**069<OOPK < 

#BC
 
 jj,{:_LuTUGjj,{:_LuTUGzz-<NQVVWHZZ22_DuLF jj
7	8
	 	G ZZ 3f <=N::1E9:LJJf$'887BM JJ2V;<MJJ
	
	 	 		
 	 	 		 JJ
	
	 	 		
 	 	 		 **m+o=E ##m3g=FJ jj!4!FGOJJ..@5HM 
 59I"8I" I" 2	I"
 I" 
 I" I"V zz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& "="GJ"	" "6 JJ':X'E'OP!zz
	
	 	 		
 	  JJNOMB$ &*"	  r   r   )r   r   r   r   )rJ   r   r   r   )rW   r   rX   r   r   r   )r   r   r   r   )'
__future__r   r  r   r   ro  ru  r>  r  r-  typingr   r   r=   r   TYPE_CHECKINGr   r   r   r   	_DictBaser   r@   rK   rF  rM   rY   r[   rb   r   r   r   rB  r   r   r  r'  r   r   rO   r   r   <module>rF     s   "     	 	   " $$S5[#%56I$$I
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
[ [|& &RDtCy D
-i -`B B+ +,:Q Qr   