o
    “jª™  ã                	   @  sH  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 dZerBd dl
mZ ejeeB ef ZnejZd{d
d„Zi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“d,d-“i d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“dNdO“¥dPdQdRdSdTdUdVdWœ¥Zd|dYdZ„ZG d[d\„ d\eƒZd}dadb„ZG dcdd„ ddeƒZG dedf„ dfeƒZG dgdh„ dheƒZG didj„ djƒZG dkdl„ dlƒZG dmdn„ dnee ƒZG dodp„ dpeƒZ G dqdr„ drƒZ!G dsdt„ dtƒZ"d~dwdx„Z#G dydz„ dzƒZ$dS )é    )ÚannotationsN)ÚAnyÚ
NamedTupleF)ÚIOÚsÚstrÚreturnÚbytesc                 C  s   t j|  d¡ S )NÚ	utf_16_be)ÚcodecsÚBOM_UTF16_BEÚencode)r   © r   úWC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\PIL/PdfParser.pyÚencode_text   ó   r   é   úé   u   Ë˜é   u   Ë‡é   u   Ë†é   u   Ë™é   u   Ë�é   u   Ë›é   u   Ëšé   u   Ëœé€   u   â€¢é�   u   â€ é‚   u   â€¡éƒ   u   â€¦é„   u   â€”é…   u   â€“é†   u   Æ’é‡   u   â�„éˆ   u   â€¹é‰   u   â€ºéŠ   u   âˆ’é‹   u   â€°éŒ   u   â€žé�   u   â€œéŽ   u   â€�é�   u   â€˜é�   u   â€™é‘   u   â€šé’   u   â„¢é“   u   ï¬�é”   u   ï¬‚é•   u   Å�é–   u   Å’é—   u   Å é˜   u   Å¸u   Å½u   Ä±u   Å‚u   Å“u   Å¡u   Å¾u   â‚¬)é™   éš   é›   éœ   é�   éž   é    Úbc                 C  sD   | d t tjƒ… tjkr| t tjƒd …  d¡S d dd„ | D ƒ¡S )Nr
   Ú c                 s  s    � | ]}t  |t|ƒ¡V  qd S ©N)ÚPDFDocEncodingÚgetÚchr)Ú.0Úbyter   r   r   Ú	<genexpr>M   s   € zdecode_text.<locals>.<genexpr>)Úlenr   r   ÚdecodeÚjoin)r<   r   r   r   Údecode_textI   s   rH   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   rI   P   s    rI   Ú	conditionÚboolÚerror_messageÚNonec                 C  s   | st |ƒ‚d S r>   )rI   )rN   rP   r   r   r   Úcheck_format_conditionW   s   ÿrR   c                   @  s   e Zd ZU ded< ded< dS )ÚIndirectReferenceTupleÚintÚ	object_idÚ
generationN)rJ   rK   rL   Ú__annotations__r   r   r   r   rS   \   s   
 rS   c                   @  s>   e Zd Zddd„Zddd„Zddd„Zddd„Zddd„ZdS )ÚIndirectReferencer   r   c                 C  ó   | j › d| j› d�S )Nú z R©rU   rV   ©Úselfr   r   r   Ú__str__b   ó   zIndirectReference.__str__r	   c                 C  s   |   ¡  d¡S ©Núus-ascii)r^   r   r\   r   r   r   Ú	__bytes__e   s   zIndirectReference.__bytes__ÚotherÚobjectrO   c                 C  s6   | j |j urdS t|tƒsJ ‚|j| jko|j| jkS )NF)Ú	__class__Ú
isinstancerX   rU   rV   ©r]   rc   r   r   r   Ú__eq__h   s   zIndirectReference.__eq__c                 C  s
   | |k S r>   r   rg   r   r   r   Ú__ne__n   ó   
