o
    ¾Ùøi*P  ã                
   @   sD  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 e¡ZejZejZejZejZej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¡Z.e ,d¡Z/e ,d¡Z0e ,d¡Z1e ,d ¡Z2e ,d!¡Z3e ,d"¡Z4e ,d¡Z5e ,d#¡Z6e ,d$¡Z7d%d&d'd(d)d*d+d,d-œZ8ee9e:eee;f Z<G d.d/„ d/ƒZ=e
d0ƒZ>ee)e9e:ee;e?e e@eef e>f ZAeBeCeAe> f ZDG d1d2„ d2e=e	e> ƒZEdS )3é    N)ÚIterator)ÚAnyÚBinaryIOÚGenericÚTypeVarÚUnion)ÚpsexceptionsÚsettings)Úchoplistc                   @   s   e Zd ZdZdS )ÚPSObjectz0Base class for all PS or PDF-related data types.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú^/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfminer/psparser.pyr      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__/   ó   
zPSLiteral.__init__c                 C   ó   | j }d|›�S ©Nú/r   r   r   r   r   Ú__repr__2   ó   
zPSLiteral.__repr__)
r   r   r   r   r   ÚstrÚbytesÚNameTyper   r   r   r   r   r   r   !   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   B   r   zPSKeyword.__init__c                 C   r   r   r   r   r   r   r   r   E   r    zPSKeyword.__repr__)r   r   r   r   r"   r   r!   r   r   r   r   r   r$   7   s    
r$   Ú_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 )
ÚPSSymbolTablezƒA 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   ©Údictr'   )r   r'   r   r   r   r   S   r    zPSSymbolTable.__init__r   c                 C   s0   || j v r| j | }|S |  |¡}|| j |< |S r   r(   )r   r   Úlitr   r   r   ÚinternW   s   


þ
zPSSymbolTable.intern)
r   r   r   r   Útyper%   r   r   r#   r+   r   r   r   r   r&   M   s    r&   ó   {ó   }ó   [ó   ]s   <<s   >>Úxr   c                 C   sd   t | tƒr$t | jtƒr| jS zt| jdƒW S  ty#   t| jƒ Y S w tjr.td| ›�ƒ‚t| ƒS )Núutf-8zLiteral required: )Ú
isinstancer   r   r!   ÚUnicodeDecodeErrorr	   ÚSTRICTÚPSTypeError)r1   r   r   r   Úliteral_namen   s   
ÿr7   c                 C   s8   t | tƒstjrtd| ›�ƒ‚| }|S t| jddƒ}|S )NzKeyword required: r2   Úignore)r3   r$   r	   r5   r6   r!   r   )r1   r   r   r   r   Úkeyword_name|   s   
ÿr9   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dB deddfdd„Zdeddfdd„Zdef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¡ d S )NFr   )rK   ÚeofÚseek©r   rK   r   r   r   r   ¦   s   zPSBaseParser.__init__c                 C   s    d| j j› d| j›d| j› d�S )Nú<z: z	, bufpos=ú>)Ú	__class__r   rK   Úbufpos©r   r   r   r   r   «   s    zPSBaseParser.__repr__c                 C   ó   d S r   r   rS   r   r   r   Úflush®   ó   zPSBaseParser.flushc                 C   s   |   ¡  d S r   )rU   rS   r   r   r   Úclose±   ó   zPSBaseParser.closec                 C   s   | j | j S r   )rR   ÚcharposrS   r   r   r   Útell´   rX   zPSBaseParser.telléP   ÚposÚnc                 C   sT   | j  ¡ }|s| j| j }| j  |¡ t d|› d| j  |¡›�¡ | j  |¡ d S )Nzpoll(z): )rK   rZ   rR   rY   rM   ÚlogÚdebugÚread)r   r\   r]   Úpos0r   r   r   Úpoll·   s   
zPSBaseParser.pollc                 C   sR   t  d|›�¡ | j |¡ || _d| _d| _| j| _d| _	d| _
g | _d| _dS )z'Seeks the parser to the given position.zseek: ó    r   FN)r^   r_   rK   rM   rR   ÚbufrY   Ú_parse_mainÚ_parse1Ú	_curtokenÚ_curtokenposÚ_tokensrL   ©r   r\   r   r   r   rM   ¿   s   
zPSBaseParser.seekc                 C   sH   | j t| jƒk r
dS | j ¡ | _| j | j¡| _| jstdƒ‚d| _ dS )NFúUnexpected EOFr   )	rY   Úlenrd   rK   rZ   rR   r`   ÚBUFSIZÚPSEOFrS   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
|›d|›�¡ ||fS )z3Fetches a next line that ends either with \r or \n.rc   Fé   ó   
r   éÿÿÿÿNó   Tz
nextline: z, )
rR   rY   ro   rd   ÚEOLÚsearchÚendrl   r^   r_   )r   ÚlinebufÚlineposÚeolÚcÚmr   r   r   ÚnextlineÙ   s.   ízPSBaseParser.nextlinec                 c   s¾   � | j  dtj¡ | j  ¡ }d}|dkr]|}td|| j ƒ}| j  |¡ | j  || ¡}|s0dS 	 t| d¡| d¡ƒ}|dkrE|| }n||d… | V  |d|… }d}q1|dksdS dS )ziFetches a next line backward.

        This is used to locate the trailers at the end of a file.
        r   rc   rp   rs   rq   rr   N)	rK   rM   ÚioÚSEEK_ENDrZ   Úmaxrm   r`   Úrfind)r   r\   rd   ÚprevposÚsr]   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r€d| _d| _| j| _|d S |d	kr�d| _| j| _|d S |d
