o
    ë6Wj—  ã                	   @  sT  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dlmZ dZerHd 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 d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“¥dRdSdTdUdVdWdXdYœ¥Zd~d[d\„ZG d]d^„ d^eƒZddcdd„ZG dedf„ dfeƒZG dgdh„ dheƒZG didj„ djeƒZG dkdl„ dlƒZG dmdn„ dnƒZG dodp„ dpe e ƒZ!G dqdr„ dreƒZ"G dsdt„ dtƒZ#G dudv„ dvƒZ$d€dydz„Z%G d{d|„ d|ƒZ&dS )�é    )ÚannotationsN)ÚAnyÚ
NamedTupleé   )Ú	ImageFileF)ÚIOÚsÚstrÚreturnÚbytesc                 C  s   t j|  d¡ S )NÚ	utf_16_be)ÚcodecsÚBOM_UTF16_BEÚencode)r   © r   ú\/home/esfera/Documents/content_generation/venv/lib/python3.10/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>O   s   € zdecode_text.<locals>.<genexpr>)Úlenr   r   ÚdecodeÚjoin)r>   r   r   r   Údecode_textK   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   R   s    rK   Ú	conditionÚboolÚerror_messageÚNonec                 C  s   | st |ƒ‚d S r@   )rK   )rP   rR   r   r   r   Úcheck_format_conditionY   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   ^   s   
 rU   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©rW   rX   ©Úselfr   r   r   Ú__str__d   ó   zIndirectReference.__str__r   c                 C  s   |   ¡  d¡S ©Núus-ascii)r`   r   r^   r   r   r   Ú	__bytes__g   s   zIndirectReference.__bytes__ÚotherÚobjectrQ   c                 C  s6   | j |j urdS t|tƒsJ ‚|j| jko|j| jkS )NF)Ú	__class__Ú
isinstancerZ   rW   rX   ©r_   re   r   r   r   Ú__eq__j   s   zIndirectReference.__eq__c                 C  s
   | |k S r@   r   ri   r   r   r   Ú__ne__p   ó   
zIndirectReference.__ne__rV   c                 C  s   t | j| jfƒS r@   )ÚhashrW   rX   r^   r   r   r   Ú__hash__s   r   zIndirectReference.__hash__N©r
   r	   ©r
   r   ©re   rf   r
   rQ   ©r
   rV   )rL   rM   rN   r`   rd   rj   rk   rn   r   r   r   r   rZ   c   s    



rZ   c                   @  ó   e Zd Zddd„ZdS )ÚIndirectObjectDefr
   r	   c                 C  r[   )Nr\   z objr]   r^   r   r   r   r`   x   ra   zIndirectObjectDef.__str__Nro   )rL   rM   rN   r`   r   r   r   r   rt   w   ó    rt   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
   rS   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__ÚkeyrV   Úvalueútuple[int, int]c                 C  s6   | j r	|| j|< n|| j|< || jv r| j|= d S d S r@   )rz   rx   rw   ry   ©r_   r|   r}   r   r   r   Ú__setitem__‡   s   

ÿzXrefTable.__setitem__c                 C  s*   z| j | W S  ty   | j|  Y S w r@   )rx   ÚKeyErrorrw   ©r_   r|   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|ƒ‚)Nr   z
object ID z+ cannot be deleted because it doesn't exist)rx   ry   rw   Ú
IndexError)r_   r|   rX   Úmsgr   r   r   Ú__delitem__•   s   


zXrefTable.__delitem__rQ   c                 C  s   || j v p	|| jv S r@   )rw   rx   r‚   r   r   r   Ú__contains__£   ra   zXrefTable.__contains__c                 C  s.   t t| j ¡ ƒt| j ¡ ƒB t| j ¡ ƒB ƒS r@   )rG   Úsetrw   Úkeysrx   ry   r^   r   r   r   Ú__len__¦   s   ÿþÿzXrefTable.__len__úset[int]c                 C  s*   t | j ¡ ƒt | j ¡ ƒ t | j ¡ ƒB S r@   )rˆ   rw   r‰   ry   rx   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 … } n|}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ˆ   rx   r‰   ry   ÚtellÚwriteÚ	enumeraterG   ÚpoprT   r„   )r_   rŒ   r‰   Údeleted_keysÚ	startxrefÚprevÚindexr|   Úcontiguous_keysrW   Úthis_deleted_object_idÚnext_in_linked_listr   r   r   r�   ²   sJ    


