a
    ç´«jc”  ã                *   @  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 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ddd3œd4d5„ZG d6d7„ d7eƒZd8dd9d:œd;d<„ZG d=d>„ d>eƒZG d?d@„ d@eƒZG dAdB„ dBeƒZG dCdD„ dDƒZG dEdF„ dFƒZG dGdH„ dHee ƒZdIZe�r€ejeeef ef Z nejZ G dJdK„ dKe ƒZ!G dLdM„ dMƒZ"G dNdO„ dOƒZ#dPddQœdRdS„Z$G dTdU„ dUƒZ%dS )Vé    )ÚannotationsN)ÚIOÚAnyÚ
NamedTupleÚUnionÚstrÚbytes©ÚsÚreturnc                 C  s   t j|  d¡ S )NÚ	utf_16_be)ÚcodecsÚBOM_UTF16_BEÚencode)r
   © r   úL/var/www/html/laksyashrimp/venv/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   â‚¬))é   é   é   é   é   é   é   é   é   é€   é�   é‚   éƒ   é„   é…   é†   é‡   éˆ   é‰   éŠ   é‹   éŒ   é�   éŽ   é�   é�   é‘   é’   é“   é”   é•   é–   é—   é˜   é™   éš   é›   éœ   é�   éž   é    )Úbr   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   ó    zdecode_text.<locals>.<genexpr>)Úlenr   r   ÚdecodeÚjoin)r=   r   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   ÚboolÚNone)Ú	conditionÚerror_messager   c                 C  s   | st |ƒ‚d S r?   )rK   )rR   rS   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                   @  sV   e Zd Zddœdd„Zddœdd„Zdd	d
œdd„Zdd	d
œdd„Zddœdd„ZdS )ÚIndirectReferencer   ©r   c                 C  s   | j › d| j› d�S )Nú z R©rW   rX   ©Ú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__ÚobjectrP   ©Úotherr   c                 C  s6   | j |j urdS t|tƒsJ ‚|j| jko4|j| jkS )NF)Ú	__class__Ú
isinstancerZ   rW   rX   ©r_   rf   r   r   r   Ú__eq__`   s    zIndirectReference.__eq__c                 C  s
   | |k S r?   r   ri   r   r   r   Ú__ne__f   s    zIndirectReference.__ne__rV   c                 C  s   t | j| jfƒS r?   )ÚhashrW   rX   r^   r   r   r   Ú__hash__i   s    zIndirectReference.__hash__N)rL   rM   rN   r`   rc   rj   rk   rm   r   r   r   r   rZ   Y   s
   rZ   c                   @  s   e Zd Zddœdd„ZdS )ÚIndirectObjectDefr   r[   c                 C  s   | j › d| j› d�S )Nr\   z objr]   r^   r   r   r   r`   n   s    zIndirectObjectDef.__str__N)rL   rM   rN   r`   r   r   r   r   rn   m   s   rn   c                   @  sˆ   e Zd Zddœdd„Zddddœdd	„Zddd
œdd„Zd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d„Z
dS )Ú	XrefTablerQ   r[   c                 C  s    i | _ i | _ddi| _d| _d S )Nr   i   F)Úexisting_entriesÚnew_entriesÚdeleted_entriesÚreading_finishedr^   r   r   r   Ú__init__s   s    ÿÿ
zXrefTable.__init__rV   ztuple[int, int]©ÚkeyÚvaluer   c                 C  s2   | j r|| j|< n
|| j|< || jv r.| j|= d S r?   )rs   rq   rp   rr   ©r_   rv   rw   r   r   r   Ú__setitem__}   s
    

zXrefTable.__setitem__©rv   r   c                 C  s.   z| j | W S  ty(   | j|  Y S 0 d S r?   )rq   ÚKeyErrorrp   ©r_   rv   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d|› d�}t|ƒ‚d S )Né   z
object ID z+ cannot be deleted because it doesn't exist)rq   rr   rp   Ú
IndexError)r_   rv   rX   Úmsgr   r   r   Ú__delitem__‹   s    


