
    jke                     	   d Z ddlZddlZddlZddlmZ ddlZddlmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZ ddlmZm Z m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z,  ejZ                  d      Z.ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:  G d de;      Z< G d de<      Z=e=j}                  ej~                  d      d        Z@d ZAdQdZBe=j}                  ej                        d        Z@e=j}                  ej                        d        Z@d  ZEd! ZFe=j}                  ej                        d"        Z@e=j}                  ej                        d#        Z@d$ ZIdRd%ZJdRd&ZKdSd'ZLd( ZMe=j}                  ej                        d)        Z@dTd*ZOe=j}                  ej                        d+        Z@e=j}                  ej                        d,        Z@d- ZRd. ZSd/ ZTd0 ZUd1 ZVe=j}                  ej                        d2        Z@e=j}                  ej                        d3        Z@e=j}                  ej                        d4        Z@ G d5 d6e=      ZZeZj}                  ej                        d7        Z@eZj}                  ej                        d8        Z@eZj}                  ej                        d9        Z@ G d: d;e=      Z\e\j}                  ej                        d<        Z@e\j}                  ej                        d=        Z@e\j}                  ej                        d>        Z@ G d? d@e=      Z]dA Z^e]j}                  ej                        dB        Z@e]j}                  ej                        dC        Z@e]j}                  ej                        dD        Z@e]j}                  ej                        dE        Z@ G dF dGe]      Z`e`j}                  ej                        dH        Z@e`j}                  ej                        dI        Z@dJ ZcdK Zde`j}                  ej                  ej                  f      dL        Z@e`j}                  ej                  ej                  f      dM        Z@e`j}                  ej                        dN        Z@e`j}                  ej                  dO      dP        Z@y)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                   T    e Zd ZddZed
d       Zei fd       ZddZd Zd Z	d	 Z
y)MergerNc                      || _         d | _        y N)fontttfs)selfr+   s     9/usr/lib/python3/dist-packages/fontTools/varLib/merger.py__init__zMerger.__init__.   s    		    r*   c                       t         k7  sJ d       d j                  vri  _        t              t        t        j
                  fv rft              t        k(  rf fd}|S )NzSubclass Merger instead.mergersc                     | j                   dk(  sJ g }D ]\  }||v r|j                  |       j                  j                  |i       }D ]#  }||vsJ d|j                   d|d       | ||<   % ^ y )NmergezOops, class 'z' has merge function for 'z' defined already.)__name__appendr2   
