o
    svXj‡  ã                	   @   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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'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“¥dHdIdJdKdLdMdNdOœ¥Z	dPdQ„ Z
G dRdS„ dSeƒZdTdU„ ZG dVdW„ dWe dXdYdZg¡ƒZG d[d\„ d\eƒZG d]d^„ d^ƒZG d_d`„ d`ƒZG dadb„ dbeƒZG dcdd„ ddejƒZG dedf„ dfƒZG dgdh„ dhƒZdidj„ ZG dkdl„ dlƒZdS )mé    Nc                 C   s   t j|  d¡ S )NÚ	utf_16_be)ÚcodecsÚBOM_UTF16_BEÚencode)Ús© r   úJ/var/www/html/myproject/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   â‚¬)é™   éš   é›   éœ   é�   éž   é    c                 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>B   s   € zdecode_text.<locals>.<genexpr>)Úlenr   r   ÚdecodeÚjoin)Úbr   r   r   Údecode_text>   s   rA   c                   @   s   e Zd ZdZdS )ÚPdfFormatErrorz\An error that probably indicates a syntactic or semantic error in the
    PDF file structureN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   rB   E   s    rB   c                 C   s   | st |ƒ‚d S r6   )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   ó   d|  S )Nz%s %s Rr   ©Úselfr   r   r   Ú__str__T   ó   zIndirectReference.__str__c                 C   s   |   ¡  d¡S ©Núus-ascii)rN   r   rL   r   r   r   Ú	__bytes__W   s   zIndirectReference.__bytes__c                 C   s$   |j | j u o|j| jko|j| jkS r6   )Ú	__class__Ú	object_idÚ
generation©rM   Úotherr   r   r   Ú__eq__Z   s
   
ÿ
ýzIndirectReference.__eq__c                 C   s
   | |k S r6   r   rV   r   r   r   Ú__ne__a   ó   
zIndirectReference.__ne__c                 C   s   t | j| jfƒS r6   )ÚhashrT   rU   rL   r   r   r   Ú__hash__d   r
   zIndirectReference.__hash__N)rC   rD   rE   rN   rR   rX   rY   r\   r   r   r   r   rJ   Q   s    rJ   ÚIndirectReferenceTuplerT   rU   c                   @   ó   e Zd Zdd„ ZdS )ÚIndirectObjectDefc                 C   rK   )Nz	%s %s objr   rL   r   r   r   rN   i   rO   zIndirectObjectDef.__str__N)rC   rD   rE   rN   r   r   r   r   r_   h   ó    r_   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú	XrefTablec                 C   s    i | _ i | _ddi| _d| _d S )Nr   i   F)Úexisting_entriesÚnew_entriesÚdeleted_entriesÚreading_finishedrL   r   r   r   Ú__init__n   s   

zXrefTable.__init__c                 C   s6   | j r	|| j|< n|| j|< || jv r| j|= d S d S r6   )re   rc   rb   rd   ©rM   ÚkeyÚvaluer   r   r   Ú__setitem__t   s   

ÿzXrefTable.__setitem__c                 C   s*   z| j | W S  ty   | j|  Y S w r6   )rc   ÚKeyErrorrb   ©rM   rh   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t|ƒ d }t|ƒ‚)Né   z
object ID z+ cannot be deleted because it doesn't exist)rc   rd   rb   ÚstrÚ
IndexError)rM   rh   rU   Úmsgr   r   r   Ú__delitem__‚   s   


ÿzXrefTable.__delitem__c                 C   s   || j v p	|| jv S r6   )rb   rc   rl   r   r   r   Ú__contains__’   ó   zXrefTable.__contains__c                 C   s.   t t| j ¡ ƒt| j ¡ ƒB t| j ¡ ƒB ƒS r6   )r=   Úsetrb   Úkeysrc   rd   rL   r   r   r   Ú__len__•   s   ÿþÿzXrefTable.__len__c                 C   s*   t | j ¡ ƒt | j ¡ ƒ t | j ¡ ƒB S r6   )ru   rb   rv   rd   rc   rL   r   r   r   rv   œ   s   þzXrefTable.keysc              	   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|}d }| 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
rn   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)Úsortedru   rc   rv   rd   ÚtellÚwriteÚ	enumerater=   ÚpoprI   rp   )rM   Úfrv   Údeleted_keysÚ	startxrefÚprevÚindexrh   Úcontiguous_keysrT   Úthis_deleted_object_idÚnext_in_linked_listr   r   r   rz   ¡   sJ    


