
    McgE                        d Z ddlmZmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZmZmZ  G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de"      Z# G d de"      Z$d Z% G d de"      Z&dd d!Z' G d" d#e      Z( G d$ d%      Z)y&)'zGlyphSets returned by a TTFont.    )ABCabstractmethod)Mapping)contextmanager)copydeepcopy)SimpleNamespace)Vector)otRoundfixedToFloat)deprecateFunction)	TransformDecomposedTransform)TransformPenTransformPointPen)DecomposingRecordingPenlerpRecordingsreplayRecordingc                   t    e Zd ZdZdddZedefd       Zed        Zd Z	d	 Z
d
 Z ede      d        Zy)_TTGlyphSetzlGeneric dict-like GlyphSet class that pulls metrics from hmtx and
    glyph shape from TrueType or CFF.
    TrecalcBoundsc                p   || _         || _        d| j                  v r2| j                  d   j                  D ci c]  }|j                  d c}ni | _        ||ni | _        i | _        ||ni | _        d| _        g | _	        g | _
        || _        |d   j                  | _        t        |j                  d      dd       | _        d | _        |reddlm} t        |j                  d      dd       | _        | j"                  1 || j"                  j(                  |d   j                  |      | _        y y y c c}w )	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          U/var/www/html/bid-api/venv/lib/python3.12/site-packages/fontTools/ttLib/ttGlyphSet.py__init__z_TTGlyphSet.__init__   s/   (	 " *.6):)?)?@)?T\\1_)?@ 	&
 %-$8b,4,@b
 "*V,, 0)TBC$TXXf%5wEDN~~)%6NN++T&\->->&" *	  As   D3resetc              #     K   | j                   j                  | j                         | j                  j                  | j                         |r?| j
                  j                         | _        | j                  j                         | _        n&| j                  j                         | _        i | _        | j                  j                  |       | j                  j                  |       	 d  | j                   j                         | _        | j                  j                         | _        y # | j                   j                         | _        | j                  j                         | _        w xY wwN)
r*   appendr&   r+   r'   r(   r   r%   updatepop)r5   r&   r9   s      r7   pushLocationz_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(E1+D. /?E1.A E..E1c              #      K   	 | j                   }| xj                   dz  c_         | | xj                   dz  c_         y # | xj                   dz  c_         w xY ww)N   )r)   )r5   r)   s     r7   	pushDepthz_TTGlyphSet.pushDepthH   s@     	JJEJJ!OJKJJ!OJDJJ!OJs   A%? AAAc                     || j                   v S r;   r,   r5   	glyphNames     r7   __contains__z_TTGlyphSet.__contains__Q   s    D....    c                 H    t        | j                  j                               S r;   )iterr,   keysr5   s    r7   __iter__z_TTGlyphSet.__iter__T   s    D&&++-..rH   c                 ,    t        | j                        S r;   )lenr,   rL   s    r7   __len__z_TTGlyphSet.__len__W   s    4%%&&rH   z#use 'glyphName in glyphSet' instead)categoryc                     || j                   v S r;   rD   rE   s     r7   has_keyz_TTGlyphSet.has_keyZ   s     D....rH   N)__name__
__module____qualname____doc__r8   r   boolr?   rB   rG   rM   rP   r   DeprecationWarningrS    rH   r7   r   r      sp     GK 8 ;D ; ;$  //' -8J//rH   r   c                   &     e Zd Zd fd	Zd Z xZS )_TTGlyphSetGlyfc                     |d   | _         t        | 	  ||| j                   |       |j                  d      | _        y Nglyfr   gvar	glyfTablesuperr8   r/   	gvarTabler5   r"   r&   r   	__class__s       r7   r8   z_TTGlyphSetGlyf.__init__b   8    fxlS&)rH   c                 2    t        | || j                        S Nr   _TTGlyphGlyfr   rE   s     r7   __getitem__z_TTGlyphSetGlyf.__getitem__g       D)$:K:KLLrH   TrT   rU   rV   r8   rl   __classcell__rf   s   @r7   r\   r\   a       *
MrH   r\   c                   &     e Zd Zd fd	Zd Z xZS )r\   c                     |d   | _         t        | 	  ||| j                   |       |j                  d      | _        y r^   ra   re   s       r7   r8   z_TTGlyphSetGlyf.__init__l   rg   rH   c                 2    t        | || j                        S ri   rj   rE   s     r7   rl   z_TTGlyphSetGlyf.__getitem__q   rm   rH   rn   ro   rq   s   @r7   r\   r\   k   rr   rH   c                   @     e Zd Z fdZd Zd Zedefd       Z xZ	S )_TTGlyphSetCFFc                     d|v rdnd}t        ||   j                  j                               d   j                  | _        t
        |   ||| j                         | j                  |       y )NCFF2zCFF r   )listcffvaluesCharStringscharStringsrc   r8   setLocation)r5   r"   r&   tableTagrf   s       r7   r8   z_TTGlyphSetCFF.__init__v   s`    #t^6X 2 2 9 9 ;<Q?KKx)9)9:"rH   c                     t        | |      S r;   )_TTGlyphCFFrE   s     r7   rl   z_TTGlyphSetCFF.__getitem__|   s    4++rH   c                     d | _         |r]ddlm} t        | j                  dd       }|= ||j
                  | j                  d   j                  |      }|j                  | _         y y d | _         y )Nr   r   varStorer   )	blenderr2   r   r.   r~   