setdefault)methoddoneclazzr2   attrattrscelfclazzess        r.   wrapperzMerger.merger.<locals>.wrapper=   s    ??g---D  
+D=E",,11%<! +Dw.  >>41. %+GDM+
+ r0   )r(   __dict__r2   typeenumEnumMetastr)r=   r>   r<   r?   s   ``` r.   mergerzMerger.merger3   sc    v~999~DMM)DL=T4==11jG;#HE	  r0   c                     t        |      }| j                         D ]6  } t        | dd       }| |S | j                  j	                  |d       }|4|c S  |S )Nr2   )rA   mrogetattrr2   get)r=   thing_defaulttypr2   ms         r.   
mergersForzMerger.mergersForO   sf    5kHHJ 	DdIt4G 	   d+A}	 r0   c                    t        |d      r|j                  d       |D ]!  }t        |d      s|j                  d       # t        t        |      j	                               t        fd|D              s<t        | |D cg c]$  }t        t        |      j	                               & c}      | j                  |      }|j                  d| j                  j                        }	 D ]H  }||v rt        ||      }	|D 
cg c]  }
t        |
|       }}
|j                  ||      } || |	|       J y c c}w c c}
w # t        $ r$}|j                  j                  dz           d }~ww xY w)NensureDecompiledF)recursec              3   h   K   | ])  }t        t        |      j                               k(   + y wr*   )sortedvarskeys).0vrU   s     r.   	<genexpr>z&Merger.mergeObjects.<locals>.<genexpr>e   s%     ?a46$q',,.11?s   /2expectedgot*.)hasattrrP   rS   rT   rU   allr!   rN   rI   	__class__mergeThingsrH   r&   stackr6   )r-   outlstexcludeitemrW   r2   defaultMergerkeyvaluetablevalues
mergerFuncerU   s                 @r.   mergeObjectszMerger.mergeObjects^   s\   3*+   / 	5Dt/0%%e%4	5 d3inn&'?3??t#)NQ&a*@)N  //#&C)C)CD
	 0'>S);>?%'%-??$[[m<
4/0 *O @   	GGNN39%	s0   )D>0E 
E E E 	E5E00E5c           
      ^   t        ||t              s.t        | t        |      |D cg c]  }t        |       c}      t        t	        |t	        |             D ]  \  }\  }}	 | j                  ||        y c c}w # t        $ r$}|j                  j                  d|z          d }~ww xY w)NrY   z[%d])	r   lenr    	enumeratezipra   r&   rb   r6   )r-   rc   rd   xiri   rk   rm   s           r.   
mergeListszMerger.mergeListsw   s    #sC(s3xc=Rc!f=RSS"+CS#Y,?"@ 	Av  /	 >S $ vz*s   A:%A??	B,B''B,c           
      2   t        ||t              sBt        | t        |      j                  |D cg c]  }t        |      j                   c}      | j	                  |      j                  d d       }| || ||       y t        |t        j                        rt        ||      st        | ||      y t        |d      r| j                  ||       y t        |t              r| j                  ||       y t        ||      st        | ||      y c c}w )NrY   r@   )r   rA   r   r5   rN   rI   
isinstancerB   Enumr   r^   rn   listru   )r-   rc   rd   rs   rl   s        r.   ra   zMerger.mergeThings   s    #sD)!tCy11RU7VQQ8H8H7V  __S)--dD9
!tS#&TYY' c3'&tcsCC (S*%c3'T"OOC%c3'&tcsCC ( 8Ws   Dc           
          |D ]A  }||vr	 || _         | j                  ||   |D cg c]  }|j                  |       c}       C y c c}w # t        $ r!}|j                  j                  |        d }~ww xY wr*   )r,   ra   rI   r&   rb   r6   )r-   r+   master_ttfs	tableTagstagrM   rm   s          r.   mergeTableszMerger.mergeTables   sw     	C$'	  c,MAQUU3Z,MN	
 -N# s#s'   AAAA	A7A22A7)r*   ) )r5   
__module____qualname__r/   classmethodrE   rN   rn   ru   ra   r~   r   r0   r.   r(   r(   -   sG    
  6 )+  2D*	r0   r(   c                       e Zd Zy)AligningMergerN)r5   r   r   r   r0   r.   r   r      s    r0   r   GlyphClassDefc                    |t        |      st        | d |      y |D cg c]  }|j                   }}i |_        |j                  }t               } |j                  |D cg c]  }|j                          c}  |D ]G  t        fd|D              }t        |      st        | |d   |dz   g      |sd |<   @|d   |<   I y c c}w c c}w )NrY   c              3   @   K   | ]  }|j                          y wr*   )rI   )rV   lks     r.   rX   zmerge.<locals>.<genexpr>   s     2AEE!H2s   r   r]   )rZ   r[   rb   )	r   r   	classDefssetupdaterU   r   r   r   )rE   r-   rd   r   allKeys	allValuesr   s         @r.   r4   r4      s    |s|6Dc:: #
$11;;
$C
$DN>>DeGGNNs+!QVVX+, 	#2c22		""13sQwi  DGlDG	# % ,s   C$Cc                 F   | j                   dk(  r| S t        j                         }d|_         | j                  |_        | j                  |_        |j                  j
                  D cg c]  }| j                   c}|_        t        |j                        |_        |S c c}w )N   )	Formatot	SinglePosCoverageValueFormatglyphsValuerp   
ValueCount)r-   ret_s      r.   _SinglePosUpgradeToFormat2r      sv    {{a
,,.CCJ==CL&&CO%(\\%8%899CI^CNJ :s   'Bc                    ||D cg c]  }t        |       }}n@t        ||      D cg c]%  \  }}t        ||      D ci c]  \  }}||
 c}}' }}}}}t               }	 |	j                  |  | j                         j                  t        |	      }
t        fd|D              s
t               ~	d}|)|D cg c]  }|
D cg c]
  }||v r|n| c} }}}|
|fS t        |      t        |      k(  sJ |D cg c]  }|
D cg c]  }||v r||   n| c} }}}|
|fS c c}w c c}}w c c}}}}w c c}w c c}}w c c}w c c}}w )aT  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rh   c              3   >   K   | ]  }t        |       |k(    yw)r   N)rS   )rV   vssortKeys     r.   rX   z%_merge_GlyphOrders.<locals>.<genexpr>   s     ;vbg&",;s   )	r   rr   r   getReverseGlyphMap__getitem__rS   r_   r"   rp   )r+   rd   
values_lstdefaultr   	dict_setsr   grW   combinedorderpaddedValuesdict_setglyphpaddedr   s                  @r.   _merge_GlyphOrdersr      s{    %()SV)	)@CC@TUUuq"s1bz2tq!ad2U	UuHHOOY%%'33G8)E;s;;$&&L &
 CHHex'UW4H
 
 &= 3x3z?*** &
 MRR5 1Xe_w>R
 
 &=3 *2U I
 S
sL   D.D9
D3D9
	EEE	EE"E3D9
EEc                 l    |d   j                   j                         |_         | j                  ||       y Nr   r@   copyrn   rE   r-   rd   s      r.   r4   r4      ,     FOO((*DM
c"r0   c                 l    |d   j                   j                         |_         | j                  ||       y r   r   r   s      r.   r4   r4      r   r0   c                 p   |D ]  }|@t        |      t        j                  k7  s$|j                  ||j                  j                  vrF|j
                  dk(  r|j                  c S |j
                  dk(  r4|j                  |j                  j                  j                  |         c S t        | d       y )Nr   r   single positioning lookupsubtable)	rA   r   r   r   r   r   r   indexr%   )rE   	subtablesr   r-   s       r.   %_Lookup_SinglePos_get_effective_valuer     s     RLDzR\\)}}$DMM000;;!::[[A::dmm2288?@@#F5PQQR r0   c                 x   |D ]4  }|@t        |      t        j                  k7  s$|j                  ||j                  j                  vrG|j
                  dk(  r[|j                  |j                  j                  j                  |         }|j                  }|D ]  }|j                  |k(  s|c c S  |j
                  dk(  rj|j                  j                  j                  |d      }|j                  j                  j                  |d      }	|j                  |   j                  |	   c S t!        | d       y )Nr   r   r   pair positioning lookupr   )rA   r   PairPosr   r   r   PairSetr   PairValueRecordSecondGlyph	ClassDef1r   rI   	ClassDef2Class1RecordClass2Recordr%   )
rE   r   
firstGlyphsecondGlyphr-   pspvrrecklass1klass2s
             r.   (_Lookup_PairPos_get_effective_value_pairr     s     P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)P* r0   c                    t        t        j                  |D cg c]  }|j                   c}d      x|_        }t	        |      dk(  s|dz  dk(  st        | d      |j                  j                  t        d |D              rt        fd|D              rt        j                  ||j                        |_        |dk7  rT| j                  |j                  |D cg c].  }|j                  |j                  nt        j                         0 c}       |j                  j                         |_        y d|_        |D cg c]  }t        |       }}t!        | j"                  |D cg c]  }|j                  j                   c}|D cg c]  }|j                   c}      \  }}||j                  _        |D cg c]  }t        j                  |       c}|_        t	        |j                        |_        t'        |      D ]T  \  }	}
t'        |      D ]A  \  }}|
|   t)        | | j*                  |	   |      }|t        j                  |      }||
|<   C V | j-                  |j                  |       | j/                  ||d	
       t        t        j                  |j                  D cg c]  }|j1                          c}d      |_        y c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nr   r   ir   r   c              3   :   K   | ]  }|j                   d k(    yw)r   Nr   rV   rW   s     r.   rX   zmerge.<locals>.<genexpr>;  s     
&Q188q=
&s   c              3   P   K   | ]  }|j                   j                  k(    y wr*   )r   r   )rV   rW   coverageGlyphss     r.   rX   zmerge.<locals>.<genexpr>;  s%      /01!**+++/s   #&r   )r   r   r   r   r   re   )r   int__or__r   rp   r%   r   r   r_   r
   ValueRecordr   ra   	getFormatr   r   r   r+   r   rq   r   lookup_subtablesru   rn   getEffectiveFormat)rE   r-   rd   r   valueFormatrW   r   r   r   rt   rk   jr   r   s                @r.   r4   r4   3  s   %+CJJPS8T18TVW%XXD{HMkD0A51LMM ]]))N

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

SVWaAGG/V5G5G5IIW  :://1 DK25
6Q%a(
6C
6 (5Aajj''57MA7MNFF "DMM;ABa&$$[1BDJ$**oDOv& 	6!&) 	HAuay$
 6//2EA y&&{3F1I	 djj&) cW   

TZZ@Q))+@!Do 9U  X 7 67M C2 As)   K
3K
K",K'
K,K13K6
c                    t        | j                  |D cg c]&  }|j                  D cg c]  }|j                   c}( c}}|D cg c]  }|j                   c}      \  }}g x|_        }|D ]  }t	        j                         }	||	_        | j
                  rt        j                  | j
                        nd |	_        | j                  rt        j                  | j                        nd |	_
        |j                  |	        t        |j                        |_        t        |      D ]  \  }
}t        |      D ]  \  }}t	        j                         }||_        ||   ||   }n%t        | | j                   |
   |j"                  |      }|d\  }}nt%        |dd       }t%        |dd       }| j
                  r!t        j                  | j
                  |      nd |_        | j                  r!t        j                  | j                  |      nd |_
        |||<     |`| j'                  |j                  |       y c c}w c c}}w c c}w )NNNValue1Value2)src)r   r+   r   r   r   valueFormat1r
   r   r   valueFormat2r   r6   rp   PairValueCountrq   r   r   _firstGlyphrH   ru   )rE   r-   rd   r   rW   r   r   pvrsr   r   rt   rk   r   vpairv1v2s                   r.   r4   r4   q  s+    (?BC!3!3	4A!--	4C&)*		*NFF #%$D4 	  "7=7J7JFv223PT 	
 8>7J7JFv223PT 	
 	C	 d223Dv& 	6!&) 	HAu""$A!AMay$q	@F33A68H8H% }#BUHd3UHd3 && ""6#6#6B? H && ""6#6#6B? H
 F1I3	6 	
