+
    f7iuY  c                   s   ^ 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                 s   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 )ZfvarCFF2)Z
otVarStoreNPrivate)ZaxesZaxisTagr   builderZbuildVarRegionListZbuildVarStorecfftopDictIndexr   ZVarStoreFDArrayZvstorehasattrr   )varFontZvarModelvarDataListmasterSupportsZ	fvarTableZaxisZaxisKeysZvarTupleListZvarStoreCFFVtopDictZfdArrayZfontDicts   &&&&        ;/usr/lib64/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                 s    ^ RI Hp V! V 4      # )r    )convertCFFToCFF2)ZfontTools.cffLib.CFFToCFF2r)   )r#   r)      & r'   convertCFFtoCFF2r+   5   s    ;G$$    c                 st    \        V \        4      '       d"   V P                  4       '       d   \        V 4      # V # N)
isinstancefloatZ
is_integerint)Znum   &r'   conv_to_intr2   <   s)    #u#.."2"23xJr,   c                 sn    W,          pW1,          pW%9   d   WR,          pWF,          P                   pV# R pV# r-   )r   )regionFDArraysfd_indexrifd_mapZregion_fdArrayZregion_fd_mapZregion_fdIndexprivates   &&&&    r'   get_privater8   Q   sA    #'N$M	&* 088 N Nr,   c           
     s@   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``.
i   NNr!   vsindexNz\Warning: {key} in default font Private dict is missing from another font, and was discarded.)keyFT)r"   r!   	enumerater   ZgetattrZ	locationsindexappendr8   lenZrawDictZitemspd_blend_fieldsr.   listKeyErrorZprintZformatzipZ
IndexErrorr   r   	getDeltasr2   )$	top_dictsvsindex_dict	var_modelr6   r&   Zregion_top_dictsZ	fdTopDictr3   r4   Z	font_dictZprivate_dictr:   Z	sub_modelZ_Zmaster_indicesZlociZpdsZlast_pdr5   Zpdnum_mastersr;   ZvalueZdataListZvaluesZprev_val_listZany_points_differZval_listZvalZrel_listdeltasZdataZitemZjZjtems$   &&&&                                r'   merge_PrivateDictsrK   \   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                 s4    R V 9   d
   V R ,          # V R,          # )zCFF r    )Zfontr1   r'   _cff_or_cff2rM      s    ~F|<r,   c                s   / 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.r9   FDSelect)	r?   rM   r   r    r"   ZrangerN   ZgetGlyphOrderr<   )r#   Z
fonts_listr6   Zdefault_fontZregion_fontsZnum_regionsr&   r5   Zgname_mappingZdefault_fdSelect
glyphOrdergidZfdIndexZregion_fontZregion_glyphOrderZregion_topDictZdefault_fdIndexZregion_fdSelectZ
region_maps   &&                 r'   	getfd_maprQ      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                 s   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   r9   N)r   r    rM   r?   Zmappingmerge_charstringsrQ   rK   rF   r(   r$   r%   )
r#   modelZordered_fonts_listrO   r&   ZttFontrE   rI   cvDatar6   s
   &&&&      r'   merge_region_fontsrV     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                 sn   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# )NZendchar)Z	decompileprogramr?   typer0   r/   )Zcharstrings	glyphNameZfilterEmptyZcs   &&& r'   _get_csr\     s~    #		B
::

Oq 

