a
    ZXhk                     @   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   d/var/www/viveiro_mudafortebrasil/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rt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ސqd 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rd| _| |  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sq|\}}	}
|dkrtt|	d |jtt|	d	 < qd 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    