d**F3] 
5C*s   IH>II	>Ic                    t        |D cg c]  }|j                  s|j                  dk(    c}      sJ d       |j                  | |d       t	        j                         }g |_        d|_        t        |j                  |D cg c]  }|j                  j                   c}|D cg c]  }|j                   c}|      \  }}|| j                  _
        |D cg c]  }t	        j                          c}| _        t        | j                        | _        t        || j                        D ]  \  }	}
|	|
_         |j                  | j                  |       y c c}w c c}w c c}w c c}w )Nr   Report bug against fonttools.)r   r   PairSetCountValueFormat1ValueFormat2r   r   )r   r   r   rn   r   r   r   r   r+   r   r   rp   r   rr   r   ru   )r-   rd   rE   r   emptyrW   r   r   r   r   r   s              r.   _PairPosFormat1_merger     s<   &)7QYY1	7 '&' 
 W   JJLEEE ($'(q		( q 	NFF "DMM*01QBJJL1DLDLL)D. 	r dllF+9 	8" 	) 
 2s   EEE 
(E%E*c                    t        | t              r| }n| r| j                  r| j                  ni }|rt        |j	                               nd}g }t        |dz         D ]  }|j                  t                       |j                         D ]  \  }}||   j                  |        |d |d<   |S t        |      x|d<   }|dd  D ]$  }	|	j                  |       |j                  |	       & |S )Nr   r   )rw   dictr   maxrk   ranger6   r   itemsaddintersection_updatedifference_update)
r-   	allGlyphsr   rM   r   r   r   rW   class0ss
             r.   _ClassDef_invertr     s    $	&*t~~DNN2	#,I!A
C1q5\ 

35 ! 1A

1 A J i.(AQR 	(A!!&)$$Q'	( Jr0   c                    t        j                         }i x|_        }|d u }|rd gt        |       z  }t	        j
                         }t        | |      D ])  \  }}t        ||      }||dd  }|j                  |       + |j                         }	|r|	j                  dt                      t        |	      D ]  \  }
}|
dk(  r|D ]  }|
||<   	  ||	fS )Nr   r   )r   ClassDefr   rp   r   
Classifierrr   r   r   
getClassesinsertr   rq   )rd   allGlyphsesr-   r   allGlyphsesWasNone
classifierclassDefr   setsclassesrt   classSetr   s                r.   _ClassDef_merge_classifyr
    s    ;;=D!##DNY$,fs3x'))+J"34  ))48D$	 
 ##%Gq#%  ) 86 	AIaL	 =r0   c                 H   |D cg c]  }|j                    }}t        |D cg c]  }|j                   c}|D cg c]  }|j                  j                   c}      \  | _        }t        |      | _        g }t        ||      D ]e  \  }}d }	t        |j                  j                        }
|j                  j                  }g }|D ]  }t        t        |            }||
vrd }	|	t        j                          }	g x}|	_        t        |j                        D ]  }|rd }nxt        j                         }| j                   rt#        j$                  | j                         nd |_        | j(                  rt#        j$                  | j(                        nd |_        |j-                  |        |	}n|j/                  |d      }||   }|j-                  |        |j-                  |       h |}~t        |D cg c]  }|j0                   c}      \  | _        }t        |      | _        g }t        ||      D ]  \  }}|j0                  j                  }g }|D ]  }|j                  }t        j                          }g x}|_        |D ]Y  }|s|d   }n+t        t        |            }|j/                  |d      }||   }|j-                  t3        j4                  |             [ |j-                  |        |j-                  |        |}~|S c c}w c c}w c c}w c c}w r   )r   r
  r   r   r   rp   Class1Countrr   r   r   nextiterr   r   r   Class2Countr   r
   r   r   r   r   r6   rI   r   r   deepcopy)r-   rd   r+   transparentr   matricesr  new_matricesmatrixnullRowcoverage	classDef1class1Recordsr	  exemplarGlyphclass2recordsr   rec2rec1klass	classDef2rec1oldoldClass2Recordsrec1newclass2Recordss                            r.   _PairPosFormat2_align_matricesr#    s   (+,1,H, 7!""$D1QZZ%6%6$DDNG 7|DLh' &+	6qzz(()KK))	  	'H h0MH,
 ? oo/G;==MG$8"1==1 3&#'D#%??#4D $(#4#4 !' 2 243D3D E%) !K $(#4#4 !' 2 243D3D E%) !K
 &,,T23  !mQ7e}  &A 	'B 	M*M&+N H 7S7Q7QRDNG7|DLh' +	6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LL
;Lc                 \   t        |D cg c]  }|j                  s|j                  dk(    c}      sJ d       |j                  | |d       t	        |j
                  |D cg c]  }|j                  j                   c}      \  }}|| j                  _        t        ||j                        D ])  \  }}|j                  j                  |k7  s ||d   k(  r)J  t        | ||j
                        }t        |d         | _        |j                  | j                  |       y c c}w c c}w )Nr   r   )r   r   r  r   r  r   r   r   r   )r   r   r   rn   r   r+   r   r   rr   r   r#  ry   ru   )	r-   rd   rE   r   rW   r   r   r   r  s	            r.   _PairPosFormat2_merger&  M  s   &)<Q^^1	< '&'  	
    #6;;C0Pq1B1B0PQIFA!DMM C!8!89 &9::&	"%%%& .dCEHXa[)D
d''2I 	=& 1Qs   D$D$#D)
c                    t        t        j                  |D cg c]  }|j                   c}d      x| _        |_        t        t        j                  |D cg c]  }|j
                   c}d      x| _        |_        |j                  dk(  rt        |||        n*|j                  dk(  rt        |||        nt        | d      | `| `d}d}|j                  dk(  rh|j                  D ]X  }|j                  D ]G  }t        |dd       }|||j                         z  }t        |dd       }	|	5||	j                         z  }I Z nv|j                  dk(  rg|j                  D ]X  }
|
j                   D ]G  }t        |dd       }|||j                         z  }t        |dd       }	|	5||	j                         z  }I Z ||_        ||_        y c c}w c c}w )Nr   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r&  r%   r   r   rH   r   r   r   )rE   r-   rd   r   vf1vf2pairSetpairValueRecordpv1pv2class1Recordclass2Records               r.   r4   r4   v  s   .4

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