2)+RZZA%bjjm)<e)LIr,   c                 s:   . 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	# )r9   NF)Zsupportsr>   r=   r   r   ZbuildVarDatar?   )
rT   r;   r%   rF   vsindex_by_keyr$   ZvarTupleIndexesZsupportZvar_datar:   s
   &&&&&&    r'   _add_new_vsindexr^   #  s     O>>"%%(!!'*~33G<= & ~~**?D%HH,G!3"ENLx Nr,   c                 s   / 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    r9   )ZstartT)r7   globalSubrsrG   optimizeZblendc              3   s(   "   T F  qR Jx  K
  	  R # 5ir-   rL   )Z.0Zvr*   r'   Z	<genexpr>Z$merge_charstrings.<locals>.<genexpr>e  s     26aTM6s   r:   :Nr    N)r$   r%   rF   )T)ZCharStringsr<   r\   ZgetSubModelCFF2CharStringMergePenMergeOutlineExtractorZoutlineExtractorZdrawrestartgetCharStringr7   r_   seen_movetorX   ZtuplerB   r^   rR   )rO   rI   rE   ZmasterModelrF   r]   r$   r%   Zdefault_charstringsrP   ZgnamerH   ZtdZall_csrT   Zmodel_csZdefault_charstringZvar_penZ	region_cs
region_idxZregion_charstringZnew_csr;   r:   rU   s   &&&&                     r'   rS   rS   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                   s.   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                s    V P                  4       pV P                  '       gA   V\        V4      ^,          ,          '       d
   VR,          pV P                  V n        ^V n        V# )   r9   )ZpopallgotWidthr?   defaultWidthXwidth)selfZevenOddargs   && r'   popallWidthZ%CFFToCFF2OutlineExtractor.popallWidth  sK    {{}}}}#d)a-((Bx++DJDMr,   )ri   rk   N)r    )__name__
__module____qualname____firstlineno____doc__ro   __static_attributes____classdictcell__)__classdict__s   @r'   rg   rg     s      r,   rg   c                   sp   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# )rb   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,   < \         SV `  WW4WVV4       R # r-   )super__init__)	rl   penZ
localSubrsr_   ZnominalWidthXrj   r7   Zblender	__class__s	   &&&&&&&&r'   ry   ZMergeOutlineExtractor.__init__  s     	[QX	
r,   c                sv    V P                  4       pV P                  \        V4      ^,          ,           V n        V# )rh   )ro   	hintCountr?   )rl   rm   r*   r'   
countHintsZ MergeOutlineExtractor.countHints  s-    !#d)q.8r,   c                s<    V P                   P                  W4       R # r-   )rz   add_hint)rl   rY   rm   s   &&&r'   _hint_opZMergeOutlineExtractor._hint_op  s    $%r,   c                J    V P                  4       pV P                  R V4       R# )ZhstemNr}   r   rl   r=   rm   rn   r'   op_hstemZMergeOutlineExtractor.op_hstem       gt$r,   c                r   )ZvstemNr   r   rn   r'   op_vstemZMergeOutlineExtractor.op_vstem  r   r,   c                r   )ZhstemhmNr   r   rn   r'   
op_hstemhmZ MergeOutlineExtractor.op_hstemhm       i&r,   c                r   )vstemhmNr   r   rn   r'   
op_vstemhmZ MergeOutlineExtractor.op_vstemhm  r   r,   c                s   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   rW   )hintMaskBytesr}   r   r|   ZcallingStackZgetBytes)rl   r=   rm   r   s   &&  r'   _get_hintmaskZ#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   rz   add_hintmaskrl   r=   r   rn   r'   op_hintmaskZ!MergeOutlineExtractor.op_hintmask  4    #11%8j=/:##r,   c                r   )cntrmaskr   r   rn   r'   op_cntrmaskZ!MergeOutlineExtractor.op_cntrmask  r   r,   )r|   r   )NN)rp   rq   rr   rs   rt   ry   r}   r   r   r   r   r   r   r   r   ru   rv   __classcell__r{   rw      @@r'   rb   rb     sA     -

