
    hDD                        S r SSKJrJr  SSKJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJrJr  SSKJrJrJr   " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\"5      r# " S S\"5      r$S r% " S S\"5      r&SS.S  jr' " S! S"\5      r( " S# S$5      r)g%)&zGlyphSets returned by a TTFont.    )ABCabstractmethod)Mapping)contextmanager)copydeepcopy)SimpleNamespace)Vector)otRoundfixedToFloat)deprecateFunction)	TransformDecomposedTransform)TransformPenTransformPointPen)DecomposingRecordingPenlerpRecordingsreplayRecordingc                   z    \ rS rSrSrSS.S jr\S\4S j5       r\S 5       r	S	 r
S
 rS r\" S\S9S 5       rSrg)_TTGlyphSet   zdGeneric dict-like GlyphSet class that pulls metrics from hmtx and
glyph shape from TrueType or CFF.
TrecalcBoundsc                   X@l         Xl        SU R                  ;   a4  U R                  S   R                   Vs0 s H  oUR                  S_M     snO0 U l        Ub  UO0 U l        0 U l        Ub  UO0 U l        SU l        / U l	        / U l
        X0l        US   R                  U l        [        UR                  S5      SS 5      U l        S U l        U(       af  SSKJn  [        UR                  S5      SS 5      U l        U R"                  b1  U" U R"                  R(                  US   R                  U5      U l        g g g s  snf )	Nfvarr   hmtxvmtxmetricsVarStoreInstancerHVARtable)r   fontaxesaxisTagdefaultLocationNormalizedlocationrawLocationoriginalLocationdepthlocationStackrawLocationStackglyphsMappingr   hMetricsgetattrgetvMetrics	hvarTablefontTools.varLib.varStorer    VarStorehvarInstancer)selfr#   r'   r-   r   axisr    s          L/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/ttGlyphSet.py__init___TTGlyphSet.__init__   s'   (	 " *.6):)?)?@)?\\1_)?@ 	&
 %-$8b,4,@b
 "*V,, 0)TBC$TXXf%5wEDN~~)%6NN++T&\->->&" *	  As   D<resetc              #     #    U R                   R                  U R                  5        U R                  R                  U R                  5        U(       a?  U R
                  R                  5       U l        U R                  R                  5       U l        O&U R                  R                  5       U l        0 U l        U R                  R                  U5        U R                  R                  U5         S v   U R                   R                  5       U l        U R                  R                  5       U l        g ! U R                   R                  5       U l        U R                  R                  5       U l        f = f7fN)
r+   appendr'   r,   r(   r)   r   r&   updatepop)r6   r'   r;   s      r8   pushLocation_TTGlyphSet.pushLocation5   s    !!$--0$$T%5%56 11668DM#==BBDD MM..0DM!DX&)	;J ..224DM#4488:D !..224DM#4488:Ds   C-E60D3 4?E63A E33E6c              #      #     U R                   nU =R                   S-  sl         Uv   U =R                   S-  sl         g ! U =R                   S-  sl         f = f7f)N   )r*   )r6   r*   s     r8   	pushDepth_TTGlyphSet.pushDepthH   s?     	JJEJJ!OJKJJ!OJDJJ!OJs   A%? AAAc                     XR                   ;   $ r=   r-   r6   	glyphNames     r8   __contains___TTGlyphSet.__contains__Q   s    ....    c                 H    [        U R                  R                  5       5      $ r=   )iterr-   keysr6   s    r8   __iter___TTGlyphSet.__iter__T   s    D&&++-..rM   c                 ,    [        U R                  5      $ r=   )lenr-   rQ   s    r8   __len___TTGlyphSet.__len__W   s    4%%&&rM   z#use 'glyphName in glyphSet' instead)categoryc                     XR                   ;   $ r=   rH   rI   s     r8   has_key_TTGlyphSet.has_keyZ   s     ....rM   )r&   r*   r#   r-   r.   r5   r2   r'   r+   r)   r(   r,   r   r1   N)__name__
__module____qualname____firstlineno____doc__r9   r   boolrA   rE   rK   rR   rV   r   DeprecationWarningrZ   __static_attributes__ rM   r8   r   r      sp     GK 8 ;D ; ;$  //' -8J//rM   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )_TTGlyphSetGlyfa   c                 x   > US   U l         [        TU ]	  XU R                   US9  UR                  S5      U l        g )Nglyfr   gvar)	glyfTablesuperr9   r0   	gvarTable)r6   r#   r'   r   	__class__s       r8   r9   _TTGlyphSetGlyf.__init__b   s6    flS&)rM   c                 *    [        XU R                  S9$ )Nr   )_TTGlyphGlyfr   rI   s     r8   __getitem___TTGlyphSetGlyf.__getitem__g   s    D$:K:KLLrM   )rk   rm   )Tr\   r]   r^   r_   r9   rr   rc   __classcell__rn   s   @r8   rf   rf   a   s    *
M MrM   rf   c                   L   ^  \ rS rSrU 4S jrS rS r\S\4S j5       r	Sr
U =r$ )_TTGlyphSetCFFk   c                    > SU;   a  SOSn[        X   R                  R                  5       5      S   R                  U l        [
        TU ]  XU R                  5        U R                  U5        g )NCFF2zCFF r   )listcffvaluesCharStringscharStringsrl   r9   setLocation)r6   r#   r'   tableTagrn   s       r8   r9   _TTGlyphSetCFF.__init__l   s\    #t^6 2 2 9 9 ;<Q?KK)9)9:"rM   c                     [        X5      $ r=   )_TTGlyphCFFrI   s     r8   rr   _TTGlyphSetCFF.__getitem__r   s    4++rM   c                     S U l         U(       a^  SSKJn  [        U R                  SS 5      nUb=  U" UR
                  U R                  S   R                  U5      nUR                  U l         g g S U l         g )Nr   r   varStorer   )	blenderr3   r    r/   r   
