+
    iuY                        ^ RI Ht ^ RIHtHtHtHtHtHtH	t	H
t
HtHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHt ^ RIH t  ^ RI!H"t" ^RI#H$t$H%t%H&t&H't' ]$t(]%t)R t*]! R4      R 4       t+R t,R#t-R t.R t/R t0R t1]! RR4      t2R t3R$R lt4R t5R t6 ! R R]4      t7 ! R R]74      t8 ! R  R!] 4      t9R"# )%    )
namedtuple)
maxStackLimitTopDictIndex
buildOrdertopDictOperatorstopDictOperators2privateDictOperatorsprivateDictOperators2FDArrayIndexFontDictVarStoreData)BytesIO)specializeCommandscommandsToProgram)newTable)varLib)allEqual)deprecateFunction)	roundFunc)T2CharStringT2OutlineExtractor)T2CharStringPen)partial)VarLibCFFDictMergeErrorVarLibCFFPointTypeMergeErrorVarLibCFFHintTypeMergeErrorVarLibMergeErrorc                    V R ,          pVP                    Uu. uF  qUP                  NK  	  pp\        P                  P	                  W64      p\        P                  P                  Wr4      pV R,          P                  P                  ^ ,          p	\        VR7      V	n	        V	P                  ^ ,          P                  fG   V	P                  p
V
 F2  p\        VR4      '       g   K  V	P                  VP                  n        K4  	  R# R# u upi )fvarCFF2)
otVarStoreNPrivate)axesaxisTagr   builderbuildVarRegionListbuildVarStorecfftopDictIndexr   VarStoreFDArrayvstorehasattrr"   )varFontvarModelvarDataListmasterSupports	fvarTableaxisaxisKeysvarTupleListvarStoreCFFVtopDictfdArrayfontDicts   &&&&        t/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/fontTools/varLib/cff.pyaddCFFVarStorer;   &   s    I)28H8>>44^NL>>//JLfo!!..q1G#|<Gq  (//Hx++*1*:*:  '   ) 9s   Dz8Use fontTools.cffLib.CFFToCFF2.convertCFFToCFF2 instead.c                     ^ RI Hp V! V 4      # )r   )convertCFFToCFF2)fontTools.cffLib.CFFToCFF2r=   )r.   r=   s   & r:   convertCFFtoCFF2r?   5   s    ;G$$    c                 t    \        V \        4      '       d"   V P                  4       '       d   \        V 4      # V # N)
isinstancefloat
is_integerint)nums   &r:   conv_to_intrH   <   s)    #u#.."2"23xJr@   c                 n    W,          pW1,          pW%9   d   WR,          pWF,          P                   pV# R pV# rB   )r"   )regionFDArraysfd_indexrifd_mapregion_fdArrayregion_fd_mapregion_fdIndexprivates   &&&&    r:   get_privaterR   Q   sA    #'N$M	&* 088 N Nr@   c           
     @   V ^ ,          pV R,          p\        V^ ,          R4      '       d   V Uu. uF  qfP                  NK  	  ppMV Uu. uF  qf.NK  	  pp\        VP                  4       EF  w  rV	P                  p
\	        V
R^ 4      pW,          w  r. pVP
                  R,           F6  pVP
                  P                  V4      ^,
          pVP                  V4       K8  	  V
.pT
pV F*  p\        WxVV4      pVf   TpMTpVP                  V4       K,  	  \        V4      pV
P                  P                  4        EF  w  pp. pV\        9  d   K  \        V\        4      '       d    V Uu. uF  pVP                  V,          NK  	  pp \%        T!  p ^ .T,          pRpT F{  p\        T4       UUu. uF  w  ppTTT,          ,
          NK  	  pppT'       g   \+        T4      '       g   RpTpTP-                  T4      pT^ ,          T^ &   TP                  T4       K}  	  T'       g   T U u. uF  p T ^ ,          NK  	  pp MNV Uu. uF  pVP                  V,          NK  	  pp\+        V4      '       g   VP-                  V4      pM	V^ ,          p\        V\        4      '       dg   \        V4       FV  w  pp!\        V!\        4      '       d-   \        V!4       F  w  p"p#\/        V#4      VV,          V"&   K  	  KH  \/        V!4      VV&   KX  	  M\/        V4      pVV
P                  V&   EK  	  EK  	  R# u upi u upi u upi   \         d!    \!        RP#                  TR7      4        EK1  i ; i  \&         d    \)        TTT4      hi ; iu uppi u up i u upi )	ak  
I step through the FontDicts in the FDArray of the varfont TopDict.
For each varfont FontDict:

* step through each key in FontDict.Private.
* For each key, step through each relevant source font Private dict, and
  build a list of values to blend.

The 'relevant' source fonts are selected by first getting the right
submodel using ``vsindex_dict[vsindex]``. The indices of the
``subModel.locations`` are mapped to source font list indices by
assuming the latter order is the same as the order of the
``var_model.locations``. I can then get the index of each subModel
location in the list of ``var_model.locations``.
   NNr+   vsindexNz\Warning: {key} in default font Private dict is missing from another font, and was discarded.)keyFT)r-   r+   	enumerater"   getattr	locationsindexappendrR   lenrawDictitemspd_blend_fieldsrC   listKeyErrorprintformatzip
IndexErrorr   r   	getDeltasrH   )$	top_dictsvsindex_dict	var_modelrM   r7   region_top_dicts	fdTopDictrJ   rK   	font_dictprivate_dictrV   	sub_model_master_indiceslocipdslast_pdrL   pdnum_mastersrW   valuedataListvaluesprev_val_listany_points_differval_listvalrel_listdeltasdataitemjjtems$   &&&&                                r:   merge_PrivateDictsr   \   sz   " lG }"I..=MN=M	++=MN7GH7G)+7GH(9 ((,	15 $,	&&r**C##))#.2A!!!$ + n B^r6BB zJJrN ! #h&..446JCH/)%&&8;<"bjjooF<F &\F "#k 1$)! &HAJ8AT ATXa}Q///AT    .x7I7I,0)$,M&00:F !)F1IOOF+ !' )4<=HDQHH=478Cb"**S//C8''(226:H%ayH (D))(2GAt!$--'0GAt-8->HQKN (7 '2$&7  3 'x0(0L  %G 7/  : OH< = %%+VV_
  " F1#ufEEF$   >8sM   L7L<,M0MM	M48N2NNM&M10M14Nc                 4    R V 9   d
   V R ,          # V R,          # )zCFF r     )fonts   &r:   _cff_or_cff2r      s    ~F|<r@   c                   / pV^ ,          pVR,          p\        V4      p\        V4      P                  P                  ^ ,          p\	        VR4      '       g!   \        V4       Uu/ uF  qw^ bK  	  upV^ &   V# / pVP                  p	VP                  4       p
\        V	4       F  w  rWW,          &   W9  g   K  / W,&   K  	  \        V4       F  w  r}VP                  4       p\        V4      P                  P                  ^ ,          p\	        VR4      '       g   W^ ,          ,          p^ VV,          V&   Kj  VP                  p\        V4       F+  w  rWV,          ,          pVV,          pVV9  g   K&  VVV&   K-  	  K  	  V# u upi )a  Since a subset source font may have fewer FontDicts in their
FDArray than the default font, we have to match up the FontDicts in
the different fonts . We do this with the FDSelect array, and by
assuming that the same glyph will reference  matching FontDicts in
each source font. We return a mapping from fdIndex in the default
font to a dictionary which maps each master list index of each
region font to the equivalent fdIndex in the region font.rT   FDSelect)	r]   r   r(   r)   r-   ranger   getGlyphOrderrX   )r.   
fonts_listrM   default_fontregion_fontsnum_regionsr7   rL   gname_mappingdefault_fdSelect
glyphOrdergidfdIndexregion_fontregion_glyphOrderregion_topDictdefault_fdIndexregion_fdSelect
region_maps   &&                 r:   	getfd_mapr      ss    Fa=Lb>Ll#K<(,,99!<G7J'' &+;%78%7rU%78q	M''++-J!"23)0jo&  FO 4 %\2'557%k266CCAF~z22+a,@AO*+F?#B',55O )/ :"/#0F"G#O4
Z'%,JrN	 !; 3 M1 9s   %FCVarDataz'varDataList masterSupports vsindex_dictc                    V R ,          P                   P                  ^ ,          pV.VR,           Uu. uF)  p\        V4      P                   P                  ^ ,          NK+  	  up,           p\        VP                  4      p\        W7Wa4      p\        W4      p	\        WhP                  W4       \        WVP                  VP                  4       R# u upi )r    rT   N)r(   r)   r   r]   mappingmerge_charstringsr   r   ri   r;   r0   r1   )
r.   modelordered_fonts_listr   r7   ttFontrh   rw   cvDatarM   s
   &&&&      r:   merge_region_fontsr     s    fo!!..q1G	?QRT?U?UVV  --a00?U I emm$Kz	IFw3Fy"5"5uE76#5#5v7L7LMs   /Cc                 n   W9  d   R # W,          pV'       d   VP                  4        VP                  . 8X  d   R # \        VP                  4      ^8:  d`   VP                  R,          R8X  dH   \        VP                  4      ^8X  g,   \        VP                  ^ ,          4      \        \
        39   d   R # V# )Nendchar)	decompileprogramr]   typerF   rD   )charstrings	glyphNamefilterEmptycss   &&& r:   _get_csr     s~    #		B