zXrefTable.__delitem__rP   c                 C  s   || j v p|| jv S r?   )rp   rq   r|   r   r   r   Ú__contains__™   s    zXrefTable.__contains__c                 C  s.   t t| j ¡ ƒt| j ¡ ƒB t| j ¡ ƒB ƒS r?   )rG   Úsetrp   Úkeysrq   rr   r^   r   r   r   Ú__len__œ   s    ÿþÿzXrefTable.__len__zset[int]c                 C  s*   t | j ¡ ƒt | j ¡ ƒ t | j ¡ ƒB S r?   )rƒ   rp   r„   rr   rq   r^   r   r   r   r„   £   s    þzXrefTable.keysú	IO[bytes]©Úfr   c              	   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|}g }| 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
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ƒ   rq   r„   rr   ÚtellÚwriteÚ	enumeraterG   ÚpoprT   r   )r_   rˆ   r„   Zdeleted_keysZ	startxrefÚprevÚindexrv   Zcontiguous_keysrW   Zthis_deleted_object_idZnext_in_linked_listr   r   r   r‹   ¨   sF     


ÿþ
ÿÿzXrefTable.writeN)rL   rM   rN   rt   ry   r}   r�   r‚   r…   r„   r‹   r   r   r   r   ro   r   s   
ro   c                   @  sž   e Zd ZU ded< dddœdd„Zdd	œd
d„Zdddœdd„Zdd	œdd„Zdd	œdd„Ze	dd dœdd„ƒZ
eeddƒƒdd„ dD ƒ Zdd	œdd„Zd S )!ÚPdfNamer   ÚnamezPdfName | bytes | strrQ   )r‘   r   c                 C  s6   t |tƒr|j| _nt |tƒr&|| _n| d¡| _d S ra   )rh   r�   r‘   r   r   )r_   r‘   r   r   r   rt   Ó   s
    


zPdfName.__init__r   r[   c                 C  s   | j  d¡S ra   )r‘   rH   r^   r   r   r   Úname_as_strÛ   s    zPdfName.name_as_strrd   rP   re   c                 C  s    t |tƒr|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?   )rl   r‘   r^   r   r   r   rm   ã   s    zPdfName.__hash__c                 C  s   | j j› dt| jƒ› d�S )Nú(ú))rg   rL   Úreprr‘   r^   r   r   r   Ú__repr__æ   s    zPdfName.__repr__©Údatar   c                 C  s   | t  |¡ƒS r?   )Ú	PdfParserÚinterpret_name)Úclsr˜   r   r   r   Úfrom_pdf_streamé   s    zPdfName.from_pdf_streamé!   é   c                 C  s   h | ]}t |ƒ’qS r   )Úord)rC   Úcr   r   r   Ú	<setcomp>í   rF   zPdfName.<setcomp>z#%/()<>[]{}c                 C  s@   t dƒ}| jD ](}|| jv r(| |¡ q| d| ¡ qt|ƒS )Nó   /s   #%02X)Ú	bytearrayr‘   Úallowed_charsÚappendÚextendr   )r_   Úresultr=   r   r   r   rc   ï   s    

zPdfName.__bytes__N)rL   rM   rN   rY   rt   r’   rj   rm   r–   Úclassmethodrœ   rƒ   Úranger¤   rc   r   r   r   r   r�   Ð   s   
r�   c                   @  s   e Zd Zddœdd„ZdS )Ú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   û   rF   z%PdfArray.__bytes__.<locals>.<genexpr>s    ])rI   r^   r   r   r   rc   ú   s    zPdfArray.__bytes__N)rL   rM   rN   rc   r   r   r   r   rª   ù   s   rª   Fc                   @  s<   e Zd Zddddœdd„Zdddœd	d
„Zddœdd„ZdS )ÚPdfDictr   r   rQ   ru   c                 C  s,   |dkrt j | ||¡ n|| | d¡< d S )Nr˜   rb   )ÚcollectionsÚUserDictÚ__setattr__r   rx   r   r   r   r±     s    zPdfDict.__setattr__zstr | time.struct_timerz   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 )Nrb   ÚDatezD:é   ÚZé   é   é   é<   é   é   z%Y%m%d%H%M%S)ú+ú-r»   éÿÿÿÿ)r   r{   ÚAttributeErrorrh   r   rJ   ÚendswithÚ
startswithrG   rV   ÚtimeÚstrptimeÚgmtimeÚcalendarÚtimegm)r_   rv   rw   ÚeZrelationshipÚoffsetÚformatr   r   r   Ú__getattr__  s.     



