
    ;3h              
          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 j6                  e      Z G d de      Z G d deeeeedf            Z G d de      Z y)    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y)PDFSyntaxErrorN)__name__
__module____qualname__     R/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/pdfminer/pdfparser.pyr   r      s    r   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y)	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| _        y )NF)r   __init__docfallback)selfr   s     r   r!   zPDFParser.__init__'   s     tR(*.r   c                     || _         y)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                  | j                  d        y|| j                  u r | j                  | j                  d        y|| j
                  u r| j                  |df       y|| j                  u rht        | j                        dk\  rO| j                  d      \  \  }}}t        |      }|*t        | j                  |      }| j                  ||f       yyy|| j                  u r| j                  d      \  \  }}t        |      }d}| j                  s	 t!        |d         }| j+                  |       	 | j-                         \  }}	|t        |	      z  }| j0                  j+                  |       t3        | j0                  j5                  |            }
| j+                  ||z          	 	 | j-                         \  }}	d	|	v r+|	j7                  d	      }||z  }| j                  r|
|	d| z  }
n |t        |	      z  }| j                  r|
|	z  }
c| j+                  ||z          t8        j;                  d
||||
dd        | j                  J t=        |t?        |
      | j                  j@                        }| j                  ||f       y| j                  ||f       y# t"        $ r" t$        j&                  rt)        d|z        Y w xY w# t.        $ r t$        j&                  rt)        d      Y yw xY w# t.        $ r t$        j&                  rt)        d      Y w xY w)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dhhqk*d)))Ddhhqk*d'''IIsDk"dnn$4==!Q&%)XXa["J$Z0	(#DHHi8CIIsCj) ) ' d)))((1+KXaS/CF==O&s8}5F IIcN MMO	D
 3t9CGGLLTWW\\&12DIIcFl#&*mmoOWd
  4'

<0AaKF}}Ra(#d)#==DLD   IIcFl#II?Sb	 88'''sE$K1B1BCFIIsFm$ IIsEl#[   O,-G#-MNN 'O  ??()9::  ,-=>>s6   >K K4 L 'K10K14$LL$MM)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      sw    8  
 D	Iw<L^N^Nw<LL)J$c J$) J$ J$r   r   c                   L    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y)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                 B    t         j                  | t        |             y N)r   r!   r   )r$   rM   s     r   r!   zPDFStreamParser.__init__   s    4/r   c                 >     | j                   | j                           y rW   )r2   popall)r$   s    r   flushzPDFStreamParser.flush   s    $++-(r   s   objr(   r)   c                 N   || j                   u rN| j                  d      \  \  }}}t        |      }|)t        | j                  |      }| j                  ||f       y || j                  | j                  fv rt        j                  rt        d      y | j                  ||f       y )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    DNN"!%!OQ
Q ,I$)4		3*%t'')<)<== %%EFF 			3,r   )r   N)r   r   r   rR   rD   r!   rZ   r   r\   rS   r   rQ   r   r   r   rU   rU      sD    0U 0t 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 ' ; ;0g!	\ 	
j$eIy)T$IJK j$Z" i " r   