::

Oq 

2)+RZZA%bjjm)<e)LIr@   c                 :   . pV P                   R ,           F:  pWr9  d   VP                  V4       VP                  VP                  V4      4       K<  	  \        P                  P                  VRR4      p\        V4      p	WV&   W.3W9&   VP                  V4       V	# )rT   NF)supportsr\   r[   r   r%   buildVarDatar]   )
r   rW   r1   ri   vsindex_by_keyr0   varTupleIndexessupportvar_datarV   s
   &&&&&&    r:   _add_new_vsindexr   #  s     O>>"%%(!!'*~33G<= & ~~**?D%HH,G!3"ENLx Nr@   c                    / p/ p. p. pV^ ,          P                   p\        V 4       EF|  w  r\        V4       UUu. uF  w  r\        VP                   W^ 8g  4      NK   	  pppVP                  V4      w  rV^ ,          p\	        . W^ 4      p\
        Vn        VP                  V4       VR,          p\        V^R7       F3  w  ppVP                  V4       \
        Vn        VP                  V4       K5  	  VP                  VP                  VP                  VRR7      pVW&   V'       g   EK  VP                  '       d   RVP                  9  d   EK+  \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p VV,          pV^ 8w  g   EKk  VR.VP                  R&   EK  	  V'       g   R
V,          p\!        VVWtWV4       \#        VVVR	7      pV# u uppi   \         d    \!        TTYtYV4      p Lpi ; i)r   rT   )startT)rQ   globalSubrsrj   optimizeblendc              3   (   "   T F  qR Jx  K
  	  R # 5irB   r   ).0vs   & r:   	<genexpr>$merge_charstrings.<locals>.<genexpr>e  s     26aTM6s   rV   :Nr   N)r0   r1   ri   )T)CharStringsrX   r   getSubModelCFF2CharStringMergePenMergeOutlineExtractoroutlineExtractordrawrestartgetCharStringrQ   r   seen_movetor   tuplerb   r   r   )r   rw   rh   masterModelri   r   r0   r1   default_charstringsr   gnamers   tdall_csr   model_csdefault_charstringvar_pen	region_cs
region_idxregion_charstringnew_csrW   rV   r   s   &&&&                     r:   r   r   3  s   LNKN#A,22
+
 AJ)@T
@TuqGBNNE62@T 	 
 &11&9 &a[(UC /D+( RL	-6y-J)J)OOJ'1F.""7+ .K &&&..*66	 ' 
 &,"###)F  e262ee2622	$S)G a<")9!5FNN2m ,v #nN	
 %!F MK
Z  	&sN.G	s   $G?	GG98G9c                   .   a  ] tR tRt o RtRR ltRtV tR# )CFFToCFF2OutlineExtractori  zThis class is used to remove the initial width from the CFF
charstring without trying to add the width to self.nominalWidthX,
which is None.c                    V P                  4       pV P                  '       gA   V\        V4      ^,          ,          '       d
   VR,          pV P                  V n        ^V n        V# )   rT   )popallgotWidthr]   defaultWidthXwidth)selfevenOddargss   && r:   popallWidth%CFFToCFF2OutlineExtractor.popallWidth  sK    {{}}}}#d)a-((Bx++DJDMr@   )r   r   N)r   )__name__
__module____qualname____firstlineno____doc__r   __static_attributes____classdictcell__)__classdict__s   @r:   r   r     s      r@   r   c                   p   a a ] tR tRt oRtRV 3R lltR tR tR tR t	R t
R	 tR
 tR tR tRtVtV ;t# )r   i  zUsed to extract the charstring commands - including hints - from a
