
    ͏khk                         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
ej                        Z G d de      Zy)    )sstruct)floatToFixedToStr)safeEval   )DefaultTable)grUtilsNz
    >
    version:    16.16F
c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	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                 R    t         j                   j                  | |       i | _        y N)r   __init__features)selftags     [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/F__e_a_t.pyr   ztable_F__e_a_t.__init__   s    !!**45    c           	         t        j                  t        ||       \  }}t        t	        | j
                  d            | _        t        j                  d|d d       \  }|dd  }g }d}t        |      D ]  }| j
                  dk\  rAt        j                  d|d|z  d|d	z   z         \  }}	}}
}}t        |
d
z
  d|z  z
  dz        }
n?t        j                  d|d
|z  d
|d	z   z         \  }}	}
}}t        |
d
z
  d
|z  z
  dz        }
|j                  ||	|
||f       t        ||
|	z         } |d|z  d  }g }t        |      D ]O  }t        |      d|d	z   z  k\  st        j                  d|d|z  d|d	z   z         \  }}|j                  ||f       Q t        |      D ]  \  }}|\  }}	}
}}t               }||_        ||_        || j"                  t%        j&                  |      <   i |_        d |_        ||_        t        |
|
|	z         D ]<  }|t        |      k\  r||   \  }}||j(                  |<   |j*                  6||_        >  y )N   )precisionBitsz>H      r          @>LHHLHHr         >HHLHH>HH)r   unpack2Feat_hdr_formatfloatr   versionstructunpackrangeintappendmaxlen	enumerateFeatureflagslabelr   r   num2tagsettingsdefaultindex)r   datattFont_numFeatsallfeats
maxsettingifidnumsoffsetr+   lidallsettingsvalffobjvidvlids                      r   	decompileztable_F__e_a_t.decompile   s|   OOOT4@	D.t||2NOmmD$r(3ABx
x 	8A||s"5;]]tBFR1q5\:62dAvuc frkBM9Q>?28--d26B!a%L93/dFE3 frkBM9Q>?OOS$s;<Z$7J	8 BMO$z" 	/A4yAQK'#]]5$q1uqAE{2KL
c""C:.	/ h' 	'DAq./+S$s9DDJDJ26DMM'//#./DMDLDJ66D=1 'K(()!nd%)c"<<'#&DL'	'r   c                 2  
 d}d}d}t        | j                  j                         d       D ]  \  }
t        j                  |      }| j
                  dk\  rx|t        j                  dt        j                  |      t        
j                        d|dz  dz   d	t        | j                        z  z   
j                  
j                        z  }n|d
kD  rd| _        | j                  |      c S |t        j                  dt        j                  |      t        
j                        |dz  dz   dt        | j                        z  z   
j                  
j                        z  }t        
j                  j                         
fd      D ]  \  }}|t        j                  d||      z  }! |t        
j                        z  } t        j                  t        |       }	|	t        j                  dt        | j                        dd      z   |z   |z   S )Nr   r   c                      | d   j                   S Nr   r0   xs    r   <lambda>z(table_F__e_a_t.compile.<locals>.<lambda>N       !

 r   keyr   r   r   r   r   i  r   c                 :    | d   j                   k(  rd| d   fS | S )Nr   r   )r/   )rH   vs    r   rI   z(table_F__e_a_t.compile.<locals>.<lambda>g   s#    !		@Q2qt* WX r   r   z>HHL)sortedr   itemsr   tag2numr!   r"   packr(   r.   r+   r,   compiler   r   )r   r2   fdatvdatr:   r>   fnumslhdrrO   s             @r   rT   ztable_F__e_a_t.compileJ   s   4==..06JK 	&DAq??1%D||s"OOA&

OQJOb3t}}+=&==GGGG  "||F++OOA&

OQJOb3t}}+=&==GGGG  

  "(X 11 E1a001 c!**o%F9	&: ll?D1V[[T]]);QBBTIDPPr   c                 >   |j                  d| j                         |j                          t        | j                  j                         d       D ]  \  }}|j                  d||j                  |j                  |j                  r|j                  nd       |j                          t        |j                  j                               D ])  \  }}|j                  d||	       |j                          + |j                  d       |j                           y )
Nr!   )r!   c                      | d   j                   S rE   rF   rG   s    r   rI   z&table_F__e_a_t.toXML.<locals>.<lambda>q   rJ   r   rK   featurer   )r8   r,   r+   r/   setting)valuer,   )	simpletagr!   newlinerP   r   rQ   begintagr,   r+   r/   r.   endtag)r   writerr2   r>   rO   rX   rY   s          r   toXMLztable_F__e_a_t.toXMLn   s    DLL94==..06JK 	DAqOOgggg&'iiQ   NNqzz//12 !1  !1 = ! MM)$NN	r   c           	      N   |dk(  rt        t        |d               | _        y |dk(  r|d   }t               }t	        t        |d               |_        t	        t        |d               |_        t	        t        |j                  dd                  |_        t        | j                        |_        || j                  |<   i |_        |D ]X  }t        |t              s|\  }}	}
|dk(  s t	        t        |	d               |j                  t	        t        |	d	               <   Z y y )
Nr!   r]   r8   r+   r,   r/   0r^   r_   )r    r   r!   r*   r%   r+   r,   getr/   r(   r   r0   r.   
isinstancetuple)r   nameattrscontentr2   r8   r?   elementr   acs              r   fromXMLztable_F__e_a_t.fromXML   s   9 %	*:!;<DLY,C9DXeGn56DJXeGn56DJx		)S(ABCDLT]]+DJ!%DMM#DM" Y!'51#	Q)#?B8AgJCW?XDMM#hqz&:";<Y r   r   )	__name__
__module____qualname____doc__r   rB   rT   re   rq    r   r   r
   r
      s$    
)'V"QH$Yr   r
   c                       e Zd Zy)r*   N)rr   rs   rt   rv   r   r   r*   r*      s    r   r*   )fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr    r   r   r"   r   r
   objectr*   rv   r   r   <module>r}      sA    " 7 -   CY\.. CYL	f 	r   