o
    f5                  	   @  sD  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 dvd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-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUZdVdW ZG dXdY dYeZdwd^d_ZG d`da daeZG dbdc dceZG ddde deeZG dfdg dgZG dhdi diZG djdk dkee Zerejeeef ef ZnejZG dldm dmeZ G dndo doZ!G dpdq dqZ"drds Z#G dtdu duZ$dS )x    )annotationsN)TYPE_CHECKINGAnyList
NamedTupleUnionsstrreturnbytesc                 C  s   t j| d S )N	utf_16_be)codecsBOM_UTF16_BEencode)r    r   F/home/ubuntu/webapp/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   €)                     c                 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>E   s    zdecode_text.<locals>.<genexpr>)lenr   r   decodejoin)br   r   r   decode_textA   s   rJ   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   rK   H   s    rK   	conditionboolerror_messageNonec                 C  s   | st |d S r?   )rK   )rP   rR   r   r   r   check_format_conditionO   s   rT   c                   @  s   e Zd ZU ded< ded< dS )IndirectReferenceTupleint	object_id
generationN)rL   rM   rN   __annotations__r   r   r   r   rU   T   s   
 rU   c                   @  s<   e Zd ZdddZdddZdddZdd ZdddZdS )IndirectReferencer
   r	   c                 C     | j  d| j dS )N z RrW   rX   selfr   r   r   __str__Z      zIndirectReference.__str__r   c                 C  s   |   dS Nus-ascii)r`   r   r^   r   r   r   	__bytes__]   s   zIndirectReference.__bytes__otherobjectrQ   c                 C  s6   | j |j urdS t|tsJ |j| jko|j| jkS )NF)	__class__
isinstancerZ   rW   rX   r_   re   r   r   r   __eq__`   s   zIndirectReference.__eq__c                 C  s
   | |k S r?   r   ri   r   r   r   __ne__f      
zIndirectReference.__ne__rV   c                 C  s   t | j| jfS r?   )hashrW   rX   r^   r   r   r   __hash__i   r   zIndirectReference.__hash__Nr
   r	   r
   r   )re   rf   r
   rQ   r
   rV   )rL   rM   rN   r`   rd   rj   rk   rn   r   r   r   r   rZ   Y   s    


rZ   c                   @     e Zd ZdddZdS )IndirectObjectDefr
   r	   c                 C  r[   )Nr\   z objr]   r^   r   r   r   r`   n   ra   zIndirectObjectDef.__str__Nro   )rL   rM   rN   r`   r   r   r   r   rs   m       rs   c                   @  sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	dd Z
dS )	XrefTablec                 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   s   

zXrefTable.__init__c                 C  s6   | j r	|| j|< n|| j|< || jv r| j|= d S d S r?   )ry   rw   rv   rx   r_   keyvaluer   r   r   __setitem__y   s   

zXrefTable.__setitem__c                 C  s*   z| j | W S  ty   | j|  Y S w r?   )rw   KeyErrorrv   r_   r|   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)rw   rx   rv   
IndexError)r_   r|   rX   msgr   r   r   __delitem__   s   


zXrefTable.__delitem__c                 C  s   || j v p	|| jv S r?   )rv   rw   r   r   r   r   __contains__   ra   zXrefTable.__contains__r
   rV   c                 C  s.   t t| j t| j B t| j B S r?   )rF   setrv   keysrw   rx   r^   r   r   r   __len__   s   zXrefTable.__len__c                 C  s*   t | j t | j  t | j B S r?   )r   rv   r   rx   rw   r^   r   r   r   r      s   zXrefTable.keysc              	   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|}d }|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   rw   r   rx   tellwrite	enumeraterF   poprT   r   )r_   fr   deleted_keys	startxrefprevindexr|   contiguous_keysrW   this_deleted_object_idnext_in_linked_listr   r   r   r      sJ    


 zXrefTable.writeNrq   )rL   rM   rN   rz   r~   r   r   r   r   r   r   r   r   r   r   ru   r   s    
ru   c                   @  sl   e Zd Zdd ZdddZdd Zdd
dZdddZedd Z	e
edddd dD  ZdddZdS )PdfNamec                 C  s:   t |tr|j| _d S t |tr|| _d S |d| _d S rb   )rh   r   namer   r   )r_   r   r   r   r   rz      s
   


zPdfName.__init__r
   r	   c                 C  s   | j dS rb   )r   rG   r^   r   r   r   name_as_str      zPdfName.name_as_strc                 C  s    t |to
