o
    h3                     @   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dyadv_adjust_bydx_adjust_by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    
_adjust_byz ADJUST_BY  AT z END_POS)getattrupperitems)selfresattrvalue	adjust_bysize
adjustment r   i/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-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   r0   )   r/   r0   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"   )r2   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.0r3   r   r   r   	<genexpr>7       z#VoltFile.__str__.<locals>.<genexpr>z END
)joinr2   r*   r   r   r   r   6   s   zVoltFile.__str__Nr+   r   r   r   r   r1   -   s    r1   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   r?   gidgunicodegtyperC   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+04XNr   )r9   ur   r   r   r:   G       z*GlyphDefinition.__str__.<locals>.<genexpr>z UNICODEVALUES ""z	 UNICODE r   z TYPE z COMPONENTS z
 END_GLYPH)r?   r@   rA   lenr<   rB   rC   )r   r   unicodesr   r   r   r   C   s   


zGlyphDefinition.__str__r"   r   r   r   r%   r   r   r   r   r   r>   :   s    
r>   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%   r?   enumglyphs_)r   r?   rQ   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.)r?   r   r$   rR   setaddrQ   glyphSet)r   groupsr   r   r   rV   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)rQ   r7   r?   r   rQ   r   r   r   r   g   s   zGroupDefinition.__str__r"   )r   r   r   r%   rV   r   r   r   r   r   rP   S   s    