zPdfDict.__getattr__r   r[   c                 C  sn   t dƒ}|  ¡ D ]J\}}|d u r"qt|ƒ}| d¡ | tt|ƒƒ¡ | d¡ | |¡ q| d¡ t|ƒS )Nó   <<ó   
r«   s   
>>)r£   Úitemsr¬   r¦   r   r�   )r_   Úoutrv   rw   r   r   r   rc   '  s    


zPdfDict.__bytes__N)rL   rM   rN   r±   rÉ   rc   r   r   r   r   r®     s   r®   c                   @  s*   e Zd Zdddœdd„Zddœdd	„Zd
S )Ú	PdfBinaryzlist[int] | bytesrQ   r—   c                 C  s
   || _ d S r?   )r˜   )r_   r˜   r   r   r   rt   6  s    zPdfBinary.__init__r   r[   c                 C  s   dd  dd„ | jD ƒ¡ S )Ns   <%s>rF   c                 s  s   | ]}d | V  qdS )s   %02XNr   ©rC   r=   r   r   r   rE   :  rF   z&PdfBinary.__bytes__.<locals>.<genexpr>)rI   r˜   r^   r   r   r   rc   9  s    zPdfBinary.__bytes__N)rL   rM   rN   rt   rc   r   r   r   r   rÎ   5  s   rÎ   c                   @  s,   e Zd Zddddœdd„Zddœdd	„Zd
S )Ú	PdfStreamr®   r   rQ   )Ú
dictionaryÚbufr   c                 C  s   || _ || _d S r?   )rÑ   rÒ   )r_   rÑ   rÒ   r   r   r   rt   >  s    zPdfStream.__init__r[   c                 C  sŒ   z| j d }W n ty&   | j Y S 0 |dkrpz| j d }W n tyZ   | j d }Y n0 tj| jt|ƒd�S dt|ƒ› d�}t|ƒ‚d S )Ns   Filters   FlateDecodes   DLó   Length)Úbufsizezstream filter z unknown/unsupported)rÑ   r{   rÒ   ÚzlibÚ
decompressrV   r•   ÚNotImplementedError)r_   ÚfilterZexpected_lengthr€   r   r   r   rH   B  s    zPdfStream.decodeN)rL   rM   rN   rt   rH   r   r   r   r   rÐ   =  s   rÐ   r   )r­   r   c                 C  s
  | du rdS | du rdS | d u r$dS t | ttttfƒr>t| ƒS t | ttfƒrZt| ƒ 	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   nullrb   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¬   R  s0    


