
    
3j;                         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     Y/home/wildlama/miniconda3/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           	      ~   UR                  SU R                  S9  UR                  5         SU;   a  US   OS n[        U R                  R                  5       S S9 GH^  u  pEU(       a  UR                  UR                  5      OS nUb1  UR                  5         UR                  U5        UR                  5         UR                  SUUR                  UR                  UR                  (       a  UR                  OSS9  UR                  5         [        UR                  R                  5       5       Hd  u  pxUR                  S	XxS
9  U(       a  UR                  U5      OS nUb"  UR                  S5        UR                  U5        UR                  5         Mf     UR                  S5        UR                  5         GMa     g )Nr#   )r#   namec                      U S   R                   $ rH   rI   rJ   s    r   rL   &table_F__e_a_t.toXML.<locals>.<lambda>r   rN   r   rO   featurer   )r:   r.   r-   r1   setting)valuer.   z  )	simpletagr#   newlinerT   r   rU   getDebugNamer.   commentbegintagr-   r1   r0   writeendtag)	r   writerr4   	nameTabler@   rS   ra   r\   r]   s	            r   toXMLtable_F__e_a_t.toXMLn   sZ   DLL9&,&6F6ND	4==..06JKDA6?9))!''2TD t$ OOgggg&'iiQ   NNqzz//12  ! =4=y--a04#LL&NN4(  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#   rd   r:   r-   r.   r1   0re   rf   )r"   r   r#   r,   r'   r-   r.   getr1   r*   r   r2   r0   
isinstancetuple)r   ra   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   rp   r|   __static_attributes__ r   r   r
   r
      s$    
)'V"QH8Yr   r
   c                       \ rS rSrSrg)r,      r   N)r~   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 -   MY\.. MY`	f 	r   