ÿþÿÿÿä zXrefTable.writeN)rC   rD   rE   rf   rj   rm   rr   rs   rw   rv   rz   r   r   r   r   ra   m   s    ra   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   s:   t |tƒr|j| _d S t |tƒr|| _d S | d¡| _d S rP   )Ú
isinstancer…   ÚnameÚbytesr   )rM   r‡   r   r   r   rf   Ê   s
   


zPdfName.__init__c                 C   s   | j  d¡S rP   )r‡   r>   rL   r   r   r   Úname_as_strÒ   s   zPdfName.name_as_strc                 C   s    t |tƒo
|j| jkp|| jkS r6   )r†   r…   r‡   rV   r   r   r   rX   Õ   s   ÿþzPdfName.__eq__c                 C   s
   t | jƒS r6   )r[   r‡   rL   r   r   r   r\   Ú   rZ   zPdfName.__hash__c                 C   s   dt | jƒ› d�S )NzPdfName(ú))Úreprr‡   rL   r   r   r   Ú__repr__Ý   s   zPdfName.__repr__c                 C   s   | t  |¡ƒS r6   )Ú	PdfParserÚinterpret_name)ÚclsÚdatar   r   r   Úfrom_pdf_streamà   s   zPdfName.from_pdf_streamé!   é   c                 C   s   h | ]}t |ƒ’qS r   )Úord)r:   Úcr   r   r   Ú	<setcomp>ä   s    zPdfName.<setcomp>z#%/()<>[]{}c                 C   s@   t dƒ}| jD ]}|| jv r| |¡ q| d| ¡ qt|ƒS )Nó   /s   #%02X)Ú	bytearrayr‡   Úallowed_charsÚappendÚextendrˆ   )rM   Úresultr@   r   r   r   rR   æ   s   