r¬   c                    @  sÌ  e Zd ZdZd˜ddddd	d
dœd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
dœd d!„Zd"dœd#d$„Zd
dœd%d&„Zd™d'd
d(œd)d*„Zd+d,d,d"d-œd.d/„Zd'd,d,d"d-œd0d1„Zd
dœd2d3„Zed4d5d6œd7d8„ƒZd
dœd9d:„Zdšd;d"d<œd=d>„Zd?Zd@ZdAZdBZedC ZedD ZdEZdFZee e Ze  !edG e dH e dI e dJ e dK e dL e j"¡Z#e  !edG e dM e dI e dJ e dK e e j"¡Z$d
dœdNdO„Z%dd
dPœdQdR„Z&e  !e¡Z'e  !edS e dT ¡Z(e  !edU ¡Z)e  !edV e ¡Z*e+dWdXdYœdZd[„ƒZ,e  !d\¡Z-e+d›dWd^d_d`œdadb„ƒZ.e  !edc e dT ¡Z/e  !edd e dT ¡Z0e  !ede e dT ¡Z1e  !edf e dT ¡Z2e  !edg e dT ¡Z3e  !edh ¡Z4e  !edi ¡Z5e  !edj e dk ¡Z6e  !edl ¡Z7e  !edm e dm e dn e dT ¡Z8e  !edm e dm e do e dT ¡Z9e  !edp e dT ¡Z:e  !dqe dr e ds ¡Z;e  !edt ¡Z<e  !edu e dT ¡Z=e+dœdwdd'ddxdyœdzd{„ƒZ>e  !d|¡Z?d}d~dd€d�d‚dƒd„d…d†dqdqdTdTd‡d‡e@d}ƒd~e@dƒd€e@d�ƒd‚e@dƒƒd„e@d…ƒd†e@dqƒdqe@dTƒdTe@d‡ƒd‡iZAe+dwddˆd‰œdŠd‹„ƒZBe  !edŒ e ¡ZCe  !edJ e dJ e e ¡ZDe  !d�¡ZEdddPœdŽd�„ZFd�d"dd,d�œd‘d’„ZGdžd“d”d•œd–d—„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   Úrbz
str | NonezIO[bytes] | Nonezbytes | bytearray | NonerV   r   rQ   )Úfilenamerˆ   rÒ   Ústart_offsetÚmoder   c                 C  s$  |r|rd}t |ƒ‚|| _|| _|| _|| _d| _d| _|d ur^|d u r^t||ƒ | _}d| _|d urŽ|  |¡| _d| _|sŽt	|dƒrŽ|j
| _i | _|  |  |  |  | jr´|  ¡  nVd | _| _tƒ | _d | _tƒ | _d | _tƒ | _g | _g | _d | _d | _i | _tƒ | _d| j_|�r |  ¡  d S )Nz4specify buf or f or filename, but not both buf and fFTr‘   r   )ÚRuntimeErrorrä   rÒ   rˆ   rå   Úshould_close_bufÚshould_close_fileÚopenÚget_buf_from_fileÚhasattrr‘   Úcached_objectsÚread_pdf_infoÚfile_size_totalÚfile_size_thisr®   ÚrootÚroot_refÚinfoÚinfo_refÚpage_tree_rootÚpagesÚ
orig_pagesÚ	pages_refÚlast_xref_section_offsetÚtrailer_dictro   Ú
xref_tablers   Úseek_end)r_   rä   rˆ   rÒ   rå   ræ   r€   r   r   r   rt   u  sN    
zPdfParser.__init__r[   c                 C  s   | S r?   r   r^   r   r   r   Ú	__enter__¦  s    zPdfParser.__enter__rd   )Ú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"   t | jtjƒr| j ¡  d | _d S r?   )rh   rÒ   Úmmaprÿ   r^   r   r   r   r  °  s    
zPdfParser.close_bufc                 C  s2   | j r|  ¡  | jd u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 usJ ‚| j  dtj¡ d S )Nr   )rˆ   ÚseekÚosÚSEEK_ENDr^   r   r   r   rü   ¼  s    zPdfParser.seek_endc                 C  s   | j d usJ ‚| j  d¡ d S )Ns	   %PDF-1.4
)rˆ   r‹   r^   r   r   r   Úwrite_headerÀ  s    zPdfParser.write_headerr	   c                 C  s*   | j d usJ ‚| j  d|› d� ¡ ¡ d S )Nz% Ú
)rˆ   r‹   r   )r_   r
   r   r   r   Úwrite_commentÄ  s    zPdfParser.write_commentrZ   c                 C  sz   | j d usJ ‚|  ¡  |  | j  ¡ ¡| _|  d¡| _|  ¡  | j| jtdƒ| jd� | j| jtdƒt	| j
ƒ| j
d� | jS )Nr   ó   Catalog)ÚTypeZPagesó   Pages)r  ZCountZKids)rˆ   Údel_rootÚnext_object_idrŠ   rò   rø   Úrewrite_pagesÚ	write_objr�   rG   rö   r^   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)rŒ   r÷   rí   rû   rW   r¥   r�   rö   rÌ   r’   rø   Ú
write_pagerA   )r_   Zpages_tree_nodes_to_deleteÚiZpage_refZ	page_infoZstringified_page_inforv   rw   Znew_page_refÚjZcur_page_refZpages_tree_node_refZpages_tree_noder   r   r   r  ×  s,    





