File: //lib/python3/dist-packages/pdfminer/__pycache__/pdfparser.cpython-38.pyc
U
�R�]� � @ s� d dl Z d dlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z dd l
mZ dd
l
mZ ddl
m
Z
ddl
mZ dd
l
mZ e �e�ZG dd� de�ZG dd� de�ZG dd� de�ZdS )� N)�BytesIO� )�
PSStackParser)�
PSSyntaxError)�PSEOF)�KWD)�settings)�PDFException)� PDFStream)� PDFObjRef)� int_value)�
dict_valuec @ s e Zd ZdS )�PDFSyntaxErrorN)�__name__�
__module__�__qualname__� r r �4/usr/lib/python3/dist-packages/pdfminer/pdfparser.pyr s r c @ sX e Zd ZdZdd� Zdd� Zed�Zed�Zed�Z ed �Z
ed
�Zed�Zdd
� Z
dS )� 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()
c C s t �| |� d | _d| _d S )NF)r �__init__�doc�fallback)�self�fpr r r r , s zPDFParser.__init__c C s
|| _ dS )z0Associates the parser with a PDFDocument object.N)r )r r r r r �set_document2 s zPDFParser.set_document� Rs nulls endobjs streams xrefs startxrefc
C s� || j | jfkr$| j| �d�� �n�|| jkrB| j| �d�� �nb|| jkr^| �|df� �nF|| jkr�zH| �d�\\}}\}}t|�t|� }}t | j
||�}| �||f� W n tk
r� Y nX �n�|| jk�r�| �d�\\}}t
|�}d}| j�s6zt|d �}W n* tk
�r4 tj�r0td| ��Y nX | �|� z| �� \}} W n( tk
�rx tj�rrtd��Y dS X |t| �7 }| j�|� t| j�|��}
| �|| � z| �� \}} W n, tk
�r� tj�r�td��Y �qFY nX d | k�r&| �d �}||7 }| j�rF|
| d|� 7 }
�qF|t| �7 }| j�r�|
| 7 }
�q�t|
�}
| �|| � t�d
||||
dd� � t||
| j
j �}| �||f� n| �||f� dS )zHandles PDF-related keywords.r � N� r ZLengthz/Length is undefined: %rzUnexpected 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�intr r r �KEYWORD_STREAMr
r r �KeyErrorr �STRICTr �seekZnextliner �lenr � bytearray�read�index�bytes�log�debugr
Zdecipher)
r �pos�token�_�objid�genno�objZdicZobjlen�line�dataZlinepos�ir r r �
do_keyword>