
    h                     	   S r SSKrSSKrSSKrSSKJr  SSKrSSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJr  SSKJrJ r J!r!J"r"J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+J,r,  \RZ                  " S5      r.SSK/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:   " S S\;5      r< " S S\<5      r=\=R}                  \R~                  S5      S 5       r@S rASQS jrB\=R}                  \R                  5      S 5       r@\=R}                  \R                  5      S 5       r@S  rES! rF\=R}                  \R                  5      S" 5       r@\=R}                  \R                  5      S# 5       r@S$ rISRS% jrJSRS& jrKSSS' jrLS( rM\=R}                  \R                  5      S) 5       r@STS* jrO\=R}                  \R                  5      S+ 5       r@\=R}                  \R                  5      S, 5       r@S- rRS. rSS/ rTS0 rUS1 rV\=R}                  \R                  5      S2 5       r@\=R}                  \R                  5      S3 5       r@\=R}                  \R                  5      S4 5       r@ " S5 S6\=5      rZ\ZR}                  \R                  5      S7 5       r@\ZR}                  \R                  5      S8 5       r@\ZR}                  \R                  5      S9 5       r@ " S: S;\=5      r\\\R}                  \R                  5      S< 5       r@\\R}                  \R                  5      S= 5       r@\\R}                  \R                  5      S> 5       r@ " S? S@\=5      r]SA r^\]R}                  \R                  5      SB 5       r@\]R}                  \R                  5      SC 5       r@\]R}                  \R                  5      SD 5       r@\]R}                  \R                  5      SE 5       r@ " SF SG\]5      r`\`R}                  \R                  5      SH 5       r@\`R}                  \R                  5      SI 5       r@SJ rcSK rd\`R}                  \R                  \R                  45      SL 5       r@\`R}                  \R                  \R                  45      SM 5       r@\`R}                  \R                  5      SN 5       r@\`R}                  \R                  SO5      SP 5       r@g)Uz4
Merge OpenType Layout tables (GDEF / GPOS / GSUB).
    N)ior)MAX_PAINT_COLR_LAYER_COUNTLayerReuseCache)classifyTools)otRound)build_n_ary_tree)otTables)otBase)BaseFixedValue)dfs_base_table)DefaultTable)buildermodelsvarStore)nonNoneallNoneallEqual
