U
    Dvf3                     @   s  d dl mZ d dlm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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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&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/d0 d0eZG d1d2 d2eZG d3d4 d4eZG d5d6 d6eZG d7d8 d8eZd9S ):    )VoltLibError)
NamedTuplec                   @   sF   e Zd ZU eed< eed< eed< eed< eed< eed< dd Zd	S )
PosadvdxdyZadv_adjust_byZdx_adjust_byZdy_adjust_byc                 C   s|   d}dD ]f}t | |}|d k	r|d|  d| 7 }t | | di }| D ]\}}|d| d| 7 }qPq|d7 }|S )Nz POS)r   r   r    Z
_adjust_byz ADJUST_BY  AT z END_POS)getattrupperitems)selfresattrvalueZ	adjust_bysizeZ
adjustment r   9/tmp/pip-unpacked-wheel-qlge9rch/fontTools/voltLib/ast.py__str__   s    
zPos.__str__N)__name__
__module____qualname__int__annotations__dictr   r   r   r   r   r      s   
r   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	ElementNc                 C   s
   || _ d S Nlocation)r   r   r   r   r   __init__   s    zElement.__init__c                 C   s   d S r   r   )r   builderr   r   r   build   s    zElement.buildc                 C   s   t d S r   )NotImplementedErrorr   r   r   r   r   !   s    zElement.__str__)Nr   r   r   r   r!   r   r   r   r   r   r      s   
r   c                   @   s   e Zd ZdS )	StatementNr   r   r   r   r   r   r   r%   %   s   r%   c                   @   s   e Zd ZdS )
ExpressionNr&   r   r   r   r   r'   )   s   r'   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VoltFilec                 C   s   t j| d d g | _d S )Nr   )r%   r   
statementsr#   r   r   r   r   .   s    zVoltFile.__init__c                 C   s   | j D ]}|| qd S r   )r)   r!   )r   r    sr   r   r   r!   2   s    
zVoltFile.buildc                 C   s   dd dd | jD  d S )N
c                 s   s   | ]}t |V  qd S r   str.0r*   r   r   r   	<genexpr>7   s     z#VoltFile.__str__.<locals>.<genexpr>z END
)joinr)   r#   r   r   r   r   6   s    zVoltFile.__str__Nr$   r   r   r   r   r(   -   s   r(   c                   @   s   e Zd ZdddZdd ZdS )GlyphDefinitionNc                 C   s.   t | | || _|| _|| _|| _|| _d S r   )r%   r   nameidunicodetype
components)r   r3   gidZgunicodegtyper7   r   r   r   r   r   ;   s    zGlyphDefinition.__init__c                 C   s   d| j  d| j }| jd k	rht| jdkrTddd | jD }|d| d7 }n|d	| jd
  7 }| jd k	r|d| j 7 }| jd k	r|d| j 7 }|d7 }|S )NzDEF_GLYPH "z" ID    ,c                 s   s   | ]}d |dV  qdS )zU+Z04XNr   )r/   ur   r   r   r0   G   s     z*GlyphDefinition.__str__.<locals>.<genexpr>z UNICODEVALUES ""z	 UNICODE r   z TYPE z COMPONENTS z
 END_GLYPH)r3   r4   r5   lenr1   r6   r7   )r   r   Zunicodesr   r   r   r   C   s    


zGlyphDefinition.__str__)Nr   r   r   r   r   r   r   r   r   r2   :   s   
r2   c                   @   s(   e Zd ZdddZd	ddZdd ZdS )
GroupDefinitionNc                 C   s"   t | | || _|| _d | _d S r   )r%   r   r3   enumglyphs_)r   r3   rA   r   r   r   r   r   T   s    zGroupDefinition.__init__c                 C   sd   |d k	r$| j |kr$td| j  | j| jd kr^|d krDt| j h}n|| j  | j|| _| jS )NzGroup "%s" contains itself.)r3   r   r   rB   setaddrA   glyphSet)r   groupsr   r   r   rE   Z   s     
zGroupDefinition.glyphSetc                 C   s(   | j rt| j pd}d| j d| dS )N zDEF_GROUP ""
z

END_GROUP)rA   r-   r3   r   rA   r   r   r   r   g   s    zGroupDefinition.__str__)N)N)r   r   r   r   rE   r   r   r   r   r   r@   S   s   

