U
    ڲg5                  *   @  s  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 dddddZ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*d+d,d-d.d/d0d1d2)Zd3d4 ZG d5d6 d6eZd7dd8d9d:d;ZG d<d= d=eZG d>d? d?eZG d@dA dAeZG dBdC dCZG dDdE dEZG dFdG dGee Zerxejeeef ef ZnejZG dHdI dIeZ G dJdK dKZ!G dLdM dMZ"dNdO Z#G dPdQ dQZ$dS )R    )annotationsN)TYPE_CHECKINGAnyList
NamedTupleUnionstrbytes)sreturnc                 C  s   t j| d S )N	utf_16_be)codecsBOM_UTF16_BEencode)r
    r   1/tmp/pip-unpacked-wheel-xela2va7/PIL/PdfParser.pyencode_text   s    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  sH   | d t tj tjkr0| t tjd  dS ddd | D S 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    rI   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   rJ   H   s   rJ   boolNone)	conditionerror_messager   c                 C  s   | st |d S r>   )rJ   )rQ   rR   r   r   r   check_format_conditionO   s    rS   c                   @  s   e Zd ZU ded< ded< dS )IndirectReferenceTupleint	object_id
generationN)rK   rL   rM   __annotations__r   r   r   r   rT   T   s   
rT   c                   @  sN   e Zd ZddddZddddZdd	d
ddZdd ZddddZdS )IndirectReferencer   r   c                 C  s   | j  d| j dS )N z RrV   rW   selfr   r   r   __str__Z   s    zIndirectReference.__str__r	   c                 C  s   |   dS Nus-ascii)r_   r   r]   r   r   r   	__bytes__]   s    zIndirectReference.__bytes__objectrO   )otherr   c                 C  s6   | j |j k	rdS t|tst|j| jko4|j| jkS )NF)	__class__
isinstancerY   AssertionErrorrV   rW   r^   rd   r   r   r   __eq__`   s    zIndirectReference.__eq__c                 C  s
   | |k S r>   r   rh   r   r   r   __ne__f   s    zIndirectReference.__ne__rU   c                 C  s   t | j| jfS r>   )hashrV   rW   r]   r   r   r   __hash__i   s    zIndirectReference.__hash__N)rK   rL   rM   r_   rb   ri   rj   rl   r   r   r   r   rY   Y   s
   rY   c                   @  s   e Zd ZddddZdS )IndirectObjectDefr   rZ   c                 C  s   | j  d| j dS )Nr[   z objr\   r]   r   r   r   r_   n   s    zIndirectObjectDef.__str__N)rK   rL   rM   r_   r   r   r   r   rm   m   s   rm   c                   @  sR   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zd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  s2   | j r|| j|< n
|| j|< || jkr.| j|= d S r>   )rr   rp   ro   rq   r^   keyvaluer   r   r   __setitem__y   s
    

zXrefTable.__setitem__c                 C  s0   z| j | W S  tk
r*   | j|  Y S X d S r>   )rp   KeyErrorro   r^   ru   r   r   r   __getitem__   s    zXrefTable.__getitem__c                 C  s   || j kr0| j | d d }| j |= || j|< nR|| jkrX| j| d d }|| j|< n*|| jkrn| j| }nd| d}t|d S )N   z
object ID z+ cannot be deleted because it doesn't exist)rp   rq   ro   
IndexError)r^   ru   rW   msgr   r   r   __delitem__   s    


zXrefTable.__delitem__c                 C  s   || j kp|| jkS r>   )ro   rp   ry   r   r   r   __contains__   s    zXrefTable.__contains__rU   rZ   c                 C  s.   t t| j t| j B t| j B S r>   )rE   setro   keysrp   rq   r]   r   r   r   __len__   s    zXrefTable.__len__c                 C  s*   t | j t | j  t | j B S r>   )r   ro   r   rq   rp   r]   r   r   r   r      s    zXrefTable.keysc              	   C  sL  t t| j t| j B }t t| j }| }|d |rHd }t|D ]>\}}|d ksr|d |krx|}qV|d | }||d  } qqV|}d }|d|d t|f  |D ]}	|	| jkr|d| j|	   q|	d}
t
|	|
kd|	 d|
  z|d }W n tk
r*   d}Y nX |d|| j|	 f  qqD|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   rp   r   rq   tellwrite	enumeraterE   poprS   r|   )r^   fr   Zdeleted_keysZ	startxrefprevindexru   Zcontiguous_keysrV   Zthis_deleted_object_idZnext_in_linked_listr   r   r   r      sB     



zXrefTable.writeN)rK   rL   rM   rs   rw   rz   r~   r   r   r   r   r   r   r   r   rn   r   s   rn   c                   @  s|   e Zd Zdd ZddddZdd Zd	dd
dZddddZedd Z	e
edddd dD  ZddddZdS )PdfNamec                 C  s6   t |tr|j| _nt |tr&|| _n|d| _d S r`   )rf   r   namer	   r   )r^   r   r   r   r   rs      s
    


