
    hk                         S SK Jr  S SKJr  S SKJr  SSKJr  SSKJr  S SK	r	Sr
 " S	 S
\R                  5      r " S S\5      rg)    )sstruct)floatToFixedToStr)safeEval   )DefaultTable)grUtilsNz
    >
    version:    16.16F
c                   :    \ rS rSrSrS
S jrS rS rS rS r	S	r
g)table_F__e_a_t   a~  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                 P    [         R                   R                  X5        0 U l        g N)r   __init__features)selftags     Q/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/tables/F__e_a_t.pyr   table_F__e_a_t.__init__   s    !!**45    c           	         [         R                  " [        X5      u  p1[        [	        U R
                  SS95      U l        [        R                  " SUS S 5      u  nUSS  n/ nSn[        U5       H  nU R
                  S:  a?  [        R                  " SUSU-  SUS	-   -   5      u  pp:p[        U
S
-
  SU-  -
  S-  5      n
O>[        R                  " SUS
U-  S
US	-   -   5      u  ppn[        U
S
-
  S
U-  -
  S-  5      n
UR                  XXU45        [        XjU	-   5      nM     USU-  S  n/ n[        U5       HQ  n[        U5      SUS	-   -  :  d  M  [        R                  " SUSU-  SUS	-   -   5      u  pUR                  X45        MS     [        U5       H  u  pUu  ppn[        5       nUUl        UUl        UU R"                  [$        R&                  " U5      '   0 Ul        S Ul        UUl        [        XU	-   5       H@  nU[        U5      :  a  M  X   u  nnUUR(                  U'   UR*                  b  M9  UUl        MB     M     g )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   	decompiletable_F__e_a_t.decompile   sF   OOOT@	.t||2NOmmD$r(3ABx
xA||s"5;]]tBFR1q5\:62Au frkBM9Q>?28--d26B!a%L93/F3 frkBM9Q>?OOSs;<Z$7J ! BMO$z"A4yAQK'#]]5$q1uqAE{2KL
""C:. # h'DA./+Ss9DDJDJ26DMM'//#./DMDLDJ6D=1K(()nd%)c"<<'#&DL 2 (r   c                 @  ^
 SnSnSn[        U R                  R                  5       S S9 GH  u  nm
[        R                  " U5      nU R
                  S:  az  U[        R                  " S[        R                  " U5      [        T
R                  5      SUS-  S-   S	[        U R                  5      -  -   T
R                  T
R                  5      -  nOUS
:  a  SU l        U R                  U5      s  $ U[        R                  " S[        R                  " U5      [        T
R                  5      US-  S-   S[        U R                  5      -  -   T
R                  T
R                  5      -  n[        T
R                  R                  5       U
4S jS9 H  u  pxU[        R                  " SXx5      -  nM!     U[        T
R                  5      -  nGM     [        R                  " [        U 5      n	U	[        R                  " S[        U R                  5      SS5      -   U-   U-   $ )Nr   r   c                      U S   R                   $ Nr   r2   xs    r   <lambda>(table_F__e_a_t.compile.<locals>.<lambda>N       !

r   keyr   r   r   r   r   i  r   c                 <   > U S   TR                   :X  a  SU S   4$ U $ )Nr   r   )r1   )rK   vs    r   rL   rM   g   s%    !		@Q2qt*2XWX2Xr   r   z>HHL)sortedr   itemsr   tag2numr#   r$   packr*   r0   r-   r.   compiler   r!   )r   r4   fdatvdatr<   r@   fnumslhdrrS   s             @r   rX   table_F__e_a_t.compileJ   s   4==..06JKDAq??1%D||s"OOA&

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

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

  "(X E100 c!**o%F9 L: ll?D1V[[T]]);QBBTIDPPr   c           	      2   UR                  SU R                  S9  UR                  5         [        U R                  R                  5       S S9 H  u  p4UR                  SUUR                  UR                  UR                  (       a  UR                  OSS9  UR                  5         [        UR                  R                  5       5       H%  u  pVUR                  SXVS	9  UR                  5         M'     UR                  S5        UR                  5         M     g )
Nr#   )r#   c                      U S   R                   $ rH   rI   rJ   s    r   rL   &table_F__e_a_t.toXML.<locals>.<lambda>q   rN   r   rO   featurer   )r:   r.   r-   r1   setting)valuer.   )	simpletagr#   newlinerT   r   rU   begintagr.   r-   r1   r0   endtag)r   writerr4   r@   rS   r\   r]   s          r   toXMLtable_F__e_a_t.toXMLn   s    DLL94==..06JKDAOOgggg&'iiQ   NNqzz//12  ! =  3 MM)$NN Lr   c           	      d   US:X  a  [        [        US   5      5      U l        g US:X  Ga  US   n[        5       n[	        [        US   5      5      Ul        [	        [        US   5      5      Ul        [	        [        UR                  SS5      5      5      Ul        [        U R                  5      Ul        X`R                  U'   0 Ul        U H`  n[        U[        5      (       d  M  Uu  pn
US:X  d  M'  [	        [        U	S   5      5      UR                  [	        [        U	S	   5      5      '   Mb     g g )
Nr#   rc   r:   r-   r.   r1   0rd   re   )r"   r   r#   r,   r'   r-   r.   getr1   r*   r   r2   r0   
isinstancetuple)r   nameattrscontentr4   r:   rA   elementr   acs              r   fromXML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!%MM#DM"!'511#	)#?B8AgJCW?XDMM#hqz&:";< # r   )r   r#   r   )__name__
__module____qualname____firstlineno____doc__r   rD   rX   rk   rx   __static_attributes__ r   r   r
   r
      s$    
)'V"QH$Yr   r
   c                       \ rS rSrSrg)r,      r   N)rz   r{   r|   r}   r   r   r   r   r,   r,      s    r   r,   )fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr    r   r   r$   r!   r
   objectr,   r   r   r   <module>r      sA    " 7 -   CY\.. CYL	f 	r   