r@   c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
	GlyphNamez%A single glyph name, such as cedilla.Nc                 C   s   t | | || _d S r   )r'   r   glyph)r   rK   r   r   r   r   r   o   s    zGlyphName.__init__c                 C   s   | j fS r   rK   r#   r   r   r   rE   s   s    zGlyphName.glyphSetc                 C   s   d| j  dS )Nz GLYPH "r=   rL   r#   r   r   r   r   v   s    zGlyphName.__str__)Nr   r   r   __doc__r   rE   r   r   r   r   r   rJ   l   s   
rJ   c                   @   s4   e Zd ZdZdddZdd ZdddZd	d
 ZdS )EnumzAn enumNc                 C   s   t | | || _d S r   )r'   r   rA   )r   rA   r   r   r   r   r   }   s    zEnum.__init__c                 c   s   |   D ]
}|V  qd S r   )rE   )r   er   r   r   __iter__   s    zEnum.__iter__c                 C   sF   g }| j D ]2}t|ttfr.||| q
||  q
t|S r   )rA   
isinstance	GroupNamerO   extendrE   tuple)r   rF   Zglyphselementr   r   r   rE      s    
zEnum.glyphSetc                 C   s"   d dd | jD }d| dS )NrG   c                 s   s   | ]}t |V  qd S r   r,   )r/   rP   r   r   r   r0      s     zEnum.__str__.<locals>.<genexpr>z ENUMz	 END_ENUM)r1   rA   rI   r   r   r   r      s    zEnum.__str__)N)N)r   r   r   rN   r   rQ   rE   r   r   r   r   r   rO   z   s
   

	rO   c                   @   s,   e Zd ZdZd	ddZd
ddZdd ZdS )rS   zA glyph groupNc                 C   s   t | | || _|| _d S r   )r'   r   groupparser_)r   rW   parserr   r   r   r   r      s    zGroupName.__init__c                 C   s>   | j | j}|d k	r(||| _| jS td| j | jd S )Nz!Group "%s" is used but undefined.)rX   Zresolve_grouprW   rE   rB   r   r   )r   rF   rW   r   r   r   rE      s     zGroupName.glyphSetc                 C   s   d| j  dS )Nz GROUP "r=   )rW   r#   r   r   r   r      s    zGroupName.__str__)N)NrM   r   r   r   r   rS      s   


rS   c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
RangezA glyph rangeNc                 C   s"   t | | || _|| _|| _d S r   )r'   r   startendrY   )r   r[   r\   rY   r   r   r   r   r      s    zRange.__init__c                 C   s   t | j| j| jS r   )rU   rY   Zglyph_ranger[   r\   r#   r   r   r   rE      s    zRange.glyphSetc                 C   s   d| j  d| j dS )Nz RANGE "z" TO "r=   )r[   r\   r#   r   r   r   r      s    zRange.__str__)NrM   r   r   r   r   rZ      s   
rZ   c                   @   s   e Zd ZdddZdd ZdS )ScriptDefinitionNc                 C   s"   t | | || _|| _|| _d S r   )r%   r   r3   taglangs)r   r3   r^   r_   r   r   r   r   r      s    zScriptDefinition.__init__c                 C   sT   d}| j d k	r |d| j  d7 }|d| j d7 }| jD ]}|| 7 }q8|d7 }|S )NZ
DEF_SCRIPT NAME "r=    TAG ""

Z
END_SCRIPT)r3   r^   r_   )r   r   langr   r   r   r      s    

zScriptDefinition.__str__)Nr?   r   r   r   r   r]      s   
r]   c                   @   s   e Zd ZdddZdd ZdS )LangSysDefinitionNc                 C   s"   t | | || _|| _|| _d S r   )r%   r   r3   r^   features)r   r3   r^   re   r   r   r   r   r      s    zLangSysDefinition.__init__c                 C   sT   d}| j d k	r |d| j  d7 }|d| j d7 }| jD ]}|| 7 }q8|d7 }|S )NZDEF_LANGSYSr`   r=   ra   rb   zEND_LANGSYS
)r3   r^   re   )r   r   Zfeaturer   r   r   r      s    

