
    j5j              
          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 j4                  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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__     H/var/www/html/qr/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  }| j2                  j-                  |       t5        | j2                  j7                  |
            }| j-                  ||
z          	 	 | j/                         \  }}d
|v r+|j9                  d
      }|
|z  }
| j"                  r||d| z  }n |
t        |      z  }
| j"                  r||z  }c| j-                  ||
z          t:        j=                  d||
||dd        | j                  J t?        |tA        |      | j                  jB                        }| j                  ||f       y| j                  ||f       y# t        $ r}	t        d|       |	d}	~	ww xY w# t&        $ r*}	t(        j*                  rt        d|      |	Y d}	~	d}	~	ww xY w# t0        $ r&}	t(        j*                  rt        d	      |	Y d}	~	yd}	~	ww xY w# t0        $ r'}	t(        j*                  rt        d	      |	Y d}	~	Cd}	~	ww xY w)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_keywordzPDFParser.do_keyword7   sQ   T&&(>(>??Ddhhqk*d)))Ddhhqk*d'''IIsDk"dnn$4==!Q&%)XXa["J$Z0	(#DHHi8CIIsCj) ) ' d)))((1+K)!S S/CF==X&s8}5F IIcN MMO	D
 3t9CGGLLTWW\\&12DIIcFl#'+}}$Xt
  4'

<0AaKF}}Ra(#d)#==DLD   IIcFl#II?Sb	 88'''sE$K1B1BCFIIsFm$ IIsEl#o  $1+?   X,/EcW-MNTWW 'X  ??()9:C  ,-=>CGs`    K	 K) !L M 		K&K!!K&)	L2LL	M(M		M	NM<<N)r!   r   r   N)r   r   r   __doc__r   r    r%   r   r6   r4   r3   r9   r/   r0   intr   rS   r   r   r   r   r      sw    8  
 D	Iw<L^N^Nw<LL)Q$c Q$) Q$ Q$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.
    rO   r   Nc                 B    t         j                  | t        |             y N)r   r    r   )r#   rO   s     r   r    zPDFStreamParser.__init__   s    4/r   c                 >     | j                   | j                           y rY   )r1   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)r6   r2   r   r
   r!   r5   KEYWORD_OBJr3   r   r<   r   )r#   r'   r(   rF   rG   rH   rI   s          r   rS   zPDFStreamParser.do_keyword   s    DNN"!%!OQ
Q ,I$)4		3*%t'')<)<== %%EFF 			3,r   )r   N)r   r   r   rT   rD   r    r\   r   r^   rU   r   rS   r   r   r   rW   rW      sD    0U 0t 0) f+K c  )    r   rW   ) loggingior   typingr   r   r   pdfminerr   pdfminer.castingr   pdfminer.pdfexceptionsr	   pdfminer.pdftypesr
   r   r   r   pdfminer.psexceptionsr   pdfminer.psparserr   r   r   pdfminer.pdfdocumentr   	getLoggerr   rB   r   r   rW   r   r   r   <module>rj      s{      1 1  % / I I ' ; ;0g!	\ 	
q$eIy)T$IJK q$h" i " r   