kržd| _| j| _|d S |dkr¦|d S |  t|ƒ¡ |d S )Nr   rp   ó   %ó   /rc   s   -+ó   .rG   ó   <ó   >ó    )ÚNONSPCru   rl   ÚstartrR   rh   rg   Ú_parse_commentrf   Ú_parse_literalÚisdigitÚ_parse_numberÚ_parse_floatÚisalphaÚ_parse_keywordÚparenÚ_parse_stringÚ_parse_wopenÚ_parse_wcloseÚ
_add_tokenÚKWD©r   r‚   r„   r{   Újrz   r   r   r   re     sV   
zPSBaseParser._parse_mainÚobjc                 C   s   | j  | j|f¡ d S r   )ri   Úappendrh   )r   rœ   r   r   r   r˜   <  s   zPSBaseParser._add_tokenc                 C   sZ   t  ||¡}|s|  j||d … 7  _t|ƒS | d¡}|  j|||… 7  _| j| _|S ©Nr   )rt   ru   rg   rl   rŒ   re   rf   ©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   rp   ó   #rc   r2   )ÚEND_LITERALru   rg   rl   rŒ   ÚhexÚ_parse_literal_hexrf   r!   Ú	Exceptionr˜   ÚLITre   )r   r‚   r„   r{   r›   rz   r   r   r   r   rŽ   K  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 )Nrp   é   é   )	ÚHEXÚmatchrl   r¢   rg   r"   ÚintrŽ   rf   ©r   r‚   r„   rz   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 t t	¡� |  
t| jƒ¡ W d   ƒ n1 sZw   Y  | j| _|S )Nr   rp   r‡   )Ú
END_NUMBERru   rg   rl   rŒ   r‘   rf   Ú
contextlibÚsuppressÚ
ValueErrorr˜   rª   re   rš   r   r   r   r�   i  s    
ÿzPSBaseParser._parse_numberc                 C   s”   t  ||¡}|s|  j||d … 7  _t|ƒS | d¡}|  j|||… 7  _t t¡� |  t	| jƒ¡ W d   ƒ n1 s?w   Y  | j
| _|S rž   )r¬   ru   rg   rl   rŒ   r­   r®   r¯   r˜   Úfloatre   rf   rŸ   r   r   r   r‘   z  s   
ÿzPSBaseParser._parse_floatc                 C   s�   t  ||¡}|r| d¡}|  j|||… 7  _n|  j||d … 7  _t|ƒS | jdkr0d}n| jdkr8d}nt| jƒ}|  |¡ | j| _|S )Nr   s   trueTs   falseF)	ÚEND_KEYWORDru   rŒ   rg   rl   r™   r˜   re   rf   ©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   rp   rI   rc   rG   rH   )Ú
END_STRINGru   rg   rl   rŒ   ÚoctÚ_parse_string_1rf   r”   r˜   re   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rHt| jdƒ}|dk s8J d| j›d|› d�ƒ‚|  jt|fƒ7  _| j| _|S |t	v rY|  jtt	| fƒ7  _n|dkrut|ƒ|d kru||d |d	 … d
kru|d7 }| j| _|d S )z;Parse literal strings

        PDF Reference 3.2.3
        rp   é   r:   é   zInvalid octal z (ú)rs   r¦   rq   )