zIndirectReference.__ne__rT   c                 C  s   t | j| jfƒS r>   )ÚhashrU   rV   r\   r   r   r   Ú__hash__q   r   zIndirectReference.__hash__N©r   r   ©r   r	   ©rc   rd   r   rO   ©r   rT   )rJ   rK   rL   r^   rb   rh   ri   rl   r   r   r   r   rX   a   s    



rX   c                   @  ó   e Zd Zddd„ZdS )ÚIndirectObjectDefr   r   c                 C  rY   )NrZ   z objr[   r\   r   r   r   r^   v   r_   zIndirectObjectDef.__str__Nrm   )rJ   rK   rL   r^   r   r   r   r   rr   u   ó    rr   c                   @  s\   e Zd Zddd„Zdd	d
„Zddd„Zddd„Zd dd„Zd!dd„Zd"dd„Z	d#dd„Z
dS )$Ú	XrefTabler   rQ   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   ÿÿ

zXrefTable.__init__ÚkeyrT   Úvalueútuple[int, int]c                 C  s6   | j r	|| j|< n|| j|< || jv r| j|= d S d S r>   )rx   rv   ru   rw   ©r]   rz   r{   r   r   r   Ú__setitem__…   s   

ÿzXrefTable.__setitem__c                 C  s*   z| j | W S  ty   | j|  Y S w r>   )rv   ÚKeyErrorru   ©r]   rz   r   r   r   Ú__getitem__�   s
   ÿzXrefTable.__getitem__c                 C  sˆ   || j v r| j | d d }| j |= || j|< d S || jv r.| j| d d }|| j|< d S || jv r:| j| }d S d|› d�}t|ƒ‚)Né   z
object ID z+ cannot be deleted because it doesn't exist)rv   rw   ru   Ú
IndexError)r]   rz   rV   Úmsgr   r   r   Ú__delitem__“   s   


zXrefTable.__delitem__rO   c                 C  s   || j v p	|| jv S r>   )ru   rv   r€   r   r   r   Ú__contains__¡   r_   zXrefTable.__contains__c                 C  s.   t t| j ¡ ƒt| j ¡ ƒB t| j ¡ ƒB ƒS r>   )rE   Úsetru   Úkeysrv   rw   r\   r   r   r   Ú__len__¤   s   ÿþÿzXrefTable.__len__úset[int]c                 C  s*   t | j ¡ ƒt | j ¡ ƒ t | j ¡ ƒB S r>   )r‡   ru   rˆ   rw   rv   r\   r   r   r   rˆ   «   s   þzXrefTable.keysÚfú	IO[bytes]c              	   C  sF  t t| j ¡ ƒt| j ¡ ƒB ƒ}t t| j ¡ ƒƒ}| ¡ }| d¡ |r¡d }t|ƒD ]\}}|d u s8|d |kr;|}q*|d |… }||d … } qM|}g }| d|d t|ƒf ¡ |D ]B}	|	| jv rn| d| j|	  ¡ q\| 	d¡}
t
|	|
kd|	› d|
› �ƒ z|d }W n ty‘   d}Y nw | d|| j|	 f ¡ q\|s$|S )	Ns   xref
r‚   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)Úsortedr‡   rv   rˆ   rw   ÚtellÚwriteÚ	enumeraterE   ÚpoprR   rƒ   )r]   r‹   rˆ   Zdeleted_keysZ	startxrefÚprevÚindexrz   Zcontiguous_keysrU   Zthis_deleted_object_idZnext_in_linked_listr   r   r   r�   °   sJ    


ÿþÿÿÿä zXrefTable.writeN©r   rQ   )rz   rT   r{   r|   r   rQ   )rz   rT   r   r|   )rz   rT   r   rQ   )rz   rT   r   rO   rp   )r   rŠ   )r‹   rŒ   r   rT   )rJ   rK   rL   ry   r~   r�   r…   r†   r‰   rˆ   r�   r   r   r   r   rt   z   s    