zPdfParser.rewrite_pageszIndirectReference | None)Únew_root_refr   c                 C  s¨   | j d usJ ‚|r |  ¡  || _| jr6|  d | j¡| _| j | j ¡}t| jƒ}| j|dœ}| j	d urn| j	|d< | jr~| j|d< || _	| j  dt
t|ƒƒ d|  ¡ d S )N)ó   Rootó   Sizeó   Prevó   Infos   trailer
s   
startxref
%d
%%%%EOF)rˆ   r  rò   ró   r  rô   rû   r‹   rG   rù   r   r®   )r_   r  Z
start_xrefZnum_entriesrú   r   r   r   Úwrite_xref_and_trailerô  s.    
þ



ÿþÿz PdfParser.write_xref_and_trailerzint | IndirectReference | Noner   )ÚrefÚobjsÚdict_objr   c                 O  sV   t |tƒr| j| n|}d|vr,tdƒ|d< d|vr>| j|d< | j|g|¢R i |¤ŽS )Nr  ó   Pager  )rh   rV   rö   r�   rø   r  )r_   r  r  r  Zobj_refr   r   r   r    s    
zPdfParser.write_pagec                 O  sÒ   | j d usJ ‚| j }|d u r,|  | ¡ ¡}n| ¡ |jf| j|j< | tt|Ž ƒ¡ | 	dd ¡}|d urtt
|ƒ|d< |r†| t|ƒ¡ |D ]}| t|ƒ¡ qŠ|d urÄ| d¡ | |¡ | d¡ | d¡ |S )NÚstreamZLengths   stream
s   
endstream
s   endobj
)rˆ   r  rŠ   rX   rû   rW   r‹   r   rn   r�   rG   r¬   )r_   r  r  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  0  s    
zPdfParser.del_rootr†   zbytes | mmap.mmapr‡   c                 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   )ÚaccessrF   )rì   r"  r#  r  ÚfilenoÚACCESS_READÚ
ValueError)rˆ   r   r   r   rë   6  s    

