a
    çÝEb‡  ã                *   @   s`  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.d/„ Z
G d0d1„ d1eƒZd2d3„ ZG d4d5„ d5e d6d7d8g¡ƒZG d9d:„ d:eƒZG d;d<„ d<ƒZG d=d>„ d>ƒZG d?d@„ d@eƒZG dAdB„ dBejƒZG dCdD„ dDƒZG dEdF„ dFƒZdGdH„ ZG dIdJ„ dJƒZdS )Ké    Nc                 C   s   t j|  d¡ S )NÚ	utf_16_be)ÚcodecsÚBOM_UTF16_BEÚencode)Ús© r   úM/home/ja/django-apps/lartica_env/lib/python3.9/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>B   ó    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   E   s   rB   c                 C   s   | st |ƒ‚d S r5   )rB   )Ú	conditionÚerror_messager   r   r   Úcheck_format_conditionL   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   d|  S )Nz%s %s Rr   ©Úselfr   r   r   Ú__str__T   s    zIndirectReference.__str__c                 C   s   |   ¡  d¡S ©Núus-ascii)rM   r   rK   r   r   r   Ú	__bytes__W   s    zIndirectReference.__bytes__c                 C   s$   |j | j u o"|j| jko"|j| jkS r5   )Ú	__class__Ú	object_idÚ
generation©rL   Úotherr   r   r   Ú__eq__Z   s
    
ÿ
ýzIndirectReference.__eq__c                 C   s
   | |k S r5   r   rT   r   r   r   Ú__ne__a   s    zIndirectReference.__ne__c                 C   s   t | j| jfƒS r5   )ÚhashrR   rS   rK   r   r   r   Ú__hash__d   s    zIndirectReference.__hash__N)rC   rD   rE   rM   rP   rV   rW   rY   r   r   r   r   rJ   Q   s
   rJ   ZIndirectReferenceTuplerR   rS   c                   @   s   e Zd Zdd„ ZdS )ÚIndirectObjectDefc                 C   s   d|  S )Nz	%s %s objr   rK   r   r   r   rM   i   s    zIndirectObjectDef.__str__N)rC   rD   rE   rM   r   r   r   r   rZ   h   s   rZ   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_finishedrK   r   r   r   Ú__init__n   s    
zXrefTable.__init__c                 C   s2   | j r|| j|< n
|| j|< || jv r.| j|= d S r5   )r_   r]   r\   r^   ©rL   ÚkeyÚvaluer   r   r   Ú__setitem__t   s
    

zXrefTable.__setitem__c                 C   s.   z| j | W S  ty(   | j|  Y S 0 d S r5   )r]   ÚKeyErrorr\   ©rL   rb   r   r   r   Ú__getitem__|   s    zXrefTable.__getitem__c                 C   s†   || j v r0| j | d d }| j |= || j|< nR|| jv rX| j| d d }|| j|< n*|| jv rn| j| }ntdt|ƒ d ƒ‚d S )Né   z
object ID z+ cannot be deleted because it doesn't exist)r]   r^   r\   Ú
IndexErrorÚstr)rL   rb   rS   r   r   r   Ú__delitem__‚   s    


ÿzXrefTable.__delitem__c                 C   s   || j v p|| jv S r5   )r\   r]   rf   r   r   r   Ú__contains__‘   s    zXrefTable.__contains__c                 C   s.   t t| j ¡ ƒt| j ¡ ƒB t| j ¡ ƒB ƒS r5   )r=   Úsetr\   Úkeysr]   r^   rK   r   r   r   Ú__len__”   s    ÿþÿzXrefTable.__len__c                 C   s*   t | j ¡ ƒt | j ¡ ƒ t | j ¡ ƒB S r5   )rm   r\   rn   r^   r]   rK   r   r   r   rn   ›   s    þzXrefTable.keysc              	   C   sJ  t t| j ¡ ƒt| j ¡ ƒB ƒ}t t| j ¡ ƒƒ}| ¡ }| d¡ |�rFd }t|ƒD ]>\}}|d u sr|d |krx|}qV|d |… }||d … } qžqV|}d }| d|d t|ƒf ¡ |D ]†}	|	| jv rà| d| j|	  ¡ q¼| 	d¡}
t
|	|
kd|	› d|
› �ƒ z|d }W n t�y(   d}Y n0 | d|| j|	 f ¡ q¼qD|S )	Ns   xref
rh   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)Úsortedrm   r]   rn   r^   ÚtellÚwriteÚ	enumerater=   ÚpoprI   ri   )rL   Úfrn   Zdeleted_keysZ	startxrefÚprevÚindexrb   Zcontiguous_keysrR   Zthis_deleted_object_idZnext_in_linked_listr   r   r   rr       sF     


ÿþ
ÿÿzXrefTable.writeN)rC   rD   rE   r`   rd   rg   rk   rl   ro   rn   rr   r   r   r   r   r[   m   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 rN   )Ú
isinstancerx   ÚnameÚbytesr   )rL   rz   r   r   r   r`   É   s
    


zPdfName.__init__c                 C   s   | j  d¡S rN   )rz   r>   rK   r   r   r   Úname_as_strÑ   s    zPdfName.name_as_strc                 C   s    t |tƒr|j| jkp|| jkS r5   )ry   rx   rz   rT   r   r   r   rV   Ô   s    ÿþzPdfName.__eq__c                 C   s
   t | jƒS r5   )rX   rz   rK   r   r   r   rY   Ù   s    zPdfName.__hash__c                 C   s   dt | jƒ› d�S )NzPdfName(ú))Úreprrz   rK   r   r   r   Ú__repr__Ü   s    zPdfName.__repr__c                 C   s   | t  |¡ƒS r5   )Ú	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)r9   Úcr   r   r   Ú	<setcomp>ã   r<   zPdfName.<setcomp>z#%/()<>[]{}c                 C   s@   t dƒ}| jD ](}|| jv r(| |¡ q| d| ¡ qt|ƒS )Nó   /s   #%02X)Ú	bytearrayrz   Úallowed_charsÚappendÚextendr{   )rL   Úresultr@   r   r   r   rP   å   s    

zPdfName.__bytes__N)rC   rD   rE   r`   r|   rV   rY   r   Úclassmethodr„   rm   ÚrangerŒ   rP   r   r   r   r   rx   È   s   
rx   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 r5   )Úpdf_repr)r9   Úxr   r   r   r;   ñ   r<   z%PdfArray.__bytes__.<locals>.<genexpr>s    ])r?   rK   r   r   r   rP   ð   s    zPdfArray.__bytes__N)rC   rD   rE   rP   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ƒ   rO   )ÚcollectionsÚUserDictÚ__setattr__r   ra   r   r   r   r™   õ   s    zPdfDict.__setattr__c              
   C   s.  z| |  d¡ }W n. ty@ } zt|ƒ|‚W Y d }~n
