o
    ۩ZhL                  	   @   s`  d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ e eZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd dZG dd deZG dd deZedeeZG dd dee ZeeZ eeZ!e j"Z#e!j"Z$e$dZ%e$dZ&e$dZ'e$dZ(e$dZ)e$dZ*de+d efd!d"Z,de+d efd#d$Z-e.d%Z/e.d&Z0e.d'Z1e.d(Z2e.d)Z3e.d*Z4e.d+Z5e.d,Z6e.d)Z7e.d-Z8e.d.Z9d/d0d1d2d3d4d5d6d7Z:ee;e<eee=f Z>G d8d9 d9Z?ed:Z@ee;e<ee=eee@f ZAe
eBeAe@ f ZCG d;d< d<e?ee@ ZDdS )=    N)AnyBinaryIODictGenericIteratorListOptionalTupleTypeTypeVarUnion   )settings)choplistc                   @      e Zd ZdS )PSExceptionN__name__
__module____qualname__ r   r   H/var/www/html/lang_env/lib/python3.10/site-packages/pdfminer/psparser.pyr          r   c                   @   r   )PSEOFNr   r   r   r   r   r      r   r   c                   @   r   )PSSyntaxErrorNr   r   r   r   r   r   #   r   r   c                   @   r   )PSTypeErrorNr   r   r   r   r   r   '   r   r   c                   @   r   )PSValueErrorNr   r   r   r   r   r   +   r   r   c                   @   s   e Zd ZdZdS )PSObjectz0Base class for all PS or PDF-related data types.N)r   r   r   __doc__r   r   r   r   r   /   s    r   c                   @   s<   e Zd ZdZeeef ZdeddfddZdefddZ	dS )		PSLiteralaa  A class that represents a PostScript literal.

    Postscript literals are used as identifiers, such as
    variable names, property names and dictionary keys.
    Literals are case sensitive and denoted by a preceding
    slash sign (e.g. "/Name")

    Note: Do not create an instance of PSLiteral directly.
    Always use PSLiteralTable.intern().
    namereturnNc                 C   
   || _ d S Nr    selfr    r   r   r   __init__D      
zPSLiteral.__init__c                 C      | j }d| S Nz/%rr$   r%   r   r   r   __repr__G      zPSLiteral.__repr__)
r   r   r   r   r   strbytesNameTyper'   r+   r   r   r   r   r   5   s
    r   c                   @   s0   e Zd ZdZdeddfddZdefddZdS )		PSKeywordaN  A class that represents a PostScript keyword.

    PostScript keywords are a dozen of predefined words.
    Commands and directives in PostScript are expressed by keywords.
    They are also used to denote the content boundaries.

    Note: Do not create an instance of PSKeyword directly.
    Always use PSKeywordTable.intern().
    r    r!   Nc                 C   r"   r#   r$   r%   r   r   r   r'   X   r(   zPSKeyword.__init__c                 C   r)   r*   r$   r%   r   r   r   r+   [   r,   zPSKeyword.__repr__)r   r   r   r   r.   r'   r-   r+   r   r   r   r   r0   L   s    
r0   _SymbolTc                   @   s:   e Zd ZdZdee ddfddZdejdefdd	Z	dS )
PSSymbolTablezA utility class for storing PSLiteral/PSKeyword objects.

    Interned objects can be checked its identity with "is" operator.
    klassr!   Nc                 C   s   i | _ || _d S r#   dictr3   )r&   r3   r   r   r   r'   i   s   
zPSSymbolTable.__init__r    c                 C   s0   || j v r| j | }|S | |}|| j |< |S r#   r4   )r&   r    Zlitr   r   r   internm   s   



zPSSymbolTable.intern)
r   r   r   r   r
   r1   r'   r   r/   r6   r   r   r   r   r2   c   s    r2      {   }   [   ]s   <<s   >>xr!   c                 C   s`   t | tstjrtd| | }|S | j}t |ts.zt|d}W |S  ty-   Y |S w |S )NzLiteral required: {!r}utf-8)	
isinstancer   r   STRICTr   formatr    r-   	Exceptionr;   r    r   r   r   literal_name   s   

