
    Ph|0                     T   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
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j0                  e      ZdZdZ ej:                  e      Z ej:                  e      Z G d dej                        Z dddZ!d Z"y
)    )deque)partial)sstruct)safeEval)LazyDict)OPTIMIZE_FONT_SPEED)TupleVariation   )DefaultTableNzn
	> # big endian
	version:			H
	reserved:			H
	axisCount:			H
	sharedTupleCount:		H
	offsetToSharedTuples:		I
z=
	> # big endian
	flags:				H
	offsetToGlyphVariationData:	I
c                   z    e Zd ZdZddgZd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_ra@  Glyph Variations table

    The ``gvar`` table provides the per-glyph variation data that
    describe how glyph outlines in the ``glyf`` table change across
    the variation space that is defined for the font in the ``fvar``
    table.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/gvar
    fvarglyf   Nc                 p    t         j                   j                  | |       d\  | _        | _        i | _        y )N)r
   r   )r   __init__versionreserved
variations)selftags     jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/_g_v_a_r.pyr   ztable__g_v_a_r.__init__=   s-    !!**45&*#dm    c                 T   |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                  |      \  }}t        | j                  z   t         z   }i }| j"                  |d<   | j$                  |d<   t        |      |d<   t        |      |d<   |t        |      z   |d<   ||d<   |d   |	z   |d	<   t'        j(                  t*        |      t        |
      j-                  | j                  d
      t'        j(                  t.        |      g}|j                  |       |j1                  |       |j1                  |
       dj3                  |      S c c}w c c}}w c c}w )Nr   r   r   r   	axisCountsharedTupleCountoffsetToSharedTuplesflagsoffsetToGlyphVariationDatabigr   )axesaxisTagtvcompileSharedTuples	itertoolschainr   values	enumeratesumlencompileGlyphs_appendcompileOffsets_GVAR_HEADER_SIZE_HEADgid_sizeGVAR_HEADER_SIZE_TAILr   r   r   packGVAR_HEADER_FORMAT_HEADto_bytesGVAR_HEADER_FORMAT_TAILextendjoin)r   ttFontaxisaxisTagssharedTuplesicoordsharedTupleIndicescsharedTupleSizecompiledGlyphsoffsetoffsetsglyphcompiledOffsetstableFormatGVAR_HEADER_SIZEheaderresults                      r   compileztable__g_v_a_r.compileB   s   -3F^-@-@A-@TDLL-@A--ioot'='='?@
 8A7NO7N81eeQh7NO|<|!s1v|<=,,VX?QR#ENN6"c%j F $ 	v'+';';G'D$04==@CXX LLy!]]z!(m{%(%6!")9C<P)P%&%w)*_< 	+,
 LL0&9((>LL0&9
 	o&l#n%xxI B P<s   H3HH%c                    |j                   t           }g }|d   }|j                         D ]_  }| j                  j	                  |g       }|s|j                  d       3d}	|j                  t        | j                  ||	|||              a |S )Nr   r   r   optimizeSize)cfgr   getGlyphOrderr   getr,   compileGlyph_r/   )
r   r7   r9   sharedCoordIndicesoptimizeSpeedrH   r   	glyphNamer   pointCountUnuseds
             r   r+   ztable__g_v_a_r.compileGlyphs_j   s    

#67f~--/I,,Y;Jc" MMMM$&%2!2	 0  r   c                    
 d   j                   D cg c]  }|j                   c}j                         }t         j                  z   t
        z   
t        j                  t        d t                 t        j                  t        t         j                  z    d       _        t        j                  t        t         j                  z   
         t        |       j                  k(  sJ t               j                  k(  sJ t        j                    j"                   j$                        i } j&                  d   
 fd} |       }t)        t+         j                        D ci c]  }||   |
 c}      }	|	 _        j.                  du r j1                          y y c c}w c c}w )Nr   r    r   c            	      d    
j                         j                  dz  	f	d} | S )Nr
   c                    	 |    }dk(  rdnd}	||z  z   }||dz  z   }t         j                  || d      }|d   z   |d   z    }|sg S |    }j                  |      }t        j                  |
|      S )Nr   r      r
   )rE   
glyphCount)r   decompileOffsets_getNumPoints_decompileGlyph_r/   )rS   gid
offsetSizestartOffset	endOffsetrB   gvarDatarC   numPointsInGlyphrF   r9   datar   offsetToDatareverseGlyphMapr   sharedCoordsrE   s            r   	read_itemzBtable__g_v_a_r.decompile.<locals>.get_read_item.<locals>.read_item   s    %i0"-"2Q
.c1AA'*q.8	(::Y/ +  ; 
  wqz 9L7ST:<UVIY#'#5#5e#< &MM#3\8X r   )getReverseGlyphMapr   )rg   re   rE   rF   r9   rc   r   rd   r   rf   r7   s    @@r   get_read_itemz/table__g_v_a_r.decompile.<locals>.get_read_item   s0    $779O**q.K & r   F)r!   r"   rN   r.   r/   r0   r   unpackr2   int