S1Q^^11/ F$+ {{adC0		dC01JKKV0 C
C{{a|| 	+G#*#:#: +ox>?3==?*Cox>?3==?*C+	+ 
	 -- 	+L , 9 9 +lHd;?3==?*ClHd;?3==?*C+	+ DDM 2 2s   G

G
c                 Z   t        d |D              | _        t        |j                  |D cg c]  }t	        ||dz         j
                   c}|D cg c]  }t	        ||dz         j                   c}      \  }}|t	        | |dz         _        t        |j                  |D cg c]  }t	        ||dz         j
                   c}|D cg c]  }t	        t	        ||dz         |dz           c}      \  }}	|t	        | |dz         _        g }
t        |t        |       D ]  \  }}|D cg c]  }||j                   }}t        |      st        ||d   |      t        j                         }|d   |_        |D cg c]  }|d n|j                   }}t        |      rd }n-t        j                         }d|_        |j!                  ||       ||_        |
j#                  |        t        j$                         }|
|_        t'        |
      |_        t+        | |dz   |       g }
t        |t        |	       D ]  \  }}t        |      rd }n t	        t        |dz                }g }t+        ||dz   |       |D cg c]  }|g nt	        ||dz          }}|D ]-  }|j-                  d g| j                  t'        |      z
  z         / t        | D ]N  }t        |      rd }n-t        j                         }d|_        |j!                  ||       |j#                  |       P |
j#                  |         t	        t        |dz                }t+        ||dz   |
       t+        ||d	z   t'        |
             t+        | |dz   |       y c c}w c c}w c c}w c c}w c c}w c c}w c c}w )
Nc              3   4   K   | ]  }|j                     y wr*   )
ClassCountrV   r   s     r.   rX   z,_MarkBasePosFormat1_merge.<locals>.<genexpr>  s     41!,,4   r   ArrayRecordr   rY   r   AnchorCount)r   r2  r   r+   rH   r   
MarkRecordrr   Classr   r   r   
MarkAnchorr   r7  r   ra   r6   	MarkArrayrp   	MarkCountsetattrextend)r-   rd   rE   MarkBaser   MarkCoverageGlyphsMarkRecordsBaseCoverageGlyphsBaseRecordsrecordsr   glyphRecordsr
allClassesr   
allAnchorsanchorarrayanchorsglyphAnchorss                        r.   _MarkBasePosFormat1_mergerO    s   444DO&87:;!D:%	&	-	-;8;<1D7N	#	.	.<'#
 /AGD$#$+&87:;!D:%	&	-	-;GJK!D7N+TH_	=K'#
 /AGD$#$+ G133DE  <'3E!q}aggE
E$ 
#"6JqMzRR--/C"1CIGST!!)$=TJTz" !""6:6#CNsA B LLNEE'lEOD$.%( G133DE << C.'"dXo.0CGC'2JVEFaiWQx%@@L  " >$4??SV#;<=>!<0 '
:&!FYY[F$%FM&&vz:v&' 	s)* (GBw')EE4(?G,E4'>3w<0D$.%(] 	<< 	<K F. U.s/    N

 N$ N

#N)N1N?N#>N(c           	          t        |j                  d |D              s1t        | d|j                  |D cg c]  }|j                   c}      |j                  dk(  rt        |||        y t	        | d      c c}w )Nc              3   4   K   | ]  }|j                     y wr*   r   r3  s     r.   rX   zmerge.<locals>.<genexpr>       #:AHH#:r4  zmark-to-base positioning lookupr   rZ   r[   r   r   r   r   r$   rO  r%   rE   r-   rd   r   s       r.   r4   r4     so    dkk#:c#:;!6[[#&'a'	
 	
 {{a!$V41RSS (s   A9c           	          t        |j                  d |D              s1t        | d|j                  |D cg c]  }|j                   c}      |j                  dk(  rt        ||| dd       y t	        | d      c c}w )Nc              3   4   K   | ]  }|j                     y wr*   r   r3  s     r.   rX   zmerge.<locals>.<genexpr>	  rR  r4  zmark-to-mark positioning lookuprS  r   Mark1Mark2r   rT  rU  s       r.   r4   r4     ss    dkk#:c#:;!6[[#&'a'	
 	
 {{a!$VWgF1RSS (s   A;c                    t        j                         }t        j                         |_        t        || D cg c]&  }|j                  D cg c]  }|j
                   c}( c}}| D cg c]  }|j                   c}      \  }}||j                  _        g x|_        }t        | D ]  }|D ]  }||j                  |         J  t        |j                        |_
        |S c c}w c c}}w c c}w r*   )r   r   r   r   r   r   r   rr   r6   rp   r   )	rd   r+   r-   r   rW   r   r   r   rk   s	            r.   _PairSet_flattenr[    s    ::<DKKMDM (?BC!3!3	4A!--	4C&)*		*NFF "DMM"$$D4v,  	A}A	
 5 d223DK 
5C*s   C-C(C-+C3(C-c           
      d   t        | D cg c]  }|j                  s|j                  dk(    c}      sJ d       t        j                         }d|_        t        j                         |_        t        t        j                  | D cg c]  }|j                   c}d      |_
        t        t        j                  | D cg c]  }|j                   c}d      |_        t        || D cg c]  }|j                  j                   c}| D cg c]  }|j                   c}      \  }}||j                  _        t        | D cg c]  }t        |D cg c]  }||	 c}|      ! c}}|_        t        |j                        |_        |S c c}w c c}w c c}w c c}w c c}w c c}w c c}}w )Nr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r[  rp   r   )rd   r+   r   r-   rW   r   r   rk   s           r.   (_Lookup_PairPosFormat1_subtables_flattenr]  /  sY   &)7QYY1	7 '&'  ::<DDKKKMDMszzC+HqANN+H!LDszzC+HqANN+H!LD (#.Qqzz  .C0Hq0HNFF "DMM 6l 	V=q}!=tDDL DLL)DK) 	8 ,I+H /0H
 >s@   FFF
?F
)F
F"F,F'F'
F,'F,c                    t        | D cg c]  }|j                  s|j                  dk(    c}      sJ d       t        j                         }d|_        t        j                         |_        t        t        j                  | D cg c]  }|j                   c}d      |_
        t        t        j                  | D cg c]  }|j                   c}d      |_        t        || D cg c]  }|j                  j                   c}      \  }}||j                  _        t        || |d      }g x}|_        t        | D ]  }	t        j                         }
|j                  |
       g |