otVarStorer"   r#   interpolateFromDeltas)r5   r&   r   r   	instancers        r7   r   z_TTGlyphSetCFF.setLocation   so     Dt//TBH#-''6):)?)?	  )>>	 $  DLrH   r9   c              #     K   | j                  |       t        j                  | ||      5 }	 | | j                  | j                         	 d d d        y # | j                  | j                         w xY w# 1 sw Y   y xY wwr;   )r   r   r?   r&   )r5   r&   r9   values       r7   r?   z_TTGlyphSetCFF.pushLocation   sj     "%%dHe<0  /	 =<   /	 =<s2   )BA6AA6	BA33A66A?;B)
rT   rU   rV   r8   rl   r   r   rX   r?   rp   rq   s   @r7   rw   rw   u   s-    #,   0D 0 0rH   rw   c                   $     e Zd Z fdZd Z xZS )_TTGlyphSetVARCc                 ^    || _         t        | 	  |||       |d   j                  | _        y )NVARC)glyphSetrc   r8   r!   	varcTable)r5   r"   r&   r   rf   s       r7   r8   z_TTGlyphSetVARC.__init__   s,     x2f++rH   c                     | j                   }||j                  j                  vr| j                  |   S t	        | |      S r;   )r   Coverageglyphsr   _TTGlyphVARC)r5   rF   varcs      r7   rl   z_TTGlyphSetVARC.__getitem__   s9    ~~DMM000==++D),,rH   ro   rq   s   @r7   r   r      s    ,
-rH   r   c                   2    e Zd ZdZdddZed        Zd Zy)_TTGlyphaS  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                   || _         || _        || _        |j                  |   \  | _        | _        |j                  |j                  |   \  | _        | _        nd\  | _        | _        |j                  r|j                  w|j                  j                  |j                  j                  |      n"|j                  j                  j                  |   }| xj                  |j                  |   z  c_        y y y )NNN)r   namer   r-   widthlsbr0   heighttsbr&   r1   AdvWidthMapr"   
getGlyphIDmappingr4   )r5   r   rF   r   varidxs        r7   r8   z_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 "@rH   c                     t         )dDraw the glyph onto ``pen``. See fontTools.pens.basePen for details
        how that works.
        )NotImplementedErrorr5   pens     r7   drawz_TTGlyph.draw   s
    
 "!rH   c                 >    ddl m} | j                   ||             y)eDraw the glyph onto ``pen``. See fontTools.pens.pointPen for details
        how that works.
        r   )SegmentToPointPenN)fontTools.pens.pointPenr   r   )r5   r   r   s      r7   
drawPointsz_TTGlyph.drawPoints   s     	>		#C()rH   N)rT   rU   rV   rW   r8   r   r   r   rZ   rH   r7   r   r      s+     =A 9$ " "*rH   r   c                   $    e Zd Zd Zd Zd Zd Zy)rk   c                     | j                         \  }}| j                  j                         5 }|rd}|j                  || j                  j                  |       ddd       y# 1 sw Y   yxY w)r   r   N)_getGlyphAndOffsetr   rB   r   rb   r5   r   glyphoffsetr)   s        r7   r   z_TTGlyphGlyf.draw   sV     //1v]]$$&%JJsDMM33V<	 '&&   ,A##A,c                     | j                         \  }}| j                  j                         5 }|rd}|j                  || j                  j                  |       ddd       y# 1 sw Y   yxY w)r   r   N)r   r   rB   r   rb   r   s        r7   r   z_TTGlyphGlyf.drawPoints   sX     //1v]]$$&%S$--"9"96B	 '&&r   c                    | j                   j                  r'| j                   j                  | j                         }n#| j                   j                  | j
                     }t        |d      r| j                  |j                  z
  nd}||fS )NxMinr   )	r   r&   rd   _getGlyphInstancerb   r   hasattrr   r   )r5   r   r   s      r7   r   z_TTGlyphGlyf._getGlyphAndOffset   sk    ==!!dmm&=&=&I**,EMM++DII6E*1%*@EJJ&af}rH   c           	         ddl m} ddlm} ddlm} | j                  }|j                  }|j                  j                  | j                     }|j                  }|j                  }|j                  | j                  ||      \  }	}
