
    Zi              
          S SK r S SKJr  S SKJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJrJr  S SKJr  S S	KJrJrJr  \(       a  S S
KJr  \ R4                  " \5      r " S S\5      r " S S\\\\\S4      5      r " S S\5      rg)    N)BytesIO)TYPE_CHECKINGBinaryIOUnion)settings)safe_int)PDFException)	PDFObjRef	PDFStream
dict_value	int_value)PSEOF)KWD	PSKeywordPSStackParser)PDFDocumentc                       \ rS rSrSrg)PDFSyntaxError    N)__name__
__module____qualname____firstlineno____static_attributes__r       l/var/www/eduai.edurigo.com/question_generate/ques_gen_env/lib/python3.13/site-packages/pdfminer/pdfparser.pyr   r      s    r   r   c                       \ rS rSrSrS\SS4S jrSS jr\" S5      r	\" S	5      r
\" S
5      r\" S5      r\" S5      r\" S5      rS\S\SS4S jrSrg)	PDFParser   ar  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    [         R                  " X5        S U l        SU l        g )NF)r   __init__docfallback)selfr!   s     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_document,   s    r      Rs   nulls   endobjs   streams   xrefs	   startxrefpostokenc           	      F   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 ah  [        U R                  5      S:  aN  U R                  S5      u  u  p4n[        U5      nUb)  [        U R                  U5      nU R                  X45        gggX R                  L Ga  U R                  S5      n Uu  u  p8[!        U5      nSn
U R"                  (       d   [%        US   5      n
U R-                  U5         U R/                  5       u  p;U[        U5      -  nU R2                  R-                  U5        [5        U R2                  R7                  U
5      5      nU R-                  X-   5          U R/                  5       u  pS
U;   a.  UR9                  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        [:        R=                  SUU
UUSS 5        U R                  c   e[?        U[A        U5      U R                  RB                  5      nU R                  X45        gU R                  X45        g! [         a  n	[        SU 35      U	eSn	A	ff = f! [&         a0  n	[(        R*                  (       a  [        SU< 35      U	e Sn	A	GNSn	A	ff = f! [0         a+  n	[(        R*                  (       a  [        S	5      U	e Sn	A	gSn	A	ff = f! [0         a-  n	[(        R*                  (       a  [        S	5      U	e Sn	A	GMV  Sn	A	ff = f)zHandles PDF-related keywords.      N   zInvalid stream dictionary: 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_STREAM
ValueErrorr   r   r&   r   KeyErrorr   STRICTseeknextliner   r!   	bytearrayreadindexlogdebugr   bytesdecipher)r'   r-   r.   _
_object_id	object_idobjpopped_datadicerrobjlenlinedata_lineposistreams                   r   
do_keywordPDFParser.do_keyword7   s+   &&(>(>??dhhqk*)))dhhqk*'''IIsDk"nn$4==!Q&%)XXa["$Z0	(#DHHi8CIIsj) ) ' )))((1+K)! S/CF==X&s8}5F IIcN MMO	
 3t9CGGLLTWW\\&12DIIcl#'+}}$X
  4'

<0AKF}}Ra(#d)#==LD   IIcl#II?Sb	 88'''sE$K1B1BCFIIsm$ IIsl#o  $1+?   X,/EcW-MNTWW 'X  ??()9:C  ,-=>CGs`   !K K4 &L1 M) 
K1K,,K14
L.>%L))L.1
M&;!M!!M&)
N 3!NN )r%   r&   )r%   r   r"   N)r   r   r   r   __doc__r   r$   r*   r   r<   r:   r9   r?   r5   r6   intr   rY   r   r   r   r   r   r      sw    8  
 D	Iw<L^N^Nw<LL)Q$c Q$) Q$ Q$r   r   c                   Z    \ rS rSrSrS\SS4S jrSS jr\" S5      r	S	\
S
\SS4S j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.
rU   r"   Nc                 B    [         R                  U [        U5      5        g N)r   r$   r   )r'   rU   s     r   r$   PDFStreamParser.__init__   s    4/r   c                 >    U R                   " U R                  5       6   g ra   )r7   popall)r'   s    r   flushPDFStreamParser.flush   s    $++-(r   s   objr-   r.   c                 V   X R                   L aM  U R                  S5      u  u  p4n[        U5      nUb(  [        U R                  U5      nU R                  X45        g X R                  U R                  4;   a!  [        R                  (       a  [        S5      eg U R                  X45        g )Nr2   zKeyword endobj found in stream)r<   r8   r   r
   r%   r;   KEYWORD_OBJr9   r   rB   r   )r'   r-   r.   rL   rM   rN   rO   s          r   rY   PDFStreamParser.do_keyword   s    NN"!%!OQQ ,I$)4		3*%'')<)<== %%EFF 			3,r   r   )r"   N)r   r   r   r   r[   rJ   r$   re   r   rh   r\   r   rY   r   r   r   r   r^   r^      sD    0U 0t 0) f+K c  )    r   r^   ) loggingior   typingr   r   r   pdfminerr   pdfminer.castingr   pdfminer.pdfexceptionsr	   pdfminer.pdftypesr
   r   r   r   pdfminer.psexceptionsr   pdfminer.psparserr   r   r   pdfminer.pdfdocumentr   	getLoggerr   rH   r   r   r^   r   r   r   <module>ru      sy      1 1  % / I I ' ; ;0!	\ 	
q$eIy)T$IJK q$h" i " r   