rt   c                   @  s|   e Zd ZU ded< d dd„Zd!d	d
„Zd"dd„Zd#dd„Zd!dd„Ze	d$dd„ƒZ
eeddƒƒdd„ dD ƒ Zd%dd„ZdS )&ÚPdfNamer	   ÚnameúPdfName | bytes | strr   rQ   c                 C  s:   t |tƒr|j| _d S t |tƒr|| _d S | d¡| _d S r`   )rf   r•   r–   r	   r   )r]   r–   r   r   r   ry   Û   s
   


zPdfName.__init__r   c                 C  s   | j  d¡S r`   )r–   rF   r\   r   r   r   Úname_as_strã   ó   zPdfName.name_as_strrc   rd   rO   c                 C  s    t |tƒo
|j| jkp|| jkS r>   )rf   r•   r–   rg   r   r   r   rh   æ   s   ÿþzPdfName.__eq__rT   c                 C  s
   t | jƒS r>   )rk   r–   r\   r   r   r   rl   ë   rj   zPdfName.__hash__c                 C  s   | j j› dt| jƒ› d�S )Nú(ú))re   rJ   Úreprr–   r\   r   r   r   Ú__repr__î   ó   zPdfName.__repr__Údatac                 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)rB   Úcr   r   r   Ú	<setcomp>õ   s    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   rb   ÷   s   

zPdfName.__bytes__N)r–   r—   r   rQ   rm   ro   rp   )rŸ   r	   r   r•   rn   )rJ   rK   rL   rW   ry   r˜   rh   rl   r�   Úclassmethodr£   r‡   Úranger«   rb   r   r   r   r   r•   Ø   s   
 




r•   c                   @  rq   )ÚPdfArrayr   r	   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     ó   € z%PdfArray.__bytes__.<locals>.<genexpr>s    ])rG   r\   r   r   r   rb     s   zPdfArray.__bytes__Nrn   )rJ   rK   rL   rb   r   r   r   r   r±     rs   r±   c                   @  s*   e Zd Zddd„Zdd
d„Zddd„ZdS )ÚPdfDictrz   r   r{   r   r   rQ   c                 C  s.   |dkrt j | ||¡ d S || | d¡< d S )NrŸ   ra   )ÚcollectionsÚUserDictÚ__setattr__r   r}   r   r   r   r¹     s   zPdfDict.__setattr__ústr | time.struct_timec              
   C  s  z	| |  d¡ }W n ty } zt|ƒ|‚d }~ww t|tƒr$t|ƒ}| d¡rŒ| d¡r4|dd … }d}t|ƒdkrZ|d }t	|dd… ƒd	 }t|ƒd
krZ|t	|dd
… ƒ7 }dd t|ƒd … }t
 |d t|ƒd … |¡}|dv rŒ|d	9 }|dkr‚|d9 }t
 t |¡| ¡}|S )Nra   ÚDatezD:é   ÚZé   é   é   é<   é   é   z%Y%m%d%H%M%S)ú+ú-rÄ   éÿÿÿÿ)r   r   ÚAttributeErrorrf   r	   rH   ÚendswithÚ
startswithrE   rT   ÚtimeÚstrptimeÚgmtimeÚcalendarÚtimegm)r]   rz   r{   ÚeZrelationshipÚoffsetÚformatr   r   r   Ú__getattr__  s2   
€ÿ


zPdfDict.__getattr__r	   c                 C  sn   t dƒ}|  ¡ D ]%\}}|d u rqt|ƒ}| d¡ | tt|ƒƒ¡ | d¡ | |¡ q| d¡ t|ƒS )Nó   <<ó   
r²   s   
>>)rª   Úitemsr³   r­   r	   r•   )r]   Úoutrz   r{   r   r   r   rb   (  s   


zPdfDict.__bytes__N)rz   r   r{   r   r   rQ   )rz   r   r   rº   rn   )rJ   rK   rL   r¹   rÒ   rb   r   r   r   r   r¶     s    

