
    h!                         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J
r
  S SKrS	rS
rSrSrSrSr " S S5      r " S S\5      r " S S\	R                  5      rg)    )sstruct)floatToFixedToStr)safeEval)partial   )DefaultTable)grUtilsNz/
    >        # big endian
    version: 16.16F
zR
    >
    version: 16.16F
    compression:L    # compression scheme or reserved 
zz
    >
    attNum:     B    # Attribute number of first attribute
    num:        B    # Number of attributes in this run
zz
    >
    attNum:     H    # Attribute number of first attribute
    num:        H    # Number of attributes in this run
ao  
    >
    subboxBitmap:   H    # Which subboxes exist on 4x4 grid
    diagNegMin:     B    # Defines minimum negatively-sloped diagonal (si)
    diagNegMax:     B    # Defines maximum negatively-sloped diagonal (sa)
    diagPosMin:     B    # Defines minimum positively-sloped diagonal (di)
    diagPosMax:     B    # Defines maximum positively-sloped diagonal (da)
a  
    >
    left:           B    # xi
    right:          B    # xa
    bottom:         B    # yi
    top:            B    # ya
    diagNegMin:     B    # Defines minimum negatively-sloped diagonal (si)
    diagNegMax:     B    # Defines maximum negatively-sloped diagonal (sa)
    diagPosMin:     B    # Defines minimum positively-sloped diagonal (di)
    diagPosMax:     B    # Defines maximum positively-sloped diagonal (da)
c                       \ rS rSrSrg)_Object8    N__name__
__module____qualname____firstlineno____static_attributes__r       Q/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/tables/G__l_a_t.pyr   r   8       r   r   c                       \ rS rSrSrg)_Dict<   r   Nr   r   r   r   r   r   <   r   r   r   c                   R    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)table_G__l_a_t@   zkGraphite Glyph Attributes table