ÿþÿÿÿä zXrefTable.writeN©r
   rS   )r|   rV   r}   r~   r
   rS   )r|   rV   r
   r~   )r|   rV   r
   rS   )r|   rV   r
   rQ   rr   )r
   r‹   )rŒ   r�   r
   rV   )rL   rM   rN   r{   r€   rƒ   r†   r‡   rŠ   r‰   r�   r   r   r   r   rv   |   s    







rv   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
   rS   c                 C  s:   t |tƒr|j| _d S t |tƒr|| _d S | d¡| _d S rb   )rh   r›   rœ   r   r   )r_   rœ   r   r   r   r{   Ý   s
   


zPdfName.__init__r	   c                 C  s   | j  d¡S rb   )rœ   rH   r^   r   r   r   Úname_as_strå   ó   zPdfName.name_as_strre   rf   rQ   c                 C  s    t |tƒo
|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@   )rm   rœ   r^   r   r   r   rn   í   rl   zPdfName.__hash__c                 C  s   | j j› dt| jƒ› d�S )Nú(ú))rg   rL   Ú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)rD   Ú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   rd   ù   s   

zPdfName.__bytes__N)rœ   r�   r
   rS   ro   rq   rr   )r¥   r   r
   r›   rp   )rL   rM   rN   rY   r{   rž   rj   rn   r£   Úclassmethodr©   rˆ   Úranger±   rd   r   r   r   r   r›   Ú   s   
 




r›   c                   @  rs   )ÚPdfArrayr
   r   c                 C  s   dd  dd„ | D ƒ¡ d S )Ns   [ ó    c                 s  s   � | ]}t |ƒV  qd S r@   )Úpdf_repr)rD   Úxr   r   r   rF     ó   € z%PdfArray.__bytes__.<locals>.<genexpr>s    ])rI   r^   r   r   r   rd     s   zPdfArray.__bytes__Nrp   )rL   rM   rN   rd   r   r   r   r   r·     ru   r·   c                   @  s*   e Zd Zddd„Zdd
d„Zddd„ZdS )ÚPdfDictr|   r	   r}   r   r
   rS   c                 C  s.   |dkrt j | ||¡ d S || | d¡< d S )Nr¥   rc   )Ú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 )Nrc   Ú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_   r|   r}   ÚeÚ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_   Úoutr|   r}   r   r   r   rd   *  s   