r¶   c                   @  s    e Zd Zddd„Zddd	„Zd
S )Ú	PdfBinaryrŸ   úlist[int] | bytesr   rQ   c                 C  s
   || _ d S r>   )rŸ   )r]   rŸ   r   r   r   ry   7  rj   zPdfBinary.__init__r	   c                 C  s   dd  dd„ | jD ƒ¡ S )Ns   <%s>ó    c                 s  s   � | ]}d | V  qdS )s   %02XNr   ©rB   r<   r   r   r   rD   ;  rµ   z&PdfBinary.__bytes__.<locals>.<genexpr>)rG   rŸ   r\   r   r   r   rb   :  rž   zPdfBinary.__bytes__N)rŸ   rØ   r   rQ   rn   )rJ   rK   rL   ry   rb   r   r   r   r   r×   6  s    
r×   c                   @  s    e Zd Zddd„Zdd	d
„ZdS )Ú	PdfStreamÚ
dictionaryr¶   Úbufr	   r   rQ   c                 C  s   || _ || _d S r>   )rÜ   rÝ   )r]   rÜ   rÝ   r   r   r   ry   ?  s   
zPdfStream.__init__c                 C  sˆ   z| j d }W n ty   | j Y S w |dkr8z| j d }W n ty-   | j d }Y nw tj| jt|ƒd�S dt|ƒ› d�}t|ƒ‚)Ns   Filters   FlateDecodes   DLó   Length)Úbufsizezstream filter z unknown/unsupported)rÜ   r   rÝ   ÚzlibÚ
decompressrT   rœ   ÚNotImplementedError)r]   ÚfilterZexpected_lengthr„   r   r   r   rF   C  s   
ÿÿzPdfStream.decodeN)rÜ   r¶   rÝ   r	   r   rQ   rn   )rJ   rK   rL   ry   rF   r   r   r   r   rÛ   >  s    
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ƒr-t| ƒ 	d¡S t | t
jƒr@dt
 d| ¡ 	d¡ d	 S t | tƒrKtt| ƒƒS t | tƒrVtt| ƒƒS t | tƒratt| ƒƒS t | tƒr~|  d
d¡} |  dd¡} |  d	d¡} d|  d	 S t| ƒS )NTs   trueFs   falses   nullra   s   (D:z%Y%m%d%H%M%SZó   )ó   \s   \\ó   (ó   \(s   \))rf   r•   r¶   r±   r×   r	   rT   Úfloatr   r   rÊ   Ústruct_timeÚstrftimeÚdictÚlistr³   r   Úreplace)r´   r   r   r   r³   S  s0   



