o
    il                  	   @  sH  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 dZerBd dl
mZ ejeeB ef ZnejZd{d
d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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWZd|dYdZZG d[d\ d\eZd}dadbZG dcdd ddeZG dedf dfeZG dgdh dheZG didj djZG dkdl dlZG dmdn dnee ZG dodp dpeZ G dqdr drZ!G dsdt dtZ"d~dwdxZ#G dydz dzZ$dS )    )annotationsN)Any
NamedTupleF)IOsstrreturnbytesc                 C  s   t j| d S )N	utf_16_be)codecsBOM_UTF16_BEencode)r    r   E/home/air/sos/back/venv/lib/python3.10/site-packages/PIL/PdfParser.pyencode_text      r         u   ˘   u   ˇ   u   ˆ   u   ˙   u   ˝   u   ˛   u   ˚   u   ˜   u   •   u   †   u   ‡   u   …   u   —   u   –   u   ƒ   u   ⁄   u   ‹   u   ›   u   −   u   ‰   u   „   u   “   u   ”   u   ‘   u   ’   u   ‚   u   ™   u   ﬁ   u   ﬂ   u   Ł   u   Œ   u   Š   u   Ÿu   Žu   ıu   łu   œu   šu   žu   €)                     bc                 C  sD   | d t tj tjkr| t tjd  dS ddd | D S )Nr
    c                 s  s     | ]}t |t|V  qd S N)PDFDocEncodinggetchr).0byter   r   r   	<genexpr>M   s    zdecode_text.<locals>.<genexpr>)lenr   r   decodejoin)r<   r   r   r   decode_textI   s   rH   c                   @  s   e Zd ZdZdS )PdfFormatErrorz\An error that probably indicates a syntactic or semantic error in the
    PDF file structureN)__name__
__module____qualname____doc__r   r   r   r   rI   P   s    rI   	conditionboolerror_messageNonec                 C  s   | st |d S r>   )rI   )rN   rP   r   r   r   check_format_conditionW   s   rR   c                   @  s   e Zd ZU ded< ded< dS )IndirectReferenceTupleint	object_id
generationN)rJ   rK   rL   __annotations__r   r   r   r   rS   \   s   
 rS   c                   @  s>   e Zd ZdddZdddZdddZdddZdddZdS )IndirectReferencer   r   c                 C     | j  d| j dS )N z RrU   rV   selfr   r   r   __str__b      zIndirectReference.__str__r	   c                 C  s   |   dS Nus-ascii)r^   r   r\   r   r   r   	__bytes__e   s   zIndirectReference.__bytes__otherobjectrO   c                 C  s6   | j |j urdS t|tsJ |j| jko|j| jkS )NF)	__class__
isinstancerX   rU   rV   r]   rc   r   r   r   __eq__h   s   zIndirectReference.__eq__c                 C  s
   | |k S r>   r   rg   r   r   r   __ne__n      
zIndirectReference.__ne__rT   c                 C  s   t | j| jfS r>   )hashrU   rV   r\   r   r   r   __hash__q   r   zIndirectReference.__hash__Nr   r   r   r	   rc   rd   r   rO   r   rT   )rJ   rK   rL   r^   rb   rh   ri   rl   r   r   r   r   rX   a   s    



rX   c                   @     e Zd ZdddZdS )IndirectObjectDefr   r   c                 C  rY   )NrZ   z objr[   r\   r   r   r   r^   v   r_   zIndirectObjectDef.__str__Nrm   )rJ   rK   rL   r^   r   r   r   r   rr   u       rr   c                   @  s\   e Zd ZdddZdd	d
ZdddZdddZd ddZd!ddZd"ddZ	d#ddZ
dS )$	XrefTabler   rQ   c                 C  s    i | _ i | _ddi| _d| _d S )Nr   i   F)existing_entriesnew_entriesdeleted_entriesreading_finishedr\   r   r   r   __init__{   s   

zXrefTable.__init__keyrT   valuetuple[int, int]c                 C  s6   | j r	|| j|< n|| j|< || jv r| j|= d S d S r>   )rx   rv   ru   rw   r]   rz   r{   r   r   r   __setitem__   s   

zXrefTable.__setitem__c                 C  s*   z| j | W S  ty   | j|  Y S w r>   )rv   KeyErrorru   r]   rz   r   r   r   __getitem__   s
   zXrefTable.__getitem__c                 C  s   || j v r| j | d d }| j |= || j|< d S || jv r.| j| d d }|| j|< d S || jv r:| j| }d S d| d}t|)N   z