|j| jkp|| jkS r?   )rh   r   r   ri   r   r   r   rj      s   zPdfName.__eq__rV   c                 C  s
   t | jS r?   )rm   r   r^   r   r   r   rn      rl   zPdfName.__hash__c                 C  s   | j j dt| j dS )N())rg   rL   reprr   r^   r   r   r   __repr__      zPdfName.__repr__c                 C  s   | t |S r?   )	PdfParserinterpret_name)clsdatar   r   r   from_pdf_stream   s   zPdfName.from_pdf_stream!      c                 C  s   h | ]}t |qS r   )ord)rC   cr   r   r   	<setcomp>   s    zPdfName.<setcomp>z#%/()<>[]{}r   c                 C  s@   t d}| jD ]}|| jv r|| q|d|  qt|S )N   /s   #%02X)	bytearrayr   allowed_charsappendextendr   )r_   resultrI   r   r   r   rd      s   

zPdfName.__bytes__Nro   rq   rp   )rL   rM   rN   rz   r   rj   rn   r   classmethodr   r   ranger   rd   r   r   r   r   r      s    



r   c                   @  rr   )PdfArrayr
   r   c                 C  s   dd dd | D  d S )Ns   [     c                 s  s    | ]}t |V  qd S r?   )pdf_repr)rC   xr   r   r   rE          z%PdfArray.__bytes__.<locals>.<genexpr>s    ])rH   r^   r   r   r   rd         zPdfArray.__bytes__Nrp   )rL   rM   rN   rd   r   r   r   r   r      rt   r   c                   @  s&   e Zd Zdd Zdd Zd
ddZd	S )PdfDictc                 C  s.   |dkrt j| || d S || |d< d S )Nr   rc   )collectionsUserDict__setattr__r   r{   r   r   r   r      s   zPdfDict.__setattr__c              
   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 )Nrc   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   r   AttributeErrorrh   r   rJ   endswith
startswithrF   rV   timestrptimegmtimecalendartimegm)r_   r|   r}   erelationshipoffsetformatr   r   r   __getattr__  s2   



zPdfDict.__getattr__r
   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_   outr|   r}   r   r   r   rd      s   


zPdfDict.__bytes__Nrp   )rL   rM   rN   r   r   rd   r   r   r   r   r      s    r   c                   @  s   e Zd Zdd ZdddZdS )		PdfBinaryc                 C  s
   || _ d S r?   )r   )r_   r   r   r   r   rz   /  rl   zPdfBinary.__init__r
   r   c                 C  s   dd dd | jD  S )Ns   <%s>    c                 s  s    | ]}d | V  qdS )s   %02XNr   rC   rI   r   r   r   rE   3  r   z&PdfBinary.__bytes__.<locals>.<genexpr>)rH   r   r^   r   r   r   rd   2  r   zPdfBinary.__bytes__Nrp   )rL   rM   rN   rz   rd   r   r   r   r   r   .  s    r   c                   @  s   e Zd Zdd Zdd ZdS )	PdfStreamc                 C  s   || _ || _d S r?   )
dictionarybuf)r_   r   r   r   r   r   rz   7  s   
zPdfStream.__init__c                 C  s   z| j j}W n ty   | j Y S w |dkr5z| j j}W n ty*   | j j}Y nw tj| jt|dS dt	| j j d}t
|)Ns   FlateDecode)bufsizezstream filter z unknown/unsupported)r   Filterr   r   DLLengthzlib
decompressrV   r   NotImplementedError)r_   filterexpected_lengthr   r   r   r   rG   ;  s   
zPdfStream.decodeN)rL   rM   rN   rz   rG   r   r   r   r   r   6  s    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   nullrc   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rh   r   r   r   r   r   rV   floatr	   r   r   struct_timestrftimedictlistr   r   replace)r   r   r   r   r   K  s0   