from_bytesrY   r4   r*   r   r#   decompileSharedTuplesr   r   r   r   ranger   lazyensureDecompiled)r   rc   r7   r8   glyphsr   ri   rg   r]   lrF   r9   r   rd   rf   s   ```       @@@@@r   	decompileztable__g_v_a_r.decompile   s   -3F^-@-@A-@TDLL-@A%%' 14==@CXX.5K6K0LdS..&)>)NOQV
 	#&69IJ	
 6{doo---8}...//d++T43L3L
 
66f~	 	2 "O	doo8NO8NfSk9,8NOP;;%!!#  m Bd Ps   F; G c                 N    t        | j                  j                         d       y )Nr   )maxlen)r   r   r'   )r   recurses     r   rp   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
   r   IrX   r    )array	frombytessys	byteorderbyteswap)rc   rE   rY   rB   offsetsSizeoffs         r   rZ   z table__g_v_a_r.decompileOffsets_   s    !kk#&G%>Q.K kk#&G%>Q.K$q-.==E! !*12'3sQw'G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.
        r   r
   i rx   r   ry   r    )r*   rn   maxrz   r|   r}   r~   tobytes)rB   r;   npackedrE   s        r   r-   ztable__g_v_a_r.compileOffsets_   s     7|q   q#g,'A1q5>WQZ/// (w<:%[[w&?w!qAvw&?@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)rC   )	simpletagr   newliner   r!   r"   getGlyphNamesr   rO   begintagtoXMLendtag)r   writerr7   r8   r9   rS   r   gvars           r   r   ztable__g_v_a_r.toXML   s    $,,74==9-3F^-@-@A-@TDLL-@A--/I,,Y7JOO-YO?NN"

68, #MM+,NN 0 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   rC   r   tuple)r   r   r   hasattrr   r[   
isinstancer   r	   r,   fromXML)r   nameattrscontentr7   rS   rC   rb   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"gu-+2(D%w-b4&;K2KL'..t4,3L),>FR C	:| $Y
L Q -4 # *9DOOI&# 'r   c                     d}| j                         rt        | j                        |z   S t        t        | dg             |z   S )NrX   coordinates)isCompositer*   
componentsgetattr)rC   NUM_PHANTOM_POINTSs     r   r[   ztable__g_v_a_r.getNumPoints_  sG    u''(+=== wumR89<NNNr   )N)F)__name__
__module____qualname____doc__dependenciesr/   r   rI   r+   rs   rp   staticmethodrZ   r-   r   r   r[    r   r   r   r   /   s{     F#LH
& P,8$t2  , / /,"90 O Or   r   TrK   c                0   | dv sJ t        j                  |||||      \  }}}|dk(  ryd| z   t        |      z   }	|j                  dd      |	j                  | d      ||g}
|	t        |      z   dz  dk7  r|
j	                  d       dj                  |
      S )Nr      rK   r   r   r   r        )r#   compileTupleVariationStorer*   r3   r,   r6   )dataOffsetSizer   
pointCountr9   rQ   rL   tupleVariationCounttuplesrc   rd   rH   s              r   rP   rP   "  s     V###(*(E(EJ*<<)% a~%F3L 	$$Q.ne4	F 	s4y A%*e88Fr   c           
          | dv sJ t        |      d| z   k  rg S t        j                  |d d d      }t        j                  |dd| z    d      }|}t        j                  d|||||d| z   |      S )Nr   r   r    r   )r*   rk   rl   r#   decompileTupleVariationStore)r   r   r:   r9   rc   r   rd   dataPoss           r   r\   r\   ?  s    V###
4y1~%%	..bq59>>$q1~+=">FLG**	N	 	r   )#collectionsr   	functoolsr   fontTools.miscr   fontTools.misc.textToolsr   fontTools.misc.lazyToolsr   fontTools.ttLibr   %fontTools.ttLib.tables.TupleVariationr	    r   rz   r%   loggingstructr|   ttLibtablesr#   	getLoggerr   logr2   r4   calcsizer.   r0   r   rP   r\   r   r   r   <module>r      s      " - - / @      
 2 2g!   )(()@A ((()@A pO\.. pOt :r   