
    Ng              
       Z   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 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rddlmZ  e j        e          Z G d de          Z G d deeeeedf                            Z G d de          ZdS )    N)BytesIO)BinaryIOTYPE_CHECKINGOptionalUnion   )settings)PDFException)	PDFObjRef)	PDFStream)
dict_value)	int_value)KWD)PSEOF)	PSKeyword)PSStackParser)PSSyntaxError)PDFDocumentc                       e Zd ZdS )PDFSyntaxErrorN)__name__
__module____qualname__     N/var/www/html/ai-engine/env/lib/python3.11/site-packages/pdfminer/pdfparser.pyr   r      s        Dr   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dS )	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| _        d S )NF)r   __init__docfallback)selfr   s     r   r"   zPDFParser.__init__-   s'    tR(((,0r   r#   r   c                     || _         dS )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	   startxrefpostokenc           	      B   || j         | j        fv r | j        |                     d            dS || j        u r | j        |                     d            dS || j        u r|                     |df           dS || j        u rt          | j	                  dk    r	 |                     d          \  \  }}\  }}t          |          t          |          }}| j        J t          | j        ||          }|                     ||f           dS # t          $ r Y dS w xY wdS || j        u r[|                     d          \  \  }}t          |          }d}| j        sE	 t#          |d                   }n.# t$          $ r! t&          j        rt+          d|z            Y nw xY w|                     |           	 |                                 \  }}	n,# t0          $ r t&          j        rt+          d          Y dS w xY w|t          |	          z  }| j                            |           t5          | j                            |                    }
|                     ||z              	 	 |                                 \  }}	n+# t0          $ r t&          j        rt+          d          Y nVw xY wd	|	v r/|	                    d	          }||z  }| j        r|
|	d|         z  }
n|t          |	          z  }| j        r|
|	z  }
|                     ||z              t:                              d
||||
dd                    | j        J t?          |tA          |
          | j        j!                  }|                     ||f           dS |                     ||f           dS )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lencurstackintr#   r   r   KEYWORD_STREAMr   r$   r   KeyErrorr	   STRICTr   seeknextliner   r   	bytearrayreadindexlogdebugr   bytesdecipher)r%   r)   r*   _objidgennoobjdicobjlenlinedatalineposistreams                 r   
do_keywordzPDFParser.do_keyword=   s    T&(>???Ddhhqkk****d)))Ddhhqkk****d'''IIsDk"""""dn$$4=!!Q&&/3xx{{,Za!U&)%jj#e**EU8///#DHeU;;CIIsCj)))))$   DD '& d)))((1++KXaS//CF= OO&s8}55FF O O O O,-G#-MNNNO OO IIcNNN MMOO	DD   ? ;()9::: 3t99CGLLTW\\&1122DIIcFl###!&*mmooOWdd    ?,-=>>>E  4''

<00AaKF} )RaR(#d))#= !DLD!  IIcFl###II?SbS	   8'''sE$KK1BCCFIIsFm$$$$$ IIsEl#####sI   A2D 
DD E6 6(F! F!:G %G;:G;+J %J+*J+)r#   r   r    N)r   r   r   __doc__r   r"   r'   r   r7   r5   r4   r;   r0   r1   r:   r   rR   r   r   r   r   r      s          8     
    D		I3w<<LS^^NS^^N3w<<LL))M$c M$) M$ M$ M$ M$ M$ M$ M$r   r   c                   T    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dS )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.
    rN   r    Nc                 V    t                               | t          |                     d S N)r   r"   r   )r%   rN   s     r   r"   zPDFStreamParser.__init__   s$    4/////r   c                 >     | j         |                                   d S rW   )r2   popall)r%   s    r   flushzPDFStreamParser.flush   s     $++--((((r   s   objr)   r*   c                    || j         u r}	 |                     d          \  \  }}\  }}t          |          t          |          }}t          | j        ||          }|                     ||f           n# t          $ r Y nw xY wd S || j        | j        fv rt          j
        rt          d          d S |                     ||f           d S )Nr-   zKeyword endobj found in stream)r7   r3   r:   r   r#   r6   r   KEYWORD_OBJr4   r	   r=   r   )r%   r)   r*   rG   rH   rI   rJ   s          r   rR   zPDFStreamParser.do_keyword   s    DN""+/88A;;(!UZa"%e**c%jj%77		3*%%%%    Ft')<=== G %%EFFFF		3,s   A)A5 5
BB)r    N)r   r   r   rS   rE   r"   rZ   r   r\   r:   r   rR   r   r   r   rU   rU      s         0U 0t 0 0 0 0) ) ) ) #f++K c  )              r   rU   )loggingior   typingr   r   r   r    r	   pdftypesr
   r   r   r   r   psparserr   r   r   r   r   pdfdocumentr   	getLoggerr   rC   r   r   rU   r   r   r   <module>re      s          ; ; ; ; ; ; ; ; ; ; ; ;       " " " " " "                                                 # # # # # # # # # # # # )((((((g!!	 	 	 	 	\ 	 	 	
n$ n$ n$ n$ n$eIy)T$IJK n$ n$ n$b#  #  #  #  # i #  #  #  #  # r   