
     ik                         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dS )    )sstruct)floatToFixedToStr)safeEval   )DefaultTable)grUtilsNz
    >
    version:    16.16F
c                   2    e Zd ZdZddZd Zd Zd Z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                 T    t           j                             | |           i | _        d S N)r   __init__features)selftags     i/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/F__e_a_t.pyr   ztable_F__e_a_t.__init__   s&    !**4555    c           	         t          j        t          ||           \  }}t          t	          | j        d                    | _        t          j        d|d d                   \  }|dd          }g }d}t          |          D ]}| j        dk    rIt          j        d|d|z  d|d	z   z                     \  }}	}}
}}t          |
d
z
  d|z  z
  dz            }
nGt          j        d|d
|z  d
|d	z   z                     \  }}	}
}}t          |
d
z
  d
|z  z
  dz            }
|
                    ||	|
||f           t          ||
|	z             }|d|z  d          }g }t          |          D ][}t          |          d|d	z   z  k    r@t          j        d|d|z  d|d	z   z                     \  }}|
                    ||f           \t          |          D ]\  }}|\  }}	}
}}t                      }||_        ||_        || j        t%          j        |          <   i |_        d |_        ||_        t          |
|
|	z             D ]9}|t          |          k    r||         \  }}||j        |<   |j        ||_        :d S )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   OOT4@@	D.t|2NNNOOmD$rr(33ABBx
x 	8 	8A|s""5;]tBFR1q5\$9:6 62dAvuc frkBM9Q>??28-d26B!a%L#893 3/dFE3 frkBM9Q>??OOS$s;<<<Z$77JJBMOO$z"" 	/ 	/A4yyAQK''#]5$q1uqAE{7J2KLL
c""C:...h'' 	' 	'DAq./+S$s99DDJDJ26DM'/#../DMDLDJ66D=11 ' 'K(((()!nd%)c"<'#&DL'	' 	'r   c                   
 d}d}d}t          | j                                        d           D ]|\  }
t          j        |          }| j        dk    rj|t          j        dt          j        |          t          
j	                  d|dz  dz   d	t          | j                  z  z   
j
        
j                  z  }n|d
k    rd| _        |                     |          c S |t          j        dt          j        |          t          
j	                  |dz  dz   dt          | j                  z  z   
j
        
j                  z  }t          
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n| S )Nr   r   )r/   )rH   vs    r   rI   z(table_F__e_a_t.compile.<locals>.<lambda>g   s$    !	@Q@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=..006J6JKKK 	& 	&DAq?1%%D|s""OA&&
OOQJOb3t}+=+=&==GG   "||F+++++OA&&
OOQJOb3t}+=+=&==GG   
  ""(X(X(X(X   1 11 E1a000c!*oo%FFl?D11V[T]););QBBBTIDPPr   c                 R   |                     d| j                   |                                 t          | j                                        d           D ]\  }}|                    d||j        |j        |j	        r|j	        nd           |                                 t          |j
                                                  D ]1\  }}|                     d||	           |                                 2|                    d           |                                 d S )
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   s2   DL9994=..006J6JKKK 	 	DAqOOgg&'i6Q     NNqz//1122 ! !1  !1 ===    MM)$$$NN	 	r   c           	         |dk    r)t          t          |d                             | _        d S |dk    r4|d         }t                      }t	          t          |d                             |_        t	          t          |d                             |_        t	          t          |                    dd                              |_        t          | j
                  |_        || j
        |<   i |_        |D ]p}t          |t                    s|\  }}	}
|dk    rJt	          t          |	d                             |j        t	          t          |	d	                             <   od S d S )
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   sN   9 %	*:!;!;<<DLLLY,C99DXeGn5566DJXeGn5566DJx		)S(A(ABBCCDLT]++DJ!%DM#DM" Y Y!'511 #	Q)##?B8AgJCWCW?X?XDM#hqz&:&:";";< Y Yr   r   )	__name__
__module____qualname____doc__r   rB   rT   re   rq    r   r   r
   r
      sx        
 
   )' )' )'V"Q "Q "QH  $Y Y Y Y Yr   r
   c                       e Zd ZdS )r*   N)rr   rs   rt   rv   r   r   r*   r*      s        Dr   r*   )fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr    r   r   r"   r   r
   objectr*   rv   r   r   <module>r}      s    " " " " " " 7 7 7 7 7 7 - - - - - -             CY CY CY CY CY\. CY CY CYL	 	 	 	 	f 	 	 	 	 	r   