See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
Nc                 P    [         R                   R                  X5        SU l        g Nr   )r   __init__scheme)selftags     r   r   table_G__l_a_t.__init__F   s    !!**45r   c                    [         R                  " [        X5        [        [	        U R
                  SS95      U l        U R
                  S::  a  [        U R                  [        S9nOU R
                  S::  a  [        U R                  [        S9nOkU R
                  S:  a[  [        R                  " U5      u  ol        [         R                  " [        X5        U R                  S-  S:H  U l        U R                   nUS   n0 U l        S	n[%        XDSS  5       H0  u  pgW" XU 5      U R"                  UR'                  U5      '   US-  nM2     g )
N   )precisionBitsffffff?fmt333333@      @r   Glocr   )r   unpack2Glat_format_0floatr   versionr   decompileAttributes12Glat_format_1_entryGlat_format_23_entryr	   
decompressr    Glat_format_3compressionhasOctaboxesdecompileAttributes3
attributeszipgetGlyphName)r!   datattFontdecodergloccountses           r   	decompiletable_G__l_a_t.decompileJ   s   t2.t||2NO<<3d88>QRG\\S d88>RSG\\S ")"4"4T":T;OOM46!%!1!1A!5! ;D//Gf~12h'DA:A$):LDOOF//67QJE (r   c                    [        5       n[        U5      S:  a  [        R                  " X![	        5       5      u  pA[        UR                  UR                  UR                  -   5      n[        U5      SUR                  -  :  aP  [        R                  " SUR                  -  U5      nUR                  [        XV5      5        USUR                  -  S  n[        U5      S:  a  M  U$ )N      >%dh)r   lenr   r-   r   rangeattNumnumstructunpack_fromupdater:   )r!   r<   r)   r9   rB   keysvalss          r   r1   $table_G__l_a_t.decompileAttributes12^   s    W
$i!mooc;GA188aee#34D4yAI%))6AEE>DA!!#d/2AIK( $i!m r   c                    U R                   (       a  [        R                  " [        U[	        5       5      u  p![        UR                  5      R                  S5      n/ Ul        [        U5       HU  n[        U5      S:  d  M  [        R                  " [        U[	        5       5      u  pQUR                  R                  U5        MW     U R                  U[        5      nU R                   (       a  WUl        U$ )N1   )r7   r   r-   Glat_format_3_octabox_metricsr   binsubboxBitmapr@   subboxesrJ   rI   Glat_format_3_subbox_entryappendr1   r3   octabox)r!   r<   onumsubbsubboxattrss          r   r8   #table_G__l_a_t.decompileAttributes3i   s    oo&CT79UGA(..s3FAJ6]t9>#*??2D')$LF JJ%%f- # **41EFEMr   c                 0   [         R                  " [        U 5      nU R                  S::  a  [	        U R
                  [        S9nOU R                  S::  a  [	        U R
                  [        S9nOaU R                  S:  aQ  U R                  S-  U R                  (       a  SOS-   U l	        [         R                  " [        U 5      nU R                  n/ n[        [        U R                  5      5       HD  nUR                  [        U5      5        UW" U R                  UR!                  U5         5      -  nMF     UR                  [        U5      5        US   R#                  U5        U R                  S:  a!  [$        R&                  " U R                  U5      nU$ )	Nr'   r(   r*   r+      r   r   r,   )r   packr.   r0   r   compileAttributes12r2   r    r7   r6   r5   compileAttributes3rJ   rI   r9   r[   r;   setr	   compress)r!   r=   r<   encoderglocsns         r   compiletable_G__l_a_t.compiley   s3   ||M40<<3d66<OPG\\S d66<OPG\\S  $r 14;L;LaRSTD<<t4D--Gs4??+,ALLT#GDOOF,?,?,BCDDD - 	SYv5!<<3##DKK6Dr   c           
          Sn[         R                  " U5       HO  nU[        R                  " X$S   US   S.5      [        R                  " S[        US   5      -  /US   Q76 -   -  nMQ     U$ )Nr   r   r   )rK   rL   rH   rG   )r	   entriesr   re   rM   rI   )r!   ra   r)   r<   rB   s        r   rf   "table_G__l_a_t.compileAttributes12   sq    'AGLL1ad&CDv{{#ad)#H'(tH  D ( r   c                 j   U R                   (       a  UR                  n[        R                  " [        U5      n[        UR                  5      R                  S5      n[        U5       H.  nU[        R                  " [        UR                  U   5      -  nM0     OSnX0R                  U[        5      -   $ )NrT    )r7   r\   r   re   rV   rW   rX   r@   rJ   rZ   rY   rf   r3   )r!   ra   r]   r<   r^   r_   s         r   rg   !table_G__l_a_t.compileAttributes3   s    A<< =qAD(..s3F6]%?AOO # D..u6JKKKr   c           	      x  ^ UR                  SU R                  U R                  S9  UR                  5         [	        U R
                  R                  5       U4S jS9 GH  u  p4UR                  SUS9  UR                  5         [        US5      (       Ga>  UR                  n[        R                  " [        5      u  pgn0 n	U H-  n
U
S:X  a  M  S	R                  [        XZ5      S
-  S-  5      X'   M/     SR                  UR                  5      U	S'   UR                  " S0 U	D6  UR                  5         [        R                  " [         5      u  pgnUR"                   HR  n0 n	U H%  n
S	R                  [        X5      S
-  S-  5      X'   M'     UR                   " S0 U	D6  UR                  5         MT     UR%                  S5        UR                  5         [	        UR                  5       5       H%  u  pUR                  SXS9  UR                  5         M'     UR%                  S5        UR                  5         GM     g )Nr0   )r0   compressionSchemec                 ,   > TR                  U S   5      $ r   )
getGlyphID)xr=   s    r   <lambda>&table_G__l_a_t.toXML.<locals>.<lambda>   s    63D3DQqT3Jr   )keyglyph)namer\   rX   z{:.3f}%      Y@   z{:0X}bitmap	octaboxes	attribute)indexvalue)r   )r\   )	simpletagr0   r    newlinesortedr9   itemsbegintaghasattrr\   r   	getformatrV   formatgetattrrX   rZ   rY   endtag)r!   writerr=   rl   ar]   formatstringnamesfixesrQ   krA   vs     `          r   toXMLtable_G__l_a_t.toXML   s   DLLDKKXOO!!#)J
DA OOG!O,NNq)$$II-4->->1.*U AN* '..wq}u/Ds/JKDG  ")!?X4t4 -4->->..*U AD""+"2"271=53H33N"O #$$7$7NN$ $ k* qwwy)  A ?  * MM'"NNC
r   c                    US:X  a8  [        [        US   5      5      U l        [        [        US   5      5      U l        US:w  a  g [        U S5      (       d  0 U l        US   n[        5       nU GHg  n[        U[        5      (       d  M  Uu  pn	US:X  a4  [        [        US   5      5      n
[        [        US   5      5      nXU
'   MZ  US	:X  d  Mb  S
U l
        [        5       n[        US   S5      Ul        / Ul        US	 UR                  5        H/  u  p[        X[        [        US S 5      S-  S-  S-   5      5        M1     U	 H  n[        U[        5      (       d  M  Uu  pn	[        5       nUR                  5        H/  u  p[        X[        [        US S 5      S-  S-  S-   5      5        M1     UR                  R!                  U5        M     Xl        GMj     X`R                  U'   g )Nr0   rv   r}   r9   r~   r   r   r   r   Tr   r%   g     o@r   g      ?)r/   r   r0   intr    r   r9   r   
isinstancetupler7   r   rX   rY   r   setattrr[   r\   )r!   r~   ra   contentr=   gnamer9   elementr"   
subcontentr   r   r]   sos                 r   fromXMLtable_G__l_a_t.fromXML   s   9 %	*:!;<DLhu-@'ABCDK7?t\** DOfW
Ggu--%,"C
k!w01w01 !1#$(!I!$U8_b!9
(O!KKMDAA#eAcrFme&;e&Cc&I"JK *)G%gu55 /6,S B %s53B=5+@5+H3+N'OP !.JJ%%b)  * &'"1 2 ",r   )r9   r6   r7   r    r0   )N)r   r   r   r   __doc__r   rC   r1   r8   rm   rf   rg   r   r   r   r   r   r   r   r   @   s6    
(	 ,	L$L#,r   r   )fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr   	functoolsr   rs   r   r	   rM   r.   r5   r2   r3   rV   rZ   r   dictr   r   r   r   r   <module>r      st    " 7 -    
 
 ! 
 	 		D 	k,\.. k,r   