zPdfName.__bytes__N)rC   rD   rE   rf   r‰   rX   r\   rŒ   Úclassmethodr‘   ru   Úranger™   rR   r   r   r   r   r…   É   s    
r…   c                   @   r^   )ÚPdfArrayc                 C   s   dd  dd„ | D ƒ¡ d S )Ns   [ ó    c                 s   s   � | ]}t |ƒV  qd S r6   )Úpdf_repr)r:   Úxr   r   r   r<   ò   ó   € z%PdfArray.__bytes__.<locals>.<genexpr>s    ])r?   rL   r   r   r   rR   ñ   ó   zPdfArray.__bytes__N)rC   rD   rE   rR   r   r   r   r   rŸ   ð   r`   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 | ||¡ d S || | d¡< d S )Nr�   rQ   )ÚcollectionsÚUserDictÚ__setattr__r   rg   r   r   r   r¨   ö   s   zPdfDict.__setattr__c              
   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 )NrQ   ÚDatezD:é   ÚZé   é   é   é<   é   é   z%Y%m%d%H%M%S)ú+ú-r²   éÿÿÿÿ)r   rk   ÚAttributeErrorr†   rˆ   rA   ÚendswithÚ
startswithr=   ÚintÚtimeÚstrptimeÚgmtimeÚcalendarÚtimegm)rM   rh   ri   ÚeÚrelationshipÚoffsetÚformatr   r   r   Ú__getattr__ü   s2   
€ÿ


zPdfDict.__getattr__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…   )rM   Úoutrh   ri   r   r   r   rR     s   


zPdfDict.__bytes__N)rC   rD   rE   r¨   rÂ   rR   r   r   r   r   r¥   õ   s    r¥   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú	PdfBinaryc                 C   s
   || _ d S r6   )r�   )rM   r�   r   r   r   rf   &  rZ   zPdfBinary.__init__c                 C   s   dd  dd„ | jD ƒ¡ S )Ns   <%s>ó    c                 s   s   � | ]}d | V  qdS )s   %02XNr   ©r:   r@   r   r   r   r<   *  r£   z&PdfBinary.__bytes__.<locals>.<genexpr>)r?   r�   rL   r   r   r   rR   )  s   zPdfBinary.__bytes__N)rC   rD   rE   rf   rR   r   r   r   r   rÈ   %  s    rÈ   c                   @   rÇ   )Ú	PdfStreamc                 C   s   || _ || _d S r6   )Ú
dictionaryÚbuf)rM   rÌ   rÍ   r   r   r   rf   .  s   
zPdfStream.__init__c                 C   s†   z| j j}W n ty   | j Y S w |dkr5z| j j}W n ty*   | j j}Y nw tj| jt|ƒd�S dt	| j jƒ› d�}t
|ƒ‚)Ns   FlateDecode)Úbufsizezstream filter z unknown/unsupported)rÌ   ÚFilterrµ   rÍ   ÚDLÚLengthÚzlibÚ
decompressr¸   r‹   ÚNotImplementedError)rM   ÚfilterÚexpected_lengthrq   r   r   r   r>   2  s   
ÿÿzPdfStream.decodeN)rC   rD   rE   rf   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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   nullrQ   s   (D:z%Y%m%d%H%M%SZó   )ó   \s   \\ó   (ó   \(s   \))r†   r…   r¥   rŸ   rÈ   rˆ   r¸   Úfloatro   r   r¹   Ústruct_timeÚstrftimeÚdictÚlistr¡   r	   Úreplace)r¢   r   r   r   r¡   B  s0   



r¡   c                   @   s  e Zd ZdZdrdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdsdd„Zdd„ Zdd „ Zd!d"„ Zed#d$„ ƒZd%d&„ Zdsd'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+dtdDdE„ƒ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+dudZd[„ƒZ>e  !d\¡Z?i d]d^“d_d`“dadb“dcdd“dedf“dTdT“d=d=“dgdg“e@d]ƒd^“e@d_ƒd`“e@daƒdb“e@dcƒdd“e@deƒdf“e@dTƒdT“e@d=ƒd=“e@dgƒdg“ZAe+dhdi„ ƒZBe  !edj e ¡ZCe  !ed4 e d4 e e ¡ZDe  !dk¡ZEdldm„ ZFdvdndo„ZGdsdpdq„ZHdS )wr�   z|Based on
    https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
    Supports PDF up to 1.4
    Nr   Úrbc                 C   s  |r
|r
d}t |ƒ‚|| _|| _|| _|| _d| _d| _|d ur/|d u r/t||ƒ | _}d| _|d urI|  |¡ | _}d| _|sIt	|dƒrI|j
| _i | _|rS|  ¡  n*d | _| _tƒ | _d | _tƒ | _d | _i | _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   )ÚRuntimeErrorÚfilenamerÍ   r}   Ústart_offsetÚshould_close_bufÚshould_close_fileÚopenÚget_buf_from_fileÚhasattrr‡   Úcached_objectsÚread_pdf_infoÚfile_size_totalÚfile_size_thisr¥   ÚrootÚroot_refÚinfoÚinfo_refÚpage_tree_rootÚpagesÚ
orig_pagesÚ	pages_refÚlast_xref_section_offsetÚtrailer_dictra   Ú
xref_tablere   Úseek_end)rM   rã   r}   rÍ   rä   Úmoderq   r   r   r   rf   e  sH   
ÿzPdfParser.__init__c                 C   s   | S r6   r   rL   r   r   r   Ú	__enter__‹  s   zPdfParser.__enter__c                 C   s   |   ¡  dS )NF)Úclose)rM   Úexc_typeÚ	exc_valueÚ	tracebackr   r   r   Ú__exit__Ž  s   zPdfParser.__exit__c                 C   s   |   ¡  |  ¡  d S r6   )Ú	close_bufrù   rL   r   r   r   Ústart_writing’  s   zPdfParser.start_writingc                 C   s,   z| j  ¡  W n	 ty   Y nw d | _ d S r6   )rÍ   rü   rµ   rL   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 r6   )rå   r  r}   ræ   rü   rL   r   r   r   rü   �  s   

þzPdfParser.closec                 C   s   | j  dtj¡ d S )Nr   )r}   ÚseekÚosÚSEEK_ENDrL   r   r   r   rù   ¤  rt   zPdfParser.seek_endc                 C   s   | j  d¡ d S )Ns	   %PDF-1.4
)r}   rz   rL   r   r   r   Úwrite_header§  r
   zPdfParser.write_headerc                 C   s   | j  d|› d� ¡ ¡ d S )Nz% Ú
)r}   rz   r   )rM   r   r   r   r   Úwrite_commentª  r¤   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)ÚTypeÚPagesó   Pages)r
  ÚCountÚKids)Údel_rootÚnext_object_idr}   ry   rï   rõ   Úrewrite_pagesÚ	write_objr…   r=   ró   rL   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ÚParentr6   )r{   rô   rê   rø   rT   rš   r…   ró   rÅ   r‰   rõ   Ú
write_pager8   )rM   Úpages_tree_nodes_to_deleteÚiÚpage_refÚ	page_infoÚstringified_page_inforh   ri   Únew_page_refÚjÚcur_page_refÚpages_tree_node_refÚpages_tree_noder   r   r   r  »  s4   




€ý

ü€
zPdfParser.rewrite_pagesc                 C   sš   |r	|   ¡  || _| jr|  d | j¡| _| j | j¡}t| jƒ}| j|dœ}| j	d ur0| j	|d< | jr8| 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ø   rz   r}   r=   rö   rˆ   r¥   )rM   Únew_root_refÚ
start_xrefÚ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  )r†   r¸   ró   r…   rõ   r  )rM   Ú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r3t
|ƒ|d< |r<| t|ƒ¡ |D ]	}| t|ƒ¡ q>|d ur[| d¡ | |¡ | d¡ | d¡ |S )NÚstreamrÑ   s   stream
s   
endstream
s   endobj
)r}   r  ry   rU   rø   rT   rz   rˆ   r_   r|   r=   r¡   )rM   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ø   rT   rî   rL   r   r   r   r  
  s   
zPdfParser.del_rootc                 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é   r.  r/  ÚmmapÚfilenoÚACCESS_READÚ
ValueError)r}   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 r2t
ƒ | _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ï   r8   rñ   r¥   Úread_indirectrî   rð   rI   r†   rJ   rõ   rò   Úlinearize_page_treeró   rô   rL   r   r   r   rë     s,   

ÿþzPdfParser.read_pdf_infoc                 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 )Nrn   r   )rJ   Úmaxrø   rv   r4  rT   )rM   rÀ   Ú	referencer   r   r   r  8  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ƒ |}|r0|}| j | j| ¡ d ¡}|s |s4|}| d¡}t| d¡ƒ| _	|  
|¡| _tƒ | _| j| j	d� d| jv ra|  | jd ¡ d S d S )Né @  ztrailer end not foundé   rn   rª   ©Úxref_section_offsetr"  )r=   rÍ   rä   Úre_trailer_endÚsearchrI   ÚstartÚgroupr¸   rö   Úinterpret_trailerr÷   ra   rø   Úread_xref_tableÚread_prev_trailer)rM   Úsearch_start_offsetÚmÚ
last_matchÚtrailer_datar   r   r   r6  j  s(   

þ

ÿzPdfParser.read_trailerc                 C   sz   | j |d�}| j | j||d … ¡}t|dƒ | d¡}tt| d¡ƒ|kdƒ |  |¡}d|v r;|  |d ¡ d S d S )Nr@  r>  zprevious trailer not foundrn   rª   zGxref section offset in previous trailer doesn't match what was expectedr"  )	rG  Úre_trailer_prevrC  rÍ   rI   rE  r¸   rF  rH  )rM   rA  Útrailer_offsetrJ  rL  r÷   r   r   r   rH    s   ÿ

þ
ÿzPdfParser.read_prev_trailers   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r×   rÃ   s   >>c                 C   sÀ   i }d}	 | j  ||¡}|s+| j ||¡}t|o| ¡ t|ƒkdt||d … ƒ ƒ n|  | d¡¡}|  	|| ¡ ¡\}}|||< qtd|v oMt
|d tƒdƒ td|v o[t
|d tƒdƒ |S )	Nr   Tz+name not found in trailer, remaining data: rn   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Ž   rE  Ú	get_valuer†   r¸   rJ   )r�   rL  ÚtrailerrÀ   rJ  rh   ri   r   r   r   rF  ˜  s4   ÿþôþþzPdfParser.interpret_trailers   ([^#]*)(#([0-9a-fA-F]{2}))?Fc                 C   sj   d}| j  |¡D ]!}| d¡r"|| d¡t | d¡ d¡¡ 7 }q|| d¡7 }q|r1| d¡S t|ƒS )NrÉ   é   rn   rQ   zutf-8)Úre_hashes_in_nameÚfinditerrE  r˜   Úfromhexr>   rˆ   )r�   ÚrawÚas_textr‡   rJ  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 ||¡}|rtt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	ƒ || ¡ 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 ||¡}|�rc| ¡ }i }| j ||¡}|sü| j|||d d�\}}|d u rÛ|d fS | j|||d d�\}	}|	||< |d u ró|d fS | j ||¡}|rÇ| ¡ }| j ||¡}|�r[zt|d ƒ}
W n tttf�y/ } zd| dd ¡ }t|ƒ|‚d }~ww || ¡ | ¡ |
 … }| j || ¡ |
 ¡}t|dƒ | ¡ }tt|ƒ|ƒ}||fS t|ƒ}||fS | j ||¡}|�r§| ¡ }g }| j ||¡}|�s¡| 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" ||¡}|�rKt#dd„ | d¡D ƒƒ}t$|ƒd dk�r?| t%dƒ¡ t# &| 'd¡¡| ¡ fS | j( ||¡}|�r]|  )|| ¡ ¡S dt*|||d … ƒ }t|ƒ‚)Nr   )NNrn   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<   `  s   € ÿz&PdfParser.get_value.<locals>.<genexpr>ó   0rQ   zunrecognized object: é    )+Ú
