a
    —Æàgq+  ã                   @   sŒ   d dl mZmZ d dlmZ d dlZd dlZzd dlZW n eyV   d dl	mZ Y n0 G dd„ de
ƒZG dd„ de
ƒZG d	d
„ d
eƒZdS )é    )ÚFeatureLibErrorÚIncludedFeaNotFound)ÚFeatureLibLocationN)Úcythonc                   @   sÐ   e Zd ZdZdZdZeeefZdZdZdZ	dZ
dZd	Zd
ZdZdZdZdZdZdZdZdZdZed Zee d Ze d¡ZdZdZdd„ Zdd„ Zdd„ Z dd„ Z!d d!„ Z"d"d#„ Z#d$d%„ Z$d&d'„ Z%d(d)„ Z&d*S )+ÚLexerÚNUMBERÚHEXADECIMALÚOCTALÚFLOATÚSTRINGÚNAMEÚFILENAMEÚ
GLYPHCLASSÚCIDÚSYMBOLÚCOMMENTÚNEWLINEÚANONYMOUS_BLOCKz 	z
z,;:-+'{}[]<>()=Ú
0123456789Ú0123456789ABCDEFabcdefZ4ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz	_+*:.^~!\z
_.+*:^~!/-z^[A-Za-z_0-9.\-]+$ÚNORMALc                 C   s4   || _ d| _d| _d| _|| _t|ƒ| _tj| _	d S )Né   r   )
Ú	filename_Úline_Úpos_Úline_start_Útext_ÚlenÚtext_length_r   ÚMODE_NORMAL_Úmode_)ÚselfÚtextÚfilename© r$   úO/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/feaLib/lexer.pyÚ__init__+   s    
zLexer.__init__c                 C   s   | S ©Nr$   ©r!   r$   r$   r%   Ú__iter__4   s    zLexer.__iter__c                 C   s   |   ¡ S r'   ©Ú__next__r(   r$   r$   r%   Únext7   s    z
Lexer.nextc                 C   s(   |   ¡ \}}}|tjkr |||fS q d S r'   )Únext_r   r   )r!   Ú
token_typeÚtokenÚlocationr$   r$   r%   r+   :   s    
zLexer.__next__c                 C   s$   | j | j d }t| jpd| j|ƒS )Nr   z
<features>)r   r   r   r   r   )r!   Úcolumnr$   r$   r%   Ú	location_@   s    zLexer.location_c           
      C   s  |   tj¡ |  ¡ }| j}| j}t|ƒ}||kr6tƒ ‚|| }|d |k rV||d  nd }|dkr’|  jd7  _|  jd7  _| j| _	tj