object ID z+ cannot be deleted because it doesn't exist)rv   rw   ru   
IndexError)r]   rz   rV   msgr   r   r   __delitem__   s   


zXrefTable.__delitem__rO   c                 C  s   || j v p	|| jv S r>   )ru   rv   r   r   r   r   __contains__   r_   zXrefTable.__contains__c                 C  s.   t t| j t| j B t| j B S r>   )rE   setru   keysrv   rw   r\   r   r   r   __len__   s   zXrefTable.__len__set[int]c                 C  s*   t | j t | j  t | j B S r>   )r   ru   r   rw   rv   r\   r   r   r   r      s   zXrefTable.keysf	IO[bytes]c              	   C  sF  t t| j t| j B }t t| j }| }|d |rd }t|D ]\}}|d u s8|d |kr;|}q*|d | }||d  } n|}g }|d|d t|f  |D ]B}	|	| jv rn|d| j|	   q\|	d}
t
|	|
kd|	 d|
  z|d }W n ty   d}Y nw |d|| j|	 f  q\|s$|S )	Ns   xref
r   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)sortedr   rv   r   rw   tellwrite	enumeraterE   poprR   r   )r]   r   r   deleted_keys	startxrefprevindexrz   contiguous_keysrU   this_deleted_object_idnext_in_linked_listr   r   r   r      sJ    


 zXrefTable.writeNr   rQ   )rz   rT   r{   r|   r   rQ   )rz   rT   r   r|   )rz   rT   r   rQ   )rz   rT   r   rO   rp   )r   r   )r   r   r   rT   )rJ   rK   rL   ry   r~   r   r   r   r   r   r   r   r   r   r   rt   z   s    







rt   c                   @  s|   e Zd ZU ded< d ddZd!d	d
Zd"ddZd#ddZd!ddZe	d$ddZ
eedddd dD  Zd%ddZdS )&PdfNamer	   namePdfName | bytes | strr   rQ   c                 C  s:   t |tr|j| _d S t |tr|| _d S |d| _d S r`   )rf   r   r   r	   r   )r]   r   r   r   r   ry      s
   


zPdfName.__init__r   c                 C  s   | j dS r`   )r   rF   r\   r   r   r   name_as_str      zPdfName.name_as_strrc   rd   rO   c                 C  s    t |to
|j| jkp|| jkS r>   )rf   r   r   rg   r   r   r   rh      s   zPdfName.__eq__rT   c                 C  s
   t | jS r>   )rk   r   r\   r   r   r   rl      rj   zPdfName.__hash__c                 C  s   | j j dt| j dS )N())re   rJ   reprr   r\   r   r   r   __repr__      zPdfName.__repr__datac                 C  s   | t |S r>   )	PdfParserinterpret_name)clsr   r   r   r   from_pdf_stream   s   zPdfName.from_pdf_stream!      c                 C  s   h | ]}t |qS r   )ord)rB   cr   r   r   	<setcomp>   s    zPdfName.<setcomp>z#%/()<>[]{}c                 C  s@   t d}| jD ]}|| jv r|| q|d|  qt|S )N   /s   #%02X)	bytearrayr   allowed_charsappendextendr	   )r]   resultr<   r   r   r   rb      s   

zPdfName.__bytes__N)r   r   r   rQ   rm   ro   rp   )r   r	   r   r   rn   )rJ   rK   rL   rW   ry   r   rh   rl   r   classmethodr   r   ranger   rb   r   r   r   r   r      s   
 




