
    i                         S SK r S SKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	K	J
r
  SS
K	Jr  SSK	Jr  SSK	Jr  SSK	Jr   " S S\
5      r " S S\5      r " S S\5      rg)    N)BytesIO   )PSStackParser)PSSyntaxError)PSEOF)KWD)STRICT)PDFException)	PDFStream)	PDFObjRef)	int_value)
dict_valuec                       \ rS rSrSrg)PDFSyntaxError    N)__name__
__module____qualname____firstlineno____static_attributes__r       E/home/kodi/my-venv/lib/python3.13/site-packages/pdfminer/pdfparser.pyr   r      s    r   r   c                       \ rS rSrSrS rS r\" S5      r\" S5      r	\" S5      r
\" S5      r\" S	5      r\" S
5      rS rSrg)	PDFParser   as  
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                 L    [         R                  " X5        S U l        SU l        g )NF)r   __init__docfallback)selffps     r   r   PDFParser.__init__*   s!    t(r   c                     Xl         g)z0Associates the parser with a PDFDocument object.N)r   )r!   r   s     r   set_documentPDFParser.set_document0   s
    r      Rs   nulls   endobjs   streams   xrefs	   startxrefc           	      p   X R                   U R                  4;   a  U R                  " U R                  S5      6   gX R                  L a  U R                  " U R                  S5      6   gX R
                  L a  U R                  US45        gX R                  L aW   U R                  S5      u  u  p4u  p5[        U5      [        U5      pT[        U R                  XE5      nU R                  X45        gX R                  L Ga  U R                  S5      u  u  p7[        U5      nSnU R                  (       d   [        US   5      nU R'                  U5         U R)                  5       u  p9U[-        U	5      -  nU R.                  R'                  U5        U R.                  R1                  U5      n
U R'                  X-   5          U R)                  5       u  pS	U	;   a.  U	R3                  S	5      nX-  nU R                  (       a  XSU -  n
O%U[-        U	5      -  nU R                  (       a  X-  n
Ml  U R'                  X-   5        U R4                  (       a  [6        R4                  " S
XXzSS 4-  5        [9        XzU R                  R:                  5      nU R                  X45        gU R                  X45        g! [         a     gf = f! [          a    ["        (       a  [%        SU-  5      e GNf = f! [*         a    ["        (       a  [%        S5      e gf = f! [*         a    ["        (       a  [%        S5      e GM  f = f)zHandles PDF-related keywords.r      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intr   r   r   KEYWORD_STREAMr   r    r   KeyErrorr	   r   seeknextliner   lenr"   readindexdebugloggingr   decipher)r!   postoken_objidgennoobjdicobjlenlinedatalineposis                r   
do_keywordPDFParser.do_keyword<   s    &&(>(>??dhhqk*J 	G )))dhhqk*D 	A '''IIsDk"| 	y nn$+/88A;(!Za"%e*c%j%7		3*%l 	e )))((1+KXaS/CF==O&s8}5F IIcN MMO	
 3t9CGGLL77<<'DIIcj!&*mmoOW
  4'

<0AKF}}Ra(#d)#==LD   IIcj!zzM"Ccr;< =Ctxx'8'89CIIsj! 	 IIsl#k ! h 	k   Ov,-G#-MNN O  6()9::  v,-=>>sI   AJ0 2K  K* =L 0
J=<J= #K'&K'* LL L54L5)r   r    N)r   r   r   r   __doc__r   r%   r   r4   r2   r1   r6   r-   r.   rL   r   r   r   r   r   r      sQ     
 D	Iw<L^N^Nw<LL)Ir   r   c                   :    \ rS rSrSrS rS r\" S5      rS r	Sr
g)	PDFStreamParser   a  
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.
c                 B    [         R                  U [        U5      5        g N)r   r   r   )r!   rI   s     r   r   PDFStreamParser.__init__   s    4/r   c                 >    U R                   " U R                  5       6   g rS   )r/   popall)r!   s    r   flushPDFStreamParser.flush   s    $++-(r   s   objc                 v   X R                   L aW   U R                  S5      u  u  p4u  p5[        U5      [        U5      pT[        U R                  XE5      nU R                  X45        g X R                  U R                  4;   a  [        (       a  [        S5      eg U R                  X45        g ! [         a     g f = f)Nr*   zKeyword endobj found in stream)r4   r0   r5   r   r   r3   r   KEYWORD_OBJr1   r	   r   )r!   r@   rA   rB   rC   rD   rE   s          r   rL   PDFStreamParser.do_keyword   s    NN"+/88A;(!Za"%e*c%j%7		3*% '')<)<==v %%EFF		3, ! s   AB+ +
B87B8r   N)r   r   r   r   rN   r   rW   r   rZ   rL   r   r   r   r   rP   rP      s!     f+Kr   rP   )r>   ior   psparserr   r   r   r   r	   pdftypesr
   r   r   r   r   r   r   rP   r   r   r   <module>r_      sP      # #    "     
	\ 	m md&i &r   