a
    —ÆàgÅ!  ã                   @   sœ   d dl mZ d dlmZ d dlmZ d dlmZ ddlm	Z	 ddlm
Z
 d dlZd	Zd
ZdZdZdZdZG dd„ dƒZG dd„ deƒZG dd„ de	j	ƒZdS )é    )Ússtruct)ÚfloatToFixedToStr)ÚsafeEval)Úpartialé   )ÚDefaultTable)ÚgrUtilsNz/
    >        # big endian
    version: 16.16F
zR
    >
    version: 16.16F
    compression:L    # compression scheme or reserved 
zz
    >
    attNum:     B    # Attribute number of first attribute
    num:        B    # Number of attributes in this run
zz
    >
    attNum:     H    # Attribute number of first attribute
    num:        H    # Number of attributes in this run
ao  
    >
    subboxBitmap:   H    # Which subboxes exist on 4x4 grid
    diagNegMin:     B    # Defines minimum negatively-sloped diagonal (si)
    diagNegMax:     B    # Defines maximum negatively-sloped diagonal (sa)
    diagPosMin:     B    # Defines minimum positively-sloped diagonal (di)
    diagPosMax:     B    # Defines maximum positively-sloped diagonal (da)
a«  
    >
    left:           B    # xi
    right:          B    # xa
    bottom:         B    # yi
    top:            B    # ya
    diagNegMin:     B    # Defines minimum negatively-sloped diagonal (si)
    diagNegMax:     B    # Defines maximum negatively-sloped diagonal (sa)
    diagPosMin:     B    # Defines minimum positively-sloped diagonal (di)
    diagPosMax:     B    # Defines maximum positively-sloped diagonal (da)
c                   @   s   e Zd ZdS )Ú_ObjectN©Ú__name__Ú
__module__Ú__qualname__© r   r   úX/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G__l_a_t.pyr	   8   s   r	   c                   @   s   e Zd ZdS )Ú_DictNr
   r   r   r   r   r   <   s   r   c                   @   sZ   e Zd ZdZd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 )Útable_G__l_a_tzsGraphite Glyph Attributes table

    See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
    Nc                 C   s   t j  | |¡ d| _d S ©Nr   )r   Ú__init__Úscheme)ÚselfÚtagr   r   r   r   F   s    ztable_G__l_a_t.__init__c                 C   sê   t  t|| ¡ tt| jdd�ƒ| _| jdkr<t| jtd�}nX| jdkrVt| jt	d�}n>| jdkr”t
 |¡\}| _t  t|| ¡ | jd@ dk| _| j}|d }i | _d	}t||dd … ƒD ],\}}||||… ƒ| j| |¡< |d7 }q¸d S )
Né   )ZprecisionBitsçffffffþ?©Úfmtç333333@ç      @r   ÚGlocr   )r   Úunpack2ÚGlat_format_0Úfloatr   Úversionr   ÚdecompileAttributes12ÚGlat_format_1_entryÚGlat_format_23_entryr   Ú
decompressr   ÚGlat_format_3ÚcompressionÚhasOctaboxesÚdecompileAttributes3Ú
attributesÚzipÚgetGlyphName)r   ÚdataÚttFontÚdecoderZglocÚcountÚsÚer   r   r   Ú	decompileJ   s"    


ztable_G__l_a_t.decompilec                 C   s†   t ƒ }t|ƒdkr‚t ||tƒ ¡\}}t|j|j|j ƒ}t|ƒd|j krt 	d|j |¡}| 
t||ƒ¡ |d|j d … }q|S )Né   é   ú>%dh)r   Úlenr   r   r	   ÚrangeÚattNumÚnumÚstructÚunpack_fromÚupdater+   )r   r-   r   r*   r2   ÚkeysÚvalsr   r   r   r"   ^   s    z$table_G__l_a_t.decompileAttributes12c                 C   s†   | j rjt t|tƒ ¡\}}t|jƒ d¡}g |_t	|ƒD ]0}t
|ƒdkr8t t|tƒ ¡\}}|j |¡ q8|  |t¡}| j r‚||_|S )NÚ1é   )r(   r   r   ÚGlat_format_3_octabox_metricsr	   ÚbinÚsubboxBitmapr0   Úsubboxesr8   r7   ÚGlat_format_3_subbox_entryÚappendr"   r$   Úoctabox)r   r-   ÚoÚnumsubÚbZsubboxÚattrsr   r   r   r)   i   s    ÿz#table_G__l_a_t.decompileAttributes3c                 C   sì   t  t| ¡}| jdkr&t| jtd�}nP| jdkr@t| jtd�}n6| jdkrv| jd> | jr\dnd | _	t  t
| ¡}| j}g }tt| jƒƒD ]*}| t|ƒ¡ ||| j| |¡ ƒ7 }qˆ| t|ƒ¡ |d  |¡ | jdkrèt | j|¡}|S )	Nr   r   r   r   é   r   r   r   )r   Úpackr   r!   r   ÚcompileAttributes12r#   r   r(   r'   r&   ÚcompileAttributes3r8   r7   r*   rG   r,   Úsetr   Úcompress)r   r.   r-   ÚencoderZglocsÚnr   r   r   Úcompiley   s$    