otVarStorer#   r$   interpolateFromDeltas)r6   r'   r    r   	instancers        r8   r   _TTGlyphSetCFF.setLocationu   so     Dt//TBH#-''6):)?)?	  )>>	 $  DLrM   r;   c              #     #    U R                  U5        [        R                  XU5       n Uv   U R                  U R                  5         S S S 5        g ! U R                  U R                  5        f = f! , (       d  f       g = f7fr=   )r   r   rA   r'   )r6   r'   r;   values       r8   rA   _TTGlyphSetCFF.pushLocation   sg     "%%de<0  /	 =<   /	 =<s2   (BA5AA5	BA22A55
B?B)r   r   )r\   r]   r^   r_   r9   rr   r   r   ra   rA   rc   ru   rv   s   @r8   rx   rx   k   s-    #,   0D 0 0rM   rx   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )_TTGlyphSetVARC   c                 Z   > X0l         [        TU ]	  XU5        US   R                  U l        g )NVARC)glyphSetrl   r9   r"   	varcTable)r6   r#   r'   r   rn   s       r8   r9   _TTGlyphSetVARC.__init__   s(     2f++rM   c                     U R                   nXR                  R                  ;  a  U R                  U   $ [	        X5      $ r=   )r   Coverageglyphsr   _TTGlyphVARC)r6   rJ   varcs      r8   rr   _TTGlyphSetVARC.__getitem__   s5    ~~MM000==++D,,rM   )r   r   rt   rv   s   @r8   r   r      s    ,
- -rM   r   c                   <    \ rS rSrSrSS.S jr\S 5       rS rSr	g	)
_TTGlyph   a;  Glyph object that supports the Pen protocol, meaning that it has
.draw() and .drawPoints() methods that take a pen object as their only
argument. Additionally there are 'width' and 'lsb' attributes, read from
the 'hmtx' table.

