U
    e                  *   @  sl  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 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+d,d-d.)Zd/d0 ZG d1d2 d2eZd3d4 ZG d5d6 d6ed7d8d9gZG d:d; d;eZG d<d= d=ZG d>d? d?ZG d@dA dAeZG dBdC dCejZG dDdE dEZG dFdG dGZdHdI ZG dJdK dKZdS )L    )annotationsNc                 C  s   t j| d S )N	utf_16_be)codecsBOM_UTF16_BEencode)s r   O/var/www/html/StaffProfile/newvenv/lib/python3.8/site-packages/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>D   s     zdecode_text.<locals>.<genexpr>)lenr   r   decodejoin)br   r   r	   decode_text@   s    rA   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	   rB   G   s   rB   c                 C  s   | st |d S r6   )rB   )	conditionerror_messager   r   r	   check_format_conditionN   s    rI   c                   @  s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )IndirectReferencec                 C  s   | j  d| j dS )N z R	object_id
generationselfr   r   r	   __str__V   s    zIndirectReference.__str__c                 C  s   |   dS Nus-ascii)rQ   r   rO   r   r   r	   	__bytes__Y   s    zIndirectReference.__bytes__c                 C  s$   |j | j ko"|j| jko"|j| jkS r6   )	__class__rM   rN   rP   otherr   r   r	   __eq__\   s
    

zIndirectReference.__eq__c                 C  s
   | |k S r6   r   rV   r   r   r	   __ne__c   s    zIndirectReference.__ne__c                 C  s   t | j| jfS r6   )hashrM   rN   rO   r   r   r	   __hash__f   s    zIndirectReference.__hash__N)rC   rD   rE   rQ   rT   rX   rY   r[   r   r   r   r	   rJ   S   s
   rJ   ZIndirectReferenceTuplerM   rN   c                   @  s   e Zd Zdd ZdS )IndirectObjectDefc                 C  s   | j  d| j dS )NrK   z objrL   rO   r   r   r	   rQ   k   s    zIndirectObjectDef.__str__N)rC   rD   rE   rQ   r   r   r   r	   r\   j   s   r\   c                   @  sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Z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_finishedrO   r   r   r	   __init__p   s    
zXrefTable.__init__c                 C  s2   | j r|| j|< n
|| j|< || jkr.| j|= d S r6   )ra   r_   r^   r`   rP   keyvaluer   r   r	   __setitem__v   s
    

zXrefTable.__setitem__c                 C  s0   z| j | W S  tk
r*   | j|  Y S X d S r6   )r_   KeyErrorr^   rP   rd   r   r   r	   __getitem__~   s    zXrefTable.__getitem__c                 C  s   || j kr0| j | d d }| j |= || j|< nV|| jkrX| j| d d }|| j|< n.|| jkrn| j| }ndt| d }t|d S )N   z
object ID z+ cannot be deleted because it doesn't exist)r_   r`   r^   str
IndexError)rP   rd   rN   msgr   r   r	   __delitem__   s    