r³   c                   @  sZ  e Zd ZdZ					d d¡dd„Zd¢dd„Zd£dd„Zd¤dd„Zd¤dd„Zd¤dd„Z	d¤dd „Z
d¤d!d"„Zd¥d$d%„Zd¦d'd(„Zd¤d)d*„Z	d§d¨d-d.„Zd©d4d5„Zdªd6d7„Zd¤d8d9„Zed«d<d=„ƒZd¤d>d?„Zd§d¬dBdC„ZdDZdEZdFZdGZedH ZedI ZdJZdKZee e Ze  !edL e dM e dN e dO e dP e dQ e j"¡Z#e  !edL e dR e dN e dO e dP e e j"¡Z$d¤dSdT„Z%g fd­dXdY„Z&e  !e¡Z'e  !edZ e d[ ¡Z(e  !ed\ ¡Z)e  !ed] e ¡Z*e+d®dadb„ƒZ,e  !dc¡Z-e+d¯d°didj„ƒZ.e  !edk e d[ ¡Z/e  !edl e d[ ¡Z0e  !edm e d[ ¡Z1e  !edn e d[ ¡Z2e  !edo e d[ ¡Z3e  !edp ¡Z4e  !edq ¡Z5e  !edr e ds ¡Z6e  !edt ¡Z7e  !edu e du e dv e d[ ¡Z8e  !edu e du e dw e d[ ¡Z9e  !edx e d[ ¡Z:e  !dye dz e d{ ¡Z;e  !ed| ¡Z<e  !ed} e d[ ¡Z=e+		~d±d²d„d…„ƒZ>e  !d†¡Z?i d‡dˆ“d‰dŠ“d‹dŒ“d�dŽ“d�d�“dydy“d[d[“d‘d‘“e@d‡ƒdˆ“e@d‰ƒdŠ“e@d‹ƒdŒ“e@d�ƒdŽ“e@d�ƒd�“e@dyƒdy“e@d[ƒd[“e@d‘ƒd‘“ZAe+d³d“d”„ƒZBe  !ed• e ¡ZCe  !edO e dO e e ¡ZDe  !d–¡ZEd´d—d˜„ZFdµd¶d™dš„ZG	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   ÚrbÚfilenameú
str | Noner‹   úIO[bytes] | NonerÝ   úbytes | bytearray | NoneÚstart_offsetrT   Úmoder   r   rQ   c                 C  s&  |r
|r
d}t |ƒ‚|| _|| _|| _|| _d| _d| _|d ur/|d u r/t||ƒ | _}d| _|d urG|  |¡| _d| _|sGt	|dƒrG|j
| _i | _|  |  |  |  | jrZ|  ¡  n+d | _| _tƒ | _d | _tƒ | _d | _tƒ | _g | _g | _d | _d | _i | _tƒ | _d| j_|r‘|  ¡  d S d S )Nz4specify buf or f or filename, but not both buf and fFTr–   r   )Ú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_dictrt   Ú
xref_tablerx   Úseek_end)r]   rï   r‹   rÝ   ró   rô   r„   r   r   r   ry   v  sP   
ÿzPdfParser.__init__c                 C  s   | S r>   r   r\   r   r   r   Ú	__enter__§  s   zPdfParser.__enter__Úargsrd   c                 G  s   |   ¡  d S r>   )Úclose)r]   r  r   r   r   Ú__exit__ª  r™   zPdfParser.__exit__c                 C  s   |   ¡  |  ¡  d S r>   )Ú	close_bufr
  r\   r   r   r   Ústart_writing­  s   zPdfParser.start_writingc                 C  s"   t | jtjƒr| j ¡  d | _d S r>   )rf   rÝ   Úmmapr  r\   r   r   r   r  ±  s   

zPdfParser.close_bufc                 C  s:   | j r|  ¡  | jd ur| jr| j ¡  d | _d S d S d S r>   )rö   r  r‹   r÷   r  r\   r   r   r   r  ¶  s   

þzPdfParser.closec                 C  s"   | j d 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_commentrX   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•   rE   r  r\   r   r   r   Úwrite_catalogÉ  s   üzPdfParser.write_catalogc                 C  sô   g }t | jƒD ]N\}}| j| }| j|j= | |tdƒ ¡ || jvr$qi }| ¡ D ]
\}}||| 	¡ < q*| j
|d< | jdi |¤Ž}t | jƒD ]\}	}
|
|krT|| j|	< qGq|D ]}|rt| j| }|j| jv rl| j|j= | dd ¡}|s\qXg | _d S )Ns   ParentÚParentr>   )r�   r  rû   r	  rU   r¬   r•   r  rÕ   r˜   r  Ú
write_pager@   )r]   Zpages_tree_nodes_to_deleteÚiZpage_refZ	page_infoZstringified_page_inforz   r{   Znew_page_refÚjZcur_page_refZpages_tree_node_refZpages_tree_noder   r   r   r  Ø  s4   




€ý

ü€
zPdfParser.rewrite_pagesÚnew_root_refúIndirectReference | Nonec                 C  s¨   | j d usJ ‚|r|  ¡  || _| jr|  d | j¡| _| j | j ¡}t| jƒ}| j|dœ}| j	d ur7| 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�   rE   r  r	   r¶   )r]   r$  Z
start_xrefZnum_entriesr  r   r   r   Úwrite_xref_and_trailerõ  s.   
þ