rB   c                 C   s6   t | tstjrtd|  | }|S t| jdd}|S )NzKeyword required: %rr<   ignore)r=   r0   r   r>   r   r-   r    rA   r   r   r   keyword_name   s   
rD   s   [\r\n]s   \ss   \Ss   [0-9a-fA-F]s   [#/%\[\]()<>{}\s]s   [^\s0-9a-fA-F]s   [0-9a-fA-F]{2}|.s   [^0-9]s   [()\134]s   [0-7]   	   
         (   )   \   )   b   t   n   f   r   (   )   \c                   @   s  e Zd ZdZdZdeddfddZdefdd	Zd<d
dZ	d<ddZ
defddZd=dee deddfddZdeddfddZd<ddZdeeef fddZdee fddZdededefdd Zd!eddfd"d#Zdededefd$d%Zdededefd&d'Zdededefd(d)Zdededefd*d+Zdededefd,d-Zdededefd.d/Zdededefd0d1Zdededefd2d3Z dededefd4d5Z!dededefd6d7Z"dededefd8d9Z#deeef fd:d;Z$dS )>PSBaseParserz=Most basic PostScript parser that performs only tokenization.i   fpr!   Nc                 C   s   || _ | d d S Nr   )rV   seekr&   rV   r   r   r   r'      s   zPSBaseParser.__init__c                 C   s   d| j j| j| jf S )Nz<%s: %r, bufpos=%d>)	__class__r   rV   bufposr&   r   r   r   r+      s   zPSBaseParser.__repr__c                 C      d S r#   r   r\   r   r   r   flush      zPSBaseParser.flushc                 C   s   |    d S r#   )r^   r\   r   r   r   close   s   zPSBaseParser.closec                 C   s   | j | j S r#   )r[   charposr\   r   r   r   tell   s   zPSBaseParser.tellP   posnc                 C   sL   | j  }|s| j| j }| j | td|| j | | j | d S )Nzpoll(%d): %r)rV   rb   r[   ra   rX   logdebugread)r&   rd   re   Zpos0r   r   r   poll   s   
zPSBaseParser.pollc                 C   sH   t d| | j| || _d| _d| _| j| _d| _	d| _
g | _dS )z'Seeks the parser to the given position.zseek: %r    r   N)rf   rg   rV   rX   r[   bufra   _parse_main_parse1	_curtoken_curtokenpos_tokensr&   rd   r   r   r   rX      s   zPSBaseParser.seekc                 C   sH   | j t| jk r
d S | j | _| j| j| _| jstdd| _ d S )NzUnexpected EOFr   )	ra   lenrk   rV   rb   r[   rh   BUFSIZr   r\   r   r   r   fillbuf   s   zPSBaseParser.fillbufc                 C   s   d}| j | j }d}	 |   |r,| j| j| jd  }|dkr+||7 }|  jd7  _n:t| j| j}|rU|| j| j|d 7 }|d| _|dd dkrTd	}nn|| j| jd 7 }t| j| _qt	d
|| ||fS )z3Fetches a next line that ends either with \r or \n.rj   Fr      
r   N   Tznextline: %r, %r)
r[   ra   rt   rk   EOLsearchendrr   rf   rg   )r&   ZlinebufZlineposeolcmr   r   r   nextline   s.   zPSBaseParser.nextlinec                 c   s    | j dd | j  }d}d|k r[|}td|| j }| j | | j || }|s0	 dS 	 t|d|d}|dkrE|| }n||d | V  |d| }d}q1d|k sdS )	ziFetches a next line backword.

        This is used to locate the trailers at the end of a file.
        r      rj   r   rw   ru   rv   N)rV   rX   rb   maxrs   rh   rfind)r&   rd   rk   Zprevpossre   r   r   r   revreadlines  s.   
	zPSBaseParser.revreadlinesr   ic                 C   sb  t ||}|st|S |d}|||d  }| j| | _|dkr.d| _| j| _|d S |dkr=d| _| j	| _|d S |dv sE|
 rP|| _| j| _|d S |dkr_|| _| j| _|d S | rn|| _| j| _|d S |dkrd| _d| _| j| _|d S |d	krd| _| j| _|d S |d