r   c                   @  rq   )PdfArrayr   r	   c                 C  s   dd dd | D  d S )Ns   [     c                 s  s    | ]}t |V  qd S r>   )pdf_repr)rB   xr   r   r   rD         z%PdfArray.__bytes__.<locals>.<genexpr>s    ])rG   r\   r   r   r   rb     s   zPdfArray.__bytes__Nrn   )rJ   rK   rL   rb   r   r   r   r   r     rs   r   c                   @  s*   e Zd ZdddZdd
dZdddZdS )PdfDictrz   r   r{   r   r   rQ   c                 C  s.   |dkrt j| || d S || |d< d S )Nr   ra   )collectionsUserDict__setattr__r   r}   r   r   r   r     s   zPdfDict.__setattr__str | time.struct_timec              
   C  s  z	| | d }W n ty } zt||d }~ww t|tr$t|}|dr|dr4|dd  }d}t|dkrZ|d }t	|dd d	 }t|d
krZ|t	|dd
 7 }dd t|d  }t
|d t|d  |}|dv r|d	9 }|dkr|d9 }t
t|| }|S )Nra   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   r   AttributeErrorrf   r	   rH   endswith
startswithrE   rT   timestrptimegmtimecalendartimegm)r]   rz   r{   erelationshipoffsetformatr   r   r   __getattr__  s2   



zPdfDict.__getattr__r	   c                 C  sn   t d}|  D ]%\}}|d u rqt|}|d |tt| |d || q|d t|S )N   <<   
r   s   
>>)r   itemsr   r   r	   r   )r]   outrz   r{   r   r   r   rb   (  s   


zPdfDict.__bytes__N)rz   r   r{   r   r   rQ   )rz   r   r   r   rn   )rJ   rK   rL   r   r   rb   r   r   r   r   r     s    

r   c                   @  s    e Zd ZdddZddd	Zd
S )	PdfBinaryr   list[int] | bytesr   rQ   c                 C  s
   || _ d S r>   )r   )r]   r   r   r   r   ry   7  rj   zPdfBinary.__init__r	   c                 C  s   dd dd | jD  S )Ns   <%s>    c                 s  s    | ]}d | V  qdS )s   %02XNr   rB   r<   r   r   r   rD   ;  r   z&PdfBinary.__bytes__.<locals>.<genexpr>)rG   r   r\   r   r   r   rb   :  r   zPdfBinary.__bytes__N)r   r   r   rQ   rn   )rJ   rK   rL   ry   rb   r   r   r   r   r   6  s    
r   c                   @  s    e Zd ZdddZdd	d
ZdS )	PdfStream
dictionaryr   bufr	   r   rQ   c                 C  s   || _ || _d S r>   )r   r   )r]   r   r   r   r   r   ry   ?  s   
zPdfStream.__init__c                 C  s   z| j d }W n ty   | j Y S w |dkr8z| j d }W n ty-   | j d }Y nw tj| jt|dS dt| d}t|)Ns   Filters   FlateDecodes   DL   Length)bufsizezstream filter z unknown/unsupported)r   r   r   zlib
decompressrT   r   NotImplementedError)r]   filterexpected_lengthr   r   r   r   rF   C  s   
zPdfStream.decodeN)r   r   r   r	   r   rQ   rn   )rJ   rK   rL   ry   rF   r   r   r   r   r   >  s    
r   r   r   c                 C  s  | du rdS | du rdS | d u rdS t | ttttfrt| S t | ttfr-t| 	dS t | t
jr@dt
d| 	d d	 S t | trKtt| S t | trVtt| S t | tratt| S t | tr~| d
d} | dd} | d	d} d|  d	 S t| S )NTs   trueFs   falses   nullra   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rf   r   r   r   r   r	   rT   floatr   r   r   struct_timestrftimedictlistr   r   replace)r   r   r   r   r   S  s0   



