
    jke'                     4   d dl mZ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 dlZd dlZd dlZd dlZd dlmc mc mZ  ej*                  e      Zej&                  ZdZ ej2                  e      Z G d	 d
e      Z G d de
j                        Zd Zd Zy)    )UserDictdeque)partial)sstruct)safeEval   )DefaultTableNz
	> # big endian
	version:			H
	reserved:			H
	axisCount:			H
	sharedTupleCount:		H
	offsetToSharedTuples:		I
	glyphCount:			H
	flags:				H
	offsetToGlyphVariationData:	I
c                   $     e Zd Z fdZd Z xZS )	_LazyDictc                 0    t         |           || _        y N)super__init__data)selfr   	__class__s     A/usr/lib/python3/dist-packages/fontTools/ttLib/tables/_g_v_a_r.pyr   z_LazyDict.__init__+   s    	    c                 f    | j                   |   }t        |      r |       }|| j                   |<   |S r   )r   callable)r   kvs      r   __getitem__z_LazyDict.__getitem__/   s/    IIaLA;ADIIaLr   )__name__
__module____qualname__r   r   __classcell__)r   s   @r   r   r   *   s    r   r   c                   r    e Zd ZddgZddZd Zd Zd ZddZe	d	        Z
e	d
        Zd Zd Ze	d        Zy)table__g_v_a_rfvarglyfNc                 p    t         j                   j                  | |       d\  | _        | _        i | _        y )N)r   r   )r	   r   versionreserved
variations)r   tags     r   r   ztable__g_v_a_r.__init__:   s-    !!**45&*#dmr   c                    |d   j                   D cg c]  }|j                   }}t        j                  |t	        j
                  | j                  j                                }t        |      D ci c]  \  }}||
 }}}t        |D cg c]  }t        |       c}      }	| j                  |||      }
d}g }|
D ]!  }|j                  |       |t        |      z  }# |j                  |       | j                  |      \  }}i }| j                  |d<   | j                  |d<   t        |      |d<   t        |      |d<   t         t        |      z   |d<   t        |
      |d<   ||d	<   |d   |	z   |d
<   t#        j$                  t&        |      }||g}|j)                  |       |j)                  |
       dj+                  |      S c c}w c c}}w c c}w )Nr    r   r#   r$   	axisCountsharedTupleCountoffsetToSharedTuples
glyphCountflagsoffsetToGlyphVariationDatar   )axesaxisTagtvcompileSharedTuples	itertoolschainr%   values	enumeratesumlencompileGlyphs_appendcompileOffsets_r#   r$   GVAR_HEADER_SIZEr   packGVAR_HEADER_FORMATextendjoin)r   ttFontaxisaxisTagssharedTuplesicoordsharedTupleIndicescsharedTupleSizecompiledGlyphsoffsetoffsetsglyphcompiledOffsetstableFormatheadercompiledHeaderresults                      r   compileztable__g_v_a_r.compile?   s   -3F^-@-@ATDLLAA--ioot'='='?@
 8A7NO81eeQhOO|<!s1v<=,,VX?QR# 	!ENN6"c%j F	! 	v'+';';G'D$ LLy!]]z!(m{%(%6!")9C<P)P%&">2|%w)*_< 	+, !&8&A /2l#n%xx? B P<s   G3GGc           	          g }|d   }|j                         D ]Q  }| j                  j                  |g       }|s|j                  d       3d}|j                  t	        ||||             S |S )Nr!   r   r   )getGlyphOrderr%   getr9   compileGlyph_)	r   r@   rB   sharedCoordIndicesrQ   r!   	glyphNamer%   pointCountUnuseds	            r   r8   ztable__g_v_a_r.compileGlyphs_a   s|    f~--/ 
	I,,Y;Jc" MM 0(<N
	 r   c                    	
 |d   j                   D cg c]  }|j                   c}	|j                         }t        j                  t
        dt                 t        |       j                  k(  sJ t        	       j                  k(  sJ  j                  t        d   j                  dz   j                        t        j                  	 j                   j                        i } j                   |d   
	
 fd}t#         j                        D ]  }||   }t%        |||      ||<    t'        |       _        |j*                  du r j-                          y y c c}w )Nr    r   r   )rN   r+   r!   c                 |    	|   z   	|dz      z    }|sg S |    }
j                  |      }t        ||      S )Nr   )getNumPoints_decompileGlyph_)rX   gidgvarDatarL   numPointsInGlyphrB   r   r!   offsetToDatarK   r   sharedCoordss        r   decompileVarGlyphz3table__g_v_a_r.decompile.<locals>.decompileVarGlyph   s_    ws|+lWS1W=M.MH 	OE#11%8"#3\8XVVr   F)r.   r/   rT   r   unpackr=   r;   r7   r+   r(   decompileOffsets_r,   r0   decompileSharedTuplesr)   r*   r-   ranger   r   r%   lazyensureDecompiled)r   r   r@   rA   glyphsr%   rc   r^   rX   rB   r!   ra   rK   rb   s   ``       @@@@@r   	decompileztable__g_v_a_r.decompileq   s`   -3F^-@-@ATDLLA%%')42B+CTJ6{doo---8}...((!"#a ) 

 //d++T43L3L
 