If the font contains a 'vmtx' table, there will also be 'height' and 'tsb'
attributes.
Tr   c                    Xl         X l        X0l        UR                  U   u  U l        U l        UR                  b  UR                  U   u  U l        U l        OSu  U l        U l        UR                  (       a  UR                  bx  UR                  R                  c  UR                  R                  U5      O"UR                  R                  R                  U   nU =R                  UR                  U   -  sl        g g g )NNN)r   namer   r.   widthlsbr1   heighttsbr'   r2   AdvWidthMapr#   
getGlyphIDmappingr5   )r6   r   rJ   r   varidxs        r8   r9   _TTGlyph.__init__   s     	('00;
DH($,$5$5i$@!DK$.!DK!3!3!? %%119 ((3''33;;IF 
 JJ(0088J "@rM   c                     [         e)TDraw the glyph onto ``pen``. See fontTools.pens.basePen for details
how that works.
)NotImplementedErrorr6   pens     r8   draw_TTGlyph.draw   s
    
 "!rM   c                 >    SSK Jn  U R                  U" U5      5        g)UDraw the glyph onto ``pen``. See fontTools.pens.pointPen for details
how that works.
r   )SegmentToPointPenN)fontTools.pens.pointPenr   r   )r6   r   r   s      r8   
drawPoints_TTGlyph.drawPoints   s     	>		#C()rM   )r   r   r   r   r   r   r   N)
r\   r]   r^   r_   r`   r9   r   r   r   rc   rd   rM   r8   r   r      s+     =A 9$ " "*rM   r   c                   ,    \ rS rSrS rS rS rS rSrg)rq      c                     U R                  5       u  p#U R                  R                  5        nU(       a  SnUR                  XR                  R                  U5        SSS5        g! , (       d  f       g= f)r   r   N)_getGlyphAndOffsetr   rE   r   rk   r6   r   glyphoffsetr*   s        r8   r   _TTGlyphGlyf.draw   sR     //1]]$$&%JJsMM33V<	 '&&   0A&&
A4c                     U R                  5       u  p#U R                  R                  5        nU(       a  SnUR                  XR                  R                  U5        SSS5        g! , (       d  f       g= f)r   r   N)r   r   rE   r   rk   r   s        r8   r   _TTGlyphGlyf.drawPoints   sT     //1]]$$&%S--"9"96B	 '&&r   c                 ,   U R                   R                  (       a(  U R                   R                  b  U R                  5       nO#U R                   R                  U R
                     n[        US5      (       a  U R                  UR                  -
  OSnX4$ )NxMinr   )	r   r'   rm   _getGlyphInstancerk   r   hasattrr   r   )r6   r   r   s      r8   r   _TTGlyphGlyf._getGlyphAndOffset   sl    ==!!dmm&=&=&I**,EMM++DII6E*1%*@*@EJJ&a}rM   c           	         SSK Jn  SSKJn  SSKJn  U R                  nUR                  nUR                  R                  U R                     nUR                  nUR                  nUR                  U R                  Xx5      u  pSu  pU H  nU" UR                  UR                  5      nU(       d  M)  UR                   nS U;   aY  UcM  UR                  U R                  Xx5      u  nnUS   S:  a  US   O[#        [%        ['        US   5      5      5      nU" XU5      nX" U5      U-  -  n	M     [)        XPR                     5      n[+        UXU R,                  S9u  nnnnUU l        UU l        UR2                  c  UU l        UU l        U$ )Nr   )	iup_delta)GlyphCoordinates)supportScalarr   rD   r   )fontTools.varLib.iupr   fontTools.ttLib.tables._g_l_y_fr   fontTools.varLib.modelsr   r   rk   rm   
variationsr   r.   r1   _getCoordinatesAndControlsr'   r$   coordinatesr|   rangerU   r   _setCoordinatesr   r   r   r2   r   r   )r6   r   r   r   r   rk   r   r.   r1   r   _
origCoordsendPtsvarscalardeltacontrolr   r   r   r   r   s                         r8   r   _TTGlyphGlyf._getGlyphInstance   s   2D9==&&	''22499=
$$$$"==IIx
 (
C"8#4#4chh?FOOEu}%*3*N*N		8+'J '.ajAo
4c'RS*o@V;W  "%V<+E2V;;K   Yyy)*"1;8I8I#
sFC %DJ DKrM   )r   r   r   r   N)	r\   r]   r^   r_   r   r   r   r   rc   rd   rM   r8   rq   rq      s    
=
C(rM   rq   c                       \ rS rSrS rSrg)r   i  c                     U R                   R                  U R                     R                  XR                   R                  5        g)r   N)r   r   r   r   r   r   s     r8   r   _TTGlyphCFF.draw  s/     	!!$)),11#}}7L7LMrM   rd   N)r\   r]   r^   r_   r   rc   rd   rM   r8   r   r     s    NrM   r   c                 r   U R                   S:X  aX  U R                  nX   R                  nUR                  US5      nU R                  nU R
                  nXvs=:*  =(       a    U:*  $ s  $ U R                   S:X  a%  U R                  n	XU R                     S   -  n	U	S:  $ U R                   S:X  a'  U R                   H  n
[        XX#5      (       a  M    g   gU R                   S:X  a'  U R                   H  n
[        XX#5      (       d  M    g   gU R                   S:X  a  [        U R                  XU5      (       + $ g)	NrD   r         FT      )Format	AxisIndexr%   r0   FilterRangeMinValueFilterRangeMaxValueDefaultValueVarIdxConditionTable_evaluateConditionconditionTable)	conditionfvarAxesr'   r   	axisIndexr%   	axisValueminValuemaxValuer   subconditions              r8   r   r     s9   1''	%--LL!,	0000000000			Q	&&9++,Q//qy			Q	%44L%lhRR 5 			Q	%44L!,(NN 5 			Q	%$$h)
 
 	
 rM   c                   &    \ rS rSrS rS rS rSrg)r   i@  c                    SSK JnJn  U R                  nUR                  nUR
                  R                  R                  U R                  5      nUR                  R                  U   nSSKJn	  SSKJn
  UR                  S   R                   nU	" UR"                  XR                  R$                  5      nUR&                   GH  nUR(                  UR*                  -  (       aK  UR,                  R.                  UR0                     n[3        XU R                  R$                  U5      (       d  Mm  0 nUR4                  b  UR6                  R8                  UR4                     n[;        UR<                  5      nUR>                  U:w  a  U[A        XR>                     S5      -  n[C        U5      [C        U5      :X  d   [C        U5      [C        U5      45       e[E        UU5       VVs0 s H  u  nnUU   RF                  U_M     nnnURH                  U:w  a*  XRH                     n[K        U5      nURM                  U5        URN                  nUR(                  URP                  -  nU R                  R                  RS                  UU5         U R                  RS                  UU5         U R                  URT                  :H  nU(       d2   URW                  URT                  UU R                  RX                  5        U(       a  UR]                  5       nURT                  U R                  :w  a  U R                  OUR                  nUURT                     nU(       a  [_        UU5      nURa                  U5        O[c        UU5      nURe                  U5        SSS5        SSS5        GM     gs  snnf ! [Z         a    Sn Nf = f! , (       d  f       N4= f! , (       d  f       GM  = f)	r   r   )VarComponentFlagsNO_VARIATION_INDEX)MultiVarStoreInstancerr   r   N   T)3fontTools.ttLib.tables.otTablesr   r   r   r   r   r   indexr   VarCompositeGlyphsVarCompositeGlyphfontTools.varLib.multiVarStorer   r3   r    r#   r$   MultiVarStorer'   
componentsflagsHAVE_CONDITIONConditionListr   conditionIndexr   axisIndicesIndexAxisIndicesListItemr
   
axisValuesaxisValuesVarIndexfi2flrU   zipr%   transformVarIndexr   applyTransformDeltas	transformRESET_UNSPECIFIED_AXESrA   rJ   addVarComponentr(   AttributeErrortoTransformr   r   r   r   )r6   r   
isPointPenr   r   r   r   idxr   r   r    r   r   compr   r'   axisIndicesr  ivdeltasr  r;   shouldDecomposetcompGlyphSetgtPens                               r8   _draw_TTGlyphVARC._drawA  s8   	

 ==!!mm""((3''99#>I?==(--*--*@*@
	 $$Dzz-<<< ..==d>Q>QR	))?)?  H$$0"22778M8MN#DOO4
**.@@%	2I2I(JB"OOJ;'3z?: $
O= :
 8;;
7S7Stq!HQK''*7S   %%);;"#9#9:~))&1IJJ!2!I!IIE''44XuE]]//%@&*ii4>>&AO*3// $	4==;T;T '%113  $~~: !MM!)!2!2 %
 )8%#4S!#<DLL.#/Q#7DFF4L1 A FE; %$(  . 3.2O3 A@ FEsO   "N'O$!N?1N-7BN?O-N<	9N?;N<	<N??
O	O
O 	c                 (    U R                  US5        g )NFr"  r   s     r8   r   _TTGlyphVARC.draw  s    

3rM   c                 (    U R                  US5        g )NTr%  r   s     r8   r   _TTGlyphVARC.drawPoints  s    

3rM   rd   N)r\   r]   r^   r_   r"  r   r   rc   rd   rM   r8   r   r   @  s    L)\rM   r   Tr   c                H   [        U5      S:  d   eUS   S   nUS   S   nUS   S   nUS   S   n[        S5       H  nUS	 M     U R                  5       (       a  [        U5      [        U R                  5      :X  d   eU R                   V	s/ s H  n	[	        U	5      PM     sn	U l        [        XR                  5       H'  u  p[        U	S5      (       d  M  U
u  U	l        U	l        M)     OLU R                  S:X  a  [        U5      S:X  d   eO*[        U5      [        U R                  5      :X  d   eXl
        U(       a  U R                  U5        [        XT-
  5      n[        Xg-
  5      n[        U R                  U-
  5      n[        X`R                  -
  5      nUUUU4$ s  sn	f )	Nr   r   rD   x)rU   r   isCompositer  r   r  r   r.  ynumberOfContoursr   r   r   r   yMax)r   coordrk   r   	leftSideX