r   c                   @  sV  e Zd ZdZ					ddddZdddZdddZdddZdddZdddZ	ddd Z
dd!d"Zdd$d%Zdd'd(Zdd)d*Z	ddd-d.Zdd4d5Zdd6d7Zdd8d9Zedd<d=Zdd>d?ZdddBdCZdDZdEZdFZdGZedH ZedI ZdJZdKZee e Ze !edL e dM e dN e dO e dP e dQ e j"Z#e !edL e dR e dN e dO e dP e e j"Z$ddSdTZ%ddVdWZ&e !eZ'e !edX e dY Z(e !edZ Z)e !ed[ e Z*e+dd_d`Z,e !daZ-e+dddgdhZ.e !edi e dY Z/e !edj e dY Z0e !edk e dY Z1e !edl e dY Z2e !edm e dY Z3e !edn Z4e !edo Z5e !edp e dq Z6e !edr Z7e !eds e ds e dt e dY Z8e !eds e ds e du e dY Z9e !edv e dY Z:e !dwe dx e dy Z;e !edz Z<e !ed{ e dY Z=e+		|ddddZ>e !dZ?i dddddddddddwdwdYdYdde@dde@dde@dde@dde@dde@dwdwe@dYdYe@ddZAe+dddZBe !ed e ZCe !edO e dO e e ZDe !dZEdddZFddddZG	ddddZHdS )r   z|Based on
    https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
    Supports PDF up to 1.4
    Nr   rbfilename
str | Noner   IO[bytes] | Noner   bytes | bytearray | Nonestart_offsetrT   moder   r   rQ   c                 C  s&  |r
|r
d}t ||| _|| _|| _|| _d| _d| _|d ur/|d u r/t|| | _}d| _|d urG| || _d| _|sGt	|drG|j
| _i | _|  |  |  |  | jrZ|   n+d | _| _t | _d | _t | _d | _t | _g | _g | _d | _d | _i | _t | _d| j_|r|   d S d S )Nz4specify buf or f or filename, but not both buf and fFTr   r   )RuntimeErrorr   r   r   r   should_close_bufshould_close_fileopenget_buf_from_filehasattrr   cached_objectsread_pdf_infofile_size_totalfile_size_thisr   rootroot_refinfoinfo_refpage_tree_rootpages
orig_pages	pages_reflast_xref_section_offsettrailer_dictrt   
xref_tablerx   seek_end)r]   r   r   r   r   r   r   r   r   r   ry   v  sP   
zPdfParser.__init__c                 C  s   | S r>   r   r\   r   r   r   	__enter__  s   zPdfParser.__enter__argsrd   c                 G  s   |    d S r>   )close)r]   r  r   r   r   __exit__  r   zPdfParser.__exit__c                 C  s   |    |   d S r>   )	close_bufr  r\   r   r   r   start_writing  s   zPdfParser.start_writingc                 C  s"   t | jtjr| j  d | _d S r>   )rf   r   mmapr  r\   r   r   r   r    s   

zPdfParser.close_bufc                 C  s:   | j r|   | jd ur| jr| j  d | _d S d S d S r>   )r   r  r   r   r  r\   r   r   r   r    s   

