
    #j*P              
          d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZmZ d dlmZ  ej        e          Zej        Zej        Zej        Zej        Zej        Z G d d          Z G d d	e          Z G d
 de          Z e
dee          Z G 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Z*dedefdZ+ ej,        d          Z- ej,        d          Z. ej,        d          Z/ ej,        d          Z0 ej,        d          Z1 ej,        d          Z2 ej,        d          Z3 ej,        d           Z4 ej,        d          Z5 ej,        d!          Z6 ej,        d"          Z7d#d$d%d&d'd(d)d*d+Z8ee9e:eee;f         Z< G d, d-          Z= e
d.          Z>ee)e9e:ee;e?e         e@eef         e>f         ZAeBeCeAe>         f         ZD G d/ d0e=e	e>                   ZEdS )1    N)Iterator)AnyBinaryIOGenericTypeVarUnion)psexceptionssettings)choplistc                       e Zd ZdZdS )PSObjectz0Base class for all PS or PDF-related data types.N)__name__
__module____qualname____doc__     Y/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pdfminer/psparser.pyr   r      s        ::::r   r   c                   B    e Zd ZdZeeef         ZdeddfdZdef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                     || _         d S Nr   selfr   s     r   __init__zPSLiteral.__init__/       			r   c                     | j         }d|S N/r   r   s     r   __repr__zPSLiteral.__repr__2       y4||r   )
r   r   r   r   r   strbytesNameTyper   r#   r   r   r   r   r   !   sk        	 	 S%Z HX $    #      r   r   c                   .    e Zd ZdZdeddfdZdef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                     || _         d S r   r   r   s     r   r   zPSKeyword.__init__B   r   r   c                     | j         }d|S r!   r   r   s     r   r#   zPSKeyword.__repr__E   r$   r   )r   r   r   r   r&   r   r%   r#   r   r   r   r)   r)   7   s[         U t    #      r   r)   _SymbolTc                   H    e Zd ZdZdee         ddfdZdej        defdZ	dS )PSSymbolTablezA utility class for storing PSLiteral/PSKeyword objects.

    Interned objects can be checked its identity with "is" operator.
    klassr   Nc                 "    i | _         || _        d S r   dictr/   )r   r/   s     r   r   zPSSymbolTable.__init__S   s    8:	%*


r   r   c                 r    || j         v r| j         |         }n|                     |          }|| j         |<   |S r   r1   )r   r   lits      r   internzPSSymbolTable.internW   s?    49)D/CC **T""C!DIdO
r   )
r   r   r   r   typer,   r   r   r'   r5   r   r   r   r.   r.   M   si         
+d8n + + + + +9- (      r   r.      {   }   [   ]s   <<s   >>xr   c                 <   t          | t                    r[t          | j        t                    r| j        S 	 t          | j        d          S # t          $ r t          | j                  cY S w xY wt
          j        rt          d|           t          |           S )Nutf-8zLiteral required: )
isinstancer   r   r%   UnicodeDecodeErrorr
   STRICTPSTypeError)r;   s    r   literal_namerB   n   s    !Y 