CFF charstring in order to merge it as another set of region data
into a CFF2 variable font charstring.c           	     ,   < \         SV `  WW4WVV4       R # rB   )super__init__)	r   pen
localSubrsr   nominalWidthXr   rQ   blender	__class__s	   &&&&&&&&r:   r   MergeOutlineExtractor.__init__  s     	[QX	
r@   c                v    V P                  4       pV P                  \        V4      ^,          ,           V n        V# )r   )r   	hintCountr]   )r   r   s   & r:   
countHints MergeOutlineExtractor.countHints  s-    !#d)q.8r@   c                <    V P                   P                  W4       R # rB   )r   add_hint)r   r   r   s   &&&r:   _hint_opMergeOutlineExtractor._hint_op  s    $%r@   c                J    V P                  4       pV P                  R V4       R# )hstemNr   r   r   r[   r   s   && r:   op_hstemMergeOutlineExtractor.op_hstem       gt$r@   c                J    V P                  4       pV P                  R V4       R# )vstemNr  r  s   && r:   op_vstemMergeOutlineExtractor.op_vstem  r  r@   c                J    V P                  4       pV P                  R V4       R# )hstemhmNr  r  s   && r:   
op_hstemhm MergeOutlineExtractor.op_hstemhm       i&r@   c                J    V P                  4       pV P                  R V4       R# )vstemhmNr  r  s   && r:   
op_vstemhm MergeOutlineExtractor.op_vstemhm  r  r@   c                   V P                   '       gJ   V P                  4       pV'       d   V P                  R V4       V P                  ^,           ^,          V n         V P                  R,          P                  WP                   4      w  r1W3# )r  r   )hintMaskBytesr   r   r   callingStackgetBytes)r   r[   r   r  s   &&  r:   _get_hintmask#MergeOutlineExtractor._get_hintmask  sn    !!!??$Di."&..1"4!:D#004==eEWEWX##r@   c                h    V P                  V4      w  rV P                  P                  R V.4       W!3# )hintmaskr  r   add_hintmaskr   r[   r  s   && r:   op_hintmask!MergeOutlineExtractor.op_hintmask  4    #11%8j=/:##r@   c                h    V P                  V4      w  rV P                  P                  R V.4       W!3# )cntrmaskr  r  s   && r:   op_cntrmask!MergeOutlineExtractor.op_cntrmask  r"  r@   )r   r  )NN)r   r   r   r   r   r   r   r   r  r
  r  r  r  r   r%  r   r   __classcell__r   r   s   @@r:   r   r     sA     -

&%%''$$
$ $r@   r   c                      a a ] tR tRt oRtRV 3R lltR tR tR tR t	R t
R	 tR
 tR tR tR tR tRR ltRtVtV ;t# )r   i  z Pen to merge Type 2 CharStrings.c                   < \         SV `  R R RVR7       ^ V n        Wn        W@n        W0n        ^ V n        RV n        W n        \        V\        R7      V n
        R # )NT)r   glyphSetr    roundToleranceFround)r   r   pt_index	_commandsm_indexrw   prev_move_idxr   r   r   r.  )r   default_commandsr   rw   
master_idxr,  r   s   &&&&&&r:   r   CFF2CharStringMergePen.__init__  s\     	D 	 	
 )!& "~U;
r@   c                   V P                   ^ 8X  d   V P                  P                  W..4       M|V P                  V P                  ,          pV^ ,          V8w  d:   \	        WP                  \        V^,          4      V^ ,          V P                  4      hV^,          P                  V4       V ;P                  ^,          un        R# r   N)r1  r0  r\   r/  r   r]   r   )r   
point_type	pt_coordscmds   &&& r:   	add_point CFF2CharStringMergePen.add_point  s    <<1NN!!:{";<../C1v#2s3q6{CFDNN  FMM)$r@   c                   V P                   ^ 8X  d   V P                  P                  W..4       M|V P                  V P                  ,          pV^ ,          V8w  d:   \	        WP                  \        V^,          4      V^ ,          V P                  4      hV^,          P                  V4       V ;P                  ^,          un        R# r7  r1  r0  r\   r/  r   r]   r   )r   	hint_typer   r:  s   &&& r:   r   CFF2CharStringMergePen.add_hint  s    <<1NN!!9f"56../C1v"1}}c#a&k3q64>>  FMM$r@   c                6   V P                   ^ 8X  d=   V P                  P                  V. .4       V P                  P                  RV..4       MV P                  V P                  ,          pV^ ,          V8w  d:   \	        WP                  \        V^,          4      V^ ,          V P                  4      hV ;P                  ^,          un        V P                  V P                  ,          pV^,          P                  V4       V ;P                  ^,          un        R# )r    Nr>  )r   r?  abs_argsr:  s   &&& r:   r  #CFF2CharStringMergePen.add_hintmask  s    
 <<1NN!!9b/2NN!!2z"23../C1v"1}}c#a&k3q64>>  MMQM../CFMM(#r@   c                    V P                   '       g   R V n         V P                  V4      pV P                  RV4       V P                  ^,
          V n        R# )TrmovetoN)r   _pr;  r/  r2  r   ptr9  s   && r:   _moveToCFF2CharStringMergePen._moveTo  sD    #DGGBK	y), "]]Q.r@   c                L    V P                  V4      pV P                  R V4       R# )rlinetoNrG  r;  rH  s   && r:   _lineToCFF2CharStringMergePen._lineTo  s    GGBK	y),r@   c                    V P                   pV! V4      V! V4      ,           V! V4      ,           pV P                  R V4       R# )	rrcurvetoNrN  )r   pt1pt2pt3rG  r9  s   &&&&  r:   _curveToOne"CFF2CharStringMergePen._curveToOne  s4    WWsGbg%3/	{I.r@   c                    R # rB   r   r   s   &r:   