zPdfParser.closec                 C  s"   | j d usJ | j dtj d S )Nr   )r   seekosSEEK_ENDr\   r   r   r   r    s   zPdfParser.seek_endc                 C  s   | j d usJ | j d d S )Ns	   %PDF-1.4
)r   r   r\   r   r   r   write_header  s   zPdfParser.write_headerr   c                 C  s*   | j d usJ | j d| d  d S )Nz% 
)r   r   r   )r]   r   r   r   r   write_comment  s   zPdfParser.write_commentrX   c                 C  sz   | j d usJ |   | | j  | _| d| _|   | j| jtd| jd | j| jtdt	| j
| j
d | jS )Nr      Catalog)TypePages   Pages)r   CountKids)r   del_rootnext_object_idr   r  r  rewrite_pages	write_objr   rE   r  r\   r   r   r   write_catalog  s   zPdfParser.write_catalogc                 C  s   g }t | jD ]N\}}| j| }| j|j= ||td  || jvr$qi }| D ]
\}}|||	 < q*| j
|d< | jdi |}t | jD ]\}	}
|
|krT|| j|	< qGq|D ]}|rt| j| }|j| jv rl| j|j= |dd }|s\qXg | _d S )Ns   ParentParentr>   )r   r  r  r  rU   r   r   r  r   r   r  
write_pager@   )r]   pages_tree_nodes_to_deleteipage_ref	page_infostringified_page_inforz   r{   new_page_refjcur_page_refpages_tree_node_refpages_tree_noder   r   r   r'    s4   







zPdfParser.rewrite_pagesnew_root_refIndirectReference | Nonec                 C  s   | j d usJ |r|   || _| jr| d | j| _| j| j }t| j}| j|d}| j	d ur7| j	|d< | jr?| j|d< || _	| j dt
t| d|   d S )N)   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)r   r%  r  r  r(  r	  r  r   rE   r  r	   r   )r]   r6  
start_xrefnum_entriesr  r   r   r   write_xref_and_trailer  s.   




z PdfParser.write_xref_and_trailerrefint | IndirectReference | Noneobjsr   dict_objc                 O  sV   t |tr
| j| n|}d|vrtd|d< d|vr| j|d< | j|g|R i |S )Nr      Pager*  )rf   rT   r  r   r  r(  )r]   r?  rA  rB  obj_refr   r   r   r+    s   
zPdfParser.write_pagec                 O  s   | j d usJ | j }|d u r| | }n| |jf| j|j< |tt|  |	dd }|d ur:t
||d< |rC|t| |D ]	}|t| qE|d urb|d || |d |d |S )NstreamLengths   stream
s   
endstream
s   endobj
)r   r&  r   rV   r  rU   r   r	   rr   r   rE   r   )r]   r?  rA  rB  r   rE  objr   r   r   r(    s&   



zPdfParser.write_objc                 C  s.   | j d u rd S | j| j j= | j| jd j= d S )Nr"  )r  r  rU   r  r\   r   r   r   r%  1  s   
zPdfParser.del_rootr   bytes | mmap.mmapc                 C  sR   t | dr	|  S t | dr|  S ztj|  dtjdW S  ty(   Y dS w )N	getbuffergetvaluer   )accessr   )r  rI  rJ  r  filenoACCESS_READ
ValueError)r   r   r   r   r   7  s   

zPdfParser.get_buf_from_filec                 C  sB  | j d usJ t| j | _| j| j | _|   t| jdd ud | jd | _	| j	d us0J | jdd | _
t| | j	| _| j
d u rKt | _n	t| | j
| _td| jv d t| jd dkd t| jdd ud	 tt| jd td
 | jd | _| jd usJ | | j| _| | j| _| jd d  | _d S )Nr8  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   rE   r  r   r  read_trailerrR   r  r@   r  r	  r   read_indirectr  r  rf   rX   r  r
  linearize_page_treer  r  r\   r   r   r   r  C  s<   

zPdfParser.read_pdf_infor   
int | Nonec                 C  sV   zt t| j d d}W n ty   t dd}Y nw |d ur)|df| j|j< |S )Nr   r   )rX   maxr  r   rN  rU   )r]   r   	referencer   r   r   r&  g  s   zPdfParser.next_object_ids   [][()<>{}/%]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                 C  s   | j d usJ t| j d }|| jk r| j}| j| j |}t|d ud |}|r9|}| j| j | d }|s)|s=|}|d usCJ |d}t|d| _	| 
|| _t | _| j| j	d d| jv rp| | jd  d S d S )N @  ztrailer end not found   r   r   xref_section_offsetr:  )r   rE   r   re_trailer_endsearchrR   startgrouprT   r  interpret_trailerr  rt   r  read_xref_tableread_prev_trailer)r]   search_start_offsetm
last_matchtrailer_datar   r   r   rP    s,   