Ú
OCT_STRINGr©   rl   rµ   rª   rg   r"   r•   rf   Ú
ESC_STRING)r   r‚   r„   rz   Úchrcoder   r   r   r¶   ²  s     0zPSBaseParser._parse_string_1c                 C   sB   |||d … }|dkr|   t¡ | j| _|d7 }|S | j| _|S )Nrp   rˆ   )r˜   ÚKEYWORD_DICT_BEGINre   rf   Ú_parse_hexstringr«   r   r   r   r–   Ï  s   
ÿzPSBaseParser._parse_wopenc                 C   s6   |||d … }|dkr|   t¡ |d7 }| j| _|S )Nrp   r‰   )r˜   ÚKEYWORD_DICT_ENDre   rf   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>rc   )ÚEND_HEX_STRINGru   rg   rl   rŒ   ÚHEX_PAIRÚsubÚSPCr˜   re   rf   r²   r   r   r   r¾   á  s   
þ
zPSBaseParser._parse_hexstringc                 C   s    | j rtdƒ‚| js@z|  ¡ }|r| jr|  dd¡ n	|  | j| j¡| _W n ty<   |  dd¡| _d| _ | js:‚ Y nw | jr
| j d¡}t	 
d|›�¡ |S )Nrk   rq   r   Tznexttoken: )rL   rn   ri   ro   rg   rf   rd   rY   Úpopr^   r_   )r   Úchanged_streamr³   r   r   r   Ú	nexttokenð  s(   
€ÿù÷zPSBaseParser.nexttoken©r   N)Nr[   )%r   r   r   r   rm   r   r   r!   r   rU   rW   rª   rZ   rb   rM   Úboolro   Útupler"   r|   r   rƒ   re   ÚPSBaseParserTokenr˜   r�   rŽ   r£   r�   r‘   r“   r•   r¶   r–   r—   r¾   rÈ   r   r   r   r   rJ   ¡   s6    

.