re_commentrP  rR  Úre_indirect_def_startrI   r¸   rE  rJ   rS  Úre_indirect_def_endÚre_indirect_referenceÚre_dict_startrQ  Úre_stream_startÚ	TypeErrorrk   r4  r8   rB   Úre_stream_endrË   r¥   Úre_array_startÚre_array_endrš   Úre_nullÚre_trueÚre_falserO  r…   rŽ   Úre_intÚre_realrÛ   Úre_string_hexr˜   r=   r”   rX  r>   Úre_string_litÚget_literal_stringr‹   )r�   r�   rÀ   Úexpect_indirectr\  rJ  Úobjectrœ   rh   ri   Ú
stream_lenr¾   rq   Ústream_dataÚ
hex_stringr   r   r   rS  ó  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 ]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   rn   rª   é   rU  é   rÄ   é   rÙ   é   r×   zunfinished literal string)r˜   Úre_lit_str_tokenrW  r›   rD  rE  Úescaped_charsrš   r¸   rˆ   rR  rB   )r�   r�   rÀ   Únesting_depthrœ   rJ  rq   r   r   r   rp  „  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|¡}|s)t|dƒ 	 |S 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|< qDq)NFzxref section start not foundTzxref subsection start not foundrn   rª   zxref entry not foundrU  r}  z)xref entry duplicated (and not identical))Úre_xref_section_startrP  rÍ   rä   rI   rR  Úre_xref_subsection_startr¸   rE  rž   Úre_xref_entryrø   )rM   rA  Úsubsection_foundrJ  rÀ   Úfirst_objectÚnum_objectsr  Úis_freerU   Ú	new_entryr   r   r   rG  ©  sB   ÿ
ÿï
þ
€é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   rn   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )rq  r\  )rø   rI   rS  rÍ   rä   rJ   rê   )rM   r)  r\  rÀ   rU   ri   r   r   r   r7  Ê  s&   
ÿÿþüû
zPdfParser.read_indirectc                 C   sj   |d u r| j }t|d dkdƒ g }|d D ]}|  |¡}|d dkr)| |¡ q| | j|d�¡ q|S )Nr5  r  z%/Type of page tree node is not /Pagess   Kidsr(  )Únode)rò   rI   r7  rš   r›   r8  )rM   rŽ  ró   ÚkidÚ
kid_objectr   r   r   r8  Ú  s   ÿ
zPdfParser.linearize_page_tree)NNNr   rá   r6   )F)Nr´   )r´   )IrC   rD   rE   rF   rf   rû   r   r  r  rü   rù   r  r  r  r  r'  r  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ÚDOTALLrB  rM  r6  rH  Úre_whitespace_optionalrO  rc  rQ  r�   rF  rV  rŽ   ri  rj  rk  rl  rm  rg  rh  rn  ro  rb  r`  ra  r_  rd  rf  rS  rƒ  r”   r„  rp  r†  r‡  rˆ  rG  r7  r8  r   r   r   r   r�   _  s¼   
&
	


ÿþýüûúùø	÷
öõóÿþýüûúùø	÷
öô
ÿþýÿ

ÿÿþýÿÿÿþýüûúùÿ
ÿþýüûúùÿ
ÿÿÿzÿÿþýüûúùø	÷
öõôóòñð
ÿþýüûÿ

!r�   )r¼   r   r¦   r1  r  r›  r¹   rÒ   r	   r7   rA   râ   rB   rI   Ú
namedtuplerJ   r_   ra   r…   rß   rŸ   r§   r¥   rÈ   rË   r¡   r�   r   r   r   r   Ú<module>   sÊ    ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#×-
ÿ\'0