o
    aw3                     @   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 ]3}t | |}|d ur7|d|  d| 7 }t | | di }| D ]\}}|d| d| 7 }q(q|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   7/usr/lib/python3/dist-packages/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      zElement.buildc                 C   s   t r   )NotImplementedErrorr   r   r   r   r   !   r"   zElement.__str__r   r   r   r   r   r!   r   r   r   r   r   r      s    
r   c                   @      e Zd ZdS )	StatementNr   r   r   r   r   r   r   r'   %       r'   c                   @   r&   )
ExpressionNr(   r   r   r   r   r*   )   r)   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       | ]}t |V  qd S r   str.0r-   r   r   r   	<genexpr>7       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                   @      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   r9   gidZgunicodeZgtyper=   r   r   r   r   r   ;   s   
zGlyphDefinition.__init__c                 C   s   d| j  d| j }| jd ur4t| jdkr*ddd | jD }|d| d7 }n
|d	| jd
  7 }| jd urA|d| j 7 }| jd urN|d| j 7 }|d7 }|S )NzDEF_GLYPH "z" ID    ,c                 s   s    | ]	}d |dV  qdS )zU+Z04XNr   )r3   ur   r   r   r4   G       z*GlyphDefinition.__str__.<locals>.<genexpr>z UNICODEVALUES ""z	 UNICODE r   z TYPE z COMPONENTS z
 END_GLYPH)r9   r:   r;   lenr6   r<   r=   )r   r   Zunicodesr   r   r   r   C   s   


zGlyphDefinition.__str__r   r   r   r   r   r   r   r   r   r   r8   :   s    
r8   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   r9   enumglyphs_)r   r9   rG   r   r   r   r   r   T      
zGroupDefinition.__init__c                 C   sd   |d ur| j |v rtd| j  | j| jd u r/|d u r"t| j h}n|| j  | j|| _| jS )NzGroup "%s" contains itself.)r9   r   r   rH   setaddrG   glyphSet)r   groupsr   r   r   rL   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)rG   r1   r9   r   rG   r   r   r   r   g   s   zGroupDefinition.__str__r   )r   r   r   r   rL   r   r   r   r   r   rF   S   s    

rF   c                   @   *   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      t | | || _d S r   )r*   r   glyph)r   rT   r   r   r   r   r   n      
zGlyphName.__init__c                 C   s   | j fS r   rT   r$   r   r   r   rL   r   s   zGlyphName.glyphSetc                 C      d| j  dS )Nz GLYPH "rC   rV   r$   r   r   r   r   u      zGlyphName.__str__r   r   r   r   __doc__r   rL   r   r   r   r   r   rR   l   s
    
rR   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   rS   r   )r*   r   rG   )r   rG   r   r   r   r   r   {   rU   zEnum.__init__c                 c   s    |   D ]}|V  qd S r   )rL   )r   er   r   r   __iter__   s   zEnum.__iter__c                 C   sF   g }| j D ]}t|ttfr||| q||  qt|S r   )rG   
isinstance	GroupNamer[   extendrL   tuple)r   rM   Zglyphselementr   r   r   rL      s   
zEnum.glyphSetc                 C   s"   d dd | jD }d| dS )NrN   c                 s   r/   r   r0   )r3   r\   r   r   r   r4      r5   zEnum.__str__.<locals>.<genexpr>z ENUMz	 END_ENUM)r6   rG   rP   r   r   r   r      s   zEnum.__str__r   )r   r   r   rZ   r   r]   rL   r   r   r   r   r   r[   y   s    

	r[   c                   @   s,   e Zd ZdZd	ddZd	ddZdd ZdS )
r_   zA glyph groupNc                 C      t | | || _|| _d S r   )r*   r   groupparser_)r   rd   parserr   r   r   r   r         
zGroupName.__init__c                 C   s:   | j | j}|d ur||| _| jS td| j | j)Nz!Group "%s" is used but undefined.)re   Zresolve_grouprd   rL   rH   r   r   )r   rM   rd   r   r   r   rL      s   zGroupName.glyphSetc                 C   rW   )Nz GROUP "rC   )rd   r$   r   r   r   r      rX   zGroupName.__str__r   rY   r   r   r   r   r_      s
    


r_   c                   @   rQ   )
RangezA glyph rangeNc                 C   "   t | | || _|| _|| _d S r   )r*   r   startendrf   )r   rj   rk   rf   r   r   r   r   r      rI   zRange.__init__c                 C   s   t | j| j| jS r   )ra   rf   Zglyph_rangerj   rk   r$   r   r   r   rL         zRange.glyphSetc                 C   s   d| j  d| j dS )Nz RANGE "z" TO "rC   )rj   rk   r$   r   r   r   r      rl   zRange.__str__r   rY   r   r   r   r   rh      s
    
