o
    ¾Ùøi  ã                	   @   sâ   d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZmZmZ erJd d
lmZ e  e¡ZG dd„ deƒZG dd„ deeeeedf  ƒZG dd„ deƒZdS )é    N)ÚBytesIO)ÚTYPE_CHECKINGÚBinaryIOÚUnion)Úsettings)Úsafe_int)ÚPDFException)Ú	PDFObjRefÚ	PDFStreamÚ
dict_valueÚ	int_value)ÚPSEOF)ÚKWDÚ	PSKeywordÚPSStackParser)ÚPDFDocumentc                   @   s   e Zd ZdS )ÚPDFSyntaxErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú_/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfminer/pdfparser.pyr      s    r   c                   @   sr   e Zd ZdZdeddfdd„Zdd	d
„ZedƒZedƒZ	edƒZ
edƒZedƒZedƒZdededdfdd„ZdS )Ú	PDFParseraž  PDFParser fetch PDF objects from a file stream.
    It can handle indirect references by referring to
    a PDF document set by set_document method.
    It also reads XRefs at the end of every PDF file.

    Typical usage:
      parser = PDFParser(fp)
      parser.read_xref()
      parser.read_xref(fallback=True) # optional
      parser.set_document(doc)
      parser.seek(offset)
      parser.nextobject()

    ÚfpÚreturnNc                 C   s   t  | |¡ d | _d| _d S )NF)r   Ú__init__ÚdocÚfallback)Úselfr   r   r   r   r   '   s   
zPDFParser.__init__r   r   c                 C   s
   || _ dS )z0Associates the parser with a PDFDocument object.N)r   )r   r   r   r   r   Úset_document,   s   
zPDFParser.set_documentó   Rs   nulls   endobjs   streams   xrefs	   startxrefÚposÚtokenc              
   C   sÎ  || j | jfv r| j|  d¡Ž  dS || ju r!| j|  d¡Ž  dS || ju r/|  |df¡ dS || ju r_t| j	ƒdkr[|  d¡\\}}}t
|ƒ}|dur]t| j|ƒ}|  ||f¡ dS dS dS || ju �r^|  d¡\\}}t|ƒ}d}| jsœzt|d ƒ}W n ty› }	 ztjr‘td|›�ƒ|	‚W Y d}	~	nd}	~	ww |  |¡ z|  ¡ \}}
W n tyÄ }	 ztjr¹tdƒ|	‚W Y d}	~	dS d}	~	ww |t|
ƒ7 }| j |¡ t| j |¡ƒ}|  || ¡ 	 z|  ¡ \}}
W n t�y }	 ztjrútdƒ|	‚W Y d}	~	n/d}	~	ww d	|
v �r |
 d	¡}||7 }| j�r||
d|… 7 }n|t|
ƒ7 }| j�r.||
7 }qá|  || ¡ t d
||||dd… ¡ | jdu�sKJ ‚t|t|ƒ| jj ƒ}|  ||f¡ dS |  ||f¡ dS )zHandles PDF-related keywords.é   é   Né   r   ÚLengthz/Length is undefined: zUnexpected EOFs	   endstreamz-Stream: pos=%d, objlen=%d, dic=%r, data=%r...é
   )!ÚKEYWORD_XREFÚKEYWORD_STARTXREFÚadd_resultsÚpopÚKEYWORD_ENDOBJÚKEYWORD_NULLÚpushÚ	KEYWORD_RÚlenÚcurstackr   r	   r   ÚKEYWORD_STREAMr   r   r   ÚKeyErrorr   ÚSTRICTr   ÚseekÚnextliner   r   Ú	bytearrayÚreadÚindexÚlogÚdebugr
   ÚbytesÚdecipher)r   r!   r"   Ú_Ú
_object_idÚ	object_idÚobjÚdicÚobjlenÚerrÚlineÚdataÚ_lineposÚiÚstreamr   r   r   Ú
do_keyword7   s�   


ûÿ€ÿ

€ý
€ý

ñ
ûzPDFParser.do_keyword)r   r   r   N)r   r   r   Ú__doc__r   r   r   r   r/   r-   r,   r2   r(   r)   Úintr   rJ   r   r   r   r   r      s    
r   c                   @   sJ   e Zd ZdZdeddfdd„Zddd„Zed	ƒZd
e	de
ddfdd„ZdS )ÚPDFStreamParsera#  PDFStreamParser is used to parse PDF content streams
    that is contained in each page and has instructions
    for rendering the page. A reference to a PDF document is
    needed because a PDF content stream can also have
    indirect references to other objects in the same document.
    rF   r   Nc                 C   s   t  | t|ƒ¡ d S ©N)r   r   r   )r   rF   r   r   r   r   Œ   s   zPDFStreamParser.__init__c                 C   s   | j |  ¡ Ž  d S rN   )r*   Úpopall)r   r   r   r   Úflush�   s   zPDFStreamParser.flushs   objr!   r"   c                 C   s~   || j u r%|  d¡\\}}}t|ƒ}|d ur#t| j|ƒ}|  ||f¡ d S || j| jfv r6tj	r4t
dƒ‚d S |  ||f¡ d S )Nr%   zKeyword endobj found in stream)r/   r+   r   r	   r   r.   ÚKEYWORD_OBJr,   r   r4   r   )r   r!   r"   r>   r?   r@   rA   r   r   r   rJ   ”   s   
zPDFStreamParser.do_keyword)r   N)r   r   r   rK   r<   r   rP   r   rQ   rL   r   rJ   r   r   r   r   rM   „   s    
rM   ) ÚloggingÚior   Útypingr   r   r   Úpdfminerr   Úpdfminer.castingr   Úpdfminer.pdfexceptionsr   Úpdfminer.pdftypesr	   r
   r   r   Úpdfminer.psexceptionsr   Úpdfminer.psparserr   r   r   Úpdfminer.pdfdocumentr   Ú	getLoggerr   r:   r   r   rM   r   r   r   r   Ú<module>   s    
 m