d\  }}|D ]  } ||j                  |j                        }|s#|j                   }d |v rY|M|j                  | j                  ||      \  }}|d   dk\  r|d   nt#        t%        t'        |d                     } ||||      }|	 ||      |z  z  }	 t)        || j                           }t+        ||	|| j,                        \  }}}}|| _        || _        |j2                  || _        || _        |S )Nr   )	iup_delta)GlyphCoordinates)supportScalarr   rA   r   )fontTools.varLib.iupr   fontTools.ttLib.tables._g_l_y_fr   fontTools.varLib.modelsr   r   rb   rd   
variationsr   r-   r0   _getCoordinatesAndControlsr&   r#   coordinatesrz   rangerO   r   _setCoordinatesr   r   r   r1   r   r   )r5   r   r   r   r   rb   r   r-   r0   r   _
origCoordsendPtsvarscalardeltacontrolr   r   r   r   r   s                         r7   r   z_TTGlyphGlyf._getGlyphInstance   s   2D9==&&	''22499=
$$$$"==IIx
Q (
FC"8#4#4chh?FOOEu}%*3*N*N		8X+'J '.ajAo
4c'RS*o@V;W  "%V<+E2V;;K   Ytyy)*"1;	8I8I#
sFC %DJ DKrH   N)rT   rU   rV   r   r   r   r   rZ   rH   r7   rk   rk      s    
=
C(rH   rk   c                       e Zd Zd Zy)r   c                     | j                   j                  | j                     j                  || j                   j                         y)r   N)r   r~   r   r   r   r   s     r7   r   z_TTGlyphCFF.draw   s1     	!!$)),11#t}}7L7LMrH   N)rT   rU   rV   r   rZ   rH   r7   r   r     s    NrH   r   c                 J   | j                   dk(  rU| j                  }||   j                  }|j                  |d      }| j                  }| j
                  }||cxk  xr |k  S c S | j                   dk(  r&| j                  }	|	|| j                     d   z  }	|	dkD  S | j                   dk(  r"| j                  D ]  }
t        |
|||      r y y| j                   dk(  r"| j                  D ]  }
t        |
|||      s y y| j                   dk(  rt        | j                  |||       S y)	NrA   r         FT      )Format	AxisIndexr$   r/   FilterRangeMinValueFilterRangeMaxValueDefaultValueVarIdxConditionTable_evaluateConditionconditionTable)	conditionfvarAxesr&   r   	axisIndexr$   	axisValueminValuemaxValuer   subconditions              r7   r   r   '  s@   1''	9%--LL!,	0000900000			Q	&&9++,Q//qy			Q	%44L%lHh	R 5 			Q	%44L!,(IN 5 			Q	%$$h)
 
 	
 rH   c                       e Zd Zd Zd Zd Zy)r   c                 n   ddl m}m} | j                  }|j                  }|j
                  j                  j                  | j                        }|j                  j                  |   }ddlm}	 ddlm}
 |j                  d   j                   } |	|j"                  || j                  j$                        }|j&                  D ]  }|j(                  |j*                  z  rF|j,                  j.                  |j0                     }t3        ||| j                  j$                  |      sci }|j4                  |j6                  j8                  |j4                     }t;        |j<                        }|j>                  |k7  r|tA        ||j>                     d      z  }tC        |      tC        |      k(  sJ tC        |      tC        |      f       tE        ||      D ci c]  \  }}||   jF                  | }}}|jH                  |k7  r+||jH                     }tK        |      }|jM                  |       |jN                  }|j(                  |jP                  z  }| j                  j                  jS                  ||      5  | j                  jS                  ||      5  | j                  |jT                  k(  }|s2	 |jW                  |jT                  || j                  jX                         |r|j]                         }|jT                  | j                  k7  r| j                  n|j                  }||jT                     }|rt_        ||      }|ja                  |       ntc        ||      }|je                  |       ddd       ddd        yc c}}w # tZ        $ r d}Y w xY w# 1 sw Y   ,xY w# 1 sw Y   xY w)	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   r2   r   r"   r#   MultiVarStorer&   
componentsflagsHAVE_CONDITIONConditionListr   conditionIndexr   axisIndicesIndexAxisIndicesListItemr
   