krd| _| j| _|d S |dkr|d S | t| |d S )Nr   r      %   /rj   s   -+   .rR      <   >    )NONSPCry   rr   startr[   ro   rn   _parse_commentrm   _parse_literalisdigit_parse_number_parse_floatisalpha_parse_keywordparen_parse_string_parse_wopen_parse_wclose
_add_tokenKWDr&   r   r   r}   jr|   r   r   r   rl   )  sV   
zPSBaseParser._parse_mainobjc                 C   s   | j | j|f d S r#   )rp   appendro   )r&   r   r   r   r   r   W  s   zPSBaseParser._add_tokenc                 C   sZ   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _| j| _|S rW   )rx   ry   rn   rr   r   rl   rm   r&   r   r   r}   r   r   r   r   r   [  s   
zPSBaseParser._parse_commentc                 C   s   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _|||d  }|dkr>d| _| j| _|d S zt| jd}W n t	yR   | j}Y nw | 
t| | j| _|S )Nr   r      #rj   r<   )END_LITERALry   rn   rr   r   hex_parse_literal_hexrm   r-   r@   r   LITrl   )r&   r   r   r}   r   r|   r    r   r   r   r   g  s&   

zPSBaseParser._parse_literalc                 C   sl   |||d  }t |rt| jdk r|  j|7  _|d S | jr0|  jtt| jdf7  _| j| _|S )Nr   r      )	HEXmatchrr   r   rn   r.   intr   rm   r&   r   r   r|   r   r   r   r   {  s   zPSBaseParser._parse_literal_hexc                 C   s   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _|||d  }|dkrB|  j|7  _| j| _|d S z
| t| j W n	 t	yU   Y nw | j
| _|S )Nr   r   r   )
END_NUMBERry   rn   rr   r   r   rm   r   r   
ValueErrorrl   r   r   r   r   r     s$   
zPSBaseParser._parse_numberc                 C   s   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _z
| t| j W n	 ty:   Y nw | j| _	|S rW   )
r   ry   rn   rr   r   r   floatr   rl   rm   r   r   r   r   r     s   
zPSBaseParser._parse_floatc                 C   s   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _| jdkr/d}n| jdkr7d}nt| j}| | | j| _|S )Nr   s   trueTs   falseF)	END_KEYWORDry   rn   rr   r   r   r   rl   rm   r&   r   r   r}   r   tokenr   r   r   r     s   




zPSBaseParser._parse_keywordc                 C   s   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _|||d  }|dkr>d| _| j| _|d S |dkrT|  jd7  _|  j|7  _|d S |dkrm|  jd8  _| jrm|  j|7  _|d S | 	| j | j
| _|d S )Nr   r   rT   rj   rR   rS   )
END_STRINGry   rn   rr   r   oct_parse_string_1rm   r   r   rl   r   r   r   r   r     s.   
zPSBaseParser._parse_stringc                 C   s   |||d  }t |rt| jdk r|  j|7  _|d S | jr6|  jtt| jdf7  _| j| _|S |t	v rG|  jtt	| f7  _n|dkrct||d krc||d |d  dkrc|d7 }| j| _|d S )z;Parse literal strings

        PDF Reference 3.2.3
        r      rE   rw   r   ru   )

OCT_STRINGr   rr   r   rn   r.   r   r   rm   
ESC_STRINGr   r   r   r   r     s   0zPSBaseParser._parse_string_1c                 C   sB   |||d  }|dkr|  t | j| _|d7 }|S | j| _|S )Nr   r   )r   KEYWORD_DICT_BEGINrl   rm   _parse_hexstringr   r   r   r   r     s   
zPSBaseParser._parse_wopenc                 C   s6   |||d  }|dkr|  t |d7 }| j| _|S )Nr   r   )r   KEYWORD_DICT_ENDrl   rm   r   r   r   r   r     s   
zPSBaseParser._parse_wclosec                 C   s~   t ||}|s|  j||d  7  _t|S |d}|  j||| 7  _tdd td| j}| | | j	| _
|S )Nr   c                 S   s   t t| ddfS )Nr   r   )r.   r   group)r}   r   r   r   <lambda>  s    z/PSBaseParser._parse_hexstring.<locals>.<lambda>rj   )END_HEX_STRINGry   rn   rr   r   HEX_PAIRsubSPCr   rl   rm   r   r   r   r   r     s   

zPSBaseParser._parse_hexstringc                 C   sB   | j s|   | | j| j| _| j r| j d}td| |S )Nr   znexttoken: %r)rp   rt   rm   rk   ra   poprf   rg   )r&   r   r   r   r   	nexttoken  s   zPSBaseParser.nexttokenr!   N)Nrc   )%r   r   r   r   rs   r   r'   r-   r+   r^   r`   r   rb   r   ri   rX   rt   r	   r.   r~   r   r   rl   PSBaseParserTokenr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU      s6    

	
.