zXrefTable.__delitem__c                 C  s   || j kp|| jkS r6   )r^   r_   rh   r   r   r	   __contains__   s    zXrefTable.__contains__c                 C  s.   t t| j t| j B t| j B S r6   )r=   setr^   keysr_   r`   rO   r   r   r	   __len__   s    zXrefTable.__len__c                 C  s*   t | j t | j  t | j B S r6   )rp   r^   rq   r`   r_   rO   r   r   r	   rq      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
rj   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)sortedrp   r_   rq   r`   tellwrite	enumerater=   poprI   rl   )rP   frq   Zdeleted_keysZ	startxrefprevindexrd   Zcontiguous_keysrM   Zthis_deleted_object_idZnext_in_linked_listr   r   r	   ru      sB     



zXrefTable.writeN)rC   rD   rE   rb   rf   ri   rn   ro   rr   rq   ru   r   r   r   r	   r]   o   s   r]   c                   @  sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zedd Z	e
edddd dD  Zdd ZdS )PdfNamec                 C  s6   t |tr|j| _nt |tr&|| _n|d| _d S rR   )
isinstancer{   namebytesr   )rP   r}   r   r   r	   rb      s
    


zPdfName.__init__c                 C  s   | j dS rR   )r}   r>   rO   r   r   r	   name_as_str   s    zPdfName.name_as_strc                 C  s    t |tr|j| jkp|| jkS r6   )r|   r{   r}   rV   r   r   r	   rX      s    zPdfName.__eq__c                 C  s
   t | jS r6   )rZ   r}   rO   r   r   r	   r[      s    zPdfName.__hash__c                 C  s   dt | j dS )NzPdfName())reprr}   rO   r   r   r	   __repr__   s    zPdfName.__repr__c                 C  s   | t |S r6   )	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)r:   cr   r   r	   	<setcomp>   s     zPdfName.<setcomp>z#%/()<>[]{}c                 C  s@   t d}| jD ](}|| jkr(|| q|d|  qt|S )N   /s   #%02X)	bytearrayr}   allowed_charsappendextendr~   )rP   resultr@   r   r   r	   rT      s    

zPdfName.__bytes__N)rC   rD   rE   rb   r   rX   r[   r   classmethodr   rp   ranger   rT   r   r   r   r	   r{      s   
r{   c                   @  s   e Zd Zdd ZdS )PdfArrayc                 C  s   dd dd | D  d S )Ns   [     c                 s  s   | ]}t |V  qd S r6   )pdf_repr)r:   xr   r   r	   r<      s     z%PdfArray.__bytes__.<locals>.<genexpr>s    ])r?   rO   r   r   r	   rT      s    zPdfArray.__bytes__N)rC   rD   rE   rT   r   r   r   r	   r      s   r   c                   @  s$   e Zd Zdd Zdd Zdd ZdS )PdfDictc                 C  s,   |dkrt j| || n|| |d< d S )Nr   rS   )collectionsUserDict__setattr__r   rc   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 )NrS   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   rg   AttributeErrorr|   r~   rA   endswith
startswithr=   inttimestrptimegmtimecalendartimegm)rP   rd   re   eZrelationshipoffsetformatr   r   r	   __getattr__   s.    



zPdfDict.__getattr__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{   )rP   outrd   re   r   r   r	   rT     s    


zPdfDict.__bytes__N)rC   rD   rE   r   r   rT   r   r   r   r	   r      s   r   c                   @  s   e Zd Zdd Zdd ZdS )	PdfBinaryc                 C  s
   || _ d S r6   )r   )rP   r   r   r   r	   rb   (  s    zPdfBinary.__init__c                 C  s   dd dd | jD  S )Ns   <%s>    c                 s  s   | ]}d | V  qdS )s   %02XNr   r:   r@   r   r   r	   r<   ,  s     z&PdfBinary.__bytes__.<locals>.<genexpr>)r?   r   rO   r   r   r	   rT   +  s    zPdfBinary.__bytes__N)rC   rD   rE   rb   rT   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 r6   )
dictionarybuf)rP   r   r   r   r   r	   rb   0  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
decompressr   r   NotImplementedError)rP   filterZexpected_lengthrm   r   r   r	   r>   4  s    zPdfStream.decodeN)rC   rD   rE   rb   r>   r   r   r   r	   r   /  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   nullrS   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))r|   r{   r   r   r   r~   r   floatrk   r   r   struct_timestrftimedictlistr   r
   replace)r   r   r   r	   r   D  s0    


r   c                    @  s  e Zd ZdZdrddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdsddZdd Zdd  Zd!d" Zed#d$ Zd%d& Zdtd'd(Zd)Zd*Zd+Zd,Zed- Zed. Zd/Zd0Zee e Ze !ed1 e d2 e d3 e d4 e d5 e d6 e j"Z#e !ed1 e d7 e d3 e d4 e d5 e e j"Z$d8d9 Z%d:d; Z&e !eZ'e !ed< e d= Z(e !ed> Z)e !ed? e Z*e+d@dA Z,e !dBZ-e+dudDdEZ.e !edF e d= Z/e !edG e d= Z0e !edH e d= Z1e !edI e d= Z2e !edJ e d= Z3e !edK Z4e !edL Z5e !edM e dN Z6e !edO Z7e !edP e dP e dQ e d= Z8e !edP e dP e dR e d= Z9e !edS e d= Z:e !dTe dU e dV Z;e !edW Z<e !edX e d= Z=e+dvdZd[Z>e !d\Z?d]d^d_d`dadbdcdddedfdTdTd=d=dgdge@d]d^e@d_d`e@dadbe@dcdde@dedfe@dTdTe@d=d=e@dgdgiZAe+dhdi ZBe !edj e ZCe !ed4 e d4 e e ZDe !dkZEdldm ZFdwdndoZGdxdpdqZHdS )yr   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   rx   start_offsetshould_close_bufshould_close_fileopenget_buf_from_filehasattrr}   cached_objectsread_pdf_infofile_size_totalfile_size_thisr   rootroot_refinfoinfo_refpage_tree_rootpages
orig_pages	pages_reflast_xref_section_offsettrailer_dictr]   
xref_tablera   seek_end)rP   r   rx   r   r   moderm   r   r   r	   rb   g  sF    
zPdfParser.__init__c                 C  s   | S r6   r   rO   r   r   r	   	__enter__  s    zPdfParser.__enter__c                 C  s   |    dS )NF)close)rP   exc_type	exc_value	tracebackr   r   r	   __exit__  s    zPdfParser.__exit__c                 C  s   |    |   d S r6   )	close_bufr   rO   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 r6   )r   r   r   rO   r   r   r	   r     s
    zPdfParser.close_bufc                 C  s2   | j r|   | jd k	r.| jr.| j  d | _d S r6   )r   r   rx   r   r   rO   r   r   r	   r     s
    
zPdfParser.closec                 C  s   | j dtj d S )Nr   )rx   seekosSEEK_ENDrO   r   r   r	   r     s    zPdfParser.seek_endc                 C  s   | j d d S )Ns	   %PDF-1.4
)rx   ru   rO   r   r   r	   write_header  s    zPdfParser.write_headerc                 C  s   | j d| d  d S )Nz% 
)rx   ru   r   )rP   r   r   r   r	   write_comment  s    zPdfParser.write_commentc                 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_idrx   rt   r   r   rewrite_pages	write_objr{   r=   r   rO   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)rv   r   r   r   rM   r   r{   r   r   r   r   
write_pager8   )rP   Zpages_tree_nodes_to_deleteiZpage_refZ	page_infoZstringified_page_inford   re   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   ru   rx   r=   r   r~   r   )rP   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  )r|   r   r   r{   r   r   )rP   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
)rx   r   rt   rN   r   rM   ru   r~   r\   rw   r=   r   )rP   r  r  r  rx   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   rM   r   rO   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filenoACCESS_READ
ValueError)rx   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)r=   r   r   r   r   read_trailerr   r   r8   r   r   read_indirectr   r   rI   r|   rJ   r   r   linearize_page_treer   r   rO   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 )Nrj   r   )rJ   maxr   rq   r  rM   )rP   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   rj   r   xref_section_offsetr  )r=   r   r   re_trailer_endsearchrI   startgroupr   r   interpret_trailerr   r]   r   read_xref_tableread_prev_trailer)rP   Zsearch_start_offsetmZ
last_matchtrailer_datar   r   r	   r  l  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 foundrj   r   zGxref section offset in previous trailer doesn't match what was expectedr  )	r)  re_trailer_prevr%  r   rI   r'  r   r(  r*  )rP   r#  Ztrailer_offsetr+  r,  r   r   r   r	   r*    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: rj   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_endrI   endr=   r   r   r'  	get_valuer|   r   rJ   )r   r,  trailerr   r+  rd   re   r   r   r	   r(    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      rj   rS   zutf-8)re_hashes_in_namefinditerr'  r   fromhexr>   r~   )r   rawZas_textr}   r+  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t|d }
W nD tttfk
rp } zd|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   )NNrj   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	   r<   b  s     z&PdfParser.get_value.<locals>.<genexpr>   0rS   zunrecognized object:     )+
re_commentr/  r1  re_indirect_def_startrI   r   r'  rJ   r2  re_indirect_def_endre_indirect_referencere_dict_startr0  re_stream_start	TypeErrorrg   r  r8   rB   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   r=   r   r7  r>   re_string_litget_literal_stringr   )r   r   r   expect_indirectr:  r+  objectr   rd   re   Z
stream_lenr   rm   Zstream_dataZ
hex_stringr   r   r	   r2    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   rj   r      r4     r      r      r   zunfinished literal string)r   re_lit_str_tokenr6  r   r&  r'  escaped_charsr   r   r~   r1  rB   )r   r   r   Znesting_depthr   r+  rm   r   r   r	   rN    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 foundTrj   r   zxref entry not foundr4  rX  )re_xref_section_startr/  r   r   rI   r1  re_xref_subsection_startr   r'  r   re_xref_entryr   )rP   r#  Zsubsection_foundr+  r   Zfirst_objectnum_objectsr  Zis_freerN   Z	new_entryr   r   r	   r)    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   rj   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )rO  r:  )r   rI   r2  r   r   rJ   r   )rP   r  r:  r   rN   re   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   rI   r  r   r   r  )rP   rd  r   kidZ
kid_objectr   r   r	   r    s    
 
zPdfParser.linearize_page_tree)NNNr   r   )N)N)F)Nr   )r   )N)IrC   rD   rE   rF   rb   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$  r-  r  r*  Zre_whitespace_optionalr.  rA  r0  r   r(  r5  r   rG  rH  rI  rJ  rK  rE  rF  rL  rM  r@  r>  r?  r=  rB  rD  r2  r^  r   r_  rN  r`  ra  rb  r)  r  r  r   r   r   r	   r   a  s  
&
	


	
	





z                


r   )
__future__r   r   r   r   r  r   rj  r   r   r
   r7   rA   r   rB   rI   
namedtuplerJ   r\   r]   r{   r   r   r   r   r   r   r   r   r   r   r   r	   <module>   s   -
\'0