afc"" 	6M	qvw'''! 	 	 	qv;;	 ? 	:81889991vvs   A A.-A.c                     t          | t                    s!t          j        rt	          d|           | }nt          | j        dd          }|S )NzKeyword required: r=   ignore)r>   r)   r
   r@   rA   r%   r   )r;   r   s     r   keyword_namerE   |   sT    a## .? 	8188999DD167H--Kr   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                      e Zd ZdZdZdeddfdZdefdZd$dZ	d$d	Z
defd
Zd%dedz  deddfdZdeddfdZdefdZdeeef         fdZdee         fdZdededefdZdeddfdZdededefdZdededefdZdededefdZdededefdZdededefdZdededefdZdededefdZdededefdZ dededefd Z!dededefd!Z"dededefd"Z#deeef         fd#Z$dS )&PSBaseParserz=Most basic PostScript parser that performs only tokenization.i   fpr   Nc                 L    || _         d| _        |                     d           d S )NFr   )rX   eofseekr   rX   s     r   r   zPSBaseParser.__init__   s#    		!r   c                 B    d| j         j         d| j        d| j         dS )N<z: z	, bufpos=>)	__class__r   rX   bufposr   s    r   r#   zPSBaseParser.__repr__   s,    P4>*PPdgPP$+PPPPr   c                     d S r   r   rb   s    r   flushzPSBaseParser.flush       r   c                 .    |                                   d S r   )rd   rb   s    r   closezPSBaseParser.close   s    

r   c                      | j         | j        z   S r   )ra   charposrb   s    r   tellzPSBaseParser.tell   s    {T\))r   P   posnc                 2   | j                                         }|s| j        | j        z   }| j                             |           t
                              d| d| j                             |                     | j                             |           d S )Nzpoll(z): )rX   rj   ra   ri   r[   logdebugread)r   rl   rm   pos0s       r   pollzPSBaseParser.poll   s    w||~~ 	-+,CS		5#55$',,q//55666Tr   c                     t                               d|           | j                            |           || _        d| _        d| _        | j        | _        d| _	        d| _
        g | _        d| _        dS )z'Seeks the parser to the given position.zseek: r   r   FN)ro   rp   rX   r[   ra   bufri   _parse_main_parse1	_curtoken_curtokenpos_tokensrZ   r   rl   s     r   r[   zPSBaseParser.seek   sq    		"3""###S'<>r   c                    | j         t          | j                  k     rdS | j                                        | _        | j                            | j                  | _        | j        st          d          d| _         dS )NFUnexpected EOFr   )	ri   lenru   rX   rj   ra   rq   BUFSIZPSEOFrb   s    r   fillbufzPSBaseParser.fillbuf   si    <#dh--''5gllnn7<<,,x 	*()))ur   c                 j   d}| j         | j        z   }d}	 |                                  |r8| j        | j        | j        dz            }|dk    r||z  }| xj        dz  c_        nt                              | j        | j                  }|rV|| j        | j        |                    d                   z  }|                    d          | _        |dd         dk    rd	}n1n1|| j        | j        d         z  }t          | j                  | _        t          	                    d
|d|           ||fS )z3Fetches a next line that ends either with \r or \n.r   F      
r   N   Tz
nextline: z, )
ra   ri   r   ru   EOLsearchendr~   ro   rp   )r   linebuflineposeolcms         r   nextlinezPSBaseParser.nextline   s=   +,	-LLNNN HT\DL1,<<=::qLGLLA%LL

48T\22A 	-48DL15588$;<< uuQxx233<5((CC48DLNN33"48}}'	-( 			7w77G77888!!r   c              #     K   | j                             dt          j                   | j                                         }d}|dk    r|}t          d|| j        z
            }| j                             |           | j                             ||z
            }|sdS 	 t          |                    d          |                    d                    }|dk    r||z   }n||d         |z   V  |d|         }d}^|dk    dS dS )ziFetches a next line backward.

        This is used to locate the trailers at the end of a file.
        r   r   r   r   r   r   N)	rX   r[   ioSEEK_ENDrj   maxr   rq   rfind)r   rl   ru   prevpossrm   s         r   revreadlineszPSBaseParser.revreadlines   s     
 	Q$$$gllnnAggGat{*++CGLLWs]++A 7777c'Ceck!!!bqbE Aggggggr   r   ic                 N   t                               ||          }|st          |          S |                    d          }|||dz            }| j        |z   | _        |dk    rd| _        | j        | _        |dz   S |dk    rd| _        | j	        | _        |dz   S |dv s|
                                r|| _        | j        | _        |dz   S |dk    r|| _        | j        | _        |dz   S |                                r|| _        | j        | _        |dz   S |dk    rd| _        d| _        | j        | _        |dz   S |d	k    rd| _        | j        | _        |dz   S |d
k    rd| _        | j        | _        |dz   S |dk    r|dz   S |                     t)          |                     |dz   S )Nr   r      %   /r   s   -+   .rS      <   >    )NONSPCr   r~   startra   ry   rx   _parse_commentrw   _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   s         r   rv   zPSBaseParser._parse_main  s   MM!Q 	q66MGGAJJa!a%iL K!O99!DN.DLq5L$YY DN.DLq5L%ZZ199;;ZDN-DLq5L$YYDN,DLq5LYY[[ 	DN.DLq5L$YY DNDJ-DLq5L$YY DN,DLq5L$YY DN-DLq5L'\\q5LOOCFF###q5Lr   objc                 H    | j                             | j        |f           d S r   )rz   appendry   )r   r   s     r   r   zPSBaseParser._add_token<  s&    T.455555r   c                     t                               ||          }|s'| xj        ||d          z  c_        t          |          S |                    d          }| xj        |||         z  c_        | j        | _        |S Nr   )r   r   rx   r~   r   rv   rw   r   r   r   r   r   s        r   r   zPSBaseParser._parse_comment?  sx    JJq! 	NNae#NNq66MGGAJJ!AaC& ' r   c                    t                               ||          }|s'| xj        ||d          z  c_        t          |          S |                    d          }| xj        |||         z  c_        |||dz            }|dk    rd| _        | j        | _        |dz   S 	 t          | j        d          }n# t          $ r
 | j        }Y nw xY w| 
                    t          |                     | j        | _        |S )Nr   r      #r   r=   )END_LITERALr   rx   r~   r   hex_parse_literal_hexrw   r%   	Exceptionr   LITrv   )r   r   r   r   r   r   r   s          r   r   zPSBaseParser._parse_literalK  s   q!$$ 	NNae#NNq66MGGAJJ!AaC& a!a%iL99DH2DLq5L	" #DNG < <DD 	" 	" 	">DDD	"D		"""'s   B4 4CCc                 6   |||dz            }t                               |          r-t          | j                  dk     r| xj        |z  c_        |dz   S | j        r1| xj        t          t          | j        d          f          z  c_        | j        | _        |S )Nr         )	HEXmatchr~   r   rx   r&   intr   rw   r   r   r   r   s       r   r   zPSBaseParser._parse_literal_hex_  s    a!a%iL99Q<< 	CMMA--HHMHHq5L8 	:NNeS2%6%6$8999NN*r   c                    t                               ||          }|s'| xj        ||d          z  c_        t          |          S |                    d          }| xj        |||         z  c_        |||dz            }|dk    r!| xj        |z  c_        | j        | _        |dz   S t          j        t                    5  | 
                    t          | j                             d d d            n# 1 swxY w Y   | j        | _        |S )Nr   r   r   )
END_NUMBERr   rx   r~   r   r   rw   
contextlibsuppress
ValueErrorr   r   rv   r   s         r   r   zPSBaseParser._parse_numberi  s7   a## 	NNae#NNq66MGGAJJ!AaC& a!a%iL99NNaNN,DLq5L ,, 	1 	1OOC//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1's   ?(C33C7:C7c                    t                               ||          }|s'| xj        ||d          z  c_        t          |          S |                    d          }| xj        |||         z  c_        t          j        t                    5  |                     t          | j                             d d d            n# 1 swxY w Y   | j
        | _        |S r   )r   r   rx   r~   r   r   r   r   r   floatrv   rw   r   s        r   r   zPSBaseParser._parse_floatz  s    a## 	NNae#NNq66MGGAJJ!AaC&  ,, 	3 	3OOE$.11222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3's   (B??CCc                    t                               ||          }|r.|                    d          }| xj        |||         z  c_        n'| xj        ||d          z  c_        t	          |          S | j        dk    rd}n"| j        dk    rd}nt          | j                  }|                     |           | j        | _        |S )Nr   s   trueTs   falseF)	END_KEYWORDr   r   rx   r~   r   r   rv   rw   r   r   r   r   r   tokens         r   r   zPSBaseParser._parse_keyword  s    q!$$ 	

ANNa!f$NNNNNae#NNq66M>W$$&*EE^x''EE''E'r   c                 J   t                               ||          }|s'| xj        ||d          z  c_        t          |          S |                    d          }| xj        |||         z  c_        |||dz            }|dk    rd| _        | j        | _        |dz   S |dk    r%| xj        dz  c_        | xj        |z  c_        |dz   S |dk    r,| xj        dz  c_        | j        r| xj        |z  c_        |dz   S | 	                    | j                   | j
        | _        |dz   S )Nr   r   rU   r   rS   rT   )
END_STRINGr   rx   r~   r   oct_parse_string_1rw   r   r   rv   r   s         r   r   zPSBaseParser._parse_string  s0   a## 	NNae#NNq66MGGAJJ!AaC& a!a%iL::DH/DLq5L99JJ!OJJNNaNNq5L99JJ!OJJz !#1u''''1ur   c                 d   |||dz            }t                               |          r-t          | j                  dk     r| xj        |z  c_        |dz   S | j        r]t	          | j        d          }|dk     sJ d| j        d| d            | xj        t          |f          z  c_        | j        | _        |S |t          v r*| xj        t          t          |         f          z  c_        n5|dk    r/t          |          |dz   k    r||dz   |d	z            d
k    r|dz  }| j        | _        |dz   S )z;Parse literal strings

        PDF Reference 3.2.3
        r      rF      zInvalid octal z ()r   r   r   )