zPdfParser.get_buf_from_filec                 C  sD  | j d usJ ‚t| j ƒ| _| j| j | _|  ¡  t| j d¡d udƒ | jd | _	| j	d us`J ‚| j dd ¡| _
t|  | j	¡ƒ| _| j
d u r–tƒ | _nt|  | j
¡ƒ| _td| jv dƒ t| jd dkdƒ t| j d¡d ud	ƒ tt| jd tƒd
ƒ | jd | _| jd u�sJ ‚|  | j¡| _|  | j¡| _| jd d … | _d S )Nr  zRoot is missingr  ó   Typez/Type missing in Rootr
  z/Type in Root is not /Catalogr  z/Pages missing in Rootz+/Pages in Root is not an indirect reference)rÒ   rG   rï   rå   rð   Úread_trailerrT   rú   rA   rò   rô   r®   Úread_indirectrñ   ró   rh   rZ   rø   rõ   Úlinearize_page_treerö   r÷   r^   r   r   r   rî   B  s<    ÿ

ÿÿþzPdfParser.read_pdf_infoz
int | None)rÇ   r   c                 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 )Nr~   r   )rZ   Úmaxrû   r„   r'  rW   )r_   rÇ   Ú	referencer   r   r   r  f  s    zPdfParser.next_object_ids   [][()<>{}/%]s$   [][()<>{}/%\000\011\012\014\015\040]s   [\000\011\012\014\015\040]s#   [\000\011\012\014\015\0400-9a-fA-F]ó   *ó   +s   [\000\011\014\040]*s   [\r\n]+s   trailers   <<(.*>>)s	   startxrefs   ([0-9]+)s   %%EOFó   $s	   <<(.*?>>)c                 C  sÞ   | j d usJ ‚t| j ƒd }|| jk r,| j}| j | j |¡}t|d udƒ |}|rp|}| j | j | ¡ d ¡}qN|sx|}|d us„J ‚| d¡}t| d¡ƒ| _	|  
|¡| _tƒ | _| j| j	d� d| jv rÚ|  | jd ¡ d S )Né @  ztrailer end not foundé   r~   r³   ©Úxref_section_offsetr  )rÒ   rG   rå   Úre_trailer_endÚsearchrT   ÚstartÚgrouprV   rù   Úinterpret_trailerrú   ro   rû   Úread_xref_tableÚread_prev_trailer)r_   Zsearch_start_offsetÚmZ
last_matchÚtrailer_datar   r   r   r)  ˜  s(    


zPdfParser.read_trailer)r4  r   c                 C  s”   | j d usJ ‚| j|d�}| j | j ||d … ¡}t|d udƒ |d usNJ ‚| d¡}tt| d¡ƒ|kdƒ |  |¡}d|v r�|  |d ¡ d S )Nr3  r1  zprevious trailer not foundr~   r³   zGxref section offset in previous trailer doesn't match what was expectedr  )	rÒ   r:  Úre_trailer_prevr6  rT   r8  rV   r9  r;  )r_   r4  Ztrailer_offsetr<  r=  rú   r   r   r   r;  ¯  s    ÿ
þ
zPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=rÙ   rÊ   s   >>r   zdict[bytes, Any])r=  r   c                 C  sÞ   i }d}| j  ||¡}|sX| j ||¡}t|d uo@| ¡ t|ƒkdt||d … ƒ ƒ q¢|  | d¡¡}t	|t
ƒsvJ ‚|  || ¡ ¡\}}|||< |d u rœq¢|}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: 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_endrT   ÚendrG   r•   rš   r8  rh   r   Ú	get_valuerV   rZ   )r›   r=  ÚtrailerrÇ   r<  rv   rw   Zvalue_offsetr   r   r   r9  Ê  s8    ÿþþþzPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?FrP   zstr | bytes)ÚrawÚas_textr   c                 C  sn   d}| j  |¡D ]B}| d¡rD|| d¡t | d¡ d¡¡ 7 }q|| d¡7 }q|rb| d¡S t|ƒS d S )NrF   é   r~   rb   zutf-8)Úre_hashes_in_nameÚfinditerr8  r£   ÚfromhexrH   r   )r›   rE  rF  r‘   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½   zbytes | bytearray | mmap.mmapztuple[Any, int | None])r˜   rÇ   Úexpect_indirectÚmax_nestingr   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 ud	ƒ |d usìJ ‚|| ¡ fS t| d
ƒ | j
 ||¡}|�rntt| d¡ƒdkdƒ tt| d¡ƒdkdƒ tt| d¡ƒt| d¡ƒƒ| ¡ fS | j ||¡}|�râ| ¡ }i }| j ||¡}|}	|�s"|	d u�s´J ‚| j||	|d d�\}
}	|	d u �rÞ|d fS | j||	|d d�\}}	|||
< |	d u �r|d fS | j ||	¡}�q | ¡ }	| j ||	¡}|�rÖ| d¡}|d u �s^t|tƒ�srd|› d�}t|ƒ‚|| ¡ | ¡ | … }| j || ¡ | ¡}t|d udƒ |d u�s¼J ‚| ¡ }	tt|ƒ|ƒ|	fS t|ƒ|	fS | j ||¡}|�rz| ¡ }g }| j ||¡}|}	|�sn|	d u�s(J ‚| j||	|d d�\}}	| |¡ |	d u �r\|d fS | j ||	¡}�q|| ¡ fS | j ||¡}|�ršd | ¡ fS | j ||¡}|�rºd| ¡ fS | j ||¡}|�rÚd| ¡ fS | j ||¡}|�r
t|  | d¡¡ƒ| ¡ fS | j ||¡}|�r4t| 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 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)rM  z(indirect object definition end not foundz$indirect object definition not foundz;indirect object reference: object ID must be greater than 0z:indirect object reference: generation must be non-negativerÓ   z&bad or missing Length in stream dict (r”   zstream end not foundTFc                 s  s   | ]}|d v r|V  qdS )s   0123456789abcdefABCDEFNr   rÏ   r   r   r   rE   §  s   z&PdfParser.get_value.<locals>.<genexpr>ó   0rb   zunrecognized object: é    ))Ú
re_commentr@  rB  Úre_indirect_def_startrT   rV   r8  rZ   rC  Úre_indirect_def_endÚre_indirect_referenceÚre_dict_startrA  Úre_stream_startrA   rh   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£   rG   rŸ   rJ  rH   Úre_string_litÚget_literal_stringr•   )r›   r˜   rÇ   rL  rM  r<  rd   Zobject_offsetr§   Úcurrent_offsetrv   rw   Z
stream_lenr€   Zstream_dataÚresultsZ
hex_stringr   r   r   rC  )  s    þþÿüÿ
ÿÿþþ&
ÿ


ÿ



ÿ


ÿzPdfParser.get_valuesF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))ó   nrË   ó   ró   ó   tó   	ó   bó   ó   fó   rÚ   ztuple[bytes, int])r˜   rÇ   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d}t|ƒ‚d S )Nr   r~   r³   é   rG  é   rË   é   rÛ   é   rÙ   zunfinished literal string)r£   Úre_lit_str_tokenrI  r¦   r7  r8  Úescaped_charsr¥   rV   r   rB  rK   )r›   r˜   rÇ   Znesting_depthr§   r<  r€   r   r   r   r`  Ë  s.    

 