zPdfName.__init__r   rZ   c                 C  s   | j dS r`   )r   rF   r]   r   r   r   name_as_str   s    zPdfName.name_as_strc                 C  s    t |tr|j| jkp|| jkS r>   )rf   r   r   rh   r   r   r   ri      s    zPdfName.__eq__rU   c                 C  s
   t | jS r>   )rk   r   r]   r   r   r   rl      s    zPdfName.__hash__c                 C  s   | j j dt| j dS )N())re   rK   reprr   r]   r   r   r   __repr__   s    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)rB   cr   r   r   	<setcomp>   s     zPdfName.<setcomp>z#%/()<>[]{}r	   c                 C  s@   t d}| jD ](}|| jkr(|| q|d|  qt|S )N   /s   #%02X)	bytearrayr   allowed_charsappendextendr	   )r^   resultrH   r   r   r   rb      s    

zPdfName.__bytes__N)rK   rL   rM   rs   r   ri   rl   r   classmethodr   r   ranger   rb   r   r   r   r   r      s   
r   c                   @  s   e Zd ZddddZdS )PdfArrayr	   rZ   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      s     z%PdfArray.__bytes__.<locals>.<genexpr>s    ])rG   r]   r   r   r   rb      s    zPdfArray.__bytes__N)rK   rL   rM   rb   r   r   r   r   r      s   r   c                   @  s*   e Zd Zdd Zdd ZddddZd	S )
PdfDictc                 C  s,   |dkrt j| || n|| |d< d S )Nr   ra   )collectionsUserDict__setattr__r   rt   r   r   r   r      s    zPdfDict.__setattr__c              
   C  s,  z| | d }W n, tk
r> } zt||W 5 d }~X Y nX t|trRt|}|dr(|drt|dd  }d}t|dkr|d }t	|dd d	 }t|d
kr|t	|dd
 7 }dd t|d  }t
|d t|d  |}|dkr(|d	9 }|dkr|d9 }t
t|| }|S )Nra   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   rx   AttributeErrorrf   r	   rI   endswith
startswithrE   rU   timestrptimegmtimecalendartimegm)r^   ru   rv   eZrelationshipoffsetformatr   r   r   __getattr__  s.    



zPdfDict.__getattr__r	   rZ   c                 C  sn   t d}|  D ]J\}}|d kr"qt|}|d |tt| |d || q|d t|S )N   <<   
r   s   
>>)r   itemsr   r   r	   r   )r^   outru   rv   r   r   r   rb      s    


zPdfDict.__bytes__N)rK   rL   rM   r   r   rb   r   r   r   r   r      s   r   c                   @  s"   e Zd Zdd ZddddZdS )	PdfBinaryc                 C  s
   || _ d S r>   )r   )r^   r   r   r   r   rs   /  s    zPdfBinary.__init__r	   rZ   c                 C  s   dd dd | jD  S )Ns   <%s>    c                 s  s   | ]}d | V  qdS )s   %02XNr   rB   rH   r   r   r   rD   3  s     z&PdfBinary.__bytes__.<locals>.<genexpr>)rG   r   r]   r   r   r   rb   2  s    zPdfBinary.__bytes__N)rK   rL   rM   rs   rb   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   rs   7  s    zPdfStream.__init__c                 C  s   z| j j}W n tk
r&   | j Y S X |dkrnz| j j}W n tk
rX   | j j}Y nX tj| jt|dS dt	| j j d}t
|d S )Ns   FlateDecode)bufsizezstream filter z unknown/unsupported)r   Filterr   r   ZDLLengthzlib
decompressrU   r   NotImplementedError)r^   filterZexpected_lengthr}   r   r   r   rF   ;  s    zPdfStream.decodeN)rK   rL   rM   rs   rF   r   r   r   r   r   6  s   r   c                 C  s
  | dkrdS | dkrdS | d kr$dS t | ttttfr>t| S t | ttfrZt| 	dS t | t
jrdt
d| 	d d	 S t | trtt| S t | trtt| S t | trtt| S t | t r| d
d} | dd} | d	d} d|  d	 S t| S d S )NTs   trueFs   falses   nullra   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rf   r   r   r   r   r	   rU   floatr   r   r   struct_timestrftimedictlistr   r   replace)r   r   r   r   r   K  s0    


r   c                    @  s2  e Zd ZdZdwddZd ddd	Zd
ddddZddddZddddZddddZ	ddddZ
ddddZdd ZddddZddddZdxd d!Zd"d# Zd$d% Zddd&d'Zed(d) Zddd*d+Zdyd,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+dzdIdJ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?dbdcdddedfdgdhdidjdkdYdYdBdBdldle@dbdce@dddee@dfdge@dhdie@djdke@dYdYe@dBdBe@dldli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 k	r^|d kr^t|| | _}d| _|d k	r| | | _}d| _|st	|dr|j
| _i | _|r|   nTd | _| _t | _d | _t | _d | _i | _g | _g | _d | _d | _i | _t | _d| j_|r|   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_dictrn   
xref_tablerr   seek_end)r^   r   r   r   r   moder}   r   r   r   rs   n  sF    
zPdfParser.__init__rZ   c                 C  s   | S r>   r   r]   r   r   r   	__enter__  s    zPdfParser.__enter__rc   rP   )argsr   c                 G  s   |    d S r>   )close)r^   r   r   r   r   __exit__  s    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k
r"   Y nX d | _ d S r>   )r   r   r   r]   r   r   r   r     s
    zPdfParser.close_bufc                 C  s2   | j r|   | jd k	r.| jr.| j  d | _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     s    zPdfParser.seek_endc                 C  s   | j d d S )Ns	   %PDF-1.4
)r   r   r]   r   r   r   write_header  s    zPdfParser.write_headerc                 C  s   | j d| d  d S )Nz% 
)r   r   r   )r^   r
   r   r   r   write_comment  s    zPdfParser.write_commentrY   c                 C  sl   |    | | j | _| d| _|   | j| jtd| jd | j| jtdt	| j
| j
d | jS )Nr      Catalog)TypeZPages   Pages)r  ZCountZKids)del_rootnext_object_idr   r   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 ]\}}| j| }| j|j= ||td  || jkrHqi }| D ]\}}|||	 < qT| j
|d< | jd|}t | jD ]\}	}
|
|kr|| j|	< qq|D ]6}|r| j| }|j| jkr| j|j= |dd }qqg | _d S )Ns   ParentParent)N)r   r   r   r   rV   r   r   r   r   r   r   
write_pager@   )r^   Zpages_tree_nodes_to_deleteiZpage_refZ	page_infoZstringified_page_inforu   rv   Znew_page_refjZcur_page_refZpages_tree_node_refZpages_tree_noder   r   r   r
    s,    





zPdfParser.rewrite_pagesc                 C  s   |r|    || _| jr(| d | j| _| j| j}t| j}| j|d}| j	d k	r`| j	|d< | jrp| 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^   Znew_root_refZ
start_xrefZnum_entriesr   r   r   r   write_xref_and_trailer  s(    




z PdfParser.write_xref_and_trailerc                 O  sL   t |tr| j| }d|kr(td|d< d|kr:| j|d< | j|f||S )Nr     Pager  )rf   rU   r   r   r   r  )r^   refobjsdict_objr   r   r   r    s    


