
    .i              
       2   d dl 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 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rd d
lmZ  e j        e          Z G d de          Z G d deeeeedf                            Z G d de          Z dS )    N)BytesIO)TYPE_CHECKINGBinaryIOOptionalUnion)settings)safe_int)PDFException)	PDFObjRef	PDFStream
dict_value	int_value)PSEOF)KWD	PSKeywordPSStackParser)PDFDocumentc                       e Zd ZdS )PDFSyntaxErrorN)__name__
__module____qualname__     N/var/www/html/analyses/venv/lib/python3.11/site-packages/pdfminer/pdfparser.pyr   r      s        Dr   r   c                       e Zd ZdZdeddfdZ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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                 L    t          j        | |           d | _        d| _        d S )NF)r   __init__docfallback)selfr   s     r   r!   zPDFParser.__init__'   s'    tR(((*.r   r"   r   c                     || _         dS )z0Associates the parser with a PDFDocument object.N)r"   )r$   r"   s     r   set_documentzPDFParser.set_document,   s    r      Rs   nulls   endobjs   streams   xrefs	   startxrefpostokenc           	         || 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 rvt          | j	                  dk    rZ|                     d          \  \  }}}t          |          }|0t          | j        |          }|                     ||f           dS dS dS || j        u r[|                     d          \  \  }}t          |          }d}| j        sE	 t!          |d                   }n.# t"          $ r! t$          j        rt)          d|z            Y nw xY w|                     |           	 |                                 \  }}	n,# t.          $ r t$          j        rt)          d          Y dS w xY w|t          |	          z  }| j                            |           t3          | j                            |                    }
|                     ||z              	 	 |                                 \  }}	n+# t.          $ r t$          j        rt)          d          Y nVw xY wd	|	v r/|	                    d	          }||z  }| j        r|
|	d|         z  }
n|t          |	          z  }| j        r|
|	z  }
|                     ||z              t8                              d
||||
dd                    | j        J t=          |t?          |
          | j        j                   }|                     ||f           dS |                     ||f           dS )zHandles PDF-related keywords.      N   r   Lengthz/Length is undefined: %rz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linedatalineposistreams                 r   
do_keywordzPDFParser.do_keyword7   s   T&(>???Ddhhqkk****d)))Ddhhqkk****d'''IIsDk"""""dn$$4=!!Q&&%)XXa[["J$Z00	(#DHi88CIIsCj))))) '& )( d)))((1++KXaS//CF= OO&s8}55FF O O O O,-G#-MNNNO OO IIcNNN MMOO	DD   ? ;()9::: 3t99CGLLTW\\&1122DIIcFl###!&*mmooOWdd    ?,-=>>>E  4''

<00AaKF} )RaR(#d))#= !DLD!  IIcFl###II?SbS	   8'''sE$KK1BCCFIIsFm$$$$$ IIsEl#####s6   6E (E76E7F( (%GGI %J J)r"   r   r   N)r   r   r   __doc__r   r!   r&   r   r7   r5   r4   r:   r0   r1   intr   rQ   r   r   r   r   r      s         8     
    D		I3w<<LS^^NS^^N3w<<LL))J$c J$) J$ J$ J$ J$ J$ J$ J$r   r   c                   T    e Zd ZdZdeddfdZddZ ed          Zde	d	e
ddf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.
    rM   r   Nc                 V    t                               | t          |                     d S N)r   r!   r   )r$   rM   s     r   r!   zPDFStreamParser.__init__   s$    4/////r   c                 >     | j         |                                   d S rW   )r2   popall)r$   s    r   flushzPDFStreamParser.flush   s     $++--((((r   s   objr(   r)   c                 T   || j         u rZ|                     d          \  \  }}}t          |          }|,t          | j        |          }|                     ||f           d S || j        | j        fv rt          j	        rt          d          d S |                     ||f           d S )Nr-   zKeyword endobj found in stream)r7   r3   r	   r   r"   r6   KEYWORD_OBJr4   r   r<   r   )r$   r(   r)   rF   rG   rH   rI   s          r   rQ   zPDFStreamParser.do_keyword   s    DN""!%!OQ
Q ,,I$)44		3*%%%Ft')<=== G %%EFFFF 			3,r   )r   N)r   r   r   rR   rD   r!   rZ   r   r\   rS   r   rQ   r   r   r   rU   rU      s         0U 0t 0 0 0 0) ) ) ) #f++K c  )              r   rU   )!loggingior   typingr   r   r   r   pdfminerr   pdfminer.castingr	   pdfminer.pdfexceptionsr
   pdfminer.pdftypesr   r   r   r   pdfminer.psexceptionsr   pdfminer.psparserr   r   r   pdfminer.pdfdocumentr   	getLoggerr   rB   r   r   rU   r   r   r   <module>rh      s          ; ; ; ; ; ; ; ; ; ; ; ;       % % % % % % / / / / / / I I I I I I I I I I I I ' ' ' ' ' ' ; ; ; ; ; ; ; ; ; ; 1000000g!!	 	 	 	 	\ 	 	 	
j$ j$ j$ j$ j$eIy)T$IJK j$ j$ j$Z"  "  "  "  " i "  "  "  "  " r   