OCT_STRINGr   r~   r   r   rx   r&   r   rw   
ESC_STRING)r   r   r   r   chrcodes        r   r   zPSBaseParser._parse_string_1  sB   
 a!a%iLA 	3tx==1#4#4HHMHHq5LX 	$(A&&GS==="K48"K"K"K"K"K===NNeWJ///NN-DLH*__NNeZ]$4555NNN%ZZCFFQUNNqQQ/?5/H/H FA )1ur   c                     |||dz            }|dk    r,|                      t                     | j        | _        |dz  }n| j        | _        |S )Nr   r   )r   KEYWORD_DICT_BEGINrv   rw   _parse_hexstringr   s       r   r   zPSBaseParser._parse_wopen  sS    a!a%iL99OO.///+DLFAA0DLr   c                     |||dz            }|dk    r|                      t                     |dz  }| j        | _        |S )Nr   r   )r   KEYWORD_DICT_ENDrv   rw   r   s       r   r   zPSBaseParser._parse_wclose  sG    a!a%iL99OO,---FA'r   c                    t                               ||          }|s'| xj        ||d          z  c_        t          |          S |                    d          }| xj        |||         z  c_        t
                              d t                              d| j                            }|                     |           | j	        | _
        |S )Nr   c                 d    t          t          |                     d          d          f          S )Nr   r   )r&   r   group)r   s    r   <lambda>z/PSBaseParser._parse_hexstring.<locals>.<lambda>  s%    eSR00233 r   r   )END_HEX_STRINGr   rx   r~   r   HEX_PAIRsubSPCr   rv   rw   r   s         r   r   zPSBaseParser._parse_hexstring  s    !!!Q'' 	NNae#NNq66MGGAJJ!AaC& 33GGC((
 
 	'r   c                    | j         rt          d          | j        s	 |                                 }|r| j        r|                     dd           n%|                     | j        | j                  | _        n:# t          $ r- |                     dd          | _        d| _         | j        s Y nw xY w| j        | j                            d          }t          
                    d|           |S )Nr}   r   r   Tznexttoken: )rZ   r   rz   r   rx   rw   ru   ri   popro   rp   )r   changed_streamr   s      r   	nexttokenzPSBaseParser.nexttoken  s   8 	*())), 	!%! Hdn H LL****#'<<$,#G#GDL     $||E155|   , 	$   ##		)))***s   AA9 94B0/B0r   N)Nrk   )%r   r   r   r   r   r   r   r%   r#   rd   rg   r   rj   rs   r[   boolr   tupler&   r   r   r   rv   PSBaseParserTokenr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW      s       GGF8     
