B
    Jd                 @   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_ta3  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``.Nc             C   s   t j | | i | _d S )N)r   __init__features)selftag r   Q/var/www/html/venv/lib/python3.7/site-packages/fontTools/ttLib/tables/F__e_a_t.pyr	      s    ztable_F__e_a_t.__init__c          	   C   s8  t t|| \}}tt| jdd| _td|d d \}|dd  }g }d}xt|D ]}| jdkrtd|d| d|d	   \}}	}}
}}t	|
d
 d|  d }
nBtd|d
| d
|d	   \}}	}
}}t	|
d
 d
|  d }
|
||	|
||f t||
|	 }qZW |d| d  }g }xZt|D ]N}t|d|d	  kr4td|d| d|d	   \}}|
||f q4W xt|D ]\}}|\}}	}
}}t }||_||_|| jt|< i |_d |_||_xRt|
|
|	 D ]@}|t|kr q|| \}}||j|< |jd kr||_qW qW d S )N   )ZprecisionBitsz>H      r   g       @z>LHHLHHr         z>HHLHHz>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    lidZallsettingsvalffobjZvidZvlidr   r   r   	decompile   sL    
&$$ 
ztable_F__e_a_t.decompilec       
         sT  d}d}d}x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 }nV|dkrd| _| |S |tdt|t j	|d d	 d	t| j   j
 j7 }x8t  j	  fdddD ]\}}|td||7 }qW |t j	7 }q&W tt| }	|	tdt| jdd | | S )N    r   c             S   s
   | d j S )Nr   )r$   )xr   r   r   <lambda>E   r1   z(table_F__e_a_t.compile.<locals>.<lambda>)keyg       @z>LHHLHHr   r   r   i  z>HHLHHc                s   | d  j krd| d fS | S )Nr   r   )r#   )r2   )vr   r   r3   P   r1   z>HHz>HHL)sortedr
   itemsr   Ztag2numr   r   packr   r"   r    r!   compiler   r   )
r   r&   ZfdatZvdatr+   r.   Zfnumslhdrr   )r6   r   r:   A   s$    "

*
&$ztable_F__e_a_t.compilec             C   s   |j d| jd |  xt| j dd dD ]z\}}|jd||j|j|j	rT|j	ndd |  x2t|j
 D ] \}}|j d	||d
 |  qtW |d |  q0W d S )Nr   )r   c             S   s
   | d j S )Nr   )r$   )r2   r   r   r   r3   Y   r1   z&table_F__e_a_t.toXML.<locals>.<lambda>)r4   featurer   )r)   r!   r    r#   setting)valuer!   )Z	simpletagr   newliner7   r
   r8   Zbegintagr!   r    r#   r"   Zendtag)r   writerr&   r.   r6   r;   r<   r   r   r   toXMLV   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 |_xL|D ]D}t|tsq|\}}	}
|dkrtt|	d |jtt|	d	 < qW d S )
Nr   r>   r)   r    r!   r#   0r?   r@   )r   r   r   r   r   r    r!   getr#   r   r
   r$   r"   
isinstancetuple)r   nameattrscontentr&   r)   r/   elementr   acr   r   r   fromXMLc   s"    


 
ztable_F__e_a_t.fromXML)N)	__name__
__module____qualname____doc__r	   r0   r:   rC   rN   r   r   r   r   r      s   
(r   c               @   s   e Zd ZdS )r   N)rO   rP   rQ   r   r   r   r   r   u   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   h