rU   ExtraTc                   @   s   e Zd ZdeddfddZdddZdeddfd	d
Zdee	 ddfddZ
dedeee	  fddZdeee	  fddZdee	 ddfddZdededdfddZdedeeeee	  f fddZdededdfddZdee	 fddZdS ) PSStackParserrV   r!   Nc                 C      t | | |   d S r#   )rU   r'   resetrY   r   r   r   r'         zPSStackParser.__init__c                 C   s   g | _ d | _g | _g | _d S r#   )contextcurtypecurstackresultsr\   r   r   r   r   %  s
   zPSStackParser.resetrd   c                 C   r   r#   )rU   rX   r   rq   r   r   r   rX   ,  r   zPSStackParser.seekobjsc                 G   s   | j | d S r#   )r   extendr&   r   r   r   r   push1  s   zPSStackParser.pushre   c                 C   s$   | j | d  }g | j | d < |S r#   r   )r&   re   r   r   r   r   r   5  s   zPSStackParser.popc                 C   s   | j }g | _ |S r#   r   r   r   r   r   popall:  s   zPSStackParser.popallc                 G   s>   zt d| W n ty   t d Y nw | j| d S )Nzadd_results: %rz!add_results: (unprintable object))rf   rg   r@   r   r   r   r   r   r   add_results?  s   zPSStackParser.add_resultstypec                 C   s6   | j || j| jf |g | _| _td|| d S )Nzstart_type: pos=%r, type=%r)r   r   r   r   rf   rg   )r&   rd   r   r   r   r   
start_typeG  s   zPSStackParser.start_typec                 C   sX   | j |krtd| j |dd | jD }| j \}| _ | _td||| ||fS )NzType mismatch: {!r} != {!r}c                 S   s   g | ]\}}|qS r   r   ).0_r   r   r   r   
<listcomp>P  s    z*PSStackParser.end_type.<locals>.<listcomp>z"end_type: pos=%r, type=%r, objs=%r)r   r   r?   r   r   r   rf   rg   )r&   r   r   rd   r   r   r   end_typeM  s   
zPSStackParser.end_typer   c                 C   r]   r#   r   )r&   rd   r   r   r   r   
do_keywordU  r_   zPSStackParser.do_keywordc                 C   s   | j s|  \}}t|ttttttfr| 	||f n|t
kr'| |d n|tkrCz
| 	| d W n tyB   tjr@ Y nw |tkrN| |d n|tkrz*| d\}}t|d dkrjd| }t|dd td|D }| 	||f W nY ty   tjr Y nMw |tkr| |d nA|tkrz
| 	| d W n2 ty   tjr Y n&w t|trtd	||| j | || ntd
||| j | ||  | jrq |   | j r| j  d}z	td| W |S  t!y   td Y |S w )zYields a list of objects.

        Arrays and dictionaries are represented as Python lists and
        dictionaries.

        :return: keywords, literals, strings, numbers, arrays and dictionaries.
        adr   r   z Invalid dictionary construct: %rc                 S   s"   i | ]\}}|d urt ||qS r#   )rB   )r   kvr   r   r   
<dictcomp>y  s
    z,PSStackParser.nextobject.<locals>.<dictcomp>pz&do_keyword: pos=%r, token=%r, stack=%rz)unknown token: pos=%r, token=%r, stack=%rznextobject: %rz nextobject: (unprintable object))"r   r   r=   r   r   boolr-   r.   r   r   KEYWORD_ARRAY_BEGINr   KEYWORD_ARRAY_ENDr   r   r   r>   r   r   rr   r   r   KEYWORD_PROC_BEGINKEYWORD_PROC_ENDr0   rf   rg   r   r   errorr   r^   r   r@   )r&   rd   r   r   	error_msgr   r   r   r   r   
nextobjectX  s   

>zPSStackParser.nextobjectr   )r   r   r   r   r'   r   r   rX   PSStackEntryr   r   r   r   r   r   r-   r   r	   PSStackTyper   r0   r   r   r   r   r   r   r     s    
"r   )Eloggingretypingr   r   r   r   r   r   r   r	   r
   r   r    r   utilsr   	getLoggerr   rf   r@   r   r   r   r   r   r   r   r0   r1   r2   ZPSLiteralTableZPSKeywordTabler6   r   r   r   r   r   r   r   r   objectrB   rD   compilerx   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   rU   r   r   r   r   r   r   r   r   r   <module>   sp   4











  c