Q# Q Q Q Q      *c * * * * d
 c 4         	 	 	 	 	"%U
+ " " " ":huo    0,U ,s ,s , , , ,\6/ 6D 6 6 6 6
 
# 
# 
 
 
 
 # #    (E c c    u      "
e 
 
 
 
 
 
 # #    $u      4 3 3    :e      u      % C C    5&7!78      r   rW   ExtraTc                   2   e Zd ZdeddfdZddZdeddfdZdee	         ddfd	Z
d
edeee	                  fdZdeee	                  fdZdee	         ddfdZdededdfdZdedeeeee	                  f         fdZdededdfdZdee	         fdZdS )PSStackParserrX   r   Nc                 d    t                               | |           |                                  d S r   )rW   r   resetr\   s     r   r   zPSStackParser.__init__  s)    dB'''

r   c                 >    g | _         d | _        g | _        g | _        d S r   )contextcurtypecurstackresultsrb   s    r   r   zPSStackParser.reset  s"    QS#'4635r   rl   c                 d    t                               | |           |                                  d S r   )rW   r[   r   r{   s     r   r[   zPSStackParser.seek#  s)    $$$$

r   objsc                 :    | j                             |           d S r   )r   extendr   r   s     r   pushzPSStackParser.push'  s    T"""""r   rm   c                 @    | j         | d          }g | j         | d <   |S r   r   )r   rm   r   s      r   r   zPSStackParser.pop*  s+    }aRSS!qbccr   c                 "    | j         }g | _         |S r   r  r   s     r   popallzPSStackParser.popall/  s    }r   c                     	 t                               d|           n*# t          $ r t                               d           Y nw xY w| j                            |           d S )Nzadd_results: z!add_results: (unprintable object))ro   rp   r   r   r   r   s     r   add_resultszPSStackParser.add_results4  su    	;II.d..//// 	; 	; 	;II9:::::	;D!!!!!s     $AAr6   c                     | j                             || j        | j        f           |g c| _        | _        t                              d|d|           d S )Nzstart_type: pos=, type=)r   r   r   r   ro   rp   )r   rl   r6   s      r   
start_typezPSStackParser.start_type;  s\    S$,>???)-r%t}		;S;;4;;<<<<<r   c                 
   | j         |k    rt          d| j         d|          d | j        D             }| j                                        \  }| _         | _        t
                              d|d|d|           ||fS )NzType mismatch: z != c                     g | ]\  }}|S r   r   ).0_r   s      r   
<listcomp>z*PSStackParser.end_type.<locals>.<listcomp>C  s    222C222r   zend_type: pos=r  z, objs=)r   rA   r   r   r   ro   rp   )r   r6   r   rl   s       r   end_typezPSStackParser.end_type@  s    <4LLLDLLMMM22DM222-1\-=-=-?-?*dlDM		H3HHHHHHIIIT{r   r   c                     d S r   r   )r   rl   r   s      r   
do_keywordzPSStackParser.do_keywordH  re   r   c           	      z   | j         s|                                 \  }}t          |t          t          t
          t          t          t          f          r| 	                    ||f           nF|t          k    r|                     |d           n#|t          k    rI	 | 	                    |                     d                     n# t          $ r t          j        r Y nw xY w|t"          k    r|                     |d           n|t$          k    r	 |                     d          \  }}t'          |          dz  dk    rd|}t)          |          d t+          d|          D             }| 	                    ||f           n+# t          $ r t          j        r Y nw xY w|t,          k    r|                     |d           n|t.          k    rG	 | 	                    |                     d                     n# t          $ r t          j        r Y nw xY wt          |t0                    r?t2                              d|d	|d
| j                   |                     ||           nEt2                              d|d	|d
| j                   |                     ||           t<          | j        r|                                   | j         | j         !                    d          }	 t2                              d|           n*# tD          $ r t2                              d           Y nw xY w|S )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: c                 8    i | ]\  }}|t          |          |S r   )rB   )r  kvs      r   
<dictcomp>z,PSStackParser.nextobject.<locals>.<dictcomp>l  s1       "Q= %Q(==r   pzdo_keyword: pos=z, token=z, stack=zunknown token: pos=znextobject: z nextobject: (unprintable object))#r   r   r>   r   r   r   r%   r&   r   r   KEYWORD_ARRAY_BEGINr  KEYWORD_ARRAY_ENDr  rA   r
   r@   r   r   r~   PSSyntaxErrorr   KEYWORD_PROC_BEGINKEYWORD_PROC_ENDr)   ro   rp   r   r  errorPSExceptionr   rd   r   r   )r   rl   r   r   	error_msgr  r   s          r   
nextobjectzPSStackParser.nextobjectK  s    , ;	>>++LS%%#udC	!JKK 5"		3,''''---S))))+++IIdmmC001111"      ,,,S))))***"&--"4"4KS$4yy1}))$MT$M$M	+I666 &.q$&7&7  A
 IIsAh''''"      ,,,S))))***IIdmmC001111"      E9-- "		XsXXeXXt}XX   U++++		@# @ @"@ @.2m@ @   U+++!!| 

w , ;	x lq!!	:II,S,,---- 	: 	: 	:II899999	:
sI   (C C! C!A3F F#"F#(G= =HH3L $L87L8r   )r   r   r   r   r   r   r   r[   PSStackEntryr   r   listr   r  r  r%   r  r   PSStackTyper  r)   r  r!  r   r   r   r   r     s       8     6 6 6 6     #,v. #4 # # # #S T,v"67    
\&12    
"f!5 "$ " " " "=c = = = = = =
S U3[5H0I+I%J    c )     IL0 I I I I I Ir   r   )Fr   r   loggingrecollections.abcr   typingr   r   r   r   r   pdfminerr	   r
   pdfminer.utilsr   	getLoggerr   ro   r  r   r  rA   PSValueErrorr   r   r)   r,   r.   PSLiteralTablePSKeywordTabler5   r   r   r  r  r  r  r   r   r%   rB   rE   compiler   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r   rW   r   r#  r2   r$  r   r   r"  r   r   r   r   <module>r0     s7       				  				 $ $ $ $ $ $              , + + + + + + + # # # # # #g!! &*&(; ; ; ; ; ; ; ;       ,       & 7:y)44    GH%   * y))y))SYY 3t99 c$ii CII SZZ 3u:: C C    C C     bjbj	F		bj!!bj.//.//2:*++RZ
##
bj.//RZ%%
RZ	""







	 	
 %y)UBC g g g g g g g g` 
		iS	4S>6I S+f--.| | | | |L'&/ | | | | |r   