rh   c                   @   r7   )ScriptDefinitionNc                 C   ri   r   )r'   r   r9   taglangs)r   r9   rn   ro   r   r   r   r   r      rI   zScriptDefinition.__init__c                 C   T   d}| j d ur|d| j  d7 }|d| j d7 }| jD ]}|| 7 }q|d7 }|S )NZ
DEF_SCRIPT NAME "rC    TAG ""

Z
END_SCRIPT)r9   rn   ro   )r   r   langr   r   r   r         

zScriptDefinition.__str__r   rE   r   r   r   r   rm          
rm   c                   @   r7   )LangSysDefinitionNc                 C   ri   r   )r'   r   r9   rn   features)r   r9   rn   rx   r   r   r   r   r      rI   zLangSysDefinition.__init__c                 C   rp   )NZDEF_LANGSYSrq   rC   rr   rs   zEND_LANGSYS
)r9   rn   rx   )r   r   Zfeaturer   r   r   r      ru   zLangSysDefinition.__str__r   rE   r   r   r   r   rw      rv   rw   c                   @   r7   )FeatureDefinitionNc                 C   ri   r   )r'   r   r9   rn   lookups)r   r9   rn   rz   r   r   r   r   r      rI   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 "rO   r   c                 s   s    | ]	}d | dV  qdS )zLOOKUP "rC   Nr   )r3   lr   r   r   r4      rB   z,FeatureDefinition.__str__.<locals>.<genexpr>r.   zEND_FEATURE
)r9   rn   r6   rz   )r   r   r   r   r   r      s   "zFeatureDefinition.__str__r   rE   r   r   r   r   ry      rv   ry   c                   @       e Zd Z	dddZdd ZdS )LookupDefinitionNc                 C   sL   t | | || _|| _|| _|| _|| _|| _|| _|| _	|	| _
|
| _d S r   )r'   r   r9   process_baseprocess_marksmark_glyph_set	directionreversalcommentscontextsubpos)r   r9   r~   r   r   r   r   r   r   r   r   r   r   r   r   r      s   
zLookupDefinition.__init__c                 C   s.  d| j  d}|d| jrdpd 7 }| jr<|d7 }| jr'|d| j d7 }nt| jtr7|d| j d7 }n	|d7 }n|d	7 }| jd urM|d
| j 7 }| jrT|d7 }| jd urh| 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 "rC   r   ZPROCESS_BASEZ	SKIP_BASEz PROCESS_MARKS zMARK_GLYPH_SET "ZALLz SKIP_MARKSz DIRECTION z	 REVERSALr.   z\nz
COMMENTS "c                 s   r/   r   r0   r3   cr   r   r   r4     r5   z+LookupDefinition.__str__.<locals>.<genexpr>z
IN_CONTEXT
END_CONTEXT)r9   r~   r   r   r^   r1   r   r   r   replacer   r6   r   r   )r   r   r   r   r   r   r      s2   


 zLookupDefinition.__str__r   rE   r   r   r   r   r}      s    
r}   c                   @   r7   )SubstitutionDefinitionNc                 C   rS   r   )r'   r   mapping)r   r   r   r   r   r   r     rU   zSubstitutionDefinition.__init__c                 C   sb   d}| j  D ]#\}}ddd |D }ddd |D }|d| d| d7 }q|d	7 }|S )
NzAS_SUBSTITUTION
rN   c                 s   r/   r   r0   r2   r   r   r   r4     r5   z1SubstitutionDefinition.__str__.<locals>.<genexpr>c                 s   r/   r   r0   )r3   dr   r   r   r4     r5   ZSUBz
WITHz	
END_SUB
ZEND_SUBSTITUTION)r   r   r6   )r   r   srcdstr   r   r   r     s   zSubstitutionDefinition.__str__r   rE   r   r   r   r   r         
r   c                   @   r&   )SubstitutionSingleDefinitionNr(   r   r   r   r   r   %  r)   r   c                   @   r&   )SubstitutionMultipleDefinitionNr(   r   r   r   r   r   )  r)   r   c                   @   r&   )SubstitutionLigatureDefinitionNr(   r   r   r   r   r   -  r)   r   c                   @   r&   )+SubstitutionReverseChainingSingleDefinitionNr(   r   r   r   r   r   1  r)   r   c                   @   r7   )PositionAttachDefinitionNc                 C   rc   r   )r'   r   coveragecoverage_to)r   r   r   r   r   r   r   r   6  rg   z!PositionAttachDefinition.__init__c                 C   sf   d dd | jD }d| d}| jD ]\}}d dd |D }|| d| d7 }q|d	7 }|S )
NrN   c                 s   r/   r   r0   r   r   r   r   r4   <  r5   z3PositionAttachDefinition.__str__.<locals>.<genexpr>zAS_POSITION
ATTACHz
TOc                 s   r/   r   r0   r   r   r   r   r4   ?  r5   z AT ANCHOR "rC   
END_ATTACH
END_POSITION)r6   r   r   )r   r   r   Zanchorr   r   r   r   ;  s   z PositionAttachDefinition.__str__r   rE   r   r   r   r   r   5      
r   c                   @   r7   )PositionAttachCursiveDefinitionNc                 C   rc   r   )r'   r   coverages_exitcoverages_enter)r   r   r   r   r   r   r   r   F  rg   z(PositionAttachCursiveDefinition.__init__c                 C   sl   d}| j D ]}ddd |D }|d| 7 }q| jD ]}ddd |D }|d| 7 }q|d7 }|S )	NzAS_POSITION
ATTACH_CURSIVErN   c                 s   r/   r   r0   r   r   r   r   r4   N  r5   z:PositionAttachCursiveDefinition.__str__.<locals>.<genexpr>z
EXIT c                 s   r/   r   r0   r   r   r   r   r4   Q  r5   z
ENTER r   )r   r6   r   r   r   r   r   r   r   r   K  s   

