
    ,h                         d dl Z d dlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	l
mZ dd
l
mZ ddl
mZ ddl
mZ ddl
mZ  e j                   e      Z G d de      Z G d de      Z G d de      Zy)    N)BytesIO   )PSStackParser)PSSyntaxError)PSEOF)KWD)settings)PDFException)	PDFStream)	PDFObjRef)	int_value)
dict_valuec                       e Zd Zy)PDFSyntaxErrorN)__name__
__module____qualname__     T/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pdfminer/pdfparser.pyr   r      s    r   r   c                       e Zd ZdZd Zd Z ed      Z ed      Z ed      Z	 ed      Z
 ed      Z ed	      Z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()

    c                 L    t        j                  | |       d | _        d| _        y )NF)r   __init__docfallback)selffps     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_document2   s    r      Rs   nulls   endobjs   streams   xrefs	   startxrefc           	         || 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 r\	 | j                  d      \  \  }}\  }}t        |      t        |      }}t        | j                  ||      }| j                  ||f       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  }
ct9        |
      }
| j)                  ||z          t:        j=                  d
||||
dd        t?        ||
| j                  j@                        }| j                  ||f       y| j                  ||f       y# t        $ r Y yw xY w# 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.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	   STRICTr   seeknextliner   lenr   	bytearrayreadindexbyteslogdebugr   decipher)r   postoken_objidgennoobjdicobjlenlinedatalineposis                r   
do_keywordzPDFParser.do_keyword>   s6    T&&(>(>??Ddhhqk*H 	E d)))Ddhhqk*B 	 d'''IIsDk"z 	w dnn$+/88A;(!UZa"%e*c%j%7		3*%j 	c d)))((1+KXaS/CF==O&s8}5F IIcN MMO	D
 3t9CGGLLTWW\\&12DIIc&j!&*mmoOWd
  4'

<0AaKF}}Ra(#d)#==DLD   ;DIIc&j!IIEsFTWY]^a_aYbcCtxx'8'89CIIsCj! 	 IIsEl#i ! f 	i   O,-G#-MNN 'O  ??()9::  ,-=>>sI   AJ. 2J= K+ L .	J:9J:='K('K(+$LL$L=<L=N)r   r   r   __doc__r   r    r   r.   r,   r+   r0   r'   r(   rI   r   r   r   r   r      sQ     
 D	Iw<L^N^Nw<LL)Hr   r   c                   2    e Zd ZdZd Zd Z ed      Z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.
    c                 B    t         j                  | t        |             y N)r   r   r   )r   rF   s     r   r   zPDFStreamParser.__init__   s    4/r   c                 >     | j                   | j                           y rN   )r)   popall)r   s    r   flushzPDFStreamParser.flush   s    $++-(r   s   objc                    || j                   u r\	 | j                  d      \  \  }}\  }}t        |      t        |      }}t        | j                  ||      }| j                  ||f       y || j                  | j                  fv rt        j                  rt        d      y | j                  ||f       y # t        $ r Y y w xY w)Nr$   zKeyword endobj found in stream)r.   r*   r/   r   r   r-   r   KEYWORD_OBJr+   r	   r2   r   )r   r=   r>   r?   r@   rA   rB   s          r   rI   zPDFStreamParser.do_keyword   s    DNN"+/88A;(!UZa"%e*c%j%7		3*% t'')<)<== %%EFF		3, ! s   AB5 5	C CN)	r   r   r   rJ   r   rQ   r   rS   rI   r   r   r   rL   rL      s!     f+Kr   rL   )loggingior   psparserr   r   r   r    r	   pdftypesr
   r   r   r   r   	getLoggerr   r:   r   r   rL   r   r   r   <module>rZ      sb      # #    "     g!
	\ 	l lb&i &r   