d |fS |dkrÖ|  j|dkr¬dnd7  _|  jd7  _| j| _	tj
d |fS |dk�r|  tj¡ tj||| j… |fS | jtju �r�|dk�r$td|ƒ‚|  d¡ | j|k �rD|| j nd }|dk�r\td	|ƒ‚|  jd7  _tj| _tj||d | jd … |fS |d
k�rà|tjv �rà|  jd7  _|   tj¡ tjt||d | j… dƒ|fS |dk�rR|  jd7  _|   tj¡ ||d | j… }t|ƒdk �r.td|ƒ‚tj |¡�sFtd|ƒ‚tj||fS |tjv �r¤|  jd7  _|   tj¡ ||| j… }|dk�r˜tj| _tj||fS |dk�rî|dv �rî|  jd7  _|   tj¡ tjt||| j… dƒ|fS |dk�r,|tjv �r,|   tj¡ tjt||| j… dƒ|fS |tjv �r¬|   tj¡ | j|k�s`|| j dk�r|tjt||| j… dƒ|fS |   d¡ |   tj¡ tj t!||| j… ƒ|fS |dk�rD|tjv �rD|  jd7  _|   tj¡ | j|k�sø|| j dk�rtjt||| j… dƒ|fS |   d¡ |   tj¡ tj t!||| j… ƒ|fS |tj"v �rj|  jd7  _tj#||fS |dk�rð|  jd7  _|  d¡ | j| j$k �ræ| j| j dk�ræ|  jd7  _t% &dd||d | jd … ¡}	tj'|	|fS td|ƒ‚td| |ƒ‚d S )Nr   Ú
úé   ú#ú(zExpected '(' before file nameú)zExpected ')' after file nameú\é
   ú@zExpected glyph class namezOGlyph class names must consist of letters, digits, underscore, period or hyphenÚincludeÚ0ÚxXé   é   Ú.ú-ú"z[
]Ú z Expected '"' to terminate stringzUnexpected character: %r)(Ú
scan_over_r   ÚCHAR_WHITESPACE_r2   r   r   r   ÚStopIterationr   r   r   Úscan_until_ÚCHAR_NEWLINE_r   r    ÚMODE_FILENAME_r   r   r   ÚCHAR_DIGIT_r   ÚintÚCHAR_NAME_CONTINUATION_ÚRE_GLYPHCLASSÚmatchr   ÚCHAR_NAME_START_r   ÚCHAR_HEXDIGIT_r   r	   r   r
   ÚfloatÚCHAR_SYMBOL_r   r   ÚreÚsubr   )
r!   r0   Ústartr"   ÚlimitZcur_charZ	next_charZ
glyphclassr/   Ústringr$   r$   r%   r-   D   s²    





 

ý




  
zLexer.next_c                 C   s2   | j }|| jk r(| j| |v r(|d7 }q|| _ d S ©Nr   ©r   r   r   )r!   ZvalidÚpr$   r$   r%   rE   ¥   s    
zLexer.scan_over_c                 C   s2   | j }|| jk r(| j| |vr(|d7 }q|| _ d S rY   rZ   )r!   Zstop_atr[   r$   r$   r%   rH   «   s    
zLexer.scan_until_c                 C   s�   |   ¡ }| ¡ }|  tj¡ |  tj¡ d| d }tj|| j| j	d … dd�}t
|ƒdkrjtd| |ƒ‚|  j	t
|d ƒ7  _	tj|d |fS )Nz}\s*z\s*;r   )Úmaxsplitr5   z-Expected '} %s;' to terminate anonymous blockr   )r2   ÚstriprH   r   rI   rE   rT   Úsplitr   r   r   r   r   )r!   Útagr0   Úregexpr^   r$   r$   r%   Úscan_anonymous_block±   s    ÿzLexer.scan_anonymous_blockN)'Ú__name__Ú
__module__Ú__qualname__r   r   r	   ZNUMBERSr
   r   r   r   r   r   r   r   r   r   rF   rI   rS   rK   rQ   ZCHAR_LETTER_rP   rM   rT   ÚcompilerN   r   rJ   r&   r)   r,   r+   r2   r-   rE   rH   ra   r$   r$   r$   r%   r      sD   

	ar   c                   @   sJ   e Zd ZdZddœdd„Zdd„ Zdd	„ Zd
d„ Zedd„ ƒZ	dd„ Z
dS )ÚIncludingLexeraŸ  A Lexer that follows include statements.

    The OpenType feature file specification states that due to
    historical reasons, relative imports should be resolved in this
    order:

    1. If the source font is UFO format, then relative to the UFO's
       font directory
    2. relative to the top-level include file
    3. relative to the parent include file

    We only support 1 (via includeDir) and 2.
    N)Ú
includeDirc                C   s&   |   |¡g| _| jd j| _|| _dS )aO  Initializes an IncludingLexer.

        Behavior:
            If includeDir is passed, it will be used to determine the top-level
            include directory to use for all encountered include statements. If it is
            not passed, ``os.path.dirname(featurefile)`` will be considered the
            include directory.
        r   N)Úmake_lexer_Úlexers_r   Úfeaturefilepathrg   )r!   Zfeaturefilerg   r$   r$   r%   r&   Ï   s    
zIncludingLexer.__init__c                 C   s   | S r'   r$   r(   r$   r$   r%   r)   Ý   s    zIncludingLexer.__iter__c                 C   s   |   ¡ S r'   r*   r(   r$   r$   r%   r,   à   s    zIncludingLexer.nextc              
   C   sL  | j �rB| j d }zt|ƒ\}}}W n  tyD   | j  ¡  Y q Y n0 |tju �r6|dk�r6| ¡ \}}}|tjur~td|ƒ‚tj	 
|¡r�|}nB| jd ur¢| j}	n"| jd ur¼tj	 | j¡}	nt ¡ }	tj	 |	|¡}t| j ƒdkrêtd|ƒ‚z| j  |  |¡¡ W n2 t�y2 }
 zt||ƒ|
‚W Y d }
~
n
d }
~
0 0 q |||fS q tƒ ‚d S )Néÿÿÿÿr<   zExpected file nameé   zToo many recursive includes)ri   r,   rG   Úpopr   r   r   r   ÚosÚpathÚisabsrg   rj   ÚdirnameÚgetcwdÚjoinr   Úappendrh   ÚFileNotFoundErrorr   )r!   Úlexerr.   r/   r0   Z
fname_typeZfname_tokenZfname_locationro   ZcurpathÚerrr$   r$   r%   r+   ã   s6    







$zIncludingLexer.__next__c                 C   sX   t | dƒr| d }}n| d }}t|ddd�}| ¡ }t|dd ƒ}|rN| ¡  t||ƒS )NÚreadFTÚrz	utf-8-sig)ÚencodingÚname)ÚhasattrÚopenrx   ÚgetattrÚcloser   )Zfile_or_pathÚfileobjÚclosingr#   Údatar$   r$   r%   rh   
  s    

zIncludingLexer.make_lexer_c                 C   s   | j d  |¡S )Nrk   )ri   ra   )r!   r_   r$   r$   r%   ra     s    z#IncludingLexer.scan_anonymous_block)rb   rc   rd   Ú__doc__r&   r)   r,   r+   Ústaticmethodrh   ra   r$   r$   r$   r%   rf   À   s   '
rf   c                   @   s   e Zd ZdZdd„ ZdS )ÚNonIncludingLexerzBLexer that does not follow `include` statements, emits them as-is.c                 C   s   t | jd ƒS )Nr   )r,   ri   r(   r$   r$   r%   r+     s    zNonIncludingLexer.__next__N)rb   rc   rd   rƒ   r+   r$   r$   r$   r%   r…     s   r…   )ZfontTools.feaLib.errorr   r   ZfontTools.feaLib.locationr   rT   rn   r   ÚImportErrorZfontTools.miscÚobjectr   rf   r…   r$   r$   r$   r%   Ú<module>   s    4[