zPdfParser.get_literal_strings   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c                 C  s&  | j d usJ ‚d}| j | j || j ¡}t|d udƒ |d usBJ ‚| ¡ }| j | j |¡}|slt|dƒ �q"d}| ¡ }t| d¡ƒ}t| d¡ƒ}t	||| ƒD ]|}| j
 | j |¡}t|d udƒ |d usÐJ ‚| ¡ }| d¡d	k}|s¢t| d¡ƒ}	t| d¡ƒ|	f}
|| jvr¢|
| j|< q¢qJ|S )
NFzxref section start not foundzxref subsection start not foundTr~   r³   zxref entry not foundrG  rj  )rÒ   Úre_xref_section_startr@  rå   rT   rB  Úre_xref_subsection_startrV   r8  r©   Úre_xref_entryrû   )r_   r4  Zsubsection_foundr<  rÇ   Zfirst_objectÚnum_objectsr  Zis_freerX   Z	new_entryr   r   r   r:  ò  s<    ÿÿ
zPdfParser.read_xref_table)r  rM  r   c              
   C  s‚   | j |d  \}}t||d kd|d › d|d › d|› d|› �ƒ | jd usRJ ‚| 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 )rL  rM  )rû   rT   rÒ   rC  rå   rZ   rí   )r_   r  rM  rÇ   rX   rw   r   r   r   r*    s(    
ÿÿþüû
zPdfParser.read_indirectzPdfDict | Nonezlist[IndirectReference])Únoder   c                 C  sn   |d ur|n| j }t|d dkdƒ g }|d D ]8}|  |¡}|d dkrV| |¡ q0| | j|d�¡ q0|S )Nr(  r  z%/Type of page tree node is not /Pagess   Kidsr  )rv  )rõ   rT   r*  r¥   r¦   r+  )r_   rv  Z	page_noderö   ÚkidZ
kid_objectr   r   r   r+  $  s    ÿ
zPdfParser.linearize_page_tree)NNNr   rã   )N)N)F)Nr½   )r½   )N)IrL   rM   rN   rO   rt   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ÚDOTALLr5  r>  r)  r;  Zre_whitespace_optionalr?  rT  rA  r¨   r9  rH  rš   rY  rZ  r[  r\  r]  rW  rX  r^  r_  rS  rQ  rR  rP  rU  rV  rC  rp  rŸ   rq  r`  rr  rs  rt  r:  r*  r+  r   r   r   r   r™   o  s®       ú1 ÿ
$
ÿþýüûúùø	÷
öõóÿþýüûúùø	÷
öô
ÿþýÿ
ÿÿþýÿÿÿþýüûúùÿ
ÿþýüûúùÿ
ÿÿÿ  û ÿðÿþýüûÿ
! ÿr™   )&Ú
__future__r   rÄ   r   r¯   r  r  r|  rÁ   rÕ   Útypingr   r   r   r   r   r@   rJ   rç   rK   rT   rU   rZ   rn   ro   r�   rá   rª   ÚTYPE_CHECKINGr°   r   r   Z	_DictBaser®   rÎ   rÐ   r¬   r™   r   r   r   r   Ú<module>   sŒ   ×-^)0