d }~0 0 t|tƒrTt|ƒ}| d¡�r*| d¡rv|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v �r*|d	9 }|dk�r|d9 }t
 t |¡| ¡}|S )NrO   ÚDatezD:é   ÚZé   é   é   é<   é   é   z%Y%m%d%H%M%S)ú+ú-r£   éÿÿÿÿ)r   re   ÚAttributeErrorry   r{   rA   ÚendswithÚ
startswithr=   ÚintÚtimeÚstrptimeÚgmtimeÚcalendarÚtimegm)rL   rb   rc   ÚeZrelationshipÚoffsetÚformatr   r   r   Ú__getattr__û   s.     



zPdfDict.__getattr__c                 C   sn   t dƒ}|  ¡ D ]J\}}|d u r"qt|ƒ}| d¡ | tt|ƒƒ¡ | d¡ | |¡ q| d¡ t|ƒS )Ns   <<ó   
r“   s   
>>)r‹   Úitemsr”   rŽ   r{   rx   )rL   Úoutrb   rc   r   r   r   rP     s    


zPdfDict.__bytes__N)rC   rD   rE   r™   r²   rP   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 r5   )rƒ   )rL   rƒ   r   r   r   r`   %  s    zPdfBinary.__init__c                 C   s   dd  dd„ | jD ƒ¡ S )Ns   <%s>r<   c                 s   s   | ]}d | V  qdS )s   %02XNr   ©r9   r@   r   r   r   r;   )  r<   z&PdfBinary.__bytes__.<locals>.<genexpr>)r?   rƒ   rK   r   r   r   rP   (  s    zPdfBinary.__bytes__N)rC   rD   rE   r`   rP   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 r5   )Ú
dictionaryÚbuf)rL   r¹   rº   r   r   r   r`   -  s    zPdfStream.__init__c                 C   s†   z| j j}W n ty$   | j Y S 0 |dkrjz| j j}W n tyT   | j j}Y n0 tj| jt|ƒd�S t	dt
| j jƒ› d�ƒ‚d S )Ns   FlateDecode)Úbufsizezstream filter z unknown/unsupported)r¹   ÚFilterr¦   rº   ZDLÚLengthÚzlibÚ
decompressr©   ÚNotImplementedErrorr~   )rL   ÚfilterZexpected_lengthr   r   r   r>   1  s    ÿzPdfStream.decodeN)rC   rD   rE   r`   r>   r   r   r   r   r¸   ,  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ƒrVt| ƒ d¡S t | t	ƒrnt| ƒ d¡S t | t
jƒr”dt
 d| ¡ d¡ d	 S t | tƒrªtt| ƒƒS t | tƒrÀtt| ƒƒS t | tƒrÖtt| ƒƒS t | tƒ�r|  d
