
    #j              
       .   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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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__     Z/home/rurouni/.hermes/hermes-agent/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 rs|                     d          \  \  }}t          |          }d}| j        sM	 t!          |d                   }n6# t"          $ r)}	t$          j        rt)          d|          |	Y d}	~	nd}	~	ww xY w|                     |           	 |                                 \  }}
n4# t.          $ r'}	t$          j        rt)          d          |	Y d}	~	dS d}	~	ww xY w|t          |
          z  }| j                            |           t3          | j                            |                    }|                     ||z              	 	 |                                 \  }}
n3# t.          $ r&}	t$          j        rt)          d          |	Y d}	~	nZd}	~	ww 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: 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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= XX&s8}55FF X X X X,-Mc-M-MNNTWWX X X X XX IIcNNN MMOO	DD   ? D()9::C 3t99CGLLTW\\&1122DIIcFl###!'+}}$Xtt    H,-=>>CGEEEE  4''

<00AaKF} )RaR(#d))#= !DLD!  IIcFl###II?SbS	   8'''sE$KK1BCCFIIsFm$$$$$ IIsEl#####sH   6E 
E?E::E?F0 0
G!:GG!I) )
J3JJ)r!   r   r   N)r   r   r   __doc__r   r    r%   r   r6   r4   r3   r9   r/   r0   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   )r1   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)r6   r2   r   r
   r!   r5   KEYWORD_OBJr3   r   r;   r   )r#   r'   r(   rE   rF   rG   rH   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   rC   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   pdfminerr   pdfminer.castingr   pdfminer.pdfexceptionsr	   pdfminer.pdftypesr
   r   r   r   pdfminer.psexceptionsr   pdfminer.psparserr   r   r   pdfminer.pdfdocumentr   	getLoggerr   rA   r   r   rU   r   r   r   <module>rh      s          1 1 1 1 1 1 1 1 1 1       % % % % % % / / / / / / 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   