zPdfParser.write_pagec                 O  s   | j }|d kr| | }n| |jf| j|j< |tt|  |	dd }|d k	rft
||d< |rx|t| |D ]}|t| q||d k	r|d || |d |d |S )Nstreamr   s   stream
s   
endstream
s   endobj
)r   r	  r   rW   r   rV   r   r	   rm   r   rE   r   )r^   r  r  r  r   r  objr   r   r   r    s$    



zPdfParser.write_objc                 C  s.   | j d krd S | j| j j= | j| jd j= d S )Nr  )r   r   rV   r   r]   r   r   r   r    s    
zPdfParser.del_rootc                 C  sX   t | dr|  S t | dr$|  S ztj|  dtjdW S  tk
rR   Y dS X d S )N	getbuffergetvaluer   )accessr   )r   r  r  mmapfilenoZ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 krdt
 | _nt
| | j	| _td| jkd t| jd dkd td| jkd tt| jd td	 | jd | _| | j| _| | j| _| jd d  | _d S )
Nr  r     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)rE   r   r   r   r   read_trailerr   r   r@   r   r   read_indirectr   r   rS   rf   rY   r   r   linearize_page_treer   r   r]   r   r   r   r   $  s.    

 zPdfParser.read_pdf_infoc                 C  sX   zt t| j d d}W n tk