zLangSysDefinition.__str__)Nr?   r   r   r   r   rd      s   
rd   c                   @   s   e Zd ZdddZdd ZdS )FeatureDefinitionNc                 C   s"   t | | || _|| _|| _d S r   )r%   r   r3   r^   lookups)r   r3   r^   rg   r   r   r   r   r      s    zFeatureDefinition.__init__c                 C   sD   d| j  d| j d}|dddd | jD  d 7 }|d7 }|S )	NzDEF_FEATURE NAME "z" TAG "rH   r   c                 s   s   | ]}d | dV  qdS )zLOOKUP "r=   Nr   )r/   lr   r   r   r0      s     z,FeatureDefinition.__str__.<locals>.<genexpr>r+   zEND_FEATURE
)r3   r^   r1   rg   )r   r   r   r   r   r      s    "zFeatureDefinition.__str__)Nr?   r   r   r   r   rf      s   
rf   c                   @   s   e Zd ZdddZdd ZdS )LookupDefinitionNc                 C   sL   t | | || _|| _|| _|| _|| _|| _|| _|| _	|	| _
|
| _d S r   )r%   r   r3   process_baseprocess_marksmark_glyph_set	directionreversalcommentscontextsubpos)r   r3   rj   rk   rl   rm   rn   ro   rp   rq   rr   r   r   r   r   r      s    zLookupDefinition.__init__c                 C   s2  d| j  d}|d| jrdpd 7 }| jrx|d7 }| jrN|d| j d7 }qt| jtrn|d| j d7 }q|d7 }n|d	7 }| jd k	r|d
| j 7 }| jr|d7 }| jd k	r| j	dd}|d| d7 }| j
r|dddd | j
D  7 }n|d7 }| jr|d| j 7 }| jr.|d| j 7 }|S )NzDEF_LOOKUP "r=   r   ZPROCESS_BASEZ	SKIP_BASEz PROCESS_MARKS zMARK_GLYPH_SET "ALLz SKIP_MARKSz DIRECTION z	 REVERSALr+   z\nz
COMMENTS "c                 s   s   | ]}t |V  qd S r   r,   r/   cr   r   r   r0     s     z+LookupDefinition.__str__.<locals>.<genexpr>z
IN_CONTEXT
END_CONTEXT)r3   rj   rk   rl   rR   r-   rm   rn   ro   replacerp   r1   rq   rr   )r   r   ro   r   r   r   r     s2    


 zLookupDefinition.__str__)Nr?   r   r   r   r   ri      s    