_closePath!CFF2CharStringMergePen._closePath!      r@   c                    R # rB   r   rY  s   &r:   _endPathCFF2CharStringMergePen._endPath$  r\  r@   c                .    ^ V n         Wn        RV n        R# )r   N)r   r   )r/  r1  _p0)r   r   s   &&r:   r   CFF2CharStringMergePen.restart'  s    !r@   c                    V P                   # rB   )r0  rY  s   &r:   getCommands"CFF2CharStringMergePen.getCommands,  s    ~~r@   c                "   V F#  pV^,          p\        V!  p\        V4      V^&   K%  	  RpV F  pV^ ,          pVR9   dD   \        V^,          4      p\        V4      '       g   \        R4      hV^ ,          ^ ,          .V^&   MV^,          p	. p
V	 Fp  p\        V4      '       d   V
P	                  V^ ,          4       K.  V! V4      R,          pV^ ,          .V,           pVP	                  ^4       V
P	                  V4       Kr  	  W^&   TpK  	  V# )a.  
We first re-order the master coordinate values.
For a moveto to lineto, the args are now arranged as::

        [ [master_0 x,y], [master_1 x,y], [master_2 x,y] ]

We re-arrange this to::

        [       [master_0 x, master_1 x, master_2 x],
                [master_0 y, master_1 y, master_2 y]
        ]

If the master values are all the same, we collapse the list to
as single value instead of a list.

We then convert this to::

        [ [master_0 x] + [x delta tuple] + [numBlends=1]
          [master_0 y] + [y delta tuple] + [numBlends=1]
        ]
Nz3Hintmask values cannot differ between source fonts.rT   )r  r$  )re   ra   r   r   r\   )r   commandsget_delta_funcr:  r   m_argslastOpopcoordcoords
new_coordsr   s   &&&         r:   reorder_blend_args)CFF2CharStringMergePen.reorder_blend_args/  s   , Cq6D$ZF &\CF  CQB 11SV*M   (1+AQ
#E"))%(3 "0!6r!:!&q
V 3Q"))%0 $ $AF1 2 r@   c                    V P                   pV P                  V\        VP                  V P                  R 7      4      pV'       d   \        VR\        R7      p\        V4      p\        WaVR7      pV# )r-  F)generalizeFirstmaxstack)r   rQ   r   )	r0  ro  r   rg   r.  r   r   r   r   )r   rQ   r   rj   r   rg  r   
charStrings   &&&&&   r:   r   $CFF2CharStringMergePen.getCharStringh  sl     >>**gi11D
 )%-H $H-!+

 r@   )	r0  ra  r   r1  rw   r2  r/  r.  r   )g{Gz?)NNNT)r   r   r   r   r   r   r;  r   r  rJ  rO  rV  rZ  r^  r   rd  ro  r   r   r   r'  r(  s   @@r:   r   r     sO     *< 

&/-/

7r r@   r   N)
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzzStdHWStdVW	StemSnapH	StemSnapV)F):collectionsr   fontTools.cffLibr   r   r   r   r   r	   r
   r   r   r   ior   fontTools.cffLib.specializerr   r   fontTools.ttLibr   	fontToolsr   fontTools.varLib.modelsr   fontTools.misc.loggingToolsr   fontTools.misc.roundToolsr   fontTools.misc.psCharStringsr   r   fontTools.pens.t2CharStringPenr   	functoolsr   errorsr   r   r   r   MergeDictErrorMergeTypeErrorr;   r?   rH   r`   rR   r   r   r   r   r   r   r   r   r   r   r   r   r@   r:   <module>r     s    "    N $  , 9 / I :   )-; MN% O%q1h(V j"KL	N& M` 2 <$5 <$~f_ fr@   