a
    —Æàgk  ã                   @   sn   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
G d	d
„ d
ejƒZG dd„ deƒZdS )é    )Ússtruct)ÚfloatToFixedToStr)ÚsafeEvalé   )ÚDefaultTable)ÚgrUtilsNz
    >
    version:    16.16F
c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Útable_F__e_a_taš  Feature table

    The ``Feat`` table is used exclusively by the Graphite shaping engine
    to store features and possible settings specified in GDL. Graphite features
    determine what rules are applied to transform a glyph stream.

    Not to be confused with ``feat``, or the OpenType Layout tables
    ``GSUB``/``GPOS``.

    See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
    Nc                 C   s   t j  | |¡ i | _d S )N)r   Ú__init__Úfeatures)ÚselfÚtag© r   úX/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/F__e_a_t.pyr	      s    ztable_F__e_a_t.__init__c              	   C   s(  t  t|| ¡\}}tt| jdd�ƒ| _t d|d d… ¡\}|dd … }g }d}t|ƒD ]¸}| jdkr¬t d|d| d|d	  … ¡\}}	}}
}}t	|
d
 d|  d ƒ}
nBt d|d
| d
|d	  … ¡\}}	}
}}t	|
d
 d
|  d ƒ}
| 
||	|
||f¡ t||
|	 ƒ}qX|d| d … }g }t|ƒD ]N}t|ƒd|d	  k�r.t d|d| d|d	  … ¡\}}| 
||f¡ �q.t|ƒD ]œ\}}|\}}	}
}}tƒ }||_||_|| jt |¡< i |_d |_||_t|
|
|	 ƒD ]@}|t|ƒk�rô�qÞ|| \}}||j|< |jd u �rÞ||_�qÞ�q†d S )Né   )ZprecisionBitsz>Hé   é   r   ç       @ú>LHHLHHr   é   é   ú>HHLHHú>HH)r   Zunpack2ÚFeat_hdr_formatÚfloatr   ÚversionÚstructÚunpackÚrangeÚintÚappendÚmaxÚlenÚ	enumerateÚFeatureÚflagsÚlabelr
   r   Znum2tagÚsettingsÚdefaultÚindex)r   ÚdataÚttFontÚ_ZnumFeatsZallfeatsZ
maxsettingÚiÚfidÚnumsÚoffsetr$   ZlidZallsettingsÚvalÚfÚfobjZvidZvlidr   r   r   Ú	decompile   sP    
ÿÿ$
ztable_F__e_a_t.decompilec           
         sN  d}d}d}t | j ¡ dd„ d�D ]ü\}‰ t |¡}| jdkr€|t dt |¡tˆ j	ƒd|d d	 d
t| jƒ  ˆ j
ˆ j¡7 }nZ|dkrœd| _|  |¡  S |t dt |¡tˆ j	ƒ|d d	 d	t| jƒ  ˆ j
ˆ j¡7 }t ˆ j	 ¡ ‡ fdd„d�D ]\}}|t d||¡7 }qô|tˆ j	ƒ7 }q"t t| ¡}	|	t dt| jƒdd¡ | | S )Nó    r   c                 S   s
   | d j S ©Nr   ©r(   ©Úxr   r   r   Ú<lambda>N   r4   z(table_F__e_a_t.compile.<locals>.<lambda>©Úkeyr   r   r   r   r   iÿÿ  r   c                    s   | d ˆ j krd| d fS | S )Nr   éÿÿÿÿr   )r'   r7   ©Úvr   r   r9   g   r4   r   z>HHL)Úsortedr
   Úitemsr   Ztag2numr   r   Úpackr!   r&   r$   r%   Úcompiler   r   )
r   r*   ZfdatZvdatr/   r1   ZfnumÚsÚlÚhdrr   r=   r   rB   J   sB    

ù	úÿztable_F__e_a_t.compilec                 C   sª   |j d| jd� | ¡  t| j ¡ dd„ d�D ]v\}}|jd||j|j|j	rR|j	ndd� | ¡  t|j
 ¡ ƒD ] \}}|j d	||d
� | ¡  qp| d¡ | ¡  q.d S )Nr   )r   c                 S   s
   | d j S r5   r6   r7   r   r   r   r9   q   r4   z&table_F__e_a_t.toXML.<locals>.<lambda>r:   Úfeaturer   )r-   r%   r$   r'   Úsetting)Úvaluer%   )Z	simpletagr   Únewliner?   r
   r@   Zbegintagr%   r$   r'   r&   Zendtag)r   Úwriterr*   r1   r>   rC   rD   r   r   r   ÚtoXMLn   s     û

ztable_F__e_a_t.toXMLc                 C   sÖ   |dkrt t|d ƒƒ| _n¶|dkrÒ|d }tƒ }tt|d ƒƒ|_tt|d ƒƒ|_tt| dd¡ƒƒ|_t	| j
ƒ|_|| j
|< i |_|D ]D}t|tƒsœqŒ|\}}	}
|dkrŒtt|	d ƒƒ|jtt|	d	 ƒƒ< qŒd S )
Nr   rF   r-   r$   r%   r'   Ú0rG   rH   )r   r   r   r#   r   r$   r%   Úgetr'   r!   r
   r(   r&   Ú
isinstanceÚtuple)r   ÚnameÚattrsÚcontentr*   r-   r2   Úelementr   ÚaÚcr   r   r   ÚfromXML€   s"    


ztable_F__e_a_t.fromXML)N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r3   rB   rK   rV   r   r   r   r   r      s   
+$r   c                   @   s   e Zd ZdS )r#   N)rW   rX   rY   r   r   r   r   r#   ”   s   r#   )ZfontTools.miscr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.textToolsr   Ú r   r   r   r   r   Úobjectr#   r   r   r   r   Ú<module>   s    