66f~	W 	W ) 	OCsI$+,=y#$NJy!	O $J/;;%!!#  A Bs   E0c                 N    t        | j                  j                         d       y )Nr   )maxlen)r   r%   r4   )r   recurses     r   ri   ztable__g_v_a_r.ensureDecompiled   s     	doo$$&q1r   c                 ,   |dk(  rt        j                   d      }|dz   dz  }nt        j                   d      }|dz   dz  }|j                  | d|        t        j                  dk7  r|j	                          |dk(  r|D cg c]  }|dz  	 }}|S c c}w )Nr   Hr      I   big)array	frombytessys	byteorderbyteswap)r   rN   r+   rK   offsetsSizeoffs         r   re   z table__g_v_a_r.decompileOffsets_   s    !kk#&G%>Q.K kk#&G%>Q.K$q-.==E! !*123sQw2G2 3s   Bc                    t        |       dk\  sJ t        dt        |             D ]  }| |dz
     | |   k  rJ  t        |       dk  r*t        j                  d| D cg c]  }|dz	  	 c}      }d}nt        j                  d|       }d}t        j
                  dk7  r|j                          |j                         |fS c c}w )al  Packs a list of offsets into a 'gvar' offset table.

        Returns a pair (bytestring, tableFormat). Bytestring is the
        packed offset table. Format indicates whether the table
        uses short (tableFormat=0) or long (tableFormat=1) integers.
        The returned tableFormat should get packed into the flags field
        of the 'gvar' header.
        rq   r   i rp   r   rr   rt   )r7   rg   maxru   rw   rx   ry   tobytes)rK   rD   npackedrN   s        r   r:   ztable__g_v_a_r.compileOffsets_   s     7|q   q#g,' 	0A1q5>WQZ///	0w<:%[[w&?!qAv&?@FK[[g.FK==E!OO +.. '@s   C 
c                 .   |j                  d| j                         |j                          |j                  d| j                         |j                          |d   j                  D cg c]  }|j
                   }}|j                         D ]}  }| j                  j                  |      }|s!|j                  d|       |j                          |D ]  }|j                  ||        |j                  d       |j                           y c c}w )Nr#   )valuer$   r    glyphVariations)rL   )	simpletagr#   newliner$   r.   r/   getGlyphNamesr%   rU   begintagtoXMLendtag)r   writerr@   rA   rB   rX   r%   gvars           r   r   ztable__g_v_a_r.toXML   s    $,,74==9-3F^-@-@ATDLLAA--/ 		I,,Y7JOO-YO?NN" -

68,-MM+,NN		 Bs   ,Dc                    |dk(  rt        |d         | _        y |dk(  rt        |d         | _        y |dk(  rt        | d      si | _        |d   }|d   |   }| j                  |      }g }|D ]q  }	t        |	t              s|	\  }}}|dk(  s t        i d g|z        }
|j                  |
       |D ],  }t        |t              s|\  }}}|
j                  |||       . s || j                  |<   y y )	Nr#   r   r$   r   r%   rL   r!   tuple)r   r#   r$   hasattrr%   r\   
isinstancer   TupleVariationr9   fromXML)r   nameattrscontentr@   rX   rL   r`   r   elementr   tupleElement	tupleName
tupleAttrstupleContents                  r   r   ztable__g_v_a_r.fromXML   s   9#E'N3DLZ$U7^4DM&&4."$gI6N9-E#11%8 O" 	Rgu-+2(D%w-b4&;K2KL'..t4,3 RL),>FR C	:| $Y
L QR	R *9DOOI&# 'r   c                     d}| j                         rt        | j                        |z   S | j                         r+d}| j                  D ]  }||j	                         z  } ||z   S t        t        | dg             |z   S )Nrs   r   coordinates)isCompositer7   
componentsisVarCompositegetPointCountgetattr)rL   NUM_PHANTOM_POINTScount	components       r   r\   ztable__g_v_a_r.getNumPoints_   s    u''(+===!!#E"-- 3	00223--- wumR89<NNNr   r   )F)r   r   r   dependenciesr   rR   r8   rk   ri   staticmethodre   r:   r   r   r\    r   r   r   r   7   so    F#L
  D "$H2  , / /,"90 O Or   r   c                    t        j                  | |||      \  }}}|dk(  ryt        j                  d|dt	        |      z         ||g}t	        |      t	        |      z   dz  dk7  r|j                  d       dj                  |      S )Nr   r   >HHrs   rq       )r0   compileTupleVariationStorestructr<   r7   r9   r?   )r%   
pointCountrB   rW   tupleVariationCounttuplesr   rQ   s           r   rV   rV     s    (*(E(EJ*<)% akk%!4a#f+oFPTUFFc$i1$)e88Fr   c           
          t        |      dk  rg S t        j                  d|d d       \  }}|}t        j                  d||| ||d|      S )Nrs   r   r   )r7   r   rd   r0   decompileTupleVariationStore)r   rC   rB   r   r   ra   dataPoss          r   r]   r]     s^    
4y1}	(.eT"1X(F%G**		 	r   )collectionsr   r   	functoolsr   fontTools.miscr   fontTools.misc.textToolsr    r	   ru   r2   loggingr   rw   %fontTools.ttLib.tables.TupleVariationttLibtablesr   r0   	getLoggerr   logr=   calcsizer;   r   r   rV   r]   r   r   r   <module>r      s    '  " -      
 2 2 g!""
  $7##$67 
 
HO\.. HOV	r   