_        |
j                   }
t        t#        d |	D               D ].  }t%        t'        d |D                    }|
j                  |       0  |S c c}w c c}w c c}w c c}w )Nr   r   r   T)r  c              3   4   K   | ]  }|j                     y wr*   )r   )rV   rH  s     r.   rX   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>_  s     ;ann;r4  c              3   &   K   | ]	  }||  y wr*   r   rV   cs     r.   rX   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>`  s     =!q}A=s   )r   r   r   r   r   r   r   r   r   r   r   r   r   r#  rr   r6   r   ry   r  r  )rd   r+   r   r-   rW   r   r   r  r  rowsrowcolscols                r.   (_Lookup_PairPosFormat2_subtables_flattenrg  H  s   &)<Q^^1	< '&'  ::<DDKKKMDMszzC+HqANN+H!LDszzC+HqANN+H!LD #4S)I!***;*;)IJIFA!DMM-dC4PH!##FTX ooc;d;;< 	Dt=t==>CJJsO	 K3 	= ,I+H *Js   G	G	G
?G
)G
c                 x   t        |       } t        |       }d}||k  r/| |   j                  dk(  r|dz  }||k  r| |   j                  dk(  rt        | d| |      g| d| t        |       }|}|dkD  r5| |dz
     j                  dk(  r |dz  }|dkD  r| |dz
     j                  dk(  r t	        | |d |      g| |d | S )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   )ry   rp   r   r]  rg  )rd   r+   r   rt   s       r.   &_Lookup_PairPos_subtables_canonicalizeri  f  s     s)CCA	A
a%CFMMQ&	Q a%CFMMQ&7BQFGCGCA	A
a%CAJ%%*	Q a%CAJ%%*7ABFGCGJr0   c                    t        || D cg c]  }|j                  j                   c}d       \  }}t        |      }t	        j
                         }d|_        ||_        t	        j                         |_        ||j                  _        ||_        d g|z  |_	        | D ]  }|j                  dk(  r[|j                  }	|j                  j                  D ]5  }
|j                  |
      }t        j                  |	      |j                  |<   7 m|j                  dk(  s}t        |j                  j                        D ]G  \  }}
|j                  |   }	|j                  |
      }t        j                  |	      |j                  |<   I  |gS c c}w )Nr   r   )r   r   r   rp   r   r   r   r   r   r   r   r   r  rq   )rd   r+   min_inclusive_rec_formatrW   r   r   
num_glyphsnew	singlePosval_recgnamert   r   s                r.   #_Lookup_SinglePos_subtables_flattenrq  {  sS   "4S)I!***;*;)I4PIFAVJ
,,.CCJ.CO;;=CL CLLCN#CI 
6	q ooG"++22 6LL'#}}W5		!6 "%i&8&8&?&?@ 65#//!,LL'#}}W5		!6
6 5L) *Js   F	
c                    t        | j                  |D cg c]  }|j                  j                   c}|D cg c]  }|j                   c}      \  }}d|_        t        j                         |_        ||j                  _        g |_        |D ]  }t        j                         }t        j                         |_        d|j                  _        t        j                         |_	        d|j                  _        |j                  j                  |        | j                  |j                  |       t        |j                        |_        y c c}w c c}w Nr   )r   r+   r   r   EntryExitRecordr   r   r7  EntryAnchor
ExitAnchorr6   ru   rp   EntryExitCount)rE   r-   rd   r   r   r   r   r   s           r.   r4   r4     s    ($'(q		($'(q		(NFF DKKKMDM!DMMD )  "))+!" !##C() d**F3d223D! 	)(s
   E
Ec                     t        d |D              rd |_        t        d |D              rd |_        | j                  ||       y )Nc              3   8   K   | ]  }|j                   d u   y wr*   )ru  rV   masters     r.   rX   zmerge.<locals>.<genexpr>  s     
8&6%
8   c              3   8   K   | ]  }|j                   d u   y wr*   )rv  rz  s     r.   rX   zmerge.<locals>.<genexpr>  s     
76$
7r|  )r_   ru  rv  rn   r   s      r.   r4   r4     s=    

8C
88

73
77
c"r0   c           	      
   |D cg c]  }|j                    c}x}| _        t        t        ||            ||j                   fgz   D ]  \  }}|s	|d   j                  j
                  j                  d      s2t        |D cg c]  }|j                   c}      s0t        | d|D cg c]  }|j                  j
                   c}      t        |D cg c]  }|j                   c}      st        |       |d   j                  |_
        |D cg c]  }|j                   }}|d d = |j                  |        |j                   xr' t        |j                   d   t        j                        }|rQt!        |j                   | j"                        |_         |D cg c]  }t!        || j"                         c}x}| _        n|j                   xr' t        |j                   d   t        j$                        }	|	r|D cg c]  }t'        |       }
}t)        |
D cg c]
  }||
d   k(   c}      s|D cg c]  }|D ]  }|j*                    }}}t-        t.        |      }t1        |j                   | j"                  |      |_         |D cg c]  }t1        || j"                  |       c}x}| _        d}nd}| j3                  |j                   |       t'        |j                         |_        |rt'        |j                         dk\  r|j                   d   j6                  dk(  sJ |j                   d   j8                  j:                  s0|j                   j=                  d       |xj4                  dz  c_        t'        |j                         dk\  r|j                   d   j6                  dk(  sJ |j                   d   j8                  j:                  s0|j                   j=                  d       |xj4                  dz  c_        | j"                  j>                  jA                  d	tC               
      }|dk7  rtD        jG                  d       tI        | j"                  ||j                         |_         t'        |j                         |_        n{	ryrw|j                   d   }|j8                  j:                  }t        ||jJ                        D ci c]  \  }}||
 }}}tM        || j"                  jO                               |_         | jQ                  ||ddg       | `y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}}w c c}w c c}}w )Nr   	ExtensionrY   TFr   r%  r   z0fontTools.otlLib.optimize.gpos:COMPRESSION_LEVELr   zCompacting GPOS...SubTableSubTableCountr   ))r  r   ry   rr   r`   r5   
startswithr   r#   ExtensionLookupType
LookupTypeExtSubTabler?  rw   r   r   ri  r+   r   rp   r_   r   r   r   rq  ru   r  r   r   r   popcfgrI   r   loginfor   r   r   r   rn   )rE   r-   rd   r   r   stsstnew_sts	isPairPosisSinglePosnumSubtablesnumstvalueFormatListmirf	flattenedlevelsinglePosTabler   rp  	valRecordsinglePosMappings                         r.   r4   r4     s   ?B*C!1::*CCI' s3	*+dmm/D.EE  3q6$$//<C8bR\\89,(9<=2..= 
 cBR33BC,V44q655AL034"r~~4G4AJJw " J*T]]1-=rzz"JI ?MM6;;
 OX/
HJ22v{{C/
 	
	F+ mmR
4==3CR\\(R.78CG8L8LIDQ/IJ <E"QRb"Q1=="Q="Q"Qc?3 CMM6;;!
 (7 8FKKN7 	F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
!1	E9
 
 'fkk<<>
 cJ+HIA +D 9 >B 5/
 9I #R7T
sA   T'T,
'T1T6
T;U UU
:UUUc                       e Zd ZdZd Zy)InstancerMergerzLA merger that takes multiple master fonts, and instantiates
    an instance.c                 x    t         j                  | |       || _        || _        |j	                  |      | _        y r*   )r(   r/   modellocation
getScalarsscalars)r-   r+   r  r  s       r.   r/   zInstancerMerger.__init__"  s0    d#
 ''1r0   Nr5   r   r   __doc__r/   r   r0   r.   r  r    s    2r0   r  c                     |j                   dk(  sJ |D cg c]  }|j                   }}| j                  }| j                  }t	        |j                  ||            |_        y c c}w rs  )r   
Coordinater  r  r    interpolateFromMastersAndScalars)rE   r-   rd   aCoordsr  r  s          r.   r4   r4   )  s[    ;;!$'(qall(F(LLEnnGeDDVWUVDO )s   A$c                 N   |j                   dk(  sJ |D cg c]  }|j                   }}|D cg c]  }|j                   }}| j                  }| j                  }t        |j                  ||            |_        t        |j                  ||            |_        y c c}w c c}w rs  )r   XCoordinateYCoordinater  r  r   r  )rE   r-   rd   r  XCoordsYCoordsr  r  s           r.   r4   r4   2  s    ;;!&)*q}}*G*&)*q}}*G*LLEnnGuEEgwWXDuEEgwWXD +*s
   BB"c           	         | j                   }| j                  }dD ]b  \  }}t        ||      rJ t        ||      s!|D cg c]  }t        ||d       }}t	        |j                  ||            }	t        |||	       d y c c}w N)XAdvance
XAdvDevice)YAdvance
YAdvDevice)
XPlacement
XPlaDevice)
YPlacement
YPlaDevicer   )r  r  r^   rH   r   r  r>  )
rE   r-   rd   r  r  name	tableNamer  rk   ri   s
             r.   r4   r4   =  s    LLEnnG 'i 4+++4367agaq)7F7EBB67STED$&' 8s    Bc                       e Zd ZdZddZy)MutatorMergerzA 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                 L    t         j                  | |       || _        || _        y r*   )r(   r/   	instancerdeleteVariations)r-   r+   r  r  s       r.   r/   zMutatorMerger.__init__[  s    d#" 0r0   NTr  r   r0   r.   r  r  U  s    
1r0   r  c                    |d   j                   j                         |_         |j                  dk7  ry | j                  }|j                  }| j
                  r|`|rP|j                  dk(  sJ |j                  dz  |j                  z   }t        ||         }|xj                  |z  c_
        | j
                  rd|_        y y )Nr            r   )r@   r   r   r  DeviceTabler  DeltaFormat	StartSizeEndSizer   r  )rE   r-   rd   r  devvaridxdeltas          r.   r4   r4   a  s     FOO((*DM{{a  I


C
&(((--2%4	&)*5  r0   c           	         |d   j                   j                         |_         |j                  dk7  ry | j                  }dD ]  }|dz   }t	        ||      st        ||      }| j                  rt        ||       |<|j                  dk(  sJ |j                  dz  |j                  z   }t        ||         }|dz   }	t        ||	t        ||	      |z           | j                  rd|_        y y )	Nr   r  XYr  r  r  r  r   )r@   r   r   r  r^   rH   r  delattrr  r  r  r   r>  )
rE   r-   rd   r  rW   r  r  r  r  r;   s
             r.   r4   r4   w  s     FOO((*DM{{a  I 9%	tY'dI&""D)$;&(((--2%4	&)*<dGD$/%789"  r0   c           
         |d   j                   j                         |_         | j                  }dD ]  \  }}t        ||      st	        ||      }| j
                  rt        ||       |:|j                  dk(  sJ |j                  dz  |j                  z   }t        ||         }t        ||t	        ||d      |z           y )Nr   r  r  r  )r@   r   r  r^   rH   r  r  r  r  r  r   r>  )	rE   r-   rd   r  r  r  r  r  r  s	            r.   r4   r4     s     FOO((*DM  I <i tY'dI&""D)$;&(((--2%4	&)*dGD$2U:;%<r0   c                   .     e Zd ZdZd Zd Z fdZ xZS )VariationMergerzJA merger that takes multiple master fonts, and builds a
    variable font.c                     t         j                  | |       t        j                  |      | _        | j                  |       y r*   )r(   r/   r   OnlineVarStoreBuilderstore_buildersetModel)r-   r  axisTagsr+   s       r.   r/   zVariationMerger.__init__  s/    d#%;;HEer0   c                 H    || _         | j                  j                  |       y r*   )r  r  r  )r-   r  s     r.   r  zVariationMerger.setModel  s    
##E*r0   c                    d }d }d |v rt        |      r|t        | |      y | j                  }| j                  r+t        |D cg c]  }|d u c}| j                        | _        | j                  }|j                  |      \  }}| j                  |       t        t        | '  ||       |r| j                  |       |r|| _        y y c c}w )N)r[   )
r   r   r,   r   r  getSubModelr  superr  ra   )r-   rc   rd   masterModelorigTTFsrW   r  r`   s          r.   ra   zVariationMerger.mergeThings  s    3;s|?$Ts33 yyHyy#C$@qQd]$@$))L	**K$005JE3MM% ot0c:MM+& DI  %As   C)r5   r   r   r  r/   r  ra   __classcell__)r`   s   @r.   r  r    s    
+! !r0   r  c                 |    t        |      r|d   d fS | j                  |      \  }}|t        j                  |      fS r   )r   storeMastersr   buildVarDevTable)r  master_valuesbasevarIdxs       r.   r  r    sD    Q%% --m<LD&))&111r0   c                     |j                   dk7  rt        | d      t        | j                  |D cg c]  }|j                   c}      \  |_        }|rd|_         ||_        y y c c}w )Nr   za baseline coordinater   r  r   r%   r  r  r  r  rE   r-   rd   r  r  s        r.   r4   r4     se    {{a1HII#3S9q||9$ DO[ &  :   A%
c                     |j                   dk7  rt        | d      t        | j                  |D cg c]  }|j                   c}      \  |_        }|rd|_         ||_        y y c c}w )Nr   za caretr   r  r  r  s        r.   r4   r4     sd    {{a;;#3S9q||9$ DO[ &  :r  c                 \   |j                   dk7  rt        | d      t        | j                  |D cg c]  }|j                   c}      \  |_        }t        | j                  |D cg c]  }|j
                   c}      \  |_        }|s|rd|_         ||_        ||_        y y c c}w c c}w )Nr   z	an anchorr   r  )r   r%   r  r  r  r  XDeviceTableYDeviceTable)rE   r-   rd   r  r  r  s         r.   r4   r4     s    {{a==%5c:q}}:&"Dl &6c:q}}:&"Dl |(( $ ; ;s   B$
'B)
c                     dD ]a  \  }}t        ||      st        | j                  |D cg c]  }t        ||d       c}      \  }}t	        |||       |sUt	        |||       c y c c}w r  )r^   r  r  rH   r>  )rE   r-   rd   r  r  r  ri   deviceTables           r.   r4   r4     st     6i 4!1$$C&Hqwq$':&H"E; D$&i56 'Is   A(c                   v    e Zd ZdZddZddZd fdZd Zd Zd Z	d	e
fd
Zd	e
fdZed        Zed        Zy)COLRVariationMergera  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                     t         j                  | |||       i | _        g | _        t	               | _        g | _        d | _        |rt               | _        d| _	        y )NF)
r  r/   varIndexCachevarIdxesr   varTableIdslayerslayerReuseCacher   _doneBaseGlyphs)r-   r  r  r+   allowLayerReuses        r.   r/   zCOLRVariationMerger.__init__(  sX      uh=   5##2#4D $r0   c                     d|v r"d|v r| j                  |d   j                         t        j                  | |||       y )NCOLR)expandPaintColrLayersrj   r  r~   )r-   r+   r{   r|   s       r.   r~   zCOLRVariationMerger.mergeTables:  s>    Y6T> &&tF|'9'9:##D$YGr0   c                      y)NTr   )r   s    r.   <lambda>zCOLRVariationMerger.<lambda>G  s    r0   c                    |j                   }|j                  }d}	  ||      } ||      }|s!t        | t	        |      j
                  |      |}g }|D ])  }	t        |	dd       }	  ||      }|j                  |       + t        ||      s"t        | t	        |      j
                  ||      |S # t        $ r Y w xY w# t        $ r Y ]w xY w)NF)r   ri   r   rS  )