axisValuesaxisValuesVarIndexfi2flrO   zipr$   transformVarIndexr   applyTransformDeltas	transformRESET_UNSPECIFIED_AXESr?   rF   addVarComponentr'   AttributeErrortoTransformr   r   r   r   )r5   r   
isPointPenr   r   r   r   idxr   r   r   r   r   compr   r&   axisIndicesr   ivdeltasr   r9   shouldDecomposetcompGlyphSetgtPens                               r7   _drawz_TTGlyphVARC._drawK  s;   	

 ==!!mm""((3''99#>I?==(--*$--*@*@
	 $$Dzz-<<< ..==d>Q>QR	)x)?)? H$$0"22778M8MN#DOO4
**.@@%	$2I2I(JB"OOJ;'3z?: $
O= :
 8;;
7S7Stq!HQK''*7S   %%);;"4#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9N*N31N$BN3N*N	NN	NN'#N**N4	c                 (    | j                  |d       y )NFr  r   s     r7   r   z_TTGlyphVARC.draw  s    

3rH   c                 (    | j                  |d       y )NTr  r   s     r7   r   z_TTGlyphVARC.drawPoints  s    

3rH   N)rT   rU   rV   r  r   r   rZ   rH   r7   r   r   J  s    L)\rH   r   Tr   c                   t        |      dk\  sJ |d   d   }|d   d   }|d   d   }|d   d   }t        d      D ]  }|d=  | j                         rt        |      t        | j                        k(  sJ | j                  D 	cg c]  }	t	        |	       c}	| _        t        || j                        D ]!  \  }
}	t        |	d      s|
\  |	_        |	_        # nI| j                  dk(  rt        |      dk(  s,J t        |      t        | j                        k(  sJ || _
        |r| j                  |       t        ||z
        }t        ||z
        }t        | j                  |z
        }t        || j                  z
        }||||fS c c}	w )	Nr   r   rA   x)rO   r   isCompositer   r   r   r   r  ynumberOfContoursr   r   r   r   yMax)r   coordrb   r   	leftSideX
rightSideXtopSideYbottomSideYr   r  phorizontalAdvanceWidthverticalAdvanceWidthleftSideBearingtopSideBearings                  r7   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3GAttS!!" 4 
		1	$5zQ5zS!2!23333!9%$Z)%;<"8k#9:ejj945OX

23N	 # Es   Fc                   0    e Zd ZdZddZd Zd Zd Zd Zy)	LerpGlyphSeta+  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                 .    || _         || _        || _        y r;   )	glyphset1	glyphset2factor)r5   r*  r+  r,  s       r7   r8   zLerpGlyphSet.__init__  s    ""rH   c                 h    || j                   v r|| j                  v rt        ||       S t        |      r;   )r*  r+  	LerpGlyphKeyErrorr5   	glyphnames     r7   rl   zLerpGlyphSet.__getitem__  s1    &9+FY--y!!rH   c                 >    || j                   v xr || j                  v S r;   )r*  r+  r0  s     r7   rG   zLerpGlyphSet.__contains__  s    DNN*JyDNN/JJrH   c                     t        | j                        }t        | j                        }t        |j	                  |            S r;   )setr*  r+  rJ   intersectionr5   set1set2s      r7   rM   zLerpGlyphSet.__iter__  s4    4>>"4>>"D%%d+,,rH   c                     t        | j                        }t        | j                        }t        |j	                  |            S r;   )r4  r*  r+  rO   r5  r6  s      r7   rP   zLerpGlyphSet.__len__  s4    4>>"4>>"4$$T*++rH   N)g      ?)	rT   rU   rV   rW   r8   rl   rG   rM   rP   rZ   rH   r7   r(  r(    s!    
"
K-
,rH   r(  c                       e Zd Zd Zd Zy)r.  c                      || _         || _        y r;   )glyphsetr1  )r5   r1  r<  s      r7   r8   zLerpGlyph.__init__  s     "rH   c                    t        | j                  j                        }| j                  j                  | j                     j	                  |       t        | j                  j
                        }| j                  j
                  | j                     j	                  |       | j                  j                  }t        t        |j                  |j                  |      |       y r;   )
r   r<  r*  r1  r   r+  r,  r   r   r   )r5   r   
recording1
recording2r,  s        r7   r   zLerpGlyph.draw  s    ,T]]-D-DE
/44Z@,T]]-D-DE
/44Z@%%z'7'79I9I6RTWXrH   N)rT   rU   rV   r8   r   rZ   rH   r7   r.  r.    s    #YrH   r.  N)*rW   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   r\   rw   r   r   rk   r   r   r   r   r(  r.  rZ   rH   r7   <module>rJ     s    % # # %  ! ( D 9 C G J/' J/ZMk M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rH   