rJ   Ú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 ) ÚPSStackParserrK   r   Nc                 C   ó   t  | |¡ |  ¡  d S r   )rJ   r   ÚresetrN   r   r   r   r     ó   zPSStackParser.__init__c                 C   s   g | _ d | _g | _g | _d S r   )ÚcontextÚcurtypeÚcurstackÚresultsrS   r   r   r   rÐ     s   
zPSStackParser.resetr\   c                 C   rÏ   r   )rJ   rM   rÐ   rj   r   r   r   rM   #  rÑ   zPSStackParser.seekÚobjsc                 G   s   | j  |¡ d S r   )rÔ   Úextend©r   rÖ   r   r   r   Úpush'  s   zPSStackParser.pushr]   c                 C   s$   | j | d … }g | j | d …< |S r   ©rÔ   )r   r]   rÖ   r   r   r   rÆ   *  s   zPSStackParser.popc                 C   s   | j }g | _ |S r   rÚ   rØ   r   r   r   Úpopall/  s   zPSStackParser.popallc                 G   sB   z
t  d|›�¡ W n ty   t  d¡ Y nw | j |¡ d S )Nzadd_results: z!add_results: (unprintable object))r^   r_   r¤   rÕ   r×   rØ   r   r   r   Úadd_results4  s   ÿzPSStackParser.add_resultsr,   c                 C   s>   | j  || j| jf¡ |g | _| _t d|›d|›�¡ d S )Nzstart_type: pos=ú, type=)rÒ   r�   rÓ   rÔ   r^   r_   )r   r\   r,   r   r   r   Ú
start_type;  s   zPSStackParser.start_typec                 C   sh   | j |krtd| j ›d|›�ƒ‚dd„ | jD ƒ}| j ¡ \}| _ | _t d|›d|›d|›�¡ ||fS )NzType mismatch: z != c                 S   s   g | ]\}}|‘qS r   r   )Ú.0Ú_rœ   r   r   r   Ú
<listcomp>C  s    z*PSStackParser.end_type.<locals>.<listcomp>zend_type: pos=rÝ   z, objs=)rÓ   r6   rÔ   rÒ   rÆ   r^   r_   )r   r,   rÖ   r\   r   r   r   Úend_type@  s   
zPSStackParser.end_typer³   c                 C   rT   r   r   )r   r\   r³   r   r   r   Ú
do_keywordH  rV   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 n¢w |tkrN|  |d¡ n–|tkr‹z+|  d¡\}}t|ƒd dkrkd|›�}t|ƒ‚dd„ td|ƒD ƒ}|  	||f¡ W nf tyŠ   tjrˆ‚ Y nZw |tkr–|  |d¡ nN|tkr²z
|  	|  d¡¡ W n? ty±   tjr¯‚ Y n3w t|tƒrÍt d	|›d
|›d| j›�¡ |  ||¡ nt d|›d
|›d| j›�¡ |  ||¡ t‚| jrèq |   ¡  | j r| j  !d¡}zt d|›�¡ W |S  t"�y   t d¡ Y |S w )zÎYields 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                 S   s"   i | ]\}}|d urt |ƒ|“qS r   )r7   )rß   ÚkÚvr   r   r   Ú
<dictcomp>l  s
    þz,PSStackParser.nextobject.<locals>.<dictcomp>Úpzdo_keyword: pos=z, token=z, stack=zunknown token: pos=znextobject: z nextobject: (unprintable object))#rÕ   rÈ   r3   rª   r°   rÊ   r!   r"   r   rÙ   ÚKEYWORD_ARRAY_BEGINrÞ   ÚKEYWORD_ARRAY_ENDrâ   r6   r	   r5   r½   r¿   rl   ÚPSSyntaxErrorr
   ÚKEYWORD_PROC_BEGINÚKEYWORD_PROC_ENDr$   r^   r_   rÔ   rã   ÚerrorÚPSExceptionrÒ   rU   rÆ   r¤   )r   r\   r³   rÖ   Ú	error_msgrå   rœ   r   r   r   Ú
nextobjectK  s†   ÿÿ
þÿÿÿÿ
ÿÿÿÿÅ<þþzPSStackParser.nextobjectrÉ   )r   r   r   r   r   rÐ   rª   rM   ÚPSStackEntryrÍ   rÙ   ÚlistrÆ   rÛ   rÜ   r!   rÞ   rË   ÚPSStackTyperâ   r$   rã   rò   r   r   r   r   rÎ     s    
"rÎ   )Fr­   r}   ÚloggingÚreÚcollections.abcr   Útypingr   r   r   r   r   Úpdfminerr   r	   Úpdfminer.utilsr
   Ú	getLoggerr   r^   rð   rn   rì   r6   ÚPSValueErrorr   r   r$   r%   r&   ÚPSLiteralTableÚPSKeywordTabler+   r¥   r™   rí   rî   rê   rë   r½   r¿   r!   r7   r9   Úcompilert   rÅ   r‹   r¨   r¡   rÂ   rÃ   r¬   r±   r´   rº   r»   r°   rÊ   r"   rÌ   rJ   rÍ   rô   r)   rõ   rË   rª   ró   rÎ   r   r   r   r   Ú<module>   sz   











ø  rÿ