zPdfParser.read_trailerr\  c                 C  s   | j d usJ | j|d}| j| j ||d  }t|d ud |d us'J |d}tt|d|kd | |}d|v rJ| |d  d S d S )Nr[  rY  zprevious trailer not foundr   r   zGxref section offset in previous trailer doesn't match what was expectedr:  )	r   rb  re_trailer_prevr^  rR   r`  rT   ra  rc  )r]   r\  trailer_offsetre  rg  r  r   r   r   rc    s    

zPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r   r   s   >>rg  r	   dict[bytes, Any]c                 C  s   i }d}	 | j ||}|s-| j||}t|d uo!| t|kdt||d    n%| |d}t	|t
s<J | || \}}|||< |d u rOn|}qtd|v o]t	|d td td|v okt	|d td |S )	Nr   Tz+name not found in trailer, remaining data: r   r9  z&/Size not in trailer or not an integerr8  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endrR   endrE   r   r   r`  rf   r	   	get_valuerT   rX   )r   rg  trailerr   re  rz   r{   value_offsetr   r   r   ra    s<   zPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?Frawas_textrO   str | bytesc                 C  sj   d}| j |D ]!}|dr"||dt|dd 7 }q||d7 }q|r1|dS t|S )Nr      r   ra   zutf-8)re_hashes_in_namefinditerr`  r   fromhexrF   r	   )r   rr  rs  r   re  r   r   r   r     s   
&
zPdfParser.interpret_names   null(?=s   true(?=s   false(?=s   ([-+]?[0-9]+)(?=s)   ([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=s   \[   ]s   <(s   *)>r   s   ([-+]?[0-9]+)s   R(?=s   obj(?=s	   endobj(?=r   s	   %[^\r\n]*s   )*s   stream\r?\ns   endstream(?=r   r   bytes | bytearray | mmap.mmapexpect_indirectmax_nestingtuple[Any, int | None]c                 C  s  |dkrdS | j ||}|r| }| j||}|r|tt|ddkd tt|ddkd t|d u pI|tt|dt|dkd | j|| |d d\}}|d u rb|d fS | j	||}t|d ud	 |d usvJ || fS t| d
 | j
||}|rtt|ddkd tt|ddkd tt|dt|d| fS | j||}|rn| }i }| j||}|}	|s|	d usJ | j||	|d d\}
}	|	d u r|d fS | j||	|d d\}}	|||
< |	d u r|d fS | j||	}|r| }	| j||	}|rh|d}|d u s,t|ts6d| d}t||| | |  }| j|| | }t|d ud |d us[J | }	tt|||	fS t||	fS | j||}|r| }g }| j||}|}	|s|	d usJ | j||	|d d\}}	|| |	d u r|d fS | j||	}|r|| fS | j||}|rd | fS | j||}|rd| fS | j||}|rd| fS | j||}|rt| |d| fS | j||}|rt|d| fS | j||}|r-t|d| fS | j ||}|r_t!dd |dD }t"|d dkrS|t#d t!$|%d| fS | j&||}|rq| '|| S dt(|||d   }t|)Nr   )NNr   z<indirect object definition: object ID must be greater than 0r   z;indirect object definition: generation must be non-negativez2indirect object definition different than expected)r|  z(indirect object definition end not foundz$indirect object definition not foundz;indirect object reference: object ID must be greater than 0z:indirect object reference: generation must be non-negativer   z&bad or missing Length in stream dict (r   zstream end not foundTFc                 s  s    | ]	}|d v r|V  qdS )s   0123456789abcdefABCDEFNr   r   r   r   r   rD     s    z&PdfParser.get_value.<locals>.<genexpr>   0ra   zunrecognized object:     ))
re_commentrl  rn  re_indirect_def_startrR   rT   r`  rX   ro  re_indirect_def_endre_indirect_referencere_dict_startrm  re_stream_startr@   rf   rI   re_stream_endr   r   re_array_startre_array_endr   re_nullre_truere_falserk  r   r   re_intre_realr   re_string_hexr   rE   r   rx  rF   re_string_litget_literal_stringr   )r   r   r   r{  r|  re  rd   object_offsetr   current_offsetrz   r{   
stream_lenr   stream_dataresults
hex_stringr   r   r   ro  *  s  
&









	zPdfParser.get_valuesF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr      r      t   	   b      f   r   tuple[bytes, int]c                 C  s  d}t  }| j||D ]u}||||   |dr,|| j|dd   nQ|drA|t|ddd  d n<|drGn6|drR|d n+|dra|d	 |d7 }n|d
r}|dkrtt	||
 f  S |d |d8 }|
 }qd}t|)Nr   r   r      ru     r      r      r   zunfinished literal string)r   re_lit_str_tokenrw  r   r_  r`  escaped_charsr   rT   r	   rn  rI   )r   r   r   nesting_depthr   re  r   r   r   r   r    s.   

 