r   
formatEnum
ValueErrorr%   rA   r5   rH   r6   r   r$   )
r-   rc   rd   validatefmtr  okrZ   r[   rW   s
             r.   checkFormatEnumz#COLRVariationMerger.checkFormatEnumG  s    jj^^
	S/C #B#D493E3ESQQ 	A!Xt,C o JJsO	 (C(%c++!	  -  		  s#   B1 &C 1	B=<B= 	CCc           
          |j                         D ]5  }	 | j                  ||   |D cg c]  }|j                  |       c}       7 y c c}w # t        $ r%}|j                  j                  d|d        d }~ww xY w)N[])rU   ra   rI   r&   rb   r6   )r-   rc   rd   r   rW   rm   s         r.   mergeSparseDictz#COLRVariationMerger.mergeSparseDicte  sq     	A  QC)@q!%%()@A	)@# 1%qz*s(   AA
 A
A	A= A88A=c                     |D ]:  }t        ||      }|D cg c]  }t        ||       }}	 | j                  ||       < y c c}w # t        $ r$}|j                  j	                  d|         d }~ww xY w)Nr]   )rH   ra   r&   rb   r6   )	r-   rc   rd   r<   r;   ri   rf   rk   rm   s	            r.   
mergeAttrszCOLRVariationMerger.mergeAttrsm  sz     	DC&E69:dgdD):F:  /		: $ 4&z*s   AA	A3A..A3c                 x   |D cg c]  }t        ||       }}d}|j                  |      }t        |t              r d}|D cg c]  }|j	                  |       }}|d   }	t
        j                  }