d¡} |  dd¡} |  d	d¡} d|  d	 S t| ƒS d S )NTs   trueFs   falses   nullrO   s   (D:z%Y%m%d%H%M%SZó   )ó   \s   \\ó   (ó   \(s   \))ry   rx   r–   r’   r¶   r{   r©   rj   r   Úfloatrª   Ústruct_timeÚstrftimeÚdictÚlistr”   r	   Úreplace)r•   r   r   r   r”   B  s4    




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t dƒ‚|| _|| _|| _|| _d| _d| _|d urZ|d u rZt||ƒ | _}d| _|d urŽ|  |¡ | _}d| _|sŽt	|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 fFTrz   r   )ÚRuntimeErrorÚfilenamerº   ru   Ústart_offsetÚshould_close_bufÚshould_close_fileÚopenÚget_buf_from_fileÚhasattrrz   Ú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_tabler_   Úseek_end)rL   rÎ   ru   rº   rÏ   Úmoder   r   r   r`   g  sD    
zPdfParser.__init__c                 C   s   | S r5   r   rK   r   r   r   Ú	__enter__Œ  s    zPdfParser.__enter__c                 C   s   |   ¡  dS )NF)Úclose)rL   Úexc_typeÚ	exc_valueÚ	tracebackr   r   r   Ú__exit__�  s    zPdfParser.__exit__c                 C   s   |   ¡  |  ¡  d S r5   )Ú	close_bufrä   rK   r   r   r   Ústart_writing“  s    zPdfParser.start_writingc                 C   s,   z| j  ¡  W n ty    Y n0 d | _ d S r5   )rº   rç   r¦   rK   r   r   r   rì   —  s
    zPdfParser.close_bufc                 C   s2   | j r|  ¡  | jd ur.| jr.| j ¡  d | _d S r5   )rÐ   rì   ru   rÑ   rç   rK   r   r   r   rç   ž  s
    
zPdfParser.closec                 C   s   | j  dtj¡ d S )Nr   )ru   ÚseekÚosÚSEEK_ENDrK   r   r   r   rä   ¥  s    zPdfParser.seek_endc                 C   s   | j  d¡ d S )Ns	   %PDF-1.4
)ru   rr   rK   r   r   r   Úwrite_header¨  s    zPdfParser.write_headerc                 C   s   | j  d|› d� ¡ ¡ d S )Nz% Ú
)ru   rr   r   )rL   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_idru   rq   rÚ   rà   Úrewrite_pagesÚ	write_objrx   r=   rÞ   rK   r   r   r   Úwrite_catalog®  s    üzPdfParser.write_catalogc                 C   sò   g }t | jƒD ]œ\}}| j| }| j|j= | |tdƒ ¡ || jvrHqi }| ¡ D ]\}}||| 	¡ < qT| j
|d< | jdi |¤Ž}t | jƒD ]\}	}
|
|krŽ|| j|	< qŽq|D ]6}|r°| j| }|j| jv rØ| j|j= | dd ¡}q´q°g | _d S )Ns   ParentÚParent)N)rs   rß   rÕ   rã   rR   r�   rx   rÞ   r´   r|   rà   Ú
write_pager7   )rL   Zpages_tree_nodes_to_deleteÚiZpage_refZ	page_infoZstringified_page_inforb   rc   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 u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ã   rr   ru   r=   rá   r{   r–   )rL   Znew_root_refZ
start_xrefZ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ü   )ry   r©   rÞ   rx   rà   rú   )rL   Ú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rft
|ƒ|d< |rx| t|ƒ¡ |D ]}| t|ƒ¡ q||d ur¶| d¡ | |¡ | d¡ | d¡ |S )NÚstreamr½   s   stream
s   
endstream
s   endobj
)ru   rø   rq   rS   rã   rR   rr   r{   rZ   rt   r=   r”   )rL   r  r  r  ru   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ã   rR   rÙ   rK   r   r   r   r÷     s    
zPdfParser.del_rootc                 C   sV   t | dƒr|  ¡ S t | dƒr$|  ¡ S ztj|  ¡ dtjd�W S  tyP   Y dS 0 d S )NÚ	getbufferÚgetvaluer   )Úaccessr<   )rÔ   r  r  ÚmmapÚfilenoÚACCESS_READÚ
ValueError)ru   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 rdt
ƒ | _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   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Ú   r7   rÜ   r–   Úread_indirectrÙ   rÛ   rI   ry   rJ   rà   rÝ   Úlinearize_page_treerÞ   rß   rK   r   r   r   rÖ     s,    

ÿþzPdfParser.read_pdf_infoc                 C   sV   zt t| j ¡ ƒd dƒ}W n ty8   t ddƒ}Y n0 |d urR|df| j|j< |S )Nrh   r   )rJ   Úmaxrã   rn   r  rR   )rL   r°   Ú	referencer   r   r   rø   9  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v r¼|  | jd ¡ d S )Né @  ztrailer end not foundé   rh   r›   ©Úxref_section_offsetr  )r=   rº   rÏ   Úre_trailer_endÚsearchrI   ÚstartÚgroupr©   rá   Úinterpret_trailerrâ   r[   rã   Úread_xref_tableÚread_prev_trailer)rL   Zsearch_start_offsetÚmZ
last_matchÚtrailer_datar   r   r   r  k  s$    



zPdfParser.read_trailerc                 C   sv   | j |d�}| j | j||d … ¡}t|dƒ | d¡}tt| d¡ƒ|kdƒ |  |¡}d|v rr|  |d ¡ d S )Nr  r  zprevious trailer not foundrh   r›   zGxref section offset in previous trailer doesn't match what was expectedr  )	r$  Úre_trailer_prevr   rº   rI   r"  r©   r#  r%  )rL   r  Ztrailer_offsetr&  r'  râ   r   r   r   r%  €  s    ÿ

þ
zPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=rÂ   s   \<\<s   \>\>c                 C   s¾   i }d}| j  ||¡}|sT| j ||¡}t|o<| ¡ t|ƒkdt||d … ƒ ƒ q‚|  | d¡¡}|  	|| ¡ ¡\}}|||< qtd|v o˜t
|d tƒdƒ td|v o´t
|d tƒdƒ |S )Nr   z+name not found in trailer, remaining data: rh   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_valuery   r©   rJ   )r‚   r'  Útrailerr°   r&  rb   rc   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<   é   rh   rO   zutf-8)Úre_hashes_in_nameÚfinditerr"  r‹   Úfromhexr>   r{   )r‚   ÚrawZas_textrz   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 ||¡}|rètt| d¡ƒdkdƒ tt| d¡ƒdkdƒ t|d u p’|tt| d¡ƒt| d¡ƒƒkdƒ | j|| ¡ |d d�\}}|d u 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 u �r¼|d fS | j|||d d�\}	}|	||< |d u �rî|d fS | j ||¡}�qŒ| ¡ }| j ||¡}|�rÀzt|d ƒ}
W nB tttf�yn } z"td| dd ¡ ƒ|‚W Y d }~n
d }~0 0 || ¡ | ¡ |
 … }| j || ¡ |
 ¡}t|dƒ | ¡ }tt|ƒ|ƒ}nt|ƒ}||fS | j ||¡}|�rV| ¡ }g }| j ||¡}|�sJ| j|||d d�\}	}| |	¡ |d u �r8|d fS | j ||¡}�qþ|| ¡ fS | j ||¡}|�rvd | ¡ fS | j ||¡}|�r–d| ¡ fS | j ||¡}|�r¶d| ¡ 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�r†| t%dƒ¡ t# &| 'd¡¡| ¡ fS | j( ||¡}|�rÂ|  )|| ¡ ¡S tdt*|||d … ƒ ƒ‚d S )Nr   )NNrh   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   r;   a  s   z&PdfParser.get_value.<locals>.<genexpr>ó   0rO   zunrecognized object: é    )+Ú
re_commentr*  r,  Úre_indirect_def_startrI   r©   r"  rJ   r-  Úre_indirect_def_endÚre_indirect_referenceÚre_dict_startr+  Úre_stream_startÚ	TypeErrorre   r  rB   r7   Úre_stream_endr¸   r–   Úre_array_startÚre_array_endr�   Úre_nullÚre_trueÚre_falser)  rx   r�   Úre_intÚre_realrÆ   Úre_string_hexr‹   r=   r‡   r2  r>   Úre_string_litÚget_literal_stringr~   )r‚   rƒ   r°   Úexpect_indirectr5  r&  Úobjectr�   rb   rc   Z
stream_lenr¯   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¡rŽnl| d¡r¤| d¡ nV| d¡rÂ| d	¡ |d7 }n8| d
¡rú|dkrèt	|ƒ| 
¡ f  S | d¡ |d8 }| 
¡ }qtdƒ‚d S )Nr   rh   r›   é   r/  é   r³   é   rÄ   é   rÂ   zunfinished literal string)r‹   Úre_lit_str_tokenr1  rŽ   r!  r"  Úescaped_charsr�   r©   r{   r,  rB   )r‚   rƒ   r°   Znesting_depthr�   r&  r   r   r   rI  „  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|¡}|sNt|dƒ �qd}| ¡ }t| d¡ƒ}t| d¡ƒ}t	||| ƒD ]€}| j
 | j|¡}t|dƒ | ¡ }| d¡d	k}t| d¡ƒ}	|s„t| d¡ƒ|	f}
t|| jvpô| j| |
kd
ƒ |
| j|< q„q,|S )NFzxref section start not foundzxref subsection start not foundTrh   r›   zxref entry not foundr/  rS  z)xref entry duplicated (and not identical))Úre_xref_section_startr*  rº   rÏ   rI   r,  Úre_xref_subsection_startr©   r"  r‘   Úre_xref_entryrã   )rL   r  Zsubsection_foundr&  r°   Zfirst_objectÚnum_objectsrþ   Zis_freerS   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   rh   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )rJ  r5  )rã   rI   r-  rº   rÏ   rJ   rÕ   )rL   r  r5  r°   rS   rc   r   r   r   r  É  s&    
ÿÿþüû
zPdfParser.read_indirectc                 C   sj   |d u 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  )rL   r_  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   r`   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)  r<  r+  r�   r#  r0  r�   rB  rC  rD  rE  rF  r@  rA  rG  rH  r;  r9  r:  r8  r=  r?  r-  rY  r‡   rZ  rI  r[  r\  r]  r$  r  r  r   r   r   r   r€   a  sš  
%
	


ÿþýüûúùø	÷
öõóÿþýüûúùø	÷
öô
ÿþýÿ

ÿÿþýÿÿÿþýüûúùÿ
ÿþýüûúùÿ
ÿÿÿyÿð
ÿþýüûÿ
!
r€   )r­   r   r—   r  rï   re  rª   r¾   r	   r6   rA   rÍ   rB   rI   Ú
namedtuplerJ   rZ   r[   rx   rÊ   r’   r˜   r–   r¶   r¸   r”   r€   r   r   r   r   Ú<module>   s‚   ×-
ÿ['0