zPdfDict.__bytes__N)r|   r	   r}   r   r
   rS   )r|   r	   r
   rÀ   rp   )rL   rM   rN   r¿   rÙ   rd   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
   rS   c                 C  s
   || _ d S r@   )r¥   )r_   r¥   r   r   r   r{   9  rl   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   ©rD   r>   r   r   r   rF   =  r»   z&PdfBinary.__bytes__.<locals>.<genexpr>)rI   r¥   r^   r   r   r   rd   <  r¤   zPdfBinary.__bytes__N)r¥   rß   r
   rS   rp   )rL   rM   rN   r{   rd   r   r   r   r   rÞ   8  s    
rÞ   c                   @  s&   e Zd Zddd„Zejfddd„ZdS )Ú	PdfStreamÚ
dictionaryr¼   Úbufr   r
   rS   c                 C  s   || _ || _d S r@   )rã   rä   )r_   rã   rä   r   r   r   r{   A  s   
zPdfStream.__init__Ú
max_lengthrV   c                 C  st   z| j d }W n ty   | j Y S w |dkr.t ¡ }| | j|¡}|jr,d}t|ƒ‚|S dt|ƒ› d�}t	|ƒ‚)Ns   Filters   FlateDecodezDecompressed data too largezstream filter z unknown/unsupported)
rã   r�   rä   ÚzlibÚdecompressobjÚ
decompressÚunconsumed_tailÚ
ValueErrorr¢   ÚNotImplementedError)r_   rå   ÚfilterÚdobjÚ	plaintextr…   r   r   r   rH   E  s   
ÿzPdfStream.decodeN)rã   r¼   rä   r   r
   rS   )rå   rV   r
   r   )rL   rM   rN   r{   r   Ú	SAFEBLOCKrH   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   nullrc   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¹   V  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%	d§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_offsetrV   Úmoder	   r
   rS   c                 C  sB  |r
|r
d}t |ƒ‚|| _|| _|| _|| _d| _d| _|d ur/|d u r/t||ƒ | _}d| _|d urG|  |¡| _d| _|sGt	|dƒrG|j
| _i | _|  |  |  |  | jrhz|  ¡  W n7 tyg   |  ¡  ‚ w 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_inforK   ÚcloseÚ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_dictrv   Ú
xref_tablerz   Úseek_end)r_   rû   rŒ   rä   rÿ   r   r…   r   r   r   r{   y  sZ   þÿzPdfParser.__init__c                 C  s   | S r@   r   r^   r   r   r   Ú	__enter__®  s   zPdfParser.__enter__Úargsrf   c                 G  s   |   ¡  d S r@   )r	  )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ƒr| j ¡  nt | jtjƒr| j ¡  d | _d S r@   )rh   rä   Ú
memoryviewÚreleaseÚ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_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)ÚTypeÚPagesó   Pages)r'  ÚCountÚ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 ]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  rW   r²   r›   r  rÜ   rž   r  Ú
write_pagerB   )r_   Úpages_tree_nodes_to_deleteÚiÚpage_refÚ	page_infoÚstringified_page_infor|   r}   Únew_page_refÚjÚcur_page_refÚpages_tree_node_refÚ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�   rG   r  r   r¼   )r_   r=  Ú
start_xrefÚ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'  ó   Pager1  )rh   rV   r  r›   r  r/  )r_   rF  rH  rI  Úobj_refr   r   r   r2    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ÚstreamÚLengths   stream
s   
endstream
s   endobj
)rŒ   r-  r�   rX   r  rW   r�   r   rt   r’   rG   r¹   )r_   rF  rH  rI  rŒ   rL  Ú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,  :  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  rP  rQ  r  ÚfilenoÚACCESS_READrê   )rŒ   r   r   r   r  @  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 missingrB  ó   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  rB   r  r  r¼   Úread_indirectr  r  rh   rZ   r  r  Úlinearize_page_treer  r  r^   r   r   r   r  L  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   )rZ   Úmaxr  r‰   rê   rW   )r_   r×   Ú	referencer   r   r   r-  p  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_offsetrA  )rä   rG   rÿ   Úre_trailer_endÚsearchrT   ÚstartÚgrouprV   r  Úinterpret_trailerr  rv   r  Úread_xref_tableÚread_prev_trailer)r_   Úsearch_start_offsetÚmÚ
last_matchÚtrailer_datar   r   r   rV  ¢  s,   
þ

ÿzPdfParser.read_trailerrb  Úprocessed_offsetsúlist[int] | Nonec                 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 r_|d u rGg }| |¡ t|d |vdƒ |  	|d |¡ d S d S )	Nra  r_  zprevious trailer not foundr   rÂ   zGxref section offset in previous trailer doesn't match what was expectedrA  ztrailer loop found)
rä   rh  Úre_trailer_prevrd  rT   rf  rV   rg  r²   ri  )r_   rb  rn  Útrailer_offsetrk  rm  r  r   r   r   ri  ¹  s,   ÿ
þ

ÿùzPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=rð   rÚ   s   >>rm  r   údict[bytes, Any]c                 C  sà   i }d}	 | j  ||¡}|s-| j ||¡}t|d uo!| ¡ t|ƒkdt||d … ƒ ƒ n%|  | d¡¡}t	|t
ƒs<J ‚|  || ¡ ¡\}}|||< |d u rOn|}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_endrT   ÚendrG   r¢   r§   rf  rh   r   Ú	get_valuerV   rZ   )r¨   rm  Útrailerr×   rk  r|   r}   Úvalue_offsetr   r   r   rg  Ü  s<   ÿþðþþzPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?FÚrawÚas_textrQ   ú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   rc   zutf-8)Úre_hashes_in_nameÚfinditerrf  r°   ÚfromhexrH   r   )r¨   rz  r{  rœ   rk  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 | memoryview | 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 ||¡}|�rp| ¡ }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 ||	¡}|�rj| d¡}|d u �s,t|tƒ�s6d|› d�}t|ƒ‚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! ||¡}|�rat"dd„ | d¡D ƒƒ}t#|ƒd dk�rU| t$dƒ¡ t" %| &d¡¡| ¡ fS | j' ||¡}|�rs|  (|| ¡ ¡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)r„  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-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   rF   ¹  s   € ÿz&PdfParser.get_value.<locals>.<genexpr>ó   0rc   zunrecognized object: é    )*Ú
re_commentrt  rv  Úre_indirect_def_startrT   rV   rf  rZ   rw  Úre_indirect_def_endÚre_indirect_referenceÚre_dict_startru  Úre_stream_startrB   rh   rK   r   Ú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°   rG   r¬   r€  rH   Úre_string_litÚget_literal_stringr¢   )r¨   r¥   r×   rƒ  r„  rk  rf   Úobject_offsetr´   Úcurrent_offsetr|   r}   Ú
stream_lenr…   Ústream_dataÚresultsÚ
hex_stringr   r   r   rw  ;  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³   re  rf  Úescaped_charsr²   rV   r   rv  rK   )r¨   r¥   r×   Únesting_depthr´   rk  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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ÿ   rT   rv  Úre_xref_subsection_startrV   rf  r¶   Úre_xref_entryr  )r_   rb  Úsubsection_foundrk  r×   Úfirst_objectÚnum_objectsr4  Úis_freerX   Ú	new_entryr   r   r   rh    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 )rƒ  r„  )r  rT   rä   rw  rÿ   rZ   r  )r_   rF  r„  r×   rX   r}   r   r   r   rW  %  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 )NrU  r)  z%/Type of page tree node is not /Pagess   KidsrJ  )r¸  )r  rT   rW  r²   r³   rX  )r_   r¸  Ú	page_noder  ÚkidÚ
kid_objectr   r   r   rX  6  s   ÿ
zPdfParser.linearize_page_tree)NNNr   rú   )rû   rü   rŒ   rý   rä   rþ   rÿ   rV   r   r	   r
   rS   )r
   r¦   )r  rf   r
   rS   rš   )r   r	   r
   rS   )r
   rZ   r@   )r=  r>  r
   rS   )rF  rG  rH  r   rI  r   r
   rZ   )rF  r>  rH  r   rI  r   r
   rZ   )rŒ   r�   r
   rO  )r×   rY  r
   rZ   )rb  rV   rn  ro  r
   rS   )rm  r   r
   rr  )F)rz  r   r{  rQ   r
   r|  )NrÌ   )
r¥   r‚  r×   rV   rƒ  r>  r„  rV   r
   r…  )r¥   r‚  r×   rV   r
   r¨  )rb  rV   r
   rV   )rÌ   )rF  rZ   r„  rV   r
   r   )r¸  r¹  r
   rº  )IrL   rM   rN   rO   r{   r  r  r  r  r	  r  r#  r%  r0  r.  rE  r2  r/  r,  Ústaticmethodr  r  r-  Ú	delimiterÚdelimiter_or_wsÚ
whitespaceÚwhitespace_or_hexÚwhitespace_optionalÚwhitespace_mandatoryÚwhitespace_optional_no_nlÚnewline_onlyÚnewlineÚreÚcompileÚDOTALLrc  rp  rV  ri  Úre_whitespace_optionalrs  rŒ  ru  rµ   rg  r~  r§   r‘  r’  r“  r”  r•  r�  r�  r–  r—  r‹  r‰  rŠ  rˆ  r�  rŽ  rw  r­  r¬   r®  r˜  r°  r±  r²  rh  rW  rX  r   r   r   r   r¦   s  sÒ   ú
5








ÿ




$
ÿþýüûúùø	÷
öõóÿþýüûúùø	÷
öô
ÿ
ÿþýÿ
ÿÿþýÿÿÿþýüûúùÿ
ÿþýüûúùÿ
ÿÿÿû ÿÿþýüûúùø	÷
öõôóòñðÿþýüûÿ

!ÿr¦   )r   r	   r
   r   )r>   r   r
   r	   )rP   rQ   rR   r	   r
   rS   )rº   r   r
   r   )'Ú
__future__r   rÓ   r   r½   r  r!  rÈ  rÐ   ræ   Útypingr   r   r?   r   ÚTYPE_CHECKINGr   r¾   r	   r   Ú	_DictBaser   rA   rJ   r  rK   rT   rU   rZ   rt   rv   r›   rø   r·   r¼   rÞ   râ   r¹   r¦   r   r   r   r   Ú<module>   sØ    
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#×
-
^)0