t        |      s| j                  j                  |      \  }	}
|r|j                  |	      }	|	|
fS c c}w c c}w )NFTr   )rH   getConverterByNamerw   r   toIntr   NO_VARIATION_INDEXr   r  r  fromInt)r-   rc   rd   r;   rf   r  is_fixed_size_floatconvrW   	baseValuer  s              r.   storeMastersForAttrz'COLRVariationMerger.storeMastersForAttrw  s    9<=t,==
 $%%d+dN+"&4ABqTZZ]BMB!!$	&&& $ 2 2 ? ? NIvY/I&  ' > Cs   B2B7returnc                    t        |      }| j                  j                  |      }|ct        t	        | j
                        t	        |      z
  dz         D ]3  }| j
                  ||t	        |      z    |k(  s"|x| j                  |<   } n |{t        t	        |      dz
  dd      D ]_  }| j
                  | d  |d | k(  st	        | j
                        |z
  }|| j                  |<   | j
                  j                  ||d          n |?t	        | j
                        x| j                  |<   }| j
                  j                  |       |S )Nr   r   r%  )tupler  rI   r   rp   r  r?  )r-   r  rh   varIndexBasert   ns         r.   storeVariationIndicesz)COLRVariationMerger.storeVariationIndices  sH    Ho))--c23t}}-H=AB ==QX%678C=>>D&&s+l
 3x=1,a4 ==!%"15#&t}}#5#9L.:D&&s+MM((!"6 585GGDs#lMM  *r0   c                     t         j                  }g }|D ]6  }| j                  |||      \  }}t        |||       |j	                  |       8 t        d |D              r| j                  |      }|S )Nc              3   B   K   | ]  }|t         j                  k7    y wr*   )r   r  r   s     r.   rX   z9COLRVariationMerger.mergeVariableAttrs.<locals>.<genexpr>  s     <aqB)))<s   )r   r  r  r>  r6   anyr  )	r-   rc   rd   r<   r  r  r;   r  r  s	            r.   mergeVariableAttrsz&COLRVariationMerger.mergeVariableAttrs  sx    ,, 	$D $ 8 8c4 HIvCy)OOF#	$
 <8<<55h?Lr0   c                    t        |dd       D ]  }|d   }|j                  }t        |      j                  } |       }|j                  j                  |j                         |j                          |d   j                  }|j                  $|t        ||j                        |j                  <   t        ||j                  |        y )NTc                 L    t        t        | d   j                        dd       d uS )Nr%  VarType)rH   rA   ri   )paths    r.   r  z?COLRVariationMerger.convertSubTablesToVarType.<locals>.<lambda>  s%    T"X^^,i>dJ r0   )	skip_root	predicater%  )r   ri   rA   r  r@   r   populateDefaultsr   rH   r  r>  )clsrj   r  r  subTablevarTypenewSubTableparents           r.   convertSubTablesToVarTypez-COLRVariationMerger.convertSubTablesToVarType  s    "
 	6D bBxxH8n,,G!)K  ''(9(9:((*"X^^Fxx#5@(25#	6r0   c                 j   | j                   syt               }g }| j                  j                  D ]<  }|j                  g}|s|j                         }|j                  t        j                  j                  k(  r;|j                  t        j                  j                  k(  rt        t        ||             }t        |      }|D ]^  }t        |      |v r$t        j                   |      }t        |      |vsJ |j#                  |       |j%                  t        |             ` ||_        t        |      |_        n|j+                  |       }|j-                  t/        |             |r)? t        |      t        |      k(  sJ || j                   _        t        |      | j                   _        y)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PaintColrLayersry   _flatten_layersrp   idr   r  r6   r   FirstLayerIndex	NumLayersgetChildrenr?  reversed
LayerCount)	colruniqueLayerIDsnewLayerListr   frontierpaintchildrenfirst_layer_indexlayers	            r.   r  z)COLRVariationMerger.expandPaintColrLayers  sh    ~~%%:: 	4C		{H <<2>>#@#@@\\R^^%C%CC  $OE4$@AH(+L(9%!) 6e96$(MM%$8E#%e9N#BB#B$++E2&**2e956 ->E)&)(mEO$006H 23) 	40 < C$7777+$'$5!r0   Nr  ))r  )r5   r   r   r  r/   r~   r  r  r  r  r   r  r  r   r(  staticmethodr  r   r0   r.   r  r    sl    %$H 2@ <!, :S  6 6( ,6 ,6r0   r  c           
         |j                   D ci c]  }|j                  | }}|D cg c]'  }|j                   D ci c]  }|j                  | c}) }}}t        |j                               D ]8  \  }}	 | j	                  ||   |D 	cg c]  }	|	j                  |       c}	       : d| _
        y c c}w c c}w c c}}w c c}	w # t        $ r7}