ÿþÿz PdfParser.write_xref_and_trailerÚrefúint | IndirectReference | NoneÚobjsr   Údict_objc                 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   )rf   rT   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r:t
|ƒ|d< |rC| t|ƒ¡ |D ]	}| t|ƒ¡ qE|d urb| d¡ | |¡ | d¡ | d¡ |S )NÚstreamZLengths   stream
s   
endstream
s   endobj
)r‹   r  rŽ   rV   r	  rU   r�   r	   rr   r‘   rE   r³   )r]   r+  r-  r.  r‹   r0  Ú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	  rU   rÿ   r\   r   r   r   r  1  s   
zPdfParser.del_rootrŒ   úbytes | mmap.mmapc                 C  sR   t | dƒr	|  ¡ S t | dƒr|  ¡ S ztj|  ¡ dtjd�W S  ty(   Y dS w )NÚ	getbufferÚgetvaluer   )ÚaccessrÙ   )rú   r3  r4  r  ÚfilenoZACCESS_READÚ
ValueError)r‹   r   r   r   rù   7  s   

ÿzPdfParser.get_buf_from_filec                 C  sB  | j d usJ ‚t| j ƒ| _| j| j | _|  ¡  t| j d¡d udƒ | jd | _	| j	d us0J ‚| j dd ¡| _
t|  | j	¡ƒ| _| j
d u rKtƒ | _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Ý   rE   rý   ró   rþ   Úread_trailerrR   r  r@   r   r  r¶   Úread_indirectrÿ   r  rf   rX   r  r  Úlinearize_page_treer  r  r\   r   r   r   rü   C  s<   ÿ

ÿÿþzPdfParser.read_pdf_inforÐ   ú
int | Nonec                 C  sV   zt t| j ¡ ƒd dƒ}W n ty   t ddƒ}Y nw |d ur)|df| j|j< |S )Nr‚   r   )rX   Úmaxr	  rˆ   r7  rU   )r]   rÐ   Ú	referencer   r   r   r  g  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ƒ |}|r9|}| j | j | ¡ d ¡}|s)|s=|}|d usCJ ‚| d¡}t| d¡ƒ| _	|  
|¡| _tƒ | _| j| j	d� d| jv rp|  | jd ¡ d S d S )Né @  ztrailer end not foundé   r‚   r¼   ©Úxref_section_offsetr(  )rÝ   rE   ró   Úre_trailer_endÚsearchrR   ÚstartÚgrouprT   r  Úinterpret_trailerr  rt   r	  Úread_xref_tableÚread_prev_trailer)r]   Zsearch_start_offsetÚmZ
last_matchÚtrailer_datar   r   r   r9  ™  s,   
þ