allEqualTosubList)VarStoreInstancer)reduce)buildSinglePos)_compression_level_from_envcompact_pair_poszfontTools.varLib.merger   )ShouldBeConstant
FoundANoneMismatchedTypesNotANoneLengthsDiffer
KeysDifferInconsistentGlyphOrderInconsistentExtensionsInconsistentFormatsUnsupportedFormatVarLibMergeErrorc                   d    \ rS rSrSS jr\SS j5       r\0 4S j5       rSS jrS r	S	 r
S
 rSrg)Merger.   Nc                     Xl         S U l        g Nfontttfs)selfr-   s     I/var/www/html/env/lib/python3.13/site-packages/fontTools/varLib/merger.py__init__Merger.__init__/   s    		    r+   c                    ^ ^^ T [         :w  d   S5       eST R                  ;  a  0 T l        [        T5      [        [        R
                  4;   a  T4m[        T5      [        :X  a  T4mUU U4S jnU$ )NzSubclass Merger instead.mergersc                    > U R                   S:X  d   e/ nT Hc  nX!;   a  M
  UR                  U5        TR                  R                  U0 5      nT H&  nXC;  d   SUR                   < SU< S35       eXU'   M(     Me     g )NmergezOops, class 'z' has merge function for 'z' defined already.)__name__appendr5   
setdefault)methoddoneclazzr5   attrattrscelfclazzess        r0   wrapperMerger.merger.<locals>.wrapper>   s    ??g---D =E",,11%<!D.  >>41. %+DM " ! r3   )r(   __dict__r5   typeenumEnumMetastr)r@   rA   r?   rB   s   ``` r0   mergerMerger.merger4   sc    v~999~DMM)DL=T4==11jG;#HE	  r3   c                     [        U5      nU R                  5        H9  n [        U SS 5      nUc    U$ U R                  R	                  US 5      nUc  M7  Us  $    U$ )Nr5   )rE   mrogetattrr5   get)r@   thing_defaulttypr5   ms         r0   
mergersForMerger.mergersForP   sa    5kHHJDdIt4G 	   d+A}  r3   c                   ^ [        US5      (       a  UR                  SS9  U H%  n[        US5      (       d  M  UR                  SS9  M'     [        [        U5      R	                  5       5      m[        U4S jU 5       5      (       d<  [        U TU Vs/ s H%  n[        [        U5      R	                  5       5      PM'     snS9eU R                  U5      nUR                  SU R                  R                  5      n T HJ  nX;   a  M
  [        X5      n	U V
s/ s H  n
[        X5      PM     nn
UR                  X5      nU" X	U5        ML     g s  snf s  sn
f ! [         a$  nUR                  R                  SW-   5        e S nAff = f)NensureDecompiledF)recursec              3   n   >#    U  H*  nT[        [        U5      R                  5       5      :H  v   M,     g 7fr+   )sortedvarskeys).0vr[   s     r0   	<genexpr>&Merger.mergeObjects.<locals>.<genexpr>f   s%     ?3a46$q',,.113s   25expectedgot*.)hasattrrV   rY   rZ   r[   allr!   rS   rN   	__class__mergeThingsrM   r&   stackr9   )r/   outlstexcludeitemr]   r5   defaultMergerkeyvaluetablevalues
mergerFuncer[   s                 @r0   mergeObjectsMerger.mergeObjects_   sV   3*++   /Dt/00%%e%4  d3inn&'?3???t#)N#Q&a*@#)N  //#&C)C)CD
	>);>?3%'%-3?$[[<
4/  *O @   	GGNN39%	s0   ,E=E E- E E 
F"FFc           
      h   [        X[        5      (       d.  [        U [        U5      U Vs/ s H  n[        U5      PM     snS9e[        [	        U[	        U6 5      5       H  u  nu  pV U R                  XV5        M     g s  snf ! [         a$  nUR                  R                  SU-  5        e S nAff = f)Nr`   z[%d])	r   lenr    	enumerateziprh   r&   ri   r9   )r/   rj   rk   xirp   rr   rt   s           r0   
mergeListsMerger.mergeListsx   s    #C((s3xc=Rcc!fc=RSS"+CS#Y,?"@A  / #A >S $ vz*s   A>(B
B1B,,B1c           
      T   [        X[        5      (       dB  [        U [        U5      R                  U Vs/ s H  n[        U5      R                  PM     snS9eU R	                  U5      R                  S S 5      nUb
  U" XU5        g [        U[        R                  5      (       a  [        X5      (       d
  [        XUS9eg [        US5      (       a  U R                  X5        g [        U[        5      (       a  U R                  X5        g [        X5      (       d
  [        XUS9eg s  snf )Nr`   rD   )r   rE   r   r8   rS   rN   
isinstancerF   Enumr   re   ru   listr}   )r/   rj   rk   r{   rs   s        r0   rh   Merger.mergeThings   s    #D))!tCy11RU7VRUQQ8H8HRU7V  __S)--dD9
!t#&TYY'' c''&tsCC (S*%%c'T""OOC%c''&tsCC ( 8Ws   D%c           
          U HD  nXA;  a  M
   X l         U R                  X   U Vs/ s H  oUR                  U5      PM     sn5        MF     g s  snf ! [         a!  nUR                  R                  U5        e S nAff = fr+   )r.   rh   rN   r&   ri   r9   )r/   r-   master_ttfs	tableTagstagrR   rt   s          r0   mergeTablesMerger.mergeTables   sn    C'	  ,MAUU3Z,MN 
 -N# s#s(   AA AA
A<A77A<r,   )r+   ) )r8   
__module____qualname____firstlineno__r1   classmethodrI   rS   ru   r}   rh   r   __static_attributes__r   r3   r0   r(   r(   .   sG    
  6 )+  2D*	r3   r(   c                       \ rS rSrSrg)AligningMerger   r   N)r8   r   r   r   r   r   r3   r0   r   r      s    r3   r   GlyphClassDefc                   ^ Uc  [        U5      (       d  [        U S US9eg U Vs/ s H  o3R                  PM     nn0 Ul        UR                  n[        5       nUR                  " U Vs/ s H  o3R                  5       PM     sn6   U HP  m[        U4S jU 5       5      n[        U5      (       d  [        XS   UST-   /S9eU(       d  S UT'   MH  US   UT'   MR     g s  snf s  snf )Nr`   c              3   D   >#    U  H  oR                  T5      v   M     g 7fr+   )rN   )r\   lks     r0   r^   merge.<locals>.<genexpr>   s     2cEE!HHcs    r   rd   )ra   rb   ri   )	r   r   	classDefssetupdater[   r   r   r   )rI   r/   rk   r   allKeys	allValuesr   s         @r0   r7   r7      s    |s||6Dc:: #
$1;;C
$DN>>DeGNNs+s!VVXs+,2c22		"""13sQwi  DGlDG  % ,s   C)C"c                 N   U R                   S:X  a  U $ [        R                  " 5       nSUl         U R                  Ul        U R                  Ul        UR                  R
                   Vs/ s H  o R                  PM     snUl        [        UR                  5      Ul        U$ s  snf )N   )	Formatot	SinglePosCoverageValueFormatglyphsValuerx   
ValueCount)r/   ret_s      r0   _SinglePosUpgradeToFormat2r      sz    {{a
,,.CCJ==CL&&CO%(\\%8%89%8%89CI^CNJ :s   )B"c                   ^ Uc  U Vs/ s H  n[        U5      PM     nnOA[        X5       VVVVs/ s H%  u  pF[        XF5       VVs0 s H  u  pxXx_M	     snnPM'     nnnnn[        5       n	U	R                  " U6   U R                  5       R                  m[        U	TS9n
[        U4S jU 5       5      (       d
  [        5       eA	SnUc/  U VVs/ s H  nU
 Vs/ s H  oU;   a  UOUPM     snPM     nnnX4$ [        U5      [        U5      :X  d   eU VVs/ s H  nU
 Vs/ s H  oU;   a  X   OUPM     snPM!     nnnX4$ s  snf s  snnf s  snnnnf s  snf s  snnf s  snf s  snnf )a<  Takes font and list of glyph lists (must be sorted by glyph id), and returns
two things:
- Combined glyph list,
- If values_lst is None, return input glyph lists, but padded with None when a glyph
  was missing in a list.  Otherwise, return values_lst list-of-list, padded with None
  to match combined glyph lists.
Nro   c              3   >   >#    U  H  n[        UTS 9U:H  v   M     g7f)r   N)rY   )r\   vssortKeys     r0   r^   %_merge_GlyphOrders.<locals>.<genexpr>   s     ;svbg&",ss   )	r   rz   r   getReverseGlyphMap__getitem__rY   rf   r"   rx   )r-   rk   
values_lstdefaultr   	dict_setsr   gr]   combinedorderpaddedValuesdict_setglyphpaddedr   s                  @r0   _merge_GlyphOrdersr      s}    %()SSVS	)	@CC@TU@Tuqs1z2ztqadz2@T	UuHOOY%%'33G8)E;s;;;$&&L &
% CHH%x'UW4%H% 	 
 = 3x3z?*** &
% MRRE5 1X_w>ER% 	 
 =3 *2U I
 S
sL   EE
EE

EE+E
E&!E!6E&E
E!E&c                 j    US   R                   R                  5       Ul         U R                  X5        g Nr   rD   copyru   rI   r/   rk   s      r0   r7   r7      *     FOO((*DM
"r3   c                 j    US   R                   R                  5       Ul         U R                  X5        g r   r   r   s      r0   r7   r7      r   r3   c                 z   U H  nUbC  [        U5      [        R                  :w  d&  UR                  b  X#R                  R                  ;  a  MK  UR
                  S:X  a  UR                  s  $ UR
                  S:X  a4  UR                  UR                  R                  R                  U5         s  $ [        U SS9e   g )Nr   r   single positioning lookupsubtable)	rE   r   r   r   r   r   r   indexr%   )rI   	subtablesr   r/   s       r0   %_Lookup_SinglePos_get_effective_valuer     s    LDzR\\)}}$MM000;;!::[[A::dmm2288?@@#F5PQQ  r3   c                    U GH<  nUbC  [        U5      [        R                  :w  d&  UR                  b  X$R                  R                  ;  a  ML  UR
                  S:X  a_  UR                  UR                  R                  R                  U5         nUR                  nU H  nUR                  U:X  d  M  Us  s  $    M  UR
                  S:X  aj  UR                  R                  R                  US5      nUR                  R                  R                  US5      n	UR                  U   R                  U	   s  $ [!        U SS9e   g )Nr   r   r   pair positioning lookupr   )rE   r   PairPosr   r   r   PairSetr   PairValueRecordSecondGlyph	ClassDef1r   rN   	ClassDef2Class1RecordClass2Recordr%   )
rI   r   
firstGlyphsecondGlyphr/   pspvrrecklass1klass2s
             r0   (_Lookup_PairPos_get_effective_value_pairr     s    LDzRZZ'}}$!5!55;;!dmm2288DEB$$C??k1J  [[A^^--11*a@F^^--11+qAF$$V,99&AA#F5NOO) * r3   c                 ,  ^ [        [        R                  U Vs/ s H  o3R                  PM     snS5      =Ul        n[	        U5      S:X  d  US-  S:X  d
  [        U SS9eUR                  R                  m[        S U 5       5      (       a  [        U4S jU 5       5      (       a  [        R                  " XAR                  5      Ul        US:w  aX  U R                  UR                  U Vs/ s H0  oUR                  b  UR                  O[        R                  " 5       PM2     sn5        UR                  R                  5       Ul        g SUl        U Vs/ s H  n[        U5      PM     nn[!        U R"                  U Vs/ s H  oUR                  R                  PM     snU Vs/ s H  oUR                  PM     sn5      u  pgXaR                  l        U Vs/ s H  n[        R                  " U5      PM     snUl        [	        UR                  5      Ul        ['        U5       HV  u  p['        U5       HB  u  pX   b  M  [)        X R*                  U	   U5      nUc  [        R                  " U5      nXZU'   MD     MX     U R-                  UR                  U5        U R/                  XS	S
9  [        [        R                  UR                   Vs/ s H  oUR1                  5       PM     snS5      Ul        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nr   r   ir   r   c              3   >   #    U  H  oR                   S :H  v   M     g7f)r   Nr   r\   r]   s     r0   r^   r   <  s     
&#Q88q=#s   c              3   V   >#    U  H  nTUR                   R                  :H  v   M      g 7fr+   )r   r   )r\   r]   coverageGlyphss     r0   r^   r   <  s#      /58!**+++Ss   &)r   )r   r   r   r   r   rl   )r   int__or__r   rx   r%   r   r   rf   r
   ValueRecordr   rh   	getFormatr   r   r   r-   r   ry   r   lookup_subtablesr}   ru   getEffectiveFormat)rI   r/   rk   r   valueFormatr]   r   r   r   r|   rr   jr   r   s                @r0   r7   r7   4  s   %+CJJPS8TPS1PS8TVW%XXD{HMkD0A51LMM ]]))N

&#
&&&3 /58/ , , ''ZZ@
! 

SVWSVaGG/V5G5G5IISVW  :://1 DK25
6#Q%a(#C
6 (5Ajj''57MA7MNF "MM;AB6a&$$[16BDJ$**oDOv&	!&)HAy$
 6//2EA y&&{31I * ' djj&) W   

TZZ@Z))+Z@!Do 9U  X 7 67M C2 As)   K3
,7K8
K= L
%L LL
c                    [        U R                  U VVs/ s H(  o3R                   Vs/ s H  oDR                  PM     snPM*     snnU Vs/ s H  o3R                  PM     sn5      u  pV/ =Ul        nU H  n[        R                  " 5       n	Xl        U R
                  (       a   [        R                  " U R
                  5      OS U	l        U R                  (       a   [        R                  " U R                  5      OS U	l
        UR                  U	5        M     [        UR                  5      Ul        [        U5       H  u  p[        U5       H  u  p[        R                  " 5       nXl        X   b  X   nO$[        X R                   U
   UR"                  U5      nUc  Su  pO[%        USS 5      n[%        USS 5      nU R
                  (       a  [        R                  " U R
                  US9OS Ul        U R                  (       a  [        R                  " U R                  US9OS Ul
        XKU'   M     M     U?U R'                  UR                  U5        g s  snf s  snnf s  snf )NNNValue1Value2)src)r   r-   r   r   r   valueFormat1r
   r   r   valueFormat2r   r9   rx   PairValueCountry   r   r   _firstGlyphrM   r}   )rI   r/   rk   r   r]   r   r   pvrsr   r   r|   rr   r   vpairv1v2s                   r0   r7   r7   r  s    (?BCs!3!3	4!3A--!3	4sC&)*c		c*NF #%$D4  "7=7J7JFv223PT 	
 8>7J7JFv223PT 	
 	C  d223Dv&	!&)HA""$A!My$	@33A68H8H% }#BUHd3UHd3 && ""6#6#6B? H && ""6#6#6B? H
 1I3 * '6 	
d**F3] 
5C*s   IIII!Ic                    [        U Vs/ s H$  o3R                  (       d  M  UR                  S:H  PM&     sn5      (       d   S5       eUR                  U USS9  [        R                  " 5       n/ Ul        SUl        [        UR                  U Vs/ s H  oUR                  R                  PM     snU Vs/ s H  oUR                  PM     snUS9u  pgX`R                  l
        U Vs/ s H  n[        R                  " 5       PM     snU l        [        U R                  5      U l        [        X`R                  5       H  u  pXl        M     UR                  U R                  U5        g s  snf s  snf s  snf s  snf )Nr   Report bug against fonttools.)r   r   PairSetCountValueFormat1ValueFormat2r   r   )r   r   r   ru   r   r   r   r   r-   r   r   rx   r   rz   r   r}   )r/   rk   rI   r   emptyr]   r   r   r   r   r   s              r0   _PairPosFormat1_merger    s?   &)7cYY	1	c7  '&' 
 W   JJLEEE ($'(Cq		C( CqC 	NF "MM*01&QBJJL&1DLDLL)D.	 / dllF+9 	8" 	) 
 2s   E(E(E-
5E2&E7c                    [        U [        5      (       a  U nO&U (       a  U R                  (       a  U R                  O0 nU(       a  [        UR	                  5       5      OSn/ n[        US-   5       H  nUR                  [        5       5        M     UR                  5        H  u  pgXG   R                  U5        M     Uc  S US'   U$ [        U5      =US'   nUSS   H%  n	U	R                  U5        UR                  U	5        M'     U$ )Nr   r   )r   dictr   maxrr   ranger9   r   itemsaddintersection_updatedifference_update)
r/   	allGlyphsr   rR   r   r   r   r]   class0ss
             r0   _ClassDef_invertr    s    $	&*t~~DNN2	#,I!A
C1q5\

35  !

1 " A J i.(AQRA!!&)$$Q'  Jr3   c                    [         R                  " 5       n0 =Ul        nUS L nU(       a  S /[        U 5      -  n[        R
                  " 5       n[        X5       H)  u  pg[        Xg5      nUc  USS  nUR                  U5        M+     UR                  5       n	U(       a  U	R                  S[        5       5        [        U	5       H  u  pU
S:X  a  M  U H  nXU'   M	     M     X)4$ )Nr   r   )r   ClassDefr   rx   r   
Classifierrz   r  r   
getClassesinsertr   ry   )rk   allGlyphsesr/   r   allGlyphsesWasNone
classifierclassDefr
  setsclassesr|   classSetr   s                r0   _ClassDef_merge_classifyr    s    ;;=D!##DNY$,fs3x'))+J"3448D$	  5
 ##%Gq#%  )6AaL  * =r3   c                    U Vs/ s H  oDR                   PM     nn[        U Vs/ s H  oDR                  PM     snU Vs/ s H  oDR                  R                  PM     sn5      u  U l        n[        U5      U l        / n[        X5       GH}  u  pHS n	[        UR                  R                  5      n
UR                  R                  n/ nU GH&  n[        [        U5      5      nX;  a  S n	U	c  [        R                   " 5       n	/ =ol        [        UR                  5       H  nU(       a  S nO[        R                  " 5       nU R                   (       a   ["        R$                  " U R                   5      OS Ul        U R(                  (       a   ["        R$                  " U R(                  5      OS Ul        UR-                  U5        M     U	nOUR/                  US5      nUU   nUR-                  U5        GM)     UR-                  U5        GM     UnA[        U Vs/ s H  oDR0                  PM     sn5      u  U l        n[        U5      U l        / n[        X5       H  u  pHUR0                  R                  n/ nU H  nUR                  n[        R                   " 5       n/ =nUl        U H`  nU(       d  US   nO+[        [        U5      5      nUR/                  US5      nUU   nUR-                  [2        R4                  " U5      5        Mb     UR-                  U5        M     UR-                  U5        M     UnAU$ s  snf s  snf s  snf s  snf r   )r   r  r   r   r   rx   Class1Countrz   r   r   nextiterr   r   r  Class2Countr   r
   r   r   r   r   r9   rN   r   r   deepcopy)r/   rk   r-   transparentr   matricesr  new_matricesmatrixnullRowcoverage	classDef1class1Recordsr  exemplarGlyphclass2recordsr   rec2rec1klass	classDef2rec1oldoldClass2Recordsrec1newclass2Recordss                            r0   _PairPosFormat2_align_matricesr3     s   (+,1H, 7!"cc"$D1ZZ%6%6$DDNG 7|DL'	qzz(()KK))	H h0M,
 ? oo/G;==M$8"1==1&#'D#%??#4D $(#4#4 !' 2 243D3D E%) !K $(#4#4 !' 2 243D3D E%) !K
 &,,T2 2  !mQ7e}  &A  B 	M*M (N H 7S7QSS7QRDNG7|DL'	KK))	G&33oo'G355MG0#+A.D$(h$8M%MM-;E+E2D$$T]]4%89 $   )  	M*! (" HOU - 	#$D^ 8Rs   L;M  M
M
c                 r   [        U Vs/ s H$  o3R                  (       d  M  UR                  S:H  PM&     sn5      (       d   S5       eUR                  U USS9  [	        UR
                  U Vs/ s H  oDR                  R                  PM     sn5      u  pVXPR                  l        [        XR                  5       H+  u  p7UR                  R                  U:w  d  M!  X7S   :X  a  M+   e   [        XUR
                  5      n[        US   5      U l        UR                  U R                  U5        g s  snf s  snf )Nr   r   )r   r   r  r   r  r   r   r   r   )r   r   r   ru   r   r-   r   r   rz   r   r3  r   r}   )	r/   rk   rI   r   r]   r   r   r   r"  s	            r0   _PairPosFormat2_merger6  N  s   &)<c^^	1	c<  '&'  	
    #6;;C0PCq1B1BC0PQIF!MM C!8!89::&"%%% : .dEHXa[)D
d''2I 	=& 1Qs   D/D/-D4
c                    [        [        R                  U Vs/ s H  o3R                  PM     snS5      =U l        Ul        [        [        R                  U Vs/ s H  o3R
                  PM     snS5      =U l        Ul        UR                  S:X  a  [        XU 5        O'UR                  S:X  a  [        XU 5        O
[        U SS9eU ?U ?SnSnUR                  S:X  am  UR                   H\  nUR                   HI  n[        USS 5      nUb  XHR                  5       -  n[        USS 5      n	U	c  M7  XYR                  5       -  nMK     M^     O|UR                  S:X  al  UR                   H\  n
U
R                    HI  n[        USS 5      nUb  XHR                  5       -  n[        USS 5      n	U	c  M7  XYR                  5       -  nMK     M^     XAl        XQl        g s  snf s  snf )Nr   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r  r6  r%   r   r   rM   r   r   r   )rI   r/   rk   r   vf1vf2pairSetpairValueRecordpv1pv2class1Recordclass2Records               r0   r7   r7   w  s   .4

S1S^^S11/ F$+ /5

S1S^^S11/ F$+ {{ad0		d01JKKV0 C
C{{a||G#*#:#:ox>?==?*Cox>?==?*C $; $ 
	 --L , 9 9lHd;?==?*ClHd;?==?*C !: . M 2 2s   G
G
c                    [        S U 5       5      U l        [        UR                  U Vs/ s H  n[	        XSS-   5      R
                  PM     snU Vs/ s H  n[	        XSS-   5      R                  PM     sn5      u  pgU[	        XS-   5      l        [        UR                  U Vs/ s H  n[	        XTS-   5      R
                  PM     snU Vs/ s H  n[	        [	        XTS-   5      US-   5      PM      sn5      u  pU[	        XS-   5      l        / n
[        U[        U6 5       H  u  pU Vs/ s H  oc  M  UR                  PM     nn[        U5      (       d  [        X.S   US9e[        R                  " 5       nUS   Ul        U Vs/ s H  oc  S OUR                  PM     nn[        U5      (       a  S nO.[        R                  " 5       nSUl        UR!                  UU5        UUl        U
R#                  U5        M     [        R$                  " 5       nU
Ul        ['        U
5      Ul        [+        XS-   U5        / n
[        U[        U	6 5       GH
  u  p[        U5      (       a  S nO[	        [        US-   5      " 5       n/ n[+        XS-   U5        U Vs/ s H  oc  / O[	        XS-   5      PM     nnU H.  nUR-                  S /U R                  ['        U5      -
  -  5        M0     [        U6  HU  n[        U5      (       a  S nO.[        R                  " 5       nSUl        UR!                  UU5        UR#                  U5        MW     U
R#                  U5        GM     [	        [        US-   5      " 5       n[+        UUS-   U
5        [+        UUS	-   ['        U
5      5        [+        XS-   U5        g s  snf s  snf s  snf s  snf s  snf s  snf s  snf )
Nc              3   8   #    U  H  oR                   v   M     g 7fr+   )
ClassCountr\   r   s     r0   r^   ,_MarkBasePosFormat1_merge.<locals>.<genexpr>  s     41,,   r   ArrayRecordr   r`   r   AnchorCount)r  rB  r   r-   rM   r   
MarkRecordrz   Classr   r   r   
MarkAnchorr   rH  r   rh   r9   	MarkArrayrx   	MarkCountsetattrextend)r/   rk   rI   MarkBaser   MarkCoverageGlyphsMarkRecordsBaseCoverageGlyphsBaseRecordsrecordsr   glyphRecordsr
allClassesr   
allAnchorsanchorarrayanchorsglyphAnchorss                        r0   _MarkBasePosFormat1_merger`    si   444DO&87:;s!:%	&	-	-s;8;<17N	#	.	.<'#
 /AGD#$+&87:;s!:%	&	-	-s;GJKs!7N+TH_	=sK'#
 /AGD#$+ G133DE'3E|!gagg|
E$ 
##"6qMzRR--/C"1CIGST|!)$=|JTz"" !""6:6#CNsA FB LLNEE'lEOD.%( G133DE<  C"dXo.0CGC'2JVJVQiWQx%@@,   "$4??SV#;<= "!<0
:&&!FYY[F$%FM&&vz:v& 1 	s) F* Bw')EE4(?G,E4'>3w<0D.%(] 	<< 	<K F. U.s/   "N0
"N5&"N:
%N?,O6OO	Oc           	          [        UR                  S U 5       5      (       d0  [        U SUR                  U Vs/ s H  o3R                  PM     snS9eUR                  S:X  a  [        XU 5        g [	        U SS9es  snf )Nc              3   8   #    U  H  oR                   v   M     g 7fr+   r   rC  s     r0   r^   r          #:cHHcrE  zmark-to-base positioning lookupr   ra   rb   r   r   r   r   r$   r`  r%   rI   r/   rk   r   s       r0   r7   r7     sr    dkk#:c#:;;!6[[#&'3a3'	
 	
 {{a!$V41RSS (s   A:c           	         [        UR                  S U 5       5      (       d0  [        U SUR                  U Vs/ s H  o3R                  PM     snS9eUR                  S:X  a  [        XU SS5        g [	        U SS9es  snf )Nc              3   8   #    U  H  oR                   v   M     g 7fr+   r   rC  s     r0   r^   r   
  rc  rE  zmark-to-mark positioning lookuprd  r   Mark1Mark2r   re  rf  s       r0   r7   r7     sv    dkk#:c#:;;!6[[#&'3a3'	
 	
 {{a!$VWgF1RSS (s   A<c                    [         R                  " 5       n[         R                  " 5       Ul        [        UU  VVs/ s H(  o3R                   Vs/ s H  oDR
                  PM     snPM*     snnU  Vs/ s H  o3R                  PM     sn5      u  pVXRR                  l        / =Ul        n[        U6  H#  nU H  nUc  M  UR                  U5          M!      e   [        UR                  5      Ul
        U$ s  snf s  snnf s  snf r+   )r   r   r   r   r   r   r   rz   r9   rx   r   )	rk   r-   r/   r   r]   r   r   r   rr   s	            r0   _PairSet_flattenrl    s    ::<DKKMDM (?BCs!3!3	4!3A--!3	4sC&)*c		c*NF "MM"$$D4v,A}A 
 5  d223DK 
5C*s   C8C3#C81C>3C8c           
         [        U  Vs/ s H$  o"R                  (       d  M  UR                  S:H  PM&     sn5      (       d   S5       e[        R                  " 5       nSUl        [        R                  " 5       Ul        [        [        R                  U  Vs/ s H  o"R                  PM     snS5      Ul
        [        [        R                  U  Vs/ s H  o"R                  PM     snS5      Ul        [        X Vs/ s H  oDR                  R                  PM     snU  Vs/ s H  oDR                  PM     sn5      u  pVXSR                  l        [        U6  VVs/ s H$  n[        U Vs/ s H	  oDc  M  UPM     snU5      PM&     snnUl        [        UR                  5      Ul        U$ s  snf s  snf s  snf s  snf s  snf s  snf s  snnf )Nr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   rz   rl  rx   r   )rk   r-   r   r/   r]   r   r   rr   s           r0   (_Lookup_PairPosFormat1_subtables_flattenrn  0  sl   &)7cYY	1	c7  '&'  ::<DDKKKMDMszzC+HCqNNC+H!LDszzC+HCqNNC+H!LD (#.#Qzz  #.C0HCqC0HNF "MM 6l"F 	V=V!V=tD"DL DLL)DK) 	8 ,I+H /0H
 >s@   F)F)F.
F3
;F8
 F=G(G2G8GGc                    [        U  Vs/ s H$  o"R                  (       d  M  UR                  S:H  PM&     sn5      (       d   S5       e[        R                  " 5       nSUl        [        R                  " 5       Ul        [        [        R                  U  Vs/ s H  o"R                  PM     snS5      Ul
        [        [        R                  U  Vs/ s H  o"R                  PM     snS5      Ul        [        X Vs/ s H  oDR                  R                  PM     sn5      u  pVXSR                  l        [        X0USS9n/ =ol        [        U6  H  n	[        R                  " 5       n
UR                  U
5        / U
l        U
R                   n
[        [#        S U	 5       5      6  H/  n[%        ['        S U 5       5      5      nU
R                  U5        M1     M     U$ s  snf s  snf s  snf s  snf )Nr   r   r   T)r!  c              3   8   #    U  H  oR                   v   M     g 7fr+   )r   )r\   rY  s     r0   r^   ;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>`  s     ;dnndrE  c              3   .   #    U  H  oc  M  Uv   M     g 7fr+   r   r\   cs     r0   r^   rq  a  s     =t!AAts   	)r   r   r   r   r   r   r   r   r   r   r   r   r   r3  rz   r9   r   r   r  r  )rk   r-   r   r/   r]   r   r   r"  r$  rowsrowcolscols                r0   (_Lookup_PairPosFormat2_subtables_flattenry  I  s   &)<c^^	1	c<  '&'  ::<DDKKKMDMszzC+HCqNNC+H!LDszzC+HCqNNC+H!LD #4S)IS***;*;S)IJIF!MM-d4PH!##FXooc;d;;<Dt=t==>CJJsO =  K3 	= ,I+H *Js   GGG 
G%
;G*
c                 |   [        U 5      n [        U 5      nSnX2:  a0  X   R                  S:X  a  US-  nX2:  a  X   R                  S:X  a  M  [        U SU U5      /U SU& [        U 5      nUnUS:  a7  XS-
     R                  S:X  a"  US-  nUS:  a  XS-
     R                  S:X  a  M"  [	        XS U5      /XS& U $ )zMerge multiple Format1 subtables at the beginning of lst,
and merge multiple consecutive Format2 subtables that have the same
Class2 (ie. were split because of offset overflows).  Returns new list.r   r   Nr   )r   rx   r   rn  ry  )rk   r-   r   r|   s       r0   &_Lookup_PairPos_subtables_canonicalizer{  g  s     s)CCA	A
%CFMMQ&	Q %CFMMQ&7BQFGCGCA	A
a%CAJ%%*	Q a%CAJ%%*7BFGCGJr3   c                 0   [        X Vs/ s H  o3R                  R                  PM     snS 5      u  pE[        U5      n[        R
                  " 5       nSUl        X'l        [        R                  " 5       Ul        XGR                  l        Xgl        S /U-  Ul	        U  H  nUR                  S:X  a_  UR                  n	UR                  R                   H7  n
UR                  U
5      n[        R                  " U	5      UR                  U'   M9     Mr  UR                  S:X  d  M  [        UR                  R                  5       HH  u  pUR                  U   n	UR                  U
5      n[        R                  " U	5      UR                  U'   MJ     M     U/$ s  snf )Nr   r   )r   r   r   rx   r   r   r   r   r   r   r   r   r   ry   )rk   r-   min_inclusive_rec_formatr]   r   r   
num_glyphsnew	singlePosval_recgnamer|   r   s                r0   #_Lookup_SinglePos_subtables_flattenr  |  s=   "4S)IS***;*;S)I4PIFVJ
,,.CCJ.O;;=CL LLN#CI	q ooG"++22LL'#}}W5		! 3 "%i&8&8&?&?@#//!,LL'#}}W5		! A  5L) *Js   F
c                    [        U R                  U Vs/ s H  o3R                  R                  PM     snU Vs/ s H  o3R                  PM     sn5      u  pESUl        [        R                  " 5       Ul        XAR                  l        / Ul        U H  n[        R                  " 5       n[        R                  " 5       Ul        SUR                  l        [        R                  " 5       Ul	        SUR                  l        UR                  R                  U5        M     U R                  UR                  U5        [        UR                  5      Ul        g s  snf s  snf Nr   )r   r-   r   r   EntryExitRecordr   r   rH  EntryAnchor
ExitAnchorr9   r}   rx   EntryExitCount)rI   r/   rk   r   r   r   r   r   s           r0   r7   r7     s     ($'(Cq		C($'(Cq		C(NF DKKKMDM!MMD  "))+!" !##C(  d**F3d223D! 	)(s
   E
Ec                     [        S U 5       5      (       a  S Ul        [        S U 5       5      (       a  S Ul        U R                  X5        g )Nc              3   <   #    U  H  oR                   S L v   M     g 7fr+   )r  r\   masters     r0   r^   r     s     
8C&%C   c              3   <   #    U  H  oR                   S L v   M     g 7fr+   )r  r  s     r0   r^   r     s     
73$3r  )rf   r  r  ru   r   s      r0   r7   r7     sA    

8C
888

73
777
"r3   c           	      x   U Vs/ s H  o3R                   PM     sn=o@l        [        [        X$5      5      XR                   4/-    GH  u  p5U(       d  M  US   R                  R
                  R                  S5      (       d  M>  [        U Vs/ s H  ofR                  PM     sn5      (       d/  [        U SU Vs/ s H  ofR                  R
                  PM     snS9e[        U Vs/ s H  ofR                  PM     sn5      (       d  [        U 5      eUS   R                  Ul
        U Vs/ s H  ofR                  PM     nnUS S 2	 UR                  U5        GM     UR                   =(       a'    [        UR                   S   [        R                  5      nU(       aS  [!        UR                   U R"                  5      Ul         U Vs/ s H  n[!        X`R"                  5      PM     sn=o@l        GOUR                   =(       a'    [        UR                   S   [        R$                  5      n	U	(       a  U Vs/ s H  n['        U5      PM     n
n[)        U
 Vs/ s H
  oU
S   :H  PM     sn5      (       d  U VVs/ s H  of  H  oR*                  PM     M     nnn[-        [.        U5      n[1        UR                   U R"                  U5      Ul         U Vs/ s H  n[1        X`R"                  U5      PM     sn=o@l        SnOSnU R3                  UR                   U5        ['        UR                   5      Ul        U(       Ga  ['        UR                   5      S:  a  UR                   S   R6                  S:X  d   eUR                   S   R8                  R:                  (       d0  UR                   R=                  S5        U=R4                  S-  sl        ['        UR                   5      S:  a  UR                   S   R6                  S:X  d   eUR                   S   R8                  R:                  (       d0  UR                   R=                  S5        U=R4                  S-  sl        U R"                  R>                  RA                  S	[C        5       S
9nUS:w  aU  [D        RG                  S5        [I        U R"                  UUR                   5      Ul         ['        UR                   5      Ul        OW	(       a  W(       az  UR                   S   nUR8                  R:                  n[        UURJ                  5       VVs0 s H	  u  nnUU_M     nnn[M        UU R"                  RO                  5       5      Ul         U RQ                  XSS/S9  U ?g s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snnf s  snf s  snnf )Nr   	Extensionr`   TFr   r5  r   z0fontTools.otlLib.optimize.gpos:COMPRESSION_LEVELr   zCompacting GPOS...SubTableSubTableCountr   ))r  r   r   rz   rg   r8   
startswithr   r#   ExtensionLookupType
LookupTypeExtSubTablerP  r   r   r   r{  r-   r   rx   rf   r   r   r   r  r}   r  r   r   r   popcfgrN   r   loginfor   r   r   r   ru   )rI   r/   rk   r   r   stsstnew_sts	isPairPosisSinglePosnumSubtablesnumstvalueFormatListmirf	flattenedlevelsinglePosTabler   r  	valRecordsinglePosMappings                         r0   r7   r7     s   ?B*Cs!::s*CCI' s3*+mm/D.EEq6$$//<<C8Cb\\C899,(9<=2..= 
 cBc33cBCC,V44q655AL034"~~G4AJJw F" J*T]]1-=rzz"JI ?MM6;;
 OX/
NW22{{Ci/
 	
	+ mmR
4==3CR\\(R.78iCGiL8LILDQ/LIJJ <E"Q9Rb==b=9"Qc?3 CMM6;;!
 (7' 8KKN'7 	3 !	!	
dmmY/T]]+D4==!Q&4==+;+B+Ba+GGG}}Q((//MMa !# 4==!Q&4==+<+C+Cq+HHH}}R ))00MMb!!# ##>/1 $ 
 A:HH)*,V[[%ODM!$T]]!3D	q)((// 69AUAU5V
5V!1	E95V 	 
 'fkk<<>
 J+HIA +D 9 >B 5/
 9I #R7T
sA   VV
9V&V
*VV5V!V&7V+ V12V6c                       \ rS rSrSrS rSrg)InstancerMergeri  zHA merger that takes multiple master fonts, and instantiates
an instance.c                 r    [         R                  X5        X l        X0l        UR	                  U5      U l        g r+   )r(   r1   modellocationgetMasterScalarsmasterScalars)r/   r-   r  r  s       r0   r1   InstancerMerger.__init__#  s+    #
 "33H=r3   )r  r  r  Nr8   r   r   r   __doc__r1   r   r   r3   r0   r  r    s    >r3   r  c                     UR                   S:X  d   eU Vs/ s H  o3R                  PM     nnU R                  nU R                  n[	        UR                  XF5      5      Ul        g s  snf r  )r   
Coordinater  r  r   interpolateFromValuesAndScalars)rI   r/   rk   aCoordsr  r  s          r0   r7   r7   *  s]    ;;!$'(CqllCF(LLE((M--fDDO )s   A&c                 T   UR                   S:X  d   eU Vs/ s H  o3R                  PM     nnU Vs/ s H  o3R                  PM     nnU R                  nU R                  n[        UR                  XG5      5      Ul        [        UR                  XW5      5      Ul        g s  snf s  snf r  )r   XCoordinateYCoordinater  r  r   r  )rI   r/   rk   r  XCoordsYCoordsr  r  s           r0   r7   r7   5  s    ;;!&)*c}}cG*&)*c}}cG*LLE((M--gED --gED +*s
   B B%c           	          U R                   nU R                  nS Hk  u  pV[        X5      (       a   e[        X5      (       d  M)  U Vs/ s H  n[        XuS5      PM     nn[	        UR                  X5      5      n	[        XU	5        Mm     g s  snf N)XAdvance
XAdvDevice)YAdvance
YAdvDevice)
XPlacement
XPlaDevice)
YPlacement
YPlaDevicer   )r  r  re   rM   r   r  rO  )
rI   r/   rk   r  r  name	tableNamer  rr   rp   s
             r0   r7   r7   D  s    LLE((M 4++++43673agaq)3F755fLE D& 8s   Bc                   "    \ rS rSrSrSS jrSrg)MutatorMergeri^  zA merger that takes a variable font, and instantiates
an instance.  While there's no "merging" to be done per se,
the operation can benefit from many operations that the
aligning merger does.c                 F    [         R                  X5        X l        X0l        g r+   )r(   r1   	instancerdeleteVariations)r/   r-   r  r  s       r0   r1   MutatorMerger.__init__d  s    #" 0r3   )r  r  NTr  r   r3   r0   r  r  ^  s    
1r3   r  c                    US   R                   R                  5       Ul         UR                  S:w  a  g U R                  nUR                  nU R
                  (       a  U?U(       aP  UR                  S:X  d   eUR                  S-  UR                  -   n[        X5   5      nU=R                  U-  sl
        U R
                  (       a  SUl        g g )Nr            r   )rD   r   r   r  DeviceTabler  DeltaFormat	StartSizeEndSizer   r  )rI   r/   rk   r  devvaridxdeltas          r0   r7   r7   j  s     FOO((*DM{{a  I


C
&(((--2%4	)*5  r3   c           	         US   R                   R                  5       Ul         UR                  S:w  a  g U R                  nS H  nUS-   n[	        X5      (       d  M  [        X5      nU R                  (       a  [        X5        Uc  MF  UR                  S:X  d   eUR                  S-  UR                  -   n[        X7   5      nUS-   n	[        X[        X5      U-   5        M     U R                  (       a  SUl        g g )	Nr   r  XYr  r  r  r  r   )rD   r   r   r  re   rM   r  delattrr  r  r  r   rO  )
rI   r/   rk   r  r]   r  r  r  r  r>   s
             r0   r7   r7     s     FOO((*DM{{a  I%	t''d&""D$;&(((--2%4	)*<GD/%78 "  r3   c           
         US   R                   R                  5       Ul         U R                  nS H  u  pE[        X5      (       d  M  [	        X5      nU R
                  (       a  [        X5        Uc  MC  UR                  S:X  d   eUR                  S-  UR                  -   n[        X7   5      n[        X[	        XS5      U-   5        M     g )Nr   r  r  r  )rD   r   r  re   rM   r  r  r  r  r  r   rO  )	rI   r/   rk   r  r  r  r  r  r  s	            r0   r7   r7     s     FOO((*DM  I t''d&""D$;&(((--2%4	)*GD2U:;%r3   c                   8   ^  \ rS rSrSrS rS rU 4S jrSrU =r	$ )VariationMergeri  zFA merger that takes multiple master fonts, and builds a
variable font.c                     [         R                  X5        [        R                  " U5      U l        U R                  U5        g r+   )r(   r1   r   OnlineVarStoreBuilderstore_buildersetModel)r/   r  axisTagsr-   s       r0   r1   VariationMerger.__init__  s-    #%;;HEer3   c                 F    Xl         U R                  R                  U5        g r+   )r  r  r  )r/   r  s     r0   r  VariationMerger.setModel  s    
##E*r3   c                   > S nS nS U;   a  [        U5      (       a  Ub	  [        XS9eg U R                  nU R                  (       a-  [        U Vs/ s H  oUS LPM     snU R                  5      U l        U R                  nUR                  U5      u  pbU R                  U5        [        [        U ]'  X5        U(       a  U R                  U5        U(       a  X@l        g g s  snf )N)rb   )
r   r   r.   r   r  getSubModelr  superr  rh   )r/   rj   rk   masterModelorigTTFsr]   r  rg   s          r0   rh   VariationMerger.mergeThings  s    3;s||?$T33 yyHyy#C$@Cqd]C$@$))L	**K$005JEMM% ot0:MM+& I  %As   C)r  r  r.   )
r8   r   r   r   r  r1   r  rh   r   __classcell__)rg   s   @r0   r  r    s    
+! !r3   r  c                     [        U5      (       a  US   S 4$ U R                  U5      u  p#U[        R                  " U5      4$ r   )r   storeMastersr   buildVarDevTable)r  master_valuesbasevarIdxs       r0   r  r    sE    Q%% --m<LD))&111r3   c                     UR                   S:w  a
  [        U SS9e[        U R                  U Vs/ s H  o3R                  PM     sn5      u  Ul        nU(       a  SUl         XAl        g g s  snf )Nr   za baseline coordinater   r  r   r%   r  r  r  r  rI   r/   rk   r  r  s        r0   r7   r7     se    {{a1HII#3S9S||S9$ DO[ &  :   A)
c                     UR                   S:w  a
  [        U SS9e[        U R                  U Vs/ s H  o3R                  PM     sn5      u  Ul        nU(       a  SUl         XAl        g g s  snf )Nr   za caretr   r  r  r  s        r0   r7   r7     sd    {{a;;#3S9S||S9$ DO[ &  :r  c                 p   UR                   S:w  a
  [        U SS9e[        U R                  U Vs/ s H  o3R                  PM     sn5      u  Ul        n[        U R                  U Vs/ s H  o3R
                  PM     sn5      u  Ul        nU(       d  U(       a  SUl         XAl        XQl        g g s  snf s  snf )Nr   z	an anchorr   r  )r   r%   r  r  r  r  XDeviceTableYDeviceTable)rI   r/   rk   r  r  r   s         r0   r7   r7     s    {{a==%5c:c}}c:&"Dl &6c:c}}c:&"Dl |(( $ ; ;s   B.
'B3
c                     S Hk  u  p4[        X5      (       d  M  [        U R                  U Vs/ s H  n[        XSS5      PM     sn5      u  pg[	        XU5        U(       d  M_  [	        XU5        Mm     g s  snf r  )re   r  r  rM   rO  )rI   r/   rk   r  r  r  rp   deviceTables           r0   r7   r7     sl     4!1$$C&HCqwq':C&H"E D&{5 'Is   A3c                       \ rS rSrSrSS jrSS jrS 4S jrS rS r	S	 r
S
\4S jrS
\4S jr\S 5       r\S 5       rSrg)COLRVariationMergeri&  a  A specialized VariationMerger that takes multiple master fonts containing
COLRv1 tables, and builds a variable COLR font.

COLR tables are special in that variable subtables can be associated with
multiple delta-set indices (via VarIndexBase).
They also contain tables that must change their type (not simply the Format)
as they become variable (e.g. Affine2x3 -> VarAffine2x3) so this merger takes
care of that too.
c                     [         R                  XX#5        0 U l        / U l        [	        5       U l        / U l        S U l        U(       a  [        5       U l        SU l	        g )NF)
r  r1   varIndexCachevarIdxesr   varTableIdslayerslayerReuseCacher   _doneBaseGlyphs)r/   r  r  r-   allowLayerReuses        r0   r1   COLRVariationMerger.__init__1  sT      h=   5##2#4D $r3   c                     SU;   a$  SU;   a  U R                  US   R                  5        [        R                  XX#5        g )NCOLR)expandPaintColrLayersrq   r  r   )r/   r-   r   r   s       r0   r   COLRVariationMerger.mergeTablesC  s:    Y6T> &&tF|'9'9:##DGr3   c                     g)NTr   )r   s    r0   <lambda>COLRVariationMerger.<lambda>P  s    4r3   c                    UR                   nUR                  nSn U" U5      nU" U5      nU(       d  [        U [	        U5      R
                  US9eUn/ nU H*  n	[        U	SS 5      n U" U5      nUR                  U5        M,     [        Xx5      (       d  [        U [	        U5      R
                  UUS9eU$ ! [         a     Nf = f! [         a     Nbf = f)NF)r   rp   r   rd  )
r   
formatEnum
ValueErrorr%   rE   r8   rM   r9   r   r$   )
r/   rj   rk   validatefmtr  okra   rb   r]   s
             r0   checkFormatEnum#COLRVariationMerger.checkFormatEnumP  s    jj^^
	S/C #B#D493E3ESQQA!Xt,C o JJsO  (((%c++!	  -  		  s#   B6 (C6
CC
CCc           
      
   UR                  5        H7  n U R                  X   U Vs/ s H  oDR                  U5      PM     sn5        M9     g s  snf ! [         a&  nUR                  R                  SU< S35        e S nAff = f)N[])r[   rh   rN   r&   ri   r9   )r/   rj   rk   r   r]   rt   s         r0   mergeSparseDict#COLRVariationMerger.mergeSparseDictn  sl    A  C)@Cq%%(C)@A )@# 1%qz*s(   AAAA
B!A==Bc                     U H;  n[        X5      nU Vs/ s H  n[        Xd5      PM     nn U R                  XW5        M=     g s  snf ! [         a$  nUR                  R	                  SU 35        e S nAff = f)Nrd   )rM   rh   r&   ri   r9   )	r/   rj   rk   r?   r>   rp   rm   rr   rt   s	            r0   
mergeAttrsCOLRVariationMerger.mergeAttrsv  sp    DC&E69:cdgd)cF:  /	 : $ 4&z*s   AA
A6A11A6c                    U Vs/ s H  n[        XC5      PM     nnSnUR                  U5      n[        U[        5      (       a"  SnU Vs/ s H  oR	                  U5      PM     nnUS   n	[
        R                  n
[        U5      (       d  U R                  R                  U5      u  pU(       a  UR                  U	5      n	X4$ s  snf s  snf )NFTr   )rM   getConverterByNamer   r   toIntr   NO_VARIATION_INDEXr   r  r  fromInt)r/   rj   rk   r>   rm   r  is_fixed_size_floatconvr]   	baseValuer  s              r0   storeMastersForAttr'COLRVariationMerger.storeMastersForAttr  s    9<=,=
 $%%d+dN++"&4ABMqZZ]MMB!!$	&&&& $ 2 2 ? ? NIY/I  ' > Cs   C
Creturnc                    [        U5      nU R                  R                  U5      nUce  [        [	        U R
                  5      [	        U5      -
  S-   5       H4  nU R
                  XD[	        U5      -    U:X  d  M#  U=U R                  U'   n  O   Uc|  [        [	        U5      S-
  SS5       H_  nU R
                  U* S  US U :X  d  M  [	        U R
                  5      U-
  nX0R                  U'   U R
                  R                  XS  5          O   Uc?  [	        U R
                  5      =U R                  U'   nU R
                  R                  U5        U$ )Nr   r   r5  )tupler  rN   r  rx   r  rP  )r/   r  ro   varIndexBaser|   ns         r0   storeVariationIndices)COLRVariationMerger.storeVariationIndices  s9    Ho))--c23t}}-H=AB==X%678C=>>D&&s+l C
 3x=1,a4==!%"15#&t}}#5#9L.:&&s+MM(("6 5 585GGDs#lMM  *r3   c                     [         R                  n/ nU H4  nU R                  XU5      u  px[        XU5        UR	                  U5        M6     [        S U 5       5      (       a  U R                  U5      nU$ )Nc              3   F   #    U  H  o[         R                  :g  v   M     g 7fr+   )r   r(  r   s     r0   r^   9COLRVariationMerger.mergeVariableAttrs.<locals>.<genexpr>  s     <8aB)))8s   !)r   r(  r-  rO  r9   anyr4  )	r/   rj   rk   r?   r2  r  r>   r,  r  s	            r0   mergeVariableAttrs&COLRVariationMerger.mergeVariableAttrs  sp    ,,D $ 8 84 HICy)OOF# 
 <8<<<55h?Lr3   c                    [        USS S9 H  nUS   nUR                  n[        U5      R                  nU" 5       nUR                  R                  UR                  5        UR                  5         US   R                  nUR                  b$  U[        XsR                  5      UR                  '   M  [        XsR                  U5        M     g )NTc                 L    [        [        U S   R                  5      SS 5      S L$ )Nr5  VarType)rM   rE   rp   )paths    r0   r  ?COLRVariationMerger.convertSubTablesToVarType.<locals>.<lambda>  s     T"X^^,i>dJr3   )	skip_root	predicater5  )r   rp   rE   r>  rD   r   populateDefaultsr   rM   r  rO  )clsrq   r?  r  subTablevarTypenewSubTableparents           r0   convertSubTablesToVarType-COLRVariationMerger.convertSubTablesToVarType  s    "
D bBxxH8n,,G!)K  ''(9(9:((*"X^^Fxx#5@(25#
r3   c                    U R                   (       d  g[        5       n/ nU R                  R                   GHQ  nUR                  /nU(       d  M  UR                  5       nUR                  [        R                  R                  :X  a  MC  UR                  [        R                  R                  :X  a  [        [        XP5      5      n[        U5      nU Hd  n[        U5      U;   a'  [        R                   " U5      n[        U5      U;  d   eUR#                  U5        UR%                  [        U5      5        Mf     Xul        [        U5      Ul        OUR+                  U 5      nUR-                  [/        U5      5        U(       a  GM7  GMT     [        U5      [        U5      :X  d   eX R                   l        [        U5      U R                   l        g)a  Rebuild LayerList without PaintColrLayers reuse.

Each base paint graph is fully DFS-traversed (with exception of PaintColrGlyph
which are irrelevant for this); any layers referenced via PaintColrLayers are
collected into a new LayerList and duplicated when reuse is detected, to ensure
that all paints are distinct objects at the end of the process.
PaintColrLayers's FirstLayerIndex/NumLayers are updated so that no overlap
is left. Also, any consecutively nested PaintColrLayers are flattened.
The COLR table's LayerList is replaced with the new unique layers.
A side effect is also that any layer from the old LayerList which is not
referenced by any PaintColrLayers is dropped.
N)	LayerListr   BaseGlyphListBaseGlyphPaintRecordPaintr  r   r   PaintFormatPaintColrGlyphPaintColrLayersr   _flatten_layersrx   idr   r   r9   r  FirstLayerIndex	NumLayersgetChildrenrP  reversed
LayerCount)	colruniqueLayerIDsnewLayerListr   frontierpaintchildrenfirst_layer_indexlayers	            r0   r  )COLRVariationMerger.expandPaintColrLayers  s\    ~~%%::C		{H( <<2>>#@#@@\\R^^%C%CC  $OE$@AH(+L(9%!)e96$(MM%$8E#%e9N#BB#B$++E2&**2e95 "* ->)&)(mEO$006H 23) ( ;0 < C$7777+$'$5!r3   )r  r
  r	  r  r  r  Nr  ))r  )r8   r   r   r   r  r1   r   r  r   r#  r-  r   r4  r:  r   rJ  staticmethodr  r   r   r3   r0   r  r  &  sl    %$H 2@ <!, :S  6 6( ,6 ,6r3   r  c           
      .   UR                    Vs0 s H  o3R                  U_M     nnU VVs/ s H)  oUR                    Vs0 s H  o3R                  U_M     snPM+     nnn[        UR                  5       5       H9  u  px U R	                  XH   U V	s/ s H  oR                  U5      PM     sn	5        M;     SU l
        g s  snf s  snf s  snnf s  sn	f ! [         a8  n
U
R                  R                  SU S35        SU< 3U
R                  S'   e S n
A
ff = f)Nz.BaseGlyphPaintRecord[r  zbase glyph r  T)rO  	BaseGlyphry   r[   rh   rN   r&   ri   r9   causer  )rI   r/   rk   r   rj   rR   mastersr|   r   r]   rt   s              r0   r7   r7     s     *.)B)B
C)B#==#)BC
CORSs!.D.DE.Dss".DEsGS#((*%	sv''B'Qa''BC & "F DES
 (C 	GGNN3A3a89$/u"5AGGJ	sE   B=CCC>CC*CCC
D3DDc                     U R                   (       d   S5       e[        U R                  5      Ul        U R                  Ul        g )Nz-BaseGlyphList must be merged before LayerList)r  rx   r	  rZ  rP  r   s      r0   r7   r7     s4     !!R#RR!&--(DODJr3   c              #     #    U R                   [        R                  R                  :X  d   eU R	                  U5       HD  nUR                   [        R                  R                  :X  a  [        X!5       S h  vN   M@  Uv   MF     g  N7fr+   )r   r   rQ  rS  rX  rT  )rootr[  r_  s      r0   rT  rT  !  sb     ;;"..88888!!$'<<2>>999&u333K	 (3s   A5B	7B8B	c           
      v  ^ ^	 [        [        UT R                  S   R                  5      5      n[	        T R
                  5      [	        U5      :X  d   e[        [	        U5      5       Vs/ s H4  n[        [        X$   T R
                  U   S   R                  5      5      PM6     nn T R                  X55        T R                  b  T R                  R                  U5      n[	        U5      [        :  n[        U[        S9nU	U 4S jm	U Vs/ s H  nT	" U5      PM     nn[	        U5      S:X  aT  US   R                  [         R"                  R$                  :X  a)  US   R&                  Ul        US   R(                  Ul        g [	        U5      Ul        [	        T R*                  5      Ul        T R*                  R-                  U5        T R                  b.  U(       d&  T R                  R/                  X1R(                  5        g g g s  snf ! [         a!  nUR                  R                  S5        e S nAff = fs  snf )Nr  z.Layers)r3  c                   > [        U [        5      (       a  U  Vs/ s H  nT" U5      PM     nn[        R                  " 5       n [	        [        R
                  R                  5      U l        [        U5      U l	        [        TR                  5      U l        TR                  R                  U5        TR                  b%  TR                  R                  X R                  5        U $ s  snf r+   )r   r   r   rP  r   rQ  rS  r   rx   rW  r	  rV  rP  r
  r  )r_  r   r	  listToColrLayersr/   s      r0   rn  0_merge_PaintColrLayers.<locals>.listToColrLayersM  s    eT""3895a&q)5F9HHJEr~~==>EL!&kEO$'$4E!KKv&##/$$((1F1FG :s   C%r   r   )r   rT  r-   rq   rx   r.   r  r}   r&   ri   r9   r
  	try_reuser   r   r   r   rQ  rS  rW  rV  r	  rP  r  )
r/   rj   rk   
out_layersr|   master_layersesrt   is_treer   rn  s
   `        @r0   _merge_PaintColrLayersrt  *  s    oc499V+<+B+BCDJ tyy>SX%%% s3x A 	_SVTYYq\&%9%?%?@A   

4 '))33J?
 *o ::G!*0JKJ
 0::z!"1%zJ:
:!
1 4 48V8V V
 #1//(m;;J!$++.:& +G  $$Z1D1DE 5<+o   	
y!	> ;s$   );H'H H6
H3H..H3c                   ^ ^
 T R                  XS 5      nU[        R                  R                  L a  [	        T X5        g UR                  5       nSm
Ub   [        R                  " [        U5      U5      m
U
4S jUR                  5        5       nT R                  XU5        T R                  XT
5      nUR                  5        Vs/ s H  owR                  PM     nnU[        R                  :g  =(       d    [        U 4S jU 5       5      n	U	(       a;  T
(       a  Xal        U(       a  T R#                  U5        Uc   e[%        U5      Ul        g g s  snf )Nc                 ,    U R                  5       (       + $ r+   )is_variable)r  s    r0   r  merge.<locals>.<lambda>p  s    COO<M8Mr3   r   c              3   ^   >#    U  H"  oR                   T;  d  M  UR                   v   M$     g 7fr+   r  r\   rt  varAttrss     r0   r^   r   {  "     R#7a66;Q6166#7   --c              3   T   >#    U  H  n[        U5      TR                  ;   v   M     g 7fr+   rU  r  )r\   rq   rI   s     r0   r^   r     s#      >5>E5	V'''Y   %()r  r   rQ  rS  rt  as_variabler
   getVariableAttrsrE   getConvertersr#  r:  iterSubTablesrp   r(  r9  VarIndexBaserJ  r   r   )rI   r/   rk   r  	varFormatstaticAttrsr2  r  	subTables
isVariabler|  s   `         @r0   r7   r7   n  s%   

 
 ,M
NC
bnn,,,vt1!IH**4:yAR4#5#5#7RK
d-,,TAL$($6$6$89$8b$8I9 !6!66 # >5>> ;J  !-,,T2$$$)n  :s   Ec                 V  ^ [        U5      R                  n[        R                  " U5      mU4S jUR	                  5        5       nU R                  XU5        U R                  XT5      nU[        R                  :w  a+  XQl	        U R                  R                  [        U5      5        g g )Nc              3   ^   >#    U  H"  oR                   T;  d  M  UR                   v   M$     g 7fr+   rz  r{  s     r0   r^   r     r}  r~  )rE   r>  r
   r  r  r#  r:  r   r(  r  r  r  rU  )rI   r/   rk   rG  r  r2  r|  s         @r0   r7   r7     s    4j  G&&w/HR4#5#5#7RK
d-,,TALr,,,(r$x( -r3   c                   ^  T R                  XS UR                  5        5       5        [        U 4S jUR                   5       5      (       a6  T R	                  U5        T R
                  R                  [        U5      5        g g )Nc              3   8   #    U  H  oR                   v   M     g 7fr+   rz  rs  s     r0   r^   r     s     !G2FQ&&2FrE  c              3   T   >#    U  H  n[        U5      TR                  ;   v   M     g 7fr+   r  )r\   stoprI   s     r0   r^   r     s      
End2d8v)))nr  )r#  r  r9  	ColorStoprJ  r  r  rU  r   s   `  r0   r7   r7     sc    
d!G$2D2D2F!GH

Ednn
EEE((.r$x( Fr3   clipsc                 &    U R                  X5        g r+   )r   r   s      r0   r7   r7     s     4%r3   r   r+   )F)rQ  rR  )kr  osr   rF   operatorr   loggingfontTools.colorLib.builderr   r   fontTools.miscr   fontTools.misc.roundToolsr   fontTools.misc.treeToolsr   fontTools.ttLib.tablesr	   r   r
   #fontTools.ttLib.tables.otConvertersr   !fontTools.ttLib.tables.otTraverser   #fontTools.ttLib.tables.DefaultTabler   fontTools.varLibr   r   r   fontTools.varLib.modelsr   r   r   r   r   fontTools.varLib.varStorer   	functoolsr   fontTools.otlLib.builderr   fontTools.otlLib.optimize.gposr   r   	getLoggerr  errorsr   r   r   r   r    r!   r"   r#   r$   r%   r&   objectr(   r   rI   GDEFr7   r   r   r   rH  r   r   r   r   r  r  r  r3  r6  r   r`  MarkBasePosMarkMarkPosrl  rn  ry  r{  r  
CursivePosr  Lookupr  
CaretValuer  r  r  	BaseCoordr  rN  rM  rT  rt  rP  ClipBox	Affine2x3r  	ColorLineClipListr   r3   r0   <module>r     s   
     R ( - 5 1 3 > < < 6 6 S S 7  3
 12   rV rp	V 	 rww0# 1#2"J v))*# +# ryy!# "#$6 r||$: %:z rzz"24 #24j,B86K\&3R rzz"( #(VS)l r~~&T 'T r~~&T 'T22<*0 r}}%4 &4. r))*# +# ryy!a  "a R>n > & ' 		" # **+' ,'2	1N 	1 bmm$ %* bii  !: f(()< *<>%!n %!P2 %' &' &' '' 		") #) **+6 ,6 \6/ \6~ B,,-" ."" BLL) *AFH RXXrzz23%% 4%%P R\\2<<89) :)  BLL)) *) BKK1& 2&r3   