|
j                  j                  d| d       d||
j                  d<    d }
~
ww xY w)Nz.BaseGlyphPaintRecord[r  zbase glyph r  T)r,  	BaseGlyphrq   rU   ra   rI   r&   rb   r6   causer  )rE   r-   rd   r   rc   rM   mastersrt   r   rW   rm   s              r.   r4   r4     s     *.)B)B
C#3==#
CC
CORS!a.D.DEss"ESGS#((*% 1	s1v''BQa'BC "F DES
 (C 	GGNN3A3a89$/u"5AGGJ	sE   B5B?B:B?9C
C$C
:B?C

	D
2DD
c                     | j                   sJ d       t        | j                        |_        | j                  |_        y )Nz-BaseGlyphList must be merged before LayerList)r  rp   r  r7  r-  r   s      r.   r4   r4     s4     !!R#RR!&--(DODJr0   c              #     K   | j                   t        j                  j                  k(  sJ | j	                  |      D ]B  }|j                   t        j                  j                  k(  rt        ||      E d {    ?| D y 7 wr*   )r   r   r.  r0  r5  r1  )rootr8  r<  s      r.   r1  r1    sj     ;;"..88888!!$' <<2>>999&ud333K	3s   A4B6B7Bc           
      ^   	 t        t        | j                  d   j                              }t	         j
                        t	        |      k(  sJ t        t	        |            D cg c]4  }t        t        ||    j
                  |   d   j                              6 }}	  j                  ||        j                   j                  j                  |      }t	        |      t        kD  }t        |t              }	 fd	|D cg c]
  } 	|       }}t	        |      dk(  rS|d   j                  t         j"                  j$                  k(  r)|d   j&                  |_        |d   j(                  |_        y t	        |      |_        t	         j*                        |_         j*                  j-                  |        j                  *|s' j                  j/                  ||j(                         y y y c c}w # t        $ r!}|j                  j                  d        d }~ww xY wc c}w )Nr  z.Layers)r  c                    t        | t              r| D cg c]
  } |       }}t        j                         } t	        t        j
                  j                        | _        t        |      | _	        t        j                        | _        j                  j                  |       j                  &j                  j                  || j                         | S c c}w r*   )rw   ry   r   r-  r   r.  r0  r   rp   r4  r  r3  r?  r  r   )r<  r   r  listToColrLayersr-   s      r.   rJ  z0_merge_PaintColrLayers.<locals>.listToColrLayersD  s    eT"389a&q)9F9HHJEr~~==>EL!&kEO$'$4E!KKv&##/$$((1F1FG :s   Cr   r   )ry   r1  r+   rj   rp   r,   r   ru   r&   rb   r6   r  	try_reuser   r   r   r   r.  r0  r4  r3  r  r?  r   )
r-   rc   rd   
out_layersrt   master_layersesrm   is_treer   rJ  s
   `        @r.   _merge_PaintColrLayersrO  !  s    oc499V+<+B+BCDJ tyy>SX%%% s3x 	_SVTYYq\&%9%?%?@AO 

O4 '))33J?
 *o ::G!*0JKJ
 0::!"1%:J:
:!
1 4 48V8V V
 #1//(m;;J!$++.:& +G  $$Z1D1DE 5<+o   	
y!	> ;s$   (9G8$G= 
H*=	H'H""H'c                 x   
  j                  ||d       }|t        j                  j                  u rt	         ||       y |j                         }d
|t        j                  t        |      |      

fd|j                         D        } j                  |||        j                  ||
      }|j                         D cg c]  }|j                   }}|t        j                  k7  xs t         fd|D              }	|	r1
r||_        |r j#                  |       |J t%        |      |_        y y c c}w )Nc                 $    | j                          S r*   )is_variable)r  s    r.   r  zmerge.<locals>.<lambda>g  s    COO<M8M r0   r   c              3   T   K   | ]  }|j                   vs|j                    ! y wr*   r  rV   rb  varAttrss     r.   rX   zmerge.<locals>.<genexpr>r        Ra166;Q166R   ((c              3   L   K   | ]  }t        |      j                  v   y wr*   r2  r  )rV   rj   rE   s     r.   rX   zmerge.<locals>.<genexpr>{  s%      >,15	V'''>   !$)r  r   r.  r0  rO  as_variabler
   getVariableAttrsrA   getConvertersr  r  iterSubTablesri   r  r  VarIndexBaser(  r   r   )rE   r-   rd   r  	varFormatstaticAttrsr  r  	subTables
isVariablerV  s   `         @r.   r4   r4   e  s.   

 
 s,M
NC
bnn,,,vtS1!IH**4:yAR4#5#5#7RK
dC-,,T3AL$($6$6$89b9I9 !6!66 # >5>> ;J  !-D,,T2$$$)n  :s   D7c                 V   t        |      j                  }t        j                  |      fd|j	                         D        }| j                  |||       | j                  ||      }|t        j                  k7  r,||_	        | j                  j                  t        |             y y )Nc              3   T   K   | ]  }|j                   vs|j                    ! y wr*   rT  rU  s     r.   rX   zmerge.<locals>.<genexpr>  rW  rX  )rA   r  r
   r]  r^  r  r  r   r  r`  r  r   r2  )rE   r-   rd   r%  rb  r  rV  s         @r.   r4   r4     s    4j  G&&w/HR4#5#5#7RK
dC-,,T3ALr,,,(r$x( -r0   c                       j                  ||d |j                         D               t         fd|j                  D              r6 j	                  |        j
                  j                  t        |             y y )Nc              3   4   K   | ]  }|j                     y wr*   rT  ra  s     r.   rX   zmerge.<locals>.<genexpr>  s     !GQ!&&!Gr4  c              3   L   K   | ]  }t        |      j                  v   y wr*   rZ  )rV   stoprE   s     r.   rX   zmerge.<locals>.<genexpr>  s      
Ed2d8v)))
Er[  )r  r^  r  	ColorStopr(  r  r   r2  r   s   `  r.   r4   r4     sb    
dC!G$2D2D2F!GH

Ednn
EE((.r$x( Fr0   clipsc                 (    | j                  ||       y r*   )r  r   s      r.   r4   r4     s     4%r0   r   r*   )F)r@  rA  )kr  osr   rB   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   rE   GDEFr4   r   r   r   r7  r   r   r   r   r   r   r
  r#  r&  r   rO  MarkBasePosMarkMarkPosr[  r]  rg  ri  rq  
CursivePosrt  Lookupr  
CaretValuer  r  r  	BaseCoordr  r+  r*  r1  rO  r-  ClipBox	Affine2x3rk  	ColorLineClipListr   r0   r.   <module>r     s   
     R ( - 5 1 3 > < < 6 6 S S 7  3
 g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2n 2 &W 'W 		"Y #Y **+' ,'.	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&r0   