zPdfParser.get_literal_strings   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c                 C  s&  | j d usJ d}| j| j || j }t|d ud |d us!J | }	 | j| j |}|s8t|d 	 |S d}| }t|d}t|d}t	||| D ]>}| j
| j |}t|d ud |d usjJ | }|dd	k}|st|d}	t|d|	f}
|| jvr|
| j|< qSq&)
NFzxref section start not foundTzxref subsection start not foundr   r   zxref entry not foundru  r  )r   re_xref_section_startrl  r   rR   rn  re_xref_subsection_startrT   r`  r   re_xref_entryr  )r]   r\  subsection_foundre  r   first_objectnum_objectsr-  is_freerV   	new_entryr   r   r   rb    sB   

zPdfParser.read_xref_tablec              
   C  s   | j |d  \}}t||d kd|d  d|d  d| d|  | jd us)J | j| j|| j t| |d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  rR   r   ro  r   rX   r  )r]   r?  r|  r   rV   r{   r   r   r   rQ    s(   

zPdfParser.read_indirectnodePdfDict | Nonelist[IndirectReference]c                 C  sn   |d ur|n| j }t|d dkd g }|d D ]}| |}|d dkr+|| q|| j|d q|S )NrO  r"  z%/Type of page tree node is not /Pagess   KidsrC  )r  )r
  rR   rQ  r   r   rR  )r]   r  	page_noder  kid
kid_objectr   r   r   rR  %  s   
zPdfParser.linearize_page_tree)NNNr   r   )r   r   r   r   r   r   r   rT   r   r   r   rQ   )r   r   )r  rd   r   rQ   r   )r   r   r   rQ   )r   rX   r>   )r6  r7  r   rQ   )r?  r@  rA  r   rB  r   r   rX   )r?  r7  rA  r   rB  r   r   rX   )r   r   r   rH  )r   rS  r   rX   )r\  rT   r   rQ   )rg  r	   r   rj  )F)rr  r	   rs  rO   r   rt  )Nr   )
r   rz  r   rT   r{  r7  r|  rT   r   r}  )r   rz  r   rT   r   r  )r\  rT   r   rT   )r   )r?  rX   r|  rT   r   r   )r  r  r   r  )IrJ   rK   rL   rM   ry   r  r  r  r  r  r  r  r  r)  r'  r>  r+  r(  r%  staticmethodr   r  r&  	delimiterdelimiter_or_ws
whitespacewhitespace_or_hexwhitespace_optionalwhitespace_mandatorywhitespace_optional_no_nlnewline_onlynewlinerecompileDOTALLr]  rh  rP  rc  re_whitespace_optionalrk  r  rm  r   ra  rv  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ro  r  r   r  r  r  r  r  rb  rQ  rR  r   r   r   r   r   p  s   
1













$
	
	






 	


!r   )r   r   r   r	   )r<   r	   r   r   )rN   rO   rP   r   r   rQ   )r   r   r   r	   )%
__future__r   r   r   r   r  r  r  r   r   typingr   r   TYPE_CHECKINGr   r   r   r	   	_DictBaser   r?   rH   r   rI   rR   rS   rX   rr   rt   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    
	
 !"#
-
^)0
