o
    jk                     @   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   `/var/www/html/Deteccion_Ine/venv/lib/python3.10/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rVtd|d| d|d	   \}}	}}
}}t	|
d
 d|  d }
n!td|d
| d
|d	   \}}	}
}}t	|
d
 d
|  d }
|
||	|
||f t||
|	 }q,|d| d  }g }t|D ]%}t|d|d	  krtd|d| d|d	   \}}|
||f qt|D ]J\}}|\}}	}
}}t }||_||_|| jt|< i |_d |_||_t|
|
|	 D ]}|t|krq|| \}}||j|< |jd u r
||_qqd 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fidZnumsoffsetr%   lidZallsettingsvalffobjZvidZvlidr   r   r   	decompile   sX   
$
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 }n-|dkrNd| _| |  S |tdt|t j	|d d	 d	t| j   j
 j7 }t  j	  fdddD ]\}}|td||7 }qz|t j	7 }qtt| }	|	tdt| jdd | | S )N    r   c                 S   
   | d j S Nr   r)   xr   r   r   <lambda>N      
 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(   r9   vr   r   r;   g   s    r   z>HHL)sortedr   itemsr   Ztag2numr   r   packr"   r'   r%   r&   compiler   r   )
r   r+   ZfdatZvdatr/   r2   Zfnumslhdrr   r@   r   rE   J   sB   

	"ztable_F__e_a_t.compilec                 C   s   |j d| jd |  t| j dd dD ];\}}|jd||j|j|j	r)|j	ndd |  t|j
 D ]\}}|j d	||d
 |  q8|d |  qd S )Nr   )r   c                 S   r6   r7   r8   r9   r   r   r   r;   q   r<   z&table_F__e_a_t.toXML.<locals>.<lambda>r=   featurer   )r.   r&   r%   r(   setting)valuer&   )Z	simpletagr   newlinerB   r   rC   Zbegintagr&   r%   r(   r'   Zendtag)r   writerr+   r2   rA   rF   rG   r   r   r   toXMLn   s"   


ztable_F__e_a_t.toXMLc                 C   s   |dkrt t|d | _d S |dkrj|d }t }tt|d |_tt|d |_tt|dd|_t	| j
|_|| j
|< i |_|D ]$}t|tsOqG|\}}	}
|dkritt|	d |jtt|	d	 < qGd S d S )
Nr   rI   r.   r%   r&   r(   0rJ   rK   )r   r   r   r$   r   r%   r&   getr(   r"   r   r)   r'   
isinstancetuple)r   nameattrscontentr+   r.   r3   elementr   acr   r   r   fromXML   s(   


"	ztable_F__e_a_t.fromXMLr	   )	__name__
__module____qualname____doc__r
   r4   rE   rN   rY   r   r   r   r   r      s    
+$r   c                   @   s   e Zd ZdS )r$   N)rZ   r[   r\   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     