ÿzPdfParser.read_trailerrE  Úprocessed_offsetsú	list[int]c                 C  s¶   | j d usJ ‚| j|d�}| j | j ||d … ¡}t|d udƒ |d us'J ‚| d¡}tt| d¡ƒ|kdƒ |  |¡}d|v rY| |¡ t|d |vdƒ |  	|d |¡ d S d S )	NrD  rB  zprevious trailer not foundr‚   r¼   zGxref section offset in previous trailer doesn't match what was expectedr(  ztrailer loop found)
rÝ   rK  Úre_trailer_prevrG  rR   rI  rT   rJ  r¬   rL  )r]   rE  rO  Ztrailer_offsetrM  rN  r  r   r   r   rL  °  s(   ÿ
þ

ÿûzPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=rä   rÓ   s   >>rN  r	   údict[bytes, Any]c                 C  sà   i }d}	 | j  ||¡}|s-| j ||¡}t|d uo!| ¡ t|ƒkdt||d … ƒ ƒ qR|  | d¡¡}t	|t
ƒs<J ‚|  || ¡ ¡\}}|||< |d u rOqR|}qtd|v o]t	|d tƒdƒ td|v okt	|d tƒdƒ |S )	Nr   Tz+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_endrR   ÚendrE   rœ   r¡   rI  rf   r	   Ú	get_valuerT   rX   )r¢   rN  ÚtrailerrÐ   rM  rz   r{   Zvalue_offsetr   r   r   rJ  Ñ  s<   ÿþðþþzPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?FÚrawÚas_textrO   ústr | bytesc                 C  sj   d}| j  |¡D ]!}| d¡r"|| d¡t | d¡ d¡¡ 7 }q|| d¡7 }q|r1| d¡S t|ƒS )NrÙ   é   r‚   ra   zutf-8)Úre_hashes_in_nameÚfinditerrI  rª   ÚfromhexrF   r	   )r¢   rY  rZ  r–   rM  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Æ   rŸ   úbytes | bytearray | mmap.mmapÚexpect_indirectÚmax_nestingútuple[Any, int | None]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 pI|tt| d¡ƒt| d¡ƒƒkdƒ | j|| ¡ |d d�\}}|d u rb|d fS | j	 ||¡}t|d ud	ƒ |d usvJ ‚|| ¡ 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 ||¡}|�rn| ¡ }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 ||	¡}|rÒ| ¡ }	| j ||	¡}|�rh| d¡}|d u �s,t|tƒ�s6d|› d�}t|ƒ‚|| ¡ | ¡ | … }| j || ¡ | ¡}t|d udƒ |d u�s[J ‚| ¡ }	tt|ƒ|ƒ|	fS t|ƒ|	fS | j ||¡}|�r»| ¡ }g }| j ||¡}|}	|�sµ|	d u�s‘J ‚| j||	|d d�\}}	| |¡ |	d u �r«|d fS | j ||	¡}|�rŠ|| ¡ fS | j ||¡}|�rËd | ¡ 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�rS| t#dƒ¡ t! $| %d¡¡| ¡ fS | j& ||¡}|�rq|  '|| ¡ ¡S dt(|||d … ƒ› �}t|ƒ‚)Nr   )NNr‚   z<indirect object definition: object ID must be greater than 0r¼   z;indirect object definition: generation must be non-negativez2indirect object definition different than expected)rc  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   rD   ®  s   € ÿ
ÿz&PdfParser.get_value.<locals>.<genexpr>ó   0ra   zunrecognized object: é    ))Ú
re_commentrT  rV  Úre_indirect_def_startrR   rT   rI  rX   rW  Úre_indirect_def_endÚre_indirect_referenceÚre_dict_startrU  Úre_stream_startr@   rf   rI   Úre_stream_endrÛ   r¶   Úre_array_startÚre_array_endr¬   Úre_nullÚre_trueÚre_falserS  r•   r¡   Úre_intÚre_realrè   Úre_string_hexrª   rE   r¦   r_  rF   Úre_string_litÚget_literal_stringrœ   )r¢   rŸ   rÐ   rb  rc  rM  rd   Zobject_offsetr®   Úcurrent_offsetrz   r{   Z
stream_lenr„   Zstream_dataÚresultsZ
hex_stringr   r   r   rW  0  s  þþÿü
ÿÿÿþþ&

ÿ

ÿ
ó


ÿ

ø	ÿzPdfParser.get_valuesF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))ó   nrÔ   ó   ró   ó   tó   	ó   bó   ó   fó   rå   útuple[bytes, int]c                 C  s  d}t ƒ }| j ||¡D ]u}| ||| ¡ … ¡ | d¡r,| | j| d¡d  ¡ nQ| d¡rA| t| d¡dd … dƒ¡ n<| d¡rGn6| d¡rR| d¡ n+| d¡ra| d	¡ |d7 }n| d
¡r}|dkrtt	|ƒ| 
¡ f  S | d¡ |d8 }| 
¡ }qd}t|ƒ‚)Nr   r‚   r¼   é   r\  é   rÔ   é   ræ   é   rä   zunfinished literal string)rª   Úre_lit_str_tokenr^  r­   rH  rI  Úescaped_charsr¬   rT   r	   rV  rI   )r¢   rŸ   rÐ   Znesting_depthr®   rM  r„   r   r   r   rw  Ò  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s!J ‚| ¡ }	 | j | j |¡}|s8t|dƒ 	 |S d}| ¡ }t| d¡ƒ}t| d¡ƒ}t	||| ƒD ]>}| j
 | j |¡}t|d udƒ |d usjJ ‚| ¡ }| d¡d	k}|s‘t| d¡ƒ}	t| d¡ƒ|	f}