r   c                   @  s$  e Zd ZdZdwddZdxdd	ZdyddZdzddZdzddZdzddZ	dzddZ
dzddZdd Zd{ddZdzddZd|d d!Zd"d# Zd$d% Zdzd&d'Zed(d) Zdzd*d+Zd|d,d-Zd.Zd/Zd0Zd1Zed2 Zed3 Zd4Zd5Zee e Ze !ed6 e d7 e d8 e d9 e d: e d; e j"Z#e !ed6 e d< e d8 e d9 e d: e e j"Z$d=d> Z%d?d@ Z&e !eZ'e !edA e dB Z(e !edC Z)e !edD e Z*e+dEdF Z,e !dGZ-e+d}dIdJZ.e !edK e dB Z/e !edL e dB Z0e !edM e dB Z1e !edN e dB Z2e !edO e dB Z3e !edP Z4e !edQ Z5e !edR e dS Z6e !edT Z7e !edU e dU e dV e dB Z8e !edU e dU e dW e dB Z9e !edX e dB Z:e !dYe dZ e d[ Z;e !ed\ Z<e !ed] e dB Z=e+d~d_d`Z>e !daZ?i dbdcdddedfdgdhdidjdkdYdYdBdBdldle@dbdce@dddee@dfdge@dhdie@djdke@dYdYe@dBdBe@dldlZAe+dmdn ZBe !edo e ZCe !ed9 e d9 e e ZDe !dpZEdqdr ZFddsdtZGd|dudv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   rbc                 C  s  |r
|r
d}t ||| _|| _|| _|| _d| _d| _|d ur/|d u r/t|| | _}d| _|d urI| | | _}d| _|sIt	|drI|j
| _i | _|rS|   n*d | _| _t | _d | _t | _d | _i | _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   )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_dictru   
xref_tablery   seek_end)r_   r   r   r   r   moder   r   r   r   rz   n  sH   
zPdfParser.__init__r
   c                 C  s   | S r?   r   r^   r   r   r   	__enter__  s   zPdfParser.__enter__argsrf   rS   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,   z| j   W n	 ty   Y nw d | _ d S r?   )r   r  r   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tj d S )Nr   )r   seekosSEEK_ENDr^   r   r   r   r
    ra   zPdfParser.seek_endc                 C  s   | j d d S )Ns	   %PDF-1.4
)r   r   r^   r   r   r   write_header  r   zPdfParser.write_headerc                 C  s   | j d| d  d S )Nz% 
)r   r   r   )r_   r   r   r   r   write_comment  r   zPdfParser.write_commentrZ   c                 C  sl   |    | | 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)del_rootnext_object_idr   r   r   r  rewrite_pages	write_objr   rF   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	  rW   r   r   r  r   r   r  
write_pagerA   )r_   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_noder   r   r   r     s4   







zPdfParser.rewrite_pagesc                 C  s   |r	|    || _| jr| d | j| _| j| j}t| j}| j|d}| j	d ur0| j	|d< | jr8| 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   rF   r  r   r   )r_   new_root_ref
start_xrefnum_entriesr  r   r   r   write_xref_and_trailer  s(   




z PdfParser.write_xref_and_trailerc                 O  sR   t |tr
| j| }d|vrtd|d< d|vr| j|d< | j|g|R i |S )Nr     Pager#  )rh   rV   r  r   r  r!  )r_   refobjsdict_objr   r   r   r$    s   


zPdfParser.write_pagec                 O  s   | j }|d u r| | }n| |jf| j|j< |tt|  |	dd }|d ur3t
||d< |r<|t| |D ]	}|t| q>|d ur[|d || |d |d |S )Nstreamr   s   stream
s   
endstream
s   endobj
)r   r  r   rX   r	  rW   r   r   rs   r   rF   r   )r_   r8  r9  r:  r   r;  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	  rW   r   r^   r   r   r   r    s   
zPdfParser.del_rootc                 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   r=  r>  mmapfilenoACCESS_READ
ValueError)r   r   r   r   r     s   

zPdfParser.get_buf_from_filec                 C  s   t | j| _| j| j | _|   | jd | _| jdd | _	t
| | j| _| j	d u r2t
 | _n	t
| | 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d d  | _d S )
Nr/  r2     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)rF   r   r   r   r   read_trailerr  r   rA   r  r   read_indirectr   r  rT   rh   rZ   r  r  linearize_page_treer  r  r^   r   r   r   r   $  s,   

zPdfParser.read_pdf_infoc                 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   )rZ   maxr	  r   rC  rW   )r_   r   	referencer   r   r   r  @  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   t | jd }|| jk r| j}| j| j|}t|d |}|r0|}| j| j| d }|s |s4|}|d}t|d| _	| 
|| _t | _| j| j	d d| jv ra| | jd  d S d S )N @  ztrailer end not found   r   r   xref_section_offsetr1  )rF   r   r   re_trailer_endsearchrT   startgrouprV   r  interpret_trailerr  ru   r	  read_xref_tableread_prev_trailer)r_   search_start_offsetm
last_matchtrailer_datar   r   r   rE  r  s(   



zPdfParser.read_trailerc                 C  sz   | j |d}| j| j||d  }t|d |d}tt|d|kd | |}d|v r;| |d  d S d S )NrO  rM  zprevious trailer not foundr   r   zGxref section offset in previous trailer doesn't match what was expectedr1  )	rV  re_trailer_prevrR  r   rT   rT  rV   rU  rW  )r_   rP  trailer_offsetrY  r[  r  r   r   r   rW    s   


zPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r   r   s   >>c                 C  s   i }d}	 | j ||}|s+| j||}t|o| t|kdt||d    n| |d}| 	|| \}}|||< qtd|v oMt
|d td td|v o[t
|d td |S )	Nr   Tz+name not found in trailer, remaining data: r   r0  z&/Size not in trailer or not an integerr/  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endrT   endrF   r   r   rT  	get_valuerh   rV   rZ   )r   r[  trailerr   rY  r|   r}   r   r   r   rU    s4   zPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?Fc                 C  sj   d}| j |D ]!}|dr"||dt|dd 7 }q||d7 }q|r1|dS t|S )Nr      r   rc   zutf-8)re_hashes_in_namefinditerrT  r   fromhexrG   r   )r   rawas_textr   rY  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   c              
   C  s  |dkrdS | j ||}|r| }| j||}|rtt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	 || 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||}|rc| }i }| j||}|s| j|||d d\}}|d u r|d fS | j|||d d\}	}|	||< |d u r|d fS | j||}|r| }| j||}|r[z|d}
t|
}W n ttfy/ } zd|
 d}t||d }~ww || | |  }| j|| | }t|d | }tt||}||fS t|}||fS | j||}|r| }g }| j||}|s| 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||}|rt| |d| fS | j||}|rt|d| fS | j||}|rt |d| fS | j!||}|rKt"dd |dD }t#|d dkr?|t$d t"%|&d| fS | j'||}|r]| (|| 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)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                 s  s    | ]	}|d v r|V  qdS )s   0123456789abcdefABCDEFNr   r   r   r   r   rE   g  s    z&PdfParser.get_value.<locals>.<genexpr>   0rc   zunrecognized object:     )*
re_commentr_  ra  re_indirect_def_startrT   rV   rT  rZ   rb  re_indirect_def_endre_indirect_referencere_dict_startr`  re_stream_startrA   	TypeErrorrC  rK   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   rg  rG   re_string_litget_literal_stringr   )r   r   r   expect_indirectrk  rY  rf   r   r|   r}   stream_len_str
stream_lenr   r   stream_data
hex_stringr   r   r   rb    s   
&	




zPdfParser.get_valuesF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr      r      t   	   b      f   r   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      rd     r      r      r   zunfinished literal string)r   re_lit_str_tokenrf  r   rS  rT  escaped_charsr   rV   r   ra  rK   )r   r   r   nesting_depthr   rY  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   d}| j | j|| j }t|d | }	 | j| j|}|s)t|d 	 |S d}| }t|d}t|d}t	||| D ]6}| j
| j|}t|d | }|dd	k}|szt|d}	t|d|	f}
|| jvrz|
| j|< qDq)
NFzxref section start not foundTzxref subsection start not foundr   r   zxref entry not foundrd  r  )re_xref_section_startr_  r   r   rT   ra  re_xref_subsection_startrV   rT  r   re_xref_entryr	  )r_   rP  subsection_foundrY  r   first_objectnum_objectsr&  is_freerX   	new_entryr   r   r   rV    s<   



zPdfParser.read_xref_tablec              
   C  st   | j |d  \}}t||d kd|d  d|d  d| d|  | 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  rk  )r	  rT   rb  r   r   rZ   r   )r_   r8  rk  r   rX   r}   r   r   r   rF    s&   

zPdfParser.read_indirectc                 C  sj   |d u r| j }t|d dkd g }|d D ]}| |}|d dkr)|| q|| j|d q|S )NrD  r  z%/Type of page tree node is not /Pagess   Kidsr7  )node)r  rT   rF  r   r   rG  )r_   r  r  kid
kid_objectr   r   r   rG    s   
zPdfParser.linearize_page_tree)NNNr   r   )r
   r   )r  rf   r
   rS   )r
   rS   )r
   rZ   r?   )F)Nr   )r   )IrL   rM   rN   rO   rz   r  r  r  r  r  r
  r  r  r"  r   r6  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DOTALLrQ  r\  rE  rW  re_whitespace_optionalr^  rr  r`  r   rU  re  r   rx  ry  rz  r{  r|  rv  rw  r}  r~  rq  ro  rp  rn  rs  ru  rb  r  r   r  r  r  r  r  rV  rF  rG  r   r   r   r   r   h  s   

&








	




	
	





y	



r   )r   r	   r
   r   )rP   rQ   rR   r	   r
   rS   )%
__future__r   r   r   r   r@  r  r  r   r   typingr   r   r   r   r   r   r@   rJ   r   rK   rT   rU   rZ   rs   ru   r   r   r   r	   r   	_DictBaser   r   r   r   r   r   r   r   r   <module>   s    
	
 !"#-
Z'0