rP   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"   )r0   r%   glyph)r   r^   r$   r   r   r   r%   o      
zGlyphName.__init__c                 C   s   | j fS r"   r^   r*   r   r   r   rV   s   s   zGlyphName.glyphSetc                 C      d| j  dS )Nz GLYPH "rL   r`   r*   r   r   r   r   v      zGlyphName.__str__r"   r   r   r   __doc__r%   rV   r   r   r   r   r   r\   l   s
    
r\   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   r]   r"   )r0   r%   rQ   )r   rQ   r$   r   r   r   r%   }   r_   zEnum.__init__c                 c   s    |   D ]}|V  qd S r"   )rV   )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"   )rQ   
isinstance	GroupNamere   extendrV   tuple)r   rW   glyphselementr   r   r   rV      s   
zEnum.glyphSetc                 C   s"   d dd | jD }d| dS )NrX   c                 s   r5   r"   r6   )r9   rf   r   r   r   r:      r;   zEnum.__str__.<locals>.<genexpr>z ENUMz	 END_ENUM)r<   rQ   rZ   r   r   r   r      s   zEnum.__str__r"   )r   r   r   rd   r%   rg   rV   r   r   r   r   r   re   z   s    

	re   c                   @   s,   e Zd ZdZd	ddZd	ddZdd ZdS )
ri   zA glyph groupNc                 C      t | | || _|| _d S r"   )r0   r%   groupparser_)r   ro   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.)rp   resolve_groupro   rV   rR   r   r$   )r   rW   ro   r   r   r   rV      s   zGroupName.glyphSetc                 C   ra   )Nz GROUP "rL   )ro   r*   r   r   r   r      rb   zGroupName.__str__r"   rc   r   r   r   r   ri      s
    


ri   c                   @   r[   )
RangezA glyph rangeNc                 C   "   t | | || _|| _|| _d S r"   )r0   r%   startendrq   )r   rv   rw   rq   r$   r   r   r   r%      rS   zRange.__init__c                 C   s   t | j| j| jS r"   )rk   rq   glyph_rangerv   rw   r*   r   r   r   rV         zRange.glyphSetc                 C   s   d| j  d| j dS )Nz RANGE "z" TO "rL   )rv   rw   r*   r   r   r   r      ry   zRange.__str__r"   rc   r   r   r   r   rt      s
    
rt   c                   @   r=   )ScriptDefinitionNc                 C   ru   r"   )r-   r%   r?   taglangs)r   r?   r{   r|   r$   r   r   r   r%      rS   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 )N
DEF_SCRIPT NAME "rL    TAG ""


END_SCRIPT)r?   r{   r|   )r   r   langr   r   r   r         

zScriptDefinition.__str__r"   rO   r   r   r   r   rz          
rz   c                   @   r=   )LangSysDefinitionNc                 C   ru   r"   )r-   r%   r?   r{   features)r   r?   r{   r   r$   r   r   r   r%      rS   zLangSysDefinition.__init__c                 C   r}   )NDEF_LANGSYSr   rL   r   r   zEND_LANGSYS
)r?   r{   r   )r   r   featurer   r   r   r      r   zLangSysDefinition.__str__r"   rO   r   r   r   r   r      r   r   c                   @   r=   )FeatureDefinitionNc                 C   ru   r"   )r-   r%   r?   r{   lookups)r   r?   r{   r   r$   r   r   r   r%      rS   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 "rY   r   c                 s   s    | ]	}d | dV  qdS )zLOOKUP "rL   Nr   )r9   lr   r   r   r:      rK   z,FeatureDefinition.__str__.<locals>.<genexpr>r4   zEND_FEATURE
)r?   r{   r<   r   )r   r   r   r   r   r      s   "zFeatureDefinition.__str__r"   rO   r   r   r   r   r      r   r   c                   @   s    e Zd Z	dddZdd ZdS )LookupDefinitionNc                 C   sL   t | | || _|| _|| _|| _|| _|| _|| _|| _	|	| _
|
| _d S r"   )r-   r%   r?   process_baseprocess_marksmark_glyph_set	directionreversalcommentscontextsubpos)r   r?   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 "rL   r   PROCESS_BASE	SKIP_BASEz PROCESS_MARKS zMARK_GLYPH_SET "ALLz SKIP_MARKSz DIRECTION z	 REVERSALr4   z\nz
COMMENTS "c                 s   r5   r"   r6   r9   cr   r   r   r:     r;   z+LookupDefinition.__str__.<locals>.<genexpr>z
IN_CONTEXT
END_CONTEXT)r?   r   r   r   rh   r7   r   r   r   replacer   r<   r   r   )r   r   r   r   r   r   r     s2   


 zLookupDefinition.__str__r"   rO   r   r   r   r   r      s    
r   c                   @   r=   )SubstitutionDefinitionNc                 C   r]   r"   )r-   r%   mapping)r   r   r$   r   r   r   r%   &  r_   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
rX   c                 s   r5   r"   r6   r8   r   r   r   r:   -  r;   z1SubstitutionDefinition.__str__.<locals>.<genexpr>c                 s   r5   r"   r6   )r9   dr   r   r   r:   .  r;   SUBz
WITHz	
END_SUB
END_SUBSTITUTION)r   r   r<   )r   r   srcdstr   r   r   r   *  s   zSubstitutionDefinition.__str__r"   rO   r   r   r   r   r   %      
r   c                   @   r,   )SubstitutionSingleDefinitionNr.   r   r   r   r   r   4  r/   r   c                   @   r,   )SubstitutionMultipleDefinitionNr.   r   r   r   r   r   8  r/   r   c                   @   r,   )SubstitutionLigatureDefinitionNr.   r   r   r   r   r   <  r/   r   c                   @   r,   )+SubstitutionReverseChainingSingleDefinitionNr.   r   r   r   r   r   @  r/   r   c                   @   r=   )PositionAttachDefinitionNc                 C   rn   r"   )r-   r%   coveragecoverage_to)r   r   r   r$   r   r   r   r%   E  rr   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 )
NrX   c                 s   r5   r"   r6   r   r   r   r   r:   K  r;   z3PositionAttachDefinition.__str__.<locals>.<genexpr>zAS_POSITION
ATTACHz
TOc                 s   r5   r"   r6   r   r   r   r   r:   N  r;   z AT ANCHOR "rL   
END_ATTACH
END_POSITION)r<   r   r   )r   r   r   anchorr   r   r   r   J  s   z PositionAttachDefinition.__str__r"   rO   r   r   r   r   r   D      
r   c                   @   r=   )PositionAttachCursiveDefinitionNc                 C   rn   r"   )r-   r%   coverages_exitcoverages_enter)r   r   r   r$   r   r   r   r%   U  rr   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_CURSIVErX   c                 s   r5   r"   r6   r   r   r   r   r:   ]  r;   z:PositionAttachCursiveDefinition.__str__.<locals>.<genexpr>z
EXIT c                 s   r5   r"   r6   r   r   r   r   r:   `  r;   z
ENTER r   )r   r<   r   r   r   r   r   r   r   r   Z  s   