|| jvr‘|
| j|< qSq&)
NFzxref section start not foundTzxref subsection start not foundr‚   r¼   zxref entry not foundr\  r�  )rÝ   Úre_xref_section_startrT  ró   rR   rV  Úre_xref_subsection_startrT   rI  r°   Úre_xref_entryr	  )r]   rE  Zsubsection_foundrM  rÐ   Zfirst_objectÚnum_objectsr"  Zis_freerV   Z	new_entryr   r   r   rK  ù  sB   ÿÿñ

€ëzPdfParser.read_xref_tablec              
   C  s‚   | j |d  \}}t||d kd|d › d|d › d|› d|› �ƒ | jd us)J ‚| 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 )rb  rc  )r	  rR   rÝ   rW  ró   rX   rû   )r]   r+  rc  rÐ   rV   r{   r   r   r   r:    s(   
ÿÿþüû
zPdfParser.read_indirectÚnodeúPdfDict | Noneúlist[IndirectReference]c                 C  sn   |d ur|n| j }t|d dkdƒ g }|d D ]}|  |¡}|d dkr+| |¡ q| | j|d�¡ q|S )Nr8  r  z%/Type of page tree node is not /Pagess   Kidsr/  )rŽ  )r  rR   r:  r¬   r­   r;  )r]   rŽ  Z	page_noder  ZkidZ
kid_objectr   r   r   r;  +  s   ÿ
zPdfParser.linearize_page_tree)NNNr   rî   )rï   rð   r‹   rñ   rÝ   rò   ró   rT   rô   r   r   rQ   )r   r    )r  rd   r   rQ   r”   )r   r   r   rQ   )r   rX   r>   )r$  r%  r   rQ   )r+  r,  r-  r   r.  r   r   rX   )r+  r%  r-  r   r.  r   r   rX   )r‹   rŒ   r   r2  )rÐ   r<  r   rX   )rE  rT   rO  rP  r   rQ   )rN  r	   r   rR  )F)rY  r	   rZ  rO   r   r[  )NrÆ   )
rŸ   ra  rÐ   rT   rb  r%  rc  rT   r   rd  )rŸ   ra  rÐ   rT   r   rƒ  )rE  rT   r   rT   )rÆ   )r+  rX   rc  rT   r   r   )rŽ  r�  r   r�  )IrJ   rK   rL   rM   ry   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ÚDOTALLrF  rQ  r9  rL  Zre_whitespace_optionalrS  rk  rU  r¯   rJ  r]  r¡   rp  rq  rr  rs  rt  rn  ro  ru  rv  rj  rh  ri  rg  rl  rm  rW  rˆ  r¦   r‰  rw  rŠ  r‹  rŒ  rK  r:  r;  r   r   r   r   r    p  sÒ   ú
1








ÿ




$
ÿþýüûúùø	÷
öõóÿþýüûúùø	÷
öô
ÿ
ÿþýÿ
ÿÿþýÿÿÿþýüûúùÿ
ÿþýüûúùÿ
ÿÿÿû ÿÿþýüûúùø	÷
öõôóòñðÿþýüûÿ

!ÿr    )r   r   r   r	   )r<   r	   r   r   )rN   rO   rP   r   r   rQ   )r´   r   r   r	   )%Ú
__future__r   rÍ   r   r·   r  r  r•  rÊ   rà   Útypingr   r   ÚTYPE_CHECKINGr   r¸   r   r	   Z	_DictBaser   r?   rH   rõ   rI   rR   rS   rX   rr   rt   r•   rì   r±   r¶   r×   rÛ   r³   r    r   r   r   r   Ú<module>   sÖ    
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#×
-
^)0