r:   t dd}Y nX |d k	rT|df| j|j< |S )Nr{   r   )rY   maxr   r   r!  rV   )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 |}|r^|}| j| j| d }q<|sf|}|d}t|d| _	| 
|| _t | _| j| j	d d| jkr| | jd  d S )N @  ztrailer end not found   r{   r   xref_section_offsetr  )rE   r   r   re_trailer_endsearchrS   startgrouprU   r   interpret_trailerr   rn   r   read_xref_tableread_prev_trailer)r^   Zsearch_start_offsetmZ
last_matchtrailer_datar   r   r   r#  r  s$    



zPdfParser.read_trailerc                 C  sv   | j |d}| j| j||d  }t|d |d}tt|d|kd | |}d|krr| |d  d S )Nr-  r+  zprevious trailer not foundr{   r   zGxref section offset in previous trailer doesn't match what was expectedr  )	r4  re_trailer_prevr0  r   rS   r2  rU   r3  r5  )r^   r.  Ztrailer_offsetr6  r7  r   r   r   r   r5    s    


zPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r   r   s   >>c                 C  s   i }d}| j ||}|sT| j||}t|o<| t|kdt||d    q| |d}| 	|| \}}|||< qtd|kot
|d td td|kot
|d td |S )Nr   z+name not found in trailer, remaining data: r{   r  z&/Size not in trailer or not an integerr  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endrS   endrE   r   r   r2  	get_valuerf   rU   rY   )r   r7  trailerr   r6  ru   rv   r   r   r   r3    s0    
zPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?Fc                 C  sn   d}| j |D ]B}|drD||dt|dd 7 }q||d7 }q|rb|dS t|S d S )Nr      r{   ra   zutf-8)re_hashes_in_namefinditerr2  r   fromhexrF   r	   )r   rawZas_textr   r6  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||}|rtt|ddkd tt|ddkd t|d kp|tt|dt|dkd | j|| |d d\}}|d kr|d fS | j	||}t|d	 || fS t| d
 | j