&%%''$$
$ $r,   rb   c                   s   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# )ra   i  z Pen to merge Type 2 CharStrings.c                s   < \         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)rk   ZglyphSetr   roundToleranceFround)rx   ry   pt_index	_commandsm_indexrI   prev_move_idxre   rZ   r   r   )rl   Zdefault_commandsrZ   rI   Z
master_idxr   r{   s   &&&&&&r'   ry   Z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)r   r   r>   r   r   r?   rZ   )rl   Z
point_type	pt_coordscmdr[   r'   	add_pointZ CFF2CharStringMergePen.add_point  s    <<1NN!!:{";<../C1v#2s3q6{CFDNN  FMM)$r,   c                r   r   r   r   r>   r   r   r?   rZ   )rl   	hint_typerm   r   r[   r'   r~   ZCFF2CharStringMergePen.add_hint  s    <<1NN!!9f"56../C1v"1}}c#a&k3q64>>  FMM$r,   c                s6   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    Z Nr   )rl   r   Zabs_argsr   r[   r'   r   Z#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                s    V P                   '       g   R V n         V P                  V4      pV P                  RV4       V P                  ^,
          V n        R# )TZrmovetoN)re   _pr   r   r   rl   Zptr   rn   r'   _moveToZCFF2CharStringMergePen._moveTo  sD    #DGGBK	y), "]]Q.r,   c                sL    V P                  V4      pV P                  R V4       R# )ZrlinetoNr   r   r   rn   r'   _lineToZCFF2CharStringMergePen._lineTo  s    GGBK	y),r,   c                s    V P                   pV! V4      V! V4      ,           V! V4      ,           pV P                  R V4       R# )Z	rrcurvetoNr   )rl   Zpt1Zpt2Zpt3r   r   s   &&&&  r'   _curveToOneZ"CFF2CharStringMergePen._curveToOne  s4    WWsGbg%3/	{I.r,   c                    R # r-   rL   rl   r1   r'   
_closePathZ!CFF2CharStringMergePen._closePath!      r,   c                r   r-   rL   r   r1   r'   _endPathZCFF2CharStringMergePen._endPath$  r   r,   c                s.    ^ V n         Wn        RV n        R# )r    N)r    r    )r   r   _p0)rl   rf   s   &&r'   rc   ZCFF2CharStringMergePen.restart'  s    !r,   c                s    V P                   # r-   )r   r   r1   r'   getCommandsZ"CFF2CharStringMergePen.getCommands,  s    ~~r,   c                s"   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.r9   )r   r   )rC   rA   r   r   r>   )rl   commandsZget_delta_funcr   rm   Zm_argsZlastOpZopZcoordZcoordsZ
new_coordsrJ   s   &&&         r'   reorder_blend_argsZ)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                s    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)ZgeneralizeFirstZmaxstack)rX   r7   r_   )	r   r   r   rD   r   r   r   r   r   )rl   r7   r_   rG   r`   r   rX   Z
charStrings   &&&&&   r'   rd   Z$CFF2CharStringMergePen.getCharStringh  sl     >>**gi11D
 )%-H $H-!+

 r,   )	r   r   rZ   r   rI   r   r   r   re   )g{Gz?)NNNT)rp   rq   rr   rs   rt   ry   r   r~   r   r   r   r   r   r   rc   r   r   rd   ru   rv   r   r   r   r'   ra   ra     sO     *< 

&/-/

7r r,   ra   N)Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZStdHWZStdVWZ	StemSnapHZ	StemSnapV)F):Zcollectionsr   ZfontTools.cffLibr   r   r   r   r   r   r   r	   r
   r   Zior   ZfontTools.cffLib.specializerr   r   ZfontTools.ttLibr   Z	fontToolsr   ZfontTools.varLib.modelsr   ZfontTools.misc.loggingToolsr   ZfontTools.misc.roundToolsr   ZfontTools.misc.psCharStringsr   r   ZfontTools.pens.t2CharStringPenr   Z	functoolsr   Zerrorsr   r   r   r   ZMergeDictErrorZMergeTypeErrorr(   r+   r2   r@   r8   rK   rM   rQ   rR   rV   r\   r^   rS   rg   rb   ra   rL   r,   r'   <module>r      s    "    N $  , 9 / I :   )-; MN% O%q1h(V j"KL	N& M` 2 <$5 <$~f_ fr,   