z'PositionAttachCursiveDefinition.__str__r"   rO   r   r   r   r   r   T  r   r   c                   @   r=   )PositionAdjustPairDefinitionNc                 C   ru   r"   )r-   r%   coverages_1coverages_2adjust_pair)r   r   r   r   r$   r   r   r   r%   g  rS   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   r5   r"   r6   r   r   r   r   r:   p  r;   z7PositionAdjustPairDefinition.__str__.<locals>.<genexpr>z FIRST r4   c                 s   r5   r"   r6   r   r   r   r   r:   t  r;   z SECOND  BY
END_ADJUST
END_POSITION)r   r<   r   r   r   )r   r   r   id_1id_2pos_1pos_2r   r   r   r   m  s   

"z$PositionAdjustPairDefinition.__str__r"   rO   r   r   r   r   r   f  r   r   c                   @   r=   )PositionAdjustSingleDefinitionNc                 C   r]   r"   )r-   r%   adjust_single)r   r   r$   r   r   r   r%   ~  r_   z'PositionAdjustSingleDefinition.__init__c                 C   sF   d}| j D ]\}}ddd |D }|| d| 7 }q|d7 }|S )NzAS_POSITION
ADJUST_SINGLErX   c                 s   r5   r"   r6   r   r   r   r   r:     r;   z9PositionAdjustSingleDefinition.__str__.<locals>.<genexpr>r   r   )r   r<   )r   r   r   r   r   r   r   r     s   z&PositionAdjustSingleDefinition.__str__r"   rO   r   r   r   r   r   }  r   r   c                   @   r=   )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 )	Nr4   rX   c                 s   r5   r"   r6   r   r   r   r   r:     r;   z,ContextDefinition.__str__.<locals>.<genexpr>z LEFTc                 s   r5   r"   r6   r   r   r   r   r:     r;   z RIGHTEND_CONTEXT)r   r   r<   r   r   r   r   r   r     s   


zContextDefinition.__str__)NNNrO   r   r   r   r   r     r   r   c                   @   r=   )AnchorDefinitionNc                 C   s4   t | | || _|| _|| _|| _|| _|| _d S r"   )r-   r%   r?   rD   
glyph_name	componentlockedr   )r   r?   rD   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 LOCKEDrX   zDEF_ANCHOR "z" ON z GLYPH z COMPONENT r   z END_ANCHOR)r   r?   rD   r   r   r   )r   r   r   r   r   r     s   
zAnchorDefinition.__str__r"   rO   r   r   r   r   r     s    
	r   c                   @   r=   )SettingDefinitionNc                 C   rn   r"   )r-   r%   r?   r   )r   r?   r   r$   r   r   r   r%     rr   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   r5   r"   r6   )r9   vr   r   r   r:     r;   z,SettingDefinition.__str__.<locals>.<genexpr>)r   r?   rh   rk   listr<   )r   r   r   r   r   r     s   
zSettingDefinition.__str__r"   rO   r   r   r   r   r     r   r   N) fontTools.voltLib.errorr   typingr   r   objectr!   r-   r0   r1   r>   rP   r\   re   ri   rt   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s:    :