||}|r^tt|ddkd tt|ddkd tt|dt|d| fS | j||}|r| }i }| j||}|s | j|||d d\}}|d kr|d fS | j|||d d\}	}|	||< |d kr|d fS | j||}q| }| j||}|rz|d}
t|
}W n> ttfk
rp } zd|
 d}t||W 5 d }~X Y nX || | |  }| j|| | }t|d | }tt||}nt|}||fS | j||}|rX| }g }| j||}|sL| j|||d d\}	}||	 |d kr:|d fS | j||}q || fS | j||}|rxd | 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!||}|rt"dd |dD }t#|d dkr|t$d t"%|&d| fS | j'||}|r| (|| S dt)|||d   }t|d S )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 kr|V  qdS )s   0123456789abcdefABCDEFNr   r   r   r   r   rD   g  s     z&PdfParser.get_value.<locals>.<genexpr>   0ra   zunrecognized object:     )*
re_commentr:  r<  re_indirect_def_startrS   rU   r2  rY   r=  re_indirect_def_endre_indirect_referencere_dict_startr;  re_stream_startr@   	TypeErrorr!  rJ   re_stream_endr   r   re_array_startre_array_endr   re_nullre_truere_falser9  r   r   re_intre_realr   re_string_hexr   rE   r   rB  rF   re_string_litget_literal_stringr   )r   r   r   expect_indirectrE  r6  rc   r   ru   rv   Zstream_len_strZ
stream_lenr   r}   Zstream_dataZ
hex_stringr   r   r   r=    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 ]}||||   |drX|| j|dd   n|dr|t|ddd  d nx|drnl|dr|d nV|dr|d	 |d7 }n8|d
r|dkrt	||
 f  S |d |d8 }|
 }qd}t|d S )Nr   r{   r      r?     r      r      r   zunfinished literal string)r   re_lit_str_tokenrA  r   r1  r2  escaped_charsr   rU   r	   r<  rJ   )r   r   r   Znesting_depthr   r6  r}   r   r   r   rY    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|}|sLt|d qd}| }t|d}t|d}t	||| D ]l}| j
| j|}t|d | }|dd	k}|st|d}	t|d|	f}
|| jkr|
| j|< qq,|S )
NFzxref section start not foundzxref subsection start not foundTr{   r   zxref entry not foundr?  rb  )re_xref_section_startr:  r   r   rS   r<  re_xref_subsection_startrU   r2  r   re_xref_entryr   )r^   r.  Zsubsection_foundr6  r   Zfirst_objectnum_objectsr  Zis_freerW   Z	new_entryr   r   r   r4    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 )rZ  rE  )r   rS   r=  r   r   rY   r   )r^   r  rE  r   rW   rv   r   r   r   r$    s    
"
zPdfParser.read_indirectc                 C  sj   |d kr| j }t|d dkd g }|d D ]8}| |}|d dkrR|| q,|| j|d q,|S )Nr"  r  z%/Type of page tree node is not /Pagess   Kidsr  )node)r   rS   r$  r   r   r%  )r^   rn  r   ZkidZ
kid_objectr   r   r   r%    s    
 
zPdfParser.linearize_page_tree)NNNr   r   )N)N)F)Nr   )r   )N)IrK   rL   rM   rN   rs   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  staticmethodr   r   r	  	delimiterZdelimiter_or_ws
whitespaceZwhitespace_or_hexZwhitespace_optionalZwhitespace_mandatoryZwhitespace_optional_no_nlZnewline_onlynewlinerecompileDOTALLr/  r8  r#  r5  Zre_whitespace_optionalr9  rL  r;  r   r3  r@  r   rR  rS  rT  rU  rV  rP  rQ  rW  rX  rK  rI  rJ  rH  rM  rO  r=  rh  r   ri  rY  rj  rk  rl  r4  r$  r%  r   r   r   r   r   h  s  
&
	


	
	





y                


r   )%
__future__r   r   r   r   r  r   rs  r   r   typingr   r   r   r   r   r   r?   rI   r   rJ   rS   rT   rY   rm   rn   r   r   r   r   r	   Z	_DictBaser   r   r   r   r   r   r   r   r   <module>   s   -Z'0