z'PositionAttachCursiveDefinition.__str__r   rE   r   r   r   r   r   E  r   r   c                   @   r7   )PositionAdjustPairDefinitionNc                 C   ri   r   )r'   r   coverages_1coverages_2adjust_pair)r   r   r   r   r   r   r   r   r   X  rI   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 ]\\}}\}}|d| d| d	| | d7 }q=|d
7 }|S )NzAS_POSITION
ADJUST_PAIR
r   c                 s   r/   r   r0   r   r   r   r   r4   a  r5   z7PositionAdjustPairDefinition.__str__.<locals>.<genexpr>z FIRST r.   c                 s   r/   r   r0   r   r   r   r   r4   e  r5   z SECOND  BY
END_ADJUST
END_POSITION)r   r6   r   r   r   )r   r   r   Zid_1Zid_2Zpos_1Zpos_2r   r   r   r   ^  s   

"z$PositionAdjustPairDefinition.__str__r   rE   r   r   r   r   r   W  rv   r   c                   @   r7   )PositionAdjustSingleDefinitionNc                 C   rS   r   )r'   r   adjust_single)r   r   r   r   r   r   r   o  rU   z'PositionAdjustSingleDefinition.__init__c                 C   sF   d}| j D ]\}}ddd |D }|| d| 7 }q|d7 }|S )NzAS_POSITION
ADJUST_SINGLErN   c                 s   r/   r   r0   r   r   r   r   r4   v  r5   z9PositionAdjustSingleDefinition.__str__.<locals>.<genexpr>r   r   )r   r6   )r   r   r   r   r   r   r   r   s  s   z&PositionAdjustSingleDefinition.__str__r   rE   r   r   r   r   r   n  r   r   c                   @   r7   )ContextDefinitionNc                 C   s@   t | | || _|d ur|ng | _|d ur|| _d S 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.   rN   c                 s   r/   r   r0   r   r   r   r   r4     r5   z,ContextDefinition.__str__.<locals>.<genexpr>z LEFTc                 s   r/   r   r0   r   r   r   r   r4     r5   z RIGHTZEND_CONTEXT)r   r   r6   r   r   r   r   r   r     s   


zContextDefinition.__str__)NNNrE   r   r   r   r   r   }  rv   r   c                   @   r|   )AnchorDefinitionNc                 C   s4   t | | || _|| _|| _|| _|| _|| _d S r   )r'   r   r9   r>   
glyph_name	componentlockedr   )r   r9   r>   r   r   r   r   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 LOCKEDrN   zDEF_ANCHOR "z" ON z GLYPH z COMPONENT r	   z END_ANCHOR)r   r9   r>   r   r   r   )r   r   r   r   r   r     s   
zAnchorDefinition.__str__r   rE   r   r   r   r   r     s    

r   c                   @   r7   )SettingDefinitionNc                 C   rc   r   )r'   r   r9   r   )r   r9   r   r   r   r   r   r     rg   zSettingDefinition.__init__c                 C   sZ   | j du r	| j S t| j ttfr$ddd | j D }| j d| S | j d| j  S )NTr   c                 s   r/   r   r0   )r3   vr   r   r   r4     r5   z,SettingDefinition.__str__.<locals>.<genexpr>)r   r9   r^   ra   listr6   )r   r   r   r   r   r     s   
zSettingDefinition.__str__r   rE   r   r   r   r   r     r   r   N) ZfontTools.voltLib.errorr   typingr   r   objectr   r'   r*   r+   r8   rF   rR   r[   r_   rh   rm   rw   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s:    /