ri   c                   @   s   e Zd ZdddZdd ZdS )SubstitutionDefinitionNc                 C   s   t | | || _d S r   )r%   r   mapping)r   rx   r   r   r   r   r   &  s    zSubstitutionDefinition.__init__c                 C   sb   d}| j  D ]F\}}ddd |D }ddd |D }|d| d| d7 }q|d	7 }|S )
NzAS_SUBSTITUTION
rG   c                 s   s   | ]}t |V  qd S r   r,   r.   r   r   r   r0   -  s     z1SubstitutionDefinition.__str__.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r   r,   )r/   dr   r   r   r0   .  s     ZSUBz
WITHz	
END_SUB
ZEND_SUBSTITUTION)rx   r   r1   )r   r   srcdstr   r   r   r   *  s    zSubstitutionDefinition.__str__)Nr?   r   r   r   r   rw   %  s   
rw   c                   @   s   e Zd ZdS )SubstitutionSingleDefinitionNr&   r   r   r   r   r|   4  s   r|   c                   @   s   e Zd ZdS )SubstitutionMultipleDefinitionNr&   r   r   r   r   r}   8  s   r}   c                   @   s   e Zd ZdS )SubstitutionLigatureDefinitionNr&   r   r   r   r   r~   <  s   r~   c                   @   s   e Zd ZdS )+SubstitutionReverseChainingSingleDefinitionNr&   r   r   r   r   r   @  s   r   c                   @   s   e Zd ZdddZdd ZdS )PositionAttachDefinitionNc                 C   s   t | | || _|| _d S r   )r%   r   coveragecoverage_to)r   r   r   r   r   r   r   r   E  s    z!PositionAttachDefinition.__init__c                 C   sf   d dd | jD }d| d}| jD ]0\}}d dd |D }|| d| d7 }q(|d	7 }|S )
NrG   c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0   K  s     z3PositionAttachDefinition.__str__.<locals>.<genexpr>zAS_POSITION
ATTACHz
TOc                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0   N  s     z AT ANCHOR "r=   
END_ATTACH
END_POSITION)r1   r   r   )r   r   r   anchorr   r   r   r   J  s    z PositionAttachDefinition.__str__)Nr?   r   r   r   r   r   D  s   
r   c                   @   s   e Zd ZdddZdd ZdS )PositionAttachCursiveDefinitionNc                 C   s   t | | || _|| _d S r   )r%   r   coverages_exitcoverages_enter)r   r   r   r   r   r   r   r   U  s    z(PositionAttachCursiveDefinition.__init__c                 C   sl   d}| j D ]&}ddd |D }|d| 7 }q
| jD ]&}ddd |D }|d| 7 }q8|d7 }|S )	NzAS_POSITION
ATTACH_CURSIVErG   c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0   ]  s     z:PositionAttachCursiveDefinition.__str__.<locals>.<genexpr>z
EXIT c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0   `  s     z
ENTER r   )r   r1   r   r   r   r   r   r   r   r   Z  s    

z'PositionAttachCursiveDefinition.__str__)Nr?   r   r   r   r   r   T  s   
r   c                   @   s   e Zd ZdddZdd ZdS )PositionAdjustPairDefinitionNc                 C   s"   t | | || _|| _|| _d S r   )r%   r   coverages_1coverages_2adjust_pair)r   r   r   r   r   r   r   r   r   g  s    z%PositionAdjustPairDefinition.__init__c              
   C   s   d}| j D ]&}ddd |D }|d| 7 }q
|d7 }| jD ]&}ddd |D }|d| 7 }q@|d7 }| j D ]0\\}}\}}|d| d| d	| | d7 }qz|d
7 }|S )NzAS_POSITION
ADJUST_PAIR
r   c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0   p  s     z7PositionAdjustPairDefinition.__str__.<locals>.<genexpr>z FIRST r+   c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0   t  s     z SECOND  BY
END_ADJUST
END_POSITION)r   r1   r   r   r   )r   r   r   Zid_1Zid_2Zpos_1Zpos_2r   r   r   r   m  s    

"z$PositionAdjustPairDefinition.__str__)Nr?   r   r   r   r   r   f  s   
r   c                   @   s   e Zd ZdddZdd ZdS )PositionAdjustSingleDefinitionNc                 C   s   t | | || _d S r   )r%   r   adjust_single)r   r   r   r   r   r   r   ~  s    z'PositionAdjustSingleDefinition.__init__c                 C   sF   d}| j D ].\}}ddd |D }|| d| 7 }q
|d7 }|S )NzAS_POSITION
ADJUST_SINGLErG   c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0     s     z9PositionAdjustSingleDefinition.__str__.<locals>.<genexpr>r   r   )r   r1   )r   r   r   rr   r   r   r   r     s    z&PositionAdjustSingleDefinition.__str__)Nr?   r   r   r   r   r   }  s   
r   c                   @   s   e Zd ZdddZdd ZdS )ContextDefinitionNc                 C   s:   t | | || _|d k	r|ng | _|d k	r0|ng | _d S r   )r%   r   ex_or_inleftright)r   r   r   r   r   r   r   r   r     s    zContextDefinition.__init__c                 C   sv   | j d }| jD ](}ddd |D }|d| d7 }q| jD ](}ddd |D }|d| d7 }q@|d7 }|S )	Nr+   rG   c                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0     s     z,ContextDefinition.__str__.<locals>.<genexpr>z LEFTc                 s   s   | ]}t |V  qd S r   r,   rt   r   r   r   r0     s     z RIGHTZEND_CONTEXT)r   r   r1   r   r   r   r   r   r     s    


zContextDefinition.__str__)NNNr?   r   r   r   r   r     s   
r   c                   @   s   e Zd ZdddZdd ZdS )AnchorDefinitionNc                 C   s4   t | | || _|| _|| _|| _|| _|| _d S r   )r%   r   r3   r8   
glyph_name	componentlockedrr   )r   r3   r8   r   r   r   rr   r   r   r   r   r     s    zAnchorDefinition.__init__c                 C   s@   | j r
dpd}d| j d| j d| j d| j | d| j dS )	Nz LOCKEDrG   zDEF_ANCHOR "z" ON z GLYPH z COMPONENT r	   z END_ANCHOR)r   r3   r8   r   r   rr   )r   r   r   r   r   r     s    0zAnchorDefinition.__str__)Nr?   r   r   r   r   r     s   
	r   c                   @   s   e Zd ZdddZdd ZdS )SettingDefinitionNc                 C   s   t | | || _|| _d S r   )r%   r   r3   r   )r   r3   r   r   r   r   r   r     s    zSettingDefinition.__init__c                 C   sZ   | j dkr| j S t| j ttfrHddd | j D }| j d| S | j d| j  S )NTr   c                 s   s   | ]}t |V  qd S r   r,   )r/   vr   r   r   r0     s     z,SettingDefinition.__str__.<locals>.<genexpr>)r   r3   rR   rU   listr1   )r   r   r   r   r   r     s    
zSettingDefinition.__str__)Nr?   r   r   r   r   r     s   
r   N) ZfontTools.voltLib.errorr   typingr   r   objectr   r%   r'   r(   r2   r@   rJ   rO   rS   rZ   r]   rd   rf   ri   rw   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s8   :