ztable_G__l_a_t.compilec                 C   sX   d}t  |¡D ]D}|t ||d |d dœ¡tjdt|d ƒ g|d ¢R Ž  7 }q|S )Nó    r   r   )r9   r:   r6   r5   )r   Úentriesr   rN   r;   r7   )r   rL   r   r-   r2   r   r   r   rO   �   s    ÿÿz"table_G__l_a_t.compileAttributes12c                 C   sb   | j rN|j}t t|¡}t|jƒ d¡}t|ƒD ]}|t t	|j
| ¡7 }q0nd}||  |t¡ S )Nr@   Ú )r(   rH   r   rN   rB   rC   rD   r0   r8   rF   rE   rO   r$   )r   rL   rI   r-   rJ   rK   r   r   r   rP   —   s    z!table_G__l_a_t.compileAttributes3c                    sŒ  |j d| j| jd� | ¡  t| j ¡ ‡ fdd„d�D �]N\}}|jd|d� | ¡  t|dƒ�rD|j	}t
 t¡\}}}i }	|D ]*}
|
d	krŽq€d
 t||
ƒd d ¡|	|
< q€d |j¡|	d< |jdi |	¤Ž | ¡  t
 t¡\}}}|jD ]F}i }	|D ] }
d
 t||
ƒd d ¡|	|
< qö|j di |	¤Ž | ¡  qê| d¡ | ¡  t| ¡ ƒD ]"\}
}|j d|
|d� | ¡  �qP| d¡ | ¡  q6d S )Nr!   )r!   ÚcompressionSchemec                    s   ˆ   | d ¡S r   )Z
getGlyphID)Úx©r.   r   r   Ú<lambda>¦   rV   z&table_G__l_a_t.toXML.<locals>.<lambda>)ÚkeyÚglyph)ÚnamerH   rD   z{:.3f}%ç      Y@éÿ   z{:0X}ÚbitmapÚ	octaboxesÚ	attribute)ÚindexÚvalue)rc   )rH   )Z	simpletagr!   r   ÚnewlineÚsortedr*   ÚitemsZbegintagÚhasattrrH   r   Z	getformatrB   ÚformatÚgetattrrD   rF   rE   Zendtag)r   Úwriterr.   rT   ÚarI   ÚformatstringÚnamesÚfixesr?   Úkr1   Úvr   r[   r   ÚtoXML¢   sH    ÿÿ
ÿ




ztable_G__l_a_t.toXMLc                 C   sœ  |dkr,t t|d ƒƒ| _tt|d ƒƒ| _|dkr8d S t| dƒsHi | _|d }tƒ }|D �]0}t|t	ƒslqZ|\}}}	|dkr¨tt|d ƒƒ}
tt|d ƒƒ}|||
< qZ|d	krZd
| _
tƒ }t|d dƒ|_g |_|d= | ¡ D ]0\}
}t||
tt |d d… ƒd d d ƒƒ qà|	D ]n}t|t	ƒ�s*�q|\}}}	tƒ }| ¡ D ]2\}
}t||
tt |d d… ƒd d d ƒƒ �qB|j |¡ �q||_qZ|| j|< d S )Nr!   rY   r^   r*   r_   rd   re   rf   rc   Trb   r   éÿÿÿÿg     ào@r`   g      à?)r    r   r!   Úintr   rj   r*   r   Ú
isinstanceÚtupler(   r	   rD   rE   ri   ÚsetattrrG   rH   )r   r_   rL   Úcontentr.   Úgnamer*   Úelementr   Z
subcontentrr   rs   rI   Úsor   r   r   ÚfromXMLÈ   sF    




*
,ztable_G__l_a_t.fromXML)N)r   r   r   Ú__doc__r   r3   r"   r)   rU   rO   rP   rt   r~   r   r   r   r   r   @   s   
&r   )ZfontTools.miscr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.textToolsr   Ú	functoolsr   rX   r   r   r;   r   r&   r#   r$   rB   rF   r	   Údictr   r   r   r   r   r   Ú<module>   s   	