rightSideXtopSideYbottomSideYr   r  phorizontalAdvanceWidthverticalAdvanceWidthleftSideBearingtopSideBearings                  r8   r   r     s   u:??b	!Ir1JRy|H)A,K1X"I  5zS!1!12222383C3CD3C4DJ3CD5"2"23GAtS!!!" 4 
		1	$5zQ5zS!2!23333!9%$Z%;<"8#9:ejj945OX

23N	 # Es   Fc                   :    \ rS rSrSrS
S jrS rS rS rS r	Sr
g	)LerpGlyphSeti  a  A glyphset that interpolates between two other glyphsets.

Factor is typically between 0 and 1. 0 means the first glyphset,
1 means the second glyphset, and 0.5 means the average of the
two glyphsets. Other values are possible, and can be useful to
extrapolate. Defaults to 0.5.
c                 (    Xl         X l        X0l        g r=   )	glyphset1	glyphset2factor)r6   r@  rA  rB  s       r8   r9   LerpGlyphSet.__init__  s    ""rM   c                 j    XR                   ;   a  XR                  ;   a  [        X5      $ [        U5      er=   )r@  rA  	LerpGlyphKeyErrorr6   	glyphnames     r8   rr   LerpGlyphSet.__getitem__  s+    &9+FY--y!!rM   c                 H    XR                   ;   =(       a    XR                  ;   $ r=   )r@  rA  rG  s     r8   rK   LerpGlyphSet.__contains__  s    NN*JyNN/JJrM   c                     [        U R                  5      n[        U R                  5      n[        UR	                  U5      5      $ r=   )setr@  rA  rO   intersectionr6   set1set2s      r8   rR   LerpGlyphSet.__iter__  s4    4>>"4>>"D%%d+,,rM   c                     [        U R                  5      n[        U R                  5      n[        UR	                  U5      5      $ r=   )rM  r@  rA  rU   rN  rO  s      r8   rV   LerpGlyphSet.__len__  s4    4>>"4>>"4$$T*++rM   )rB  r@  rA  N)g      ?)r\   r]   r^   r_   r`   r9   rr   rK   rR   rV   rc   rd   rM   r8   r>  r>    s!    
"
K-
,rM   r>  c                        \ rS rSrS rS rSrg)rE  i  c                     X l         Xl        g r=   )glyphsetrH  )r6   rH  rW  s      r8   r9   LerpGlyph.__init__  s     "rM   c                    [        U R                  R                  5      nU R                  R                  U R                     R	                  U5        [        U R                  R
                  5      nU R                  R
                  U R                     R	                  U5        U R                  R                  n[        [        UR                  UR                  U5      U5        g r=   )
r   rW  r@  rH  r   rA  rB  r   r   r   )r6   r   
recording1
recording2rB  s        r8   r   LerpGlyph.draw  s    ,T]]-D-DE
/44Z@,T]]-D-DE
/44Z@%%z'7'79I9I6RTWXrM   )rH  rW  N)r\   r]   r^   r_   r9   r   rc   rd   rM   r8   rE  rE    s    #YrM   rE  N)*r`   abcr   r   collections.abcr   
contextlibr   r   r   typesr	   fontTools.misc.vectorr
   fontTools.misc.fixedToolsr   r   r  fontTools.misc.loggingToolsr   fontTools.misc.transformr   r   fontTools.pens.transformPenr   r   fontTools.pens.recordingPenr   r   r   r   rf   rx   r   r   rq   r   r   r   r   r>  rE  rd   rM   r8   <module>rg     s    % # # %  ! ( D 9 C G J/' J/ZMk M!0[ !0H
-k 
-)*s )*XJ8 JZN( N FS8 Sl >B #L,7 ,BY YrM   