
    ]Mh                     	   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j-        d          Z.ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:  G d de;          Z< G d de<          Z=e=>                    ej?        d          d             Z@d ZAdTdZBe=>                    ejC                  d             Z@e=>                    ejD                  d             Z@d  ZEd! ZFe=>                    ejG                  d"             Z@e=>                    ejH                  d#             Z@d$ ZIdUd%ZJdUd&ZKdVd(ZLd) ZMe=>                    ejN                  d*             Z@dWd-ZOe=>                    ejP                  d.             Z@e=>                    ejQ                  d/             Z@d0 ZRd1 ZSd2 ZTd3 ZUd4 ZVe=>                    ejW                  d5             Z@e=>                    ejX                  d6             Z@e=>                    ejY                  d7             Z@ G d8 d9e=          ZZeZ>                    ej[                  d:             Z@eZ>                    ejD                  d;             Z@eZ>                    ejC                  d<             Z@ G d= d>e=          Z\e\>                    ej[                  d?             Z@e\>                    ejD                  d@             Z@e\>                    ejC                  dA             Z@ G dB dCe=          Z]dD Z^e]>                    ej_                  dE             Z@e]>                    ej[                  dF             Z@e]>                    ejD                  dG             Z@e]>                    ejC                  dH             Z@ G dI dJe]          Z`e`>                    eja                  dK             Z@e`>                    ejb                  dL             Z@dM ZcdN Zde`>                    eje        ejf        f          dO             Z@e`>                    ejg        ejh        f          dP             Z@e`>                    eji                  dQ             Z@e`>                    ejj        dR          dS             Z@dS )Xz4
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                   b    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
dS )MergerNc                 "    || _         d | _        d S N)fontttfs)selfr+   s     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/varLib/merger.py__init__zMerger.__init__/   s    				    r*   c                       t           k    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                            |i           }D ]!}||vsJ d|j         d|d            | ||<   "\d S )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.... >>>4441 /.. %+GDMM+ 4r0   )r(   __dict__r2   typeenumEnumMetastr)r=   r>   r<   r?   s   ``` r.   mergerzMerger.merger4   s    v~~~9~~~DM))DL==T4=111jG;;#HE	 	 	 	 	 	 	  r0   c                     t          |          }|                                 D ]8} t          | dd           }| n"| j                            |d           }||c S 9|S )Nr2   )rA   mrogetattrr2   get)r=   thing_defaulttypr2   ms         r.   
mergersForzMerger.mergersForP   sp    5kkHHJJ 	 	DdIt44G  d++A}  r0    c                    t          |d          r|                    d           |D ](}t          |d          r|                    d           )t          t          |                                                    t          fd|D                       st          | d |D                       |                     |          }|                    d| j	        j
                  }	 D ]H|v rt          |          }fd|D             }|                    |          }	 |	| ||           Id S # t          $ r#}
|
j                            d	z               d }
~
ww xY w)
NensureDecompiledF)recursec              3   |   K   | ]6}t          t          |                                                    k    V  7d S r*   sortedvarskeys).0vrW   s     r.   	<genexpr>z&Merger.mergeObjects.<locals>.<genexpr>f   s>      ??a46$q'',,..111??????r0   c                 j    g | ]0}t          t          |                                                    1S rO   rT   rX   rY   s     r.   
<listcomp>z'Merger.mergeObjects.<locals>.<listcomp>h   s.    )N)N)NQ&a*@*@)N)N)Nr0   expectedgot*c                 0    g | ]}t          |          S rO   rH   )rX   tablekeys     r.   r]   z'Merger.mergeObjects.<locals>.<listcomp>q   s#    ???%'%--???r0   .)hasattrrQ   rU   rV   rW   allr!   rN   rI   	__class__mergeThingsrH   r&   stackr6   )r-   outlstexcludeitemr2   defaultMergervaluevalues
mergerFuncere   rW   s              @@r.   mergeObjectszMerger.mergeObjects_   s   3*++ 	0   /// 	5 	5Dt/00 5%%e%444d3iinn&&''????3????? 	t)N)N#)N)N)N    //#&&C)CDD
	 0 0'>>S))????3???$[[m<<

4////0 0   	 	 	GNN39%%%	s   /AD< <
E)E$$E)c                 l   t          ||t                    s)t          | t          |          d |D                       t          t	          |t	          |                     D ]O\  }\  }}	 |                     ||            # t          $ r#}|j                            d|z              d }~ww xY wd S )Nc                 ,    g | ]}t          |          S rO   lenrX   xs     r.   r]   z%Merger.mergeLists.<locals>.<listcomp>z   s    =R=R=Rc!ff=R=R=Rr0   r^   z[%d])	r   ry   r    	enumerateziprj   r&   rk   r6   )r-   rl   rm   irq   rr   rt   s          r.   
mergeListszMerger.mergeListsx   s    #sC(( 	Ts3xx=R=Rc=R=R=RSSSS"+CS#Y,?,?"@"@ 	 	Av  ////#   vz***	 	s   -B
B1B,,B1c                 l   t          ||t                    s.t          | t          |          j        d |D                       |                     |                              d d           }| || ||           d S t          |t          j                  r$t          ||          st          | ||          d S t          |d          r|                     ||           d S t          |t                    r|                     ||           d S t          ||          st          | ||          d S )Nc                 6    g | ]}t          |          j        S rO   )rA   r5   rz   s     r.   r]   z&Merger.mergeThings.<locals>.<listcomp>   s!    7V7V7VQQ8H7V7V7Vr0   r^   r@   )r   rA   r   r5   rN   rI   
isinstancerB   Enumr   rg   ru   listr   )r-   rl   rm   rs   s       r.   rj   zMerger.mergeThings   sk   #sD)) 	!tCyy17V7VRU7V7V7V    __S))--dD99
!JtS#&&&&&TY'' 	D c3'' D&tcsCCCCD DS*%% 	Dc3'''''T"" 	DOOC%%%%%c3'' D&tcsCCCCD Dr0   c                     |D ]d|vr	 || _         |                     |         fd|D                        8# t          $ r }|j                                        d }~ww xY wd S )Nc                 :    g | ]}|                               S rO   rI   )rX   rM   tags     r.   r]   z&Merger.mergeTables.<locals>.<listcomp>   s#    ,M,M,MAQUU3ZZ,M,M,Mr0   )r,   rj   r&   rk   r6   )r-   r+   master_ttfs	tableTagsrt   r   s        @r.   mergeTableszMerger.mergeTables   s     	 	C$'	  c,M,M,M,M,M,M,MNNNN#   s###	 	s   /<
A&A!!A&)r*   )rO   )r5   
__module____qualname__r/   classmethodrE   rN   ru   r   rj   r   rO   r0   r.   r(   r(   .   s           
    [6 )+    [   2  D D D*	 	 	 	 	r0   r(   c                       e Zd ZdS )AligningMergerN)r5   r   r   rO   r0   r.   r   r      s        Dr0   r   GlyphClassDefc                    |#t          |          st          | d |          d S d |D             }i |_        |j        }t                      } |j        d |D               |D ]\t          fd|D                       }t          |          st          | |d         |dz   g          |sd |<   Q|d         |<   ]d S )Nr^   c                     g | ]	}|j         
S rO   )	classDefsrX   ls     r.   r]   zmerge.<locals>.<listcomp>   s    
$
$
$11;
$
$
$r0   c                 6    g | ]}|                                 S rO   )rW   r   s     r.   r]   zmerge.<locals>.<listcomp>   s     +++!QVVXX+++r0   c              3   B   K   | ]}|                               V  d S r*   r   )rX   r   ks     r.   rZ   zmerge.<locals>.<genexpr>   s-      22AEE!HH222222r0   r   rf   )r_   r`   rk   )r   r   r   setupdater   r   r   )rE   r-   rm   allKeys	allValuesr   s        @r.   r4   r4      s   |s|| 	;6Dc::::
$
$
$
$
$CDN>DeeGGN++s+++,, 	# 	#2222c22222		"" 	"13sQwi     	#DGGlDGG	# 	#r0   c                       j         dk    r S t          j                    }d|_          j        |_         j        |_         fd|j        j        D             |_        t          |j                  |_        |S )N   c                     g | ]	}j         
S rO   Value)rX   _r-   s     r.   r]   z._SinglePosUpgradeToFormat2.<locals>.<listcomp>   s    999999r0   )	Formatot	SinglePosCoverageValueFormatglyphsr   ry   
ValueCount)r-   rets   ` r.   _SinglePosUpgradeToFormat2r      sn    {a
,..CCJ=CL&CO9999S\%8999CI^^CNJr0   c                   	 |d |D             }nd t          ||          D             }t                      } |j        |  |                                 j        	t          |	          t          	fd|D                       st                      ~d}|fd|D             }n1t          |          t          |          k    sJ fd|D             }|fS )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.
    Nc                 ,    g | ]}t          |          S rO   )r   r   s     r.   r]   z&_merge_GlyphOrders.<locals>.<listcomp>   s    )))SVV)))r0   c                 H    g | ]\  }}d  t          ||          D              S )c                     i | ]\  }}||	S rO   rO   )rX   grY   s      r.   
<dictcomp>z1_merge_GlyphOrders.<locals>.<listcomp>.<dictcomp>   s    222tq!a222r0   )r}   )rX   r   vss      r.   r]   z&_merge_GlyphOrders.<locals>.<listcomp>   s3    UUUuq"22s1bzz222UUUr0   re   c              3   B   K   | ]}t          |           |k    V  dS )r   N)rU   )rX   r   sortKeys     r.   rZ   z%_merge_GlyphOrders.<locals>.<genexpr>   s5      ;;vbg&&&",;;;;;;r0   c                 0    g | ]fd D             S )c                      g | ]
}|v r|nS rO   rO   rX   glyphdefaultdict_sets     r.   r]   z1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>   s'    HHHex''UUWHHHr0   rO   rX   r   r   orders    @r.   r]   z&_merge_GlyphOrders.<locals>.<listcomp>   sB     
 
 
 IHHHH%HHH
 
 
r0   c                 0    g | ]fd D             S )c                 ,    g | ]}|v r|         nS rO   rO   r   s     r.   r]   z1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>   s+    RRR5 1 1Xe__wRRRr0   rO   r   s    @r.   r]   z&_merge_GlyphOrders.<locals>.<listcomp>   sB     
 
 
 SRRRRERRR
 
 
r0   )	r}   r   r   getReverseGlyphMap__getitem__rU   rh   r"   ry   )
r+   rm   
values_lstr   	dict_setscombinedpaddedValuespaddedr   r   s
      `    @@r.   _merge_GlyphOrdersr      sC    ))S)))		UUC@T@TUUU	uuHHOY%%''3G8)))E;;;;s;;;;; '$&&&L
 
 
 
 
%
 
 

 3xx3z??****
 
 
 
 
%
 
 
 &=r0   c                 z    |d         j                                         |_         |                     ||           d S Nr   r@   copyru   rE   r-   rm   s      r.   r4   r4      9     FO((**DM
c"""""r0   c                 z    |d         j                                         |_         |                     ||           d S r   r   r   s      r.   r4   r4      r   r0   c                 0   |D ]}|2t          |          t          j        k    s|j        ||j        j        vr7|j        dk    r	|j        c S |j        dk    r,|j        |j        j                            |                   c S t          | d          d S )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 RLDzzR\))}$DM000;!:[A:dm288??@@@@#F5PQQQQ4r0   c                 
   |D ]}|2t          |          t          j        k    s|j        ||j        j        vr7|j        dk    rH|j        |j        j                            |                   }|j        }|D ]}|j	        |k    r|c c S |j        dk    rZ|j
        j                            |d          }|j        j                            |d          }	|j        |         j        |	         c S t!          | d          d S )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 PLDzzRZ''}$!555;!dm288DDEB$C  ?k11JJJJJ 2[A^-11*a@@F^-11+qAAF$V,9&AAAA#F5NOOOO4r0   c                   
 t          t          j        d |D             d          x|_        t	          |          dk    sdz  dk    st          | d          |j        j        
t          d |D                       rt          
fd|D                       rjt          j
        |j                  |_        dk    r%|                     |j        d	 |D                        |j                                        |_        d S d
|_        d |D             }t          | j        d |D             d |D                       \  }}||j        _        fd|D             |_        t	          |j                  |_        t%          |          D ]Z\  }}t%          |          D ]E\  }}||         t'          | | j        |         |          }	|	t          j
                  }	|	||<   F[|                     |j        |           |                     ||d           t          t          j        d |j        D             d          |_        d S )Nc                     g | ]	}|j         
S rO   r   r   s     r.   r]   zmerge.<locals>.<listcomp>6  s    8T8T8T18T8T8Tr0   r   r   ir   r   c              3   ,   K   | ]}|j         d k    V  dS )r   Nr   r\   s     r.   rZ   zmerge.<locals>.<genexpr><  s(      
&
&Q18q=
&
&
&
&
&
&r0   c              3   8   K   | ]}|j         j        k    V  d S r*   r   r   )rX   rY   coverageGlyphss     r.   rZ   zmerge.<locals>.<genexpr><  s>       / /01!*++/ / / / / /r0   c                 P    g | ]#}|j         |j         nt          j                    $S r*   )r   r
   ValueRecordr\   s     r.   r]   zmerge.<locals>.<listcomp>F  s.    WWWaAG/V5G5I5IWWWr0   r   c                 ,    g | ]}t          |          S rO   )r   r\   s     r.   r]   zmerge.<locals>.<listcomp>M  s!    
6
6
6Q%a((
6
6
6r0   c                 &    g | ]}|j         j        S rO   r   r\   s     r.   r]   zmerge.<locals>.<listcomp>Q  s    555Aaj'555r0   c                     g | ]	}|j         
S rO   r   r\   s     r.   r]   zmerge.<locals>.<listcomp>Q  s    7M7M7MA7M7M7Mr0   c                 8    g | ]}t          j                  S rO   )r
   r   )rX   r   valueFormats     r.   r]   zmerge.<locals>.<listcomp>U  s$    BBBa&$[11BBBr0   )r   r   r   r   r   rn   c                 6    g | ]}|                                 S rO   )getEffectiveFormatr\   s     r.   r]   zmerge.<locals>.<listcomp>n  s$    @@@Q))++@@@r0   )r   int__or__r   ry   r%   r   r   rh   r
   r   r   rj   	getFormatr   r   r+   r   r|   r   lookup_subtablesr   ru   )rE   r-   rm   r   r   r~   rr   jr   rY   r   r   s             @@r.   r4   r4   4  s   %+CJ8T8TPS8T8T8TVW%X%XXD{HHMMkD0A551LMMMM ])N

&
&#
&
&
&&& 3 / / / /58/ / / , ,  'TZ@@
! 
WWSVWWW    ://11 DK
6
6#
6
6
6C (555557M7M7M7M7M NFF "DMBBBB6BBBDJ$*ooDOv&&  	6!&)) 	 	HAuay$
 6/2E A y&{33F1II	 dj&))) cW     
@@TZ@@@! Dr0   c                    t          | j        d |D             d |D                       \  }}g x|_        }|D ]}t          j                    }||_        | j        rt          j        | j                  nd |_        | j	        rt          j        | j	                  nd |_
        |                    |           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        |           d S )Nc                 0    g | ]}d  |j         D             S )c                     g | ]	}|j         
S rO   r   r\   s     r.   r]   z$merge.<locals>.<listcomp>.<listcomp>w      	4	4	4A!-	4	4	4r0   r   rX   r   s     r.   r]   zmerge.<locals>.<listcomp>w  *    CCC	4	4!3	4	4	4CCCr0   c                     g | ]	}|j         
S rO   r  r  s     r.   r]   zmerge.<locals>.<listcomp>x      ***	***r0   NNValue1Value2)src)r   r+   r   r   r   valueFormat1r
   r   r  valueFormat2r  r6   ry   PairValueCountr|   r   r   _firstGlyphrH   r   )rE   r-   rm   r   r   pvrsr   r   r~   rr   r   rY   vpairv1v2s                  r.   r4   r4   r  s7    (CCsCCC**c*** NFF #%$D4 	 	 ""7=7JTFv2333PT 	
 8>7JTFv2333PT 	
 	Cd233Dv&&  	6!&)) 	 	HAu"$$A!AMay$q	@F3A68H%  }#BBUHd33UHd33 &"6#6B???? H &"6#6B???? H
 F1II3	4 	
d*F33333r0   c                    t          d |D                       s
J d            |                    | |d           t          j                    }g |_        d|_        t          |j        d |D             d |D             |          \  }}|| j        _	        d	 |D             | _        t          | j                  | _        t          || j                  D ]\  }}||_        |                    | j        |           d S )
Nc                 2    g | ]}|j         	|j        d k    S r   r   ValueFormat2r   s     r.   r]   z)_PairPosFormat1_merge.<locals>.<listcomp>  &    777QY71	777r0   Report bug against fonttools.)r   r   PairSetCountValueFormat1r  r   r   c                 &    g | ]}|j         j        S rO   r   r\   s     r.   r]   z)_PairPosFormat1_merge.<locals>.<listcomp>      (((q	(((r0   c                     g | ]	}|j         
S rO   r   r\   s     r.   r]   z)_PairPosFormat1_merge.<locals>.<listcomp>  s       q   r0   r   c                 4    g | ]}t          j                    S rO   )r   r   )rX   r   s     r.   r]   z)_PairPosFormat1_merge.<locals>.<listcomp>  s    111QBJLL111r0   )r   ru   r   r   r   r  r   r+   r   r   ry   r  r}   r  r   )r-   rm   rE   emptyr   r   r   r   s           r.   _PairPosFormat1_merger&    s>   77c777  ' '&' ' '
 W     JLLEEE (((C(((  C   	  NFF "DM11&111DLDL))D..  	r
dlF+++++r0   c                 $   t          | t                    r| }n| r| j        r| j        ni }|r!t          |                                          nd}g }t          |dz             D ]#}|                    t                                 $|                                D ] \  }}||         	                    |           !|d |d<   nKt          |          x|d<   }|dd          D ],}	|	
                    |           |                    |	           -|S )Nr   r   )r   dictr   maxrr   ranger6   r   itemsaddintersection_updatedifference_update)
r-   	allGlyphsr   rM   r   r   r   rY   class0ss
             r.   _ClassDef_invertr2    s/   $ F		&*Et~EDNN2	#,3I!A
C1q5\\  

355!!  1A

1 A i..(AQRR 	( 	(A!!&)))$$Q''''Jr0   c                    t          j                    }i x|_        }|d u }|rd gt          |           z  }t	          j                    }t          | |          D ]6\  }}t          ||          }|
|dd          }|                    |           7|	                                }	|r"|	
                    dt                                 t          |	          D ]\  }
}|
dk    r|D ]}|
||<   ||	fS )Nr   r   )r   ClassDefr   ry   r   
Classifierr}   r2  r   
getClassesinsertr   r|   )rm   allGlyphsesr-   r   allGlyphsesWasNone
classifierclassDefr/  setsclassesr~   classSetr   s                r.   _ClassDef_merge_classifyr?    s&   ;==D!##DNY$, (fs3xx')++J"344    ))448D$##%%G !q#%%    ))  866 	 	AIaLL	 =r0   Fc                    d |D             }t          d |D             d |D                       \  | _        }t          |          | _        g }t	          ||          D ]S\  }}d }	t          |j        j                  }
|j        j        }g }|D ]}t          t          |                    }||
vrd }	|	t          j                    }	g x}|	_        t          |j                  D ]}}|rd }nat          j                    }| j        rt#          j        | j                  nd |_        | j        rt#          j        | j                  nd |_        |                    |           ~|	}n|                    |d          }||         }|                    |           |                    |           U|}~t          d |D                       \  | _        }t          |          | _        g }t	          ||          D ]\  }}|j        j        }g }|D ]}|j        }t          j                    }g x}|_        |D ]n}|s	|d         }n:t          t          |                    }|                    |d          }||         }|                    t3          j        |                     o|                    |           |                    |           |}~|S )Nc                     g | ]	}|j         
S rO   )r   r   s     r.   r]   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>  s    ,,,1,,,r0   c                     g | ]	}|j         
S rO   )r   r   s     r.   r]   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>  s    """"""r0   c                 &    g | ]}|j         j        S rO   r   r   s     r.   r]   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>  s    $D$D$D1QZ%6$D$D$Dr0   r   c                     g | ]	}|j         
S rO   )r   r   s     r.   r]   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>4  s    7Q7Q7Q7Q7Q7Qr0   )r?  r   ry   Class1Countr}   r   r   r   r   nextiterr   r   r   r*  Class2Countr  r
   r   r  r  r  r6   rI   r   r   deepcopy)r-   rm   r+   transparentmatricesr=  new_matricesr   matrixnullRowcoverage	classDef1class1Recordsr>  exemplarGlyphclass2recordsr   rec2rec1klass	classDef2rec1oldoldClass2Recordsrec1newclass2Recordss                            r.   _PairPosFormat2_align_matricesr\     s:   ,,,,,H 7""c"""$D$D$D$D$D DNG 7||DLh'' &+ &+	6qz())K)	  	'  	'H h00MH,,
 ? o//G;==MG$8"1=11 3 3& #'DD#%?#4#4D $(#4!* 243D E E E%) !K $(#4!* 243D E E E%) !K
 &,,T2222!mQ77e}  &&&&M****H 77Q7QS7Q7Q7QRRDNG7||DLh'' + +	6K)	 	* 	*G&3o''G355MG0# : : 3+A.DD$(h$8$8M%MM-;;E+E2D$$T]4%8%89999  ))))M****HOr0   c                    t          d |D                       s
J d            |                    | |d           t          |j        d |D                       \  }}|| j        _        t          ||j                  D ]#\  }}|j        j        |k    r||d         k    sJ $t          | ||j                  }t          |d                   | _
        |                    | j
        |           d S )Nc                 2    g | ]}|j         	|j        d k    S r  r   r  r   s     r.   r]   z)_PairPosFormat2_merge.<locals>.<listcomp>P  &    <<<Q^<1	<<<r0   r  )r   r   rE  r   rH  r   r  r  r   c                 &    g | ]}|j         j        S rO   r   r\   s     r.   r]   z)_PairPosFormat2_merge.<locals>.<listcomp>c  s    0P0P0Pq1B0P0P0Pr0   r   )r   ru   r   r+   r   r   r}   r   r\  r   r   r   )r-   rm   rE   r   r   r   r   rK  s           r.   _PairPosFormat2_mergerc  N  s$   <<c<<<  ' '&' ' ' 	
      #6;0P0PC0P0P0PQQIFA!DM C!899 & &9:&&	"%%%%-dCEEHXa[))D
d'22222r0   c                 Z   t          t          j        d |D             d          x| _        |_        t          t          j        d |D             d          x| _        |_        |j        dk    rt          |||            n.|j        dk    rt          |||            nt          | d          | `| `d}d}|j        dk    ri|j        D ]`}|j        D ]V}t          |dd           }|||                                z  }t          |d	d           }|||                                z  }Wans|j        dk    rh|j        D ]`}	|	j        D ]V}
t          |
dd           }|||                                z  }t          |
d	d           }|||                                z  }Wa||_        ||_        d S )
Nc                     g | ]	}|j         
S rO   r  r   s     r.   r]   zmerge.<locals>.<listcomp>z      111Q^111r0   r   c                     g | ]	}|j         
S rO   r  r   s     r.   r]   zmerge.<locals>.<listcomp>}  rg  r0   r   r   r   r   r  r  )r   r   r   r  r  r  r  r   r&  rc  r%   r   r   rH   r   r   r   )rE   r-   rm   vf1vf2pairSetpairValueRecordpv1pv2class1Recordclass2Records              r.   r4   r4   w  s	   .4
11S1111/ / F$+ /5
11S1111/ / F$+ {adC0000			dC00001JKKKKV0 C
C{a| 	+ 	+G#*#: + +ox>>?3==??*Cox>>?3==??*C+	+ 
		 - 	+ 	+L , 9 + +lHd;;?3==??*ClHd;;?3==??*C+ DDr0   MarkBasec           	         t          d |D                       | _        t          |j        fd|D             fd|D                       \  }}|t	          | dz             _        t          |j        fd|D             fd|D                       \  }}|t	          | dz             _        g }	t          |t          |           D ]\  }
}d |D             }t          |          st          ||d         |	          t          j
                    }|d         |_        d
 |D             }t          |          rd }n0t          j                    }d|_        |                    ||           ||_        |	                    |           t          j                    }|	|_
        t'          |	          |_        t+          | dz   |           g }	t          |t          |           D ]\  }
}t          |          rd }n t	          t          dz                         }g }t+          |dz   |           fd|D             }|D ]0}|                    d g| j        t'          |          z
  z             1t          | D ]Y}t          |          rd }n0t          j                    }d|_        |                    ||           |                    |           Z|	                    |           	 t	          t          dz                         }t+          |dz   |	           t+          |dz   t'          |	                     t+          | dz   |           d S )Nc              3   $   K   | ]}|j         V  d S r*   )
ClassCountr   s     r.   rZ   z,_MarkBasePosFormat1_merge.<locals>.<genexpr>  s$      441!,444444r0   c                 @    g | ]}t          |d z             j        S r   rH   r   rX   r   rr  s     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  +    ;;;!D:%	&	&	-;;;r0   c                 @    g | ]}t          |d z             j        S )Array)rH   
MarkRecordrz  s     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  s*    <<<1D7N	#	#	.<<<r0   r   c                 @    g | ]}t          |d z             j        S rx  ry  rX   r   rs  s     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  r{  r0   c           	      X    g | ]&}t          t          |d z             dz             'S )r}  Recordrc   r  s     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  s5    KKK!D7N++TH_	=	=KKKr0   c                      g | ]}||j         S r*   )ClassrX   rs     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  s    EEE!q}ag}}}r0   r   r^   c                 $    g | ]}|d n|j         S r*   )
MarkAnchorr  s     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  s"    TTT!!)$$TTTr0   r   r}  r  Anchorc                 >    g | ]}|g nt          |dz             S )Nr  rc   )rX   r  rs  s     r.   r]   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>  s<       EFaiWQx%@%@  r0   Count)r)  rv  r   r+   rH   r   r}   r   r   r   r~  r  r   r  r   rj   r  r6   	MarkArrayry   	MarkCountsetattrextend)r-   rm   rE   rr  rs  MarkCoverageGlyphsMarkRecordsBaseCoverageGlyphsBaseRecordsrecordsr   glyphRecords
allClassesr   
allAnchorsanchorarrayanchorsglyphAnchorsr   s      ``               r.   _MarkBasePosFormat1_merger    s   4444444DO&8;;;;s;;;<<<<<<<' '#
 /AGD$#$$+&8;;;;s;;;KKKKsKKK' '#
 /AGD$#$$+ G133DEE    <EE|EEE
$ 
## 	$"6JqMzRRRR-//C"1CITT|TTTJz"" 7 !""6:666#CNsLNNEE'llEOD$.%((( G133DEE  <<   	'CC.'"dXo..00CGC'222   JV  L " > >$4?SVV#;<====!<0 ' '
:&& ;!FFY[[F$%FM&&vz:::v&&&&s'GBw''))EE4(?G,,,E4'>3w<<000D$.%(((((r0   c                     t          |j        d |D                       s"t          | d|j        d |D                       |j        dk    rt          |||            d S t	          | d          )Nc              3   $   K   | ]}|j         V  d S r*   r   r   s     r.   rZ   zmerge.<locals>.<genexpr>  $      #:#:AH#:#:#:#:#:#:r0   zmark-to-base positioning lookupc                     g | ]	}|j         
S rO   r   r   s     r.   r]   zmerge.<locals>.<listcomp>       '''a'''r0   r   r_   r`   r   r   r   r   r$   r  r%   r   s      r.   r4   r4     s    dk#:#:c#:#:#:;; 
!6[''3'''	
 
 
 	
 {a!$V444441RSSSSr0   c                     t          |j        d |D                       s"t          | d|j        d |D                       |j        dk    rt          ||| dd           d S t	          | d          )	Nc              3   $   K   | ]}|j         V  d S r*   r   r   s     r.   rZ   zmerge.<locals>.<genexpr>
  r  r0   zmark-to-mark positioning lookupc                     g | ]	}|j         
S rO   r   r   s     r.   r]   zmerge.<locals>.<listcomp>  r  r0   r  r   Mark1Mark2r   r  r   s      r.   r4   r4     s    dk#:#:c#:#:#:;; 
!6[''3'''	
 
 
 	
 {a!$VWgFFFFF1RSSSSr0   c                 `   t          j                    }t          j                    |_        t          |d | D             d | D                       \  }}||j        _        g x|_        }t          | D ]"}|D ]}||                    |            nJ #t          |j                  |_	        |S )Nc                 0    g | ]}d  |j         D             S )c                     g | ]	}|j         
S rO   r  r\   s     r.   r]   z/_PairSet_flatten.<locals>.<listcomp>.<listcomp>  r  r0   r  r  s     r.   r]   z$_PairSet_flatten.<locals>.<listcomp>  r  r0   c                     g | ]	}|j         
S rO   r  r  s     r.   r]   z$_PairSet_flatten.<locals>.<listcomp>  r	  r0   )
r   r   r   r   r   r   r}   r6   ry   r  )rm   r+   r-   r   r   r  rr   rY   s           r.   _PairSet_flattenr    s    :<<DKMMDM (CCsCCC**c*** NFF "DM"$$D4v,   	 	A}A  L  d233DKr0   c                 (   t          d | D                       s
J d            t          j                    }d|_        t          j                    |_        t          t          j        d | D             d          |_        t          t          j        d | D             d          |_	        t          d | D             d | D                       \  }}||j        _        fd	t          | D             |_        t          |j                  |_        |S )
Nc                 2    g | ]}|j         	|j        d k    S r  r  r   s     r.   r]   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>2  r  r0   r  r   c                     g | ]	}|j         
S rO   rf  r   s     r.   r]   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>8      +H+H+HqAN+H+H+Hr0   r   c                     g | ]	}|j         
S rO   ri  r   s     r.   r]   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>9  r  r0   c                 &    g | ]}|j         j        S rO   r   r\   s     r.   r]   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>=  s    ...Qqz ...r0   c                     g | ]	}|j         
S rO   r"  r\   s     r.   r]   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>=  s    0H0H0Hq0H0H0Hr0   c                 D    g | ]}t          d  |D                       S )c                     g | ]}||S r*   rO   r\   s     r.   r]   zG_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>.<listcomp>B  s    ===q}!}}}r0   )r  )rX   rr   r+   s     r.   r]   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>A  sB        	==V===tDD  r0   )r   r   r   r   r   r   r   r   r  r  r   r   r}   r   ry   r  )rm   r+   r-   r   r   s    `   r.   (_Lookup_PairPosFormat1_subtables_flattenr  0  s5   77c777  ' '&' ' ' :<<DDKKMMDMsz+H+HC+H+H+H!LLDsz+H+HC+H+H+H!LLD (..#...0H0HC0H0H0H NFF "DM   6l  DL DL))DKr0   c                 "   t          d | D                       s
J d            t          j                    }d|_        t          j                    |_        t          t          j        d | D             d          |_        t          t          j        d | D             d          |_	        t          |d | D                       \  }}||j        _        t          || |d	          }g x}|_        t          | D ]}t          j                    }|                    |           g |_        |j        }t          t#          d
 |D                        D ]=}	t%          t'          d |	D                                 }
|                    |
           >|S )Nc                 2    g | ]}|j         	|j        d k    S r  r_  r   s     r.   r]   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>K  r`  r0   r  r   c                     g | ]	}|j         
S rO   rf  r   s     r.   r]   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>Q  r  r0   r   c                     g | ]	}|j         
S rO   ri  r   s     r.   r]   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>R  r  r0   c                 &    g | ]}|j         j        S rO   r   r\   s     r.   r]   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>U      )I)I)I!**;)I)I)Ir0   T)rJ  c              3   $   K   | ]}|j         V  d S r*   )r   r  s     r.   rZ   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>`  s$      ;;an;;;;;;r0   c              3      K   | ]}||V  	d S r*   rO   rX   cs     r.   rZ   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>a  s"      ==!q}A}}}}==r0   )r   r   r   r   r   r   r   r   r  r  r   r   r\  r   r}   r6   r   r   rF  rG  )rm   r+   r-   r   r   rK  rM  rowsrowcolscols              r.   (_Lookup_PairPosFormat2_subtables_flattenr  I  s   <<c<<<  ' '&' ' ' :<<DDKKMMDMsz+H+HC+H+H+H!LLDsz+H+HC+H+H+H!LLD #4)I)IS)I)I)IJJIFA!DM-dC4PPPH!##FTX  oc;;d;;;;;< 	 	Dt==t=====>>CJJsOOOO	 Kr0   c                    t          |           } t          |           }d}||k     r-| |         j        dk    r|dz  }||k     r| |         j        dk    t          | d|         |          g| d|<   t          |           }|}|dk    r3| |dz
           j        dk    r|dz  }|dk    r| |dz
           j        dk    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   )r   ry   r   r  r  )rm   r+   r   r~   s       r.   &_Lookup_PairPos_subtables_canonicalizer  g  s     s))CCA	A
a%%CFMQ&&	Q a%%CFMQ&&7BQBFFGCGCA	A
a%%CAJ%**	Q a%%CAJ%**7ABBFFGCGJr0   c                    t          |d | D             d           \  }}t          |          }t          j                    }d|_        ||_        t          j                    |_        ||j        _        ||_        d g|z  |_	        | D ]}|j        dk    rH|j	        }|j        j        D ]3}	|
                    |	          }
t          j        |          |j	        |
<   4U|j        dk    r]t          |j        j                  D ]C\  }}	|j	        |         }|
                    |	          }
t          j        |          |j	        |
<   D|gS )Nc                 &    g | ]}|j         j        S rO   r   r\   s     r.   r]   z7_Lookup_SinglePos_subtables_flatten.<locals>.<listcomp>}  r  r0   r   r   )r   ry   r   r   r   r   r   r   r   r   r   r   rI  r|   )rm   r+   min_inclusive_rec_formatr   r   
num_glyphsnew	singlePosval_recgnamer~   r   s               r.   #_Lookup_SinglePos_subtables_flattenr  |  sI   "4)I)IS)I)I)I4PPIFAVJ
,..CCJ.CO;==CL CLCN#CI 
6 
6	q  oG"+2 6 6LL''#}W55	!6 ""%i&8&?@@ 6 65#/!,LL''#}W55	!5Lr0   c                     t          | j        d |D             d |D                       \  }}d|_        t          j                    |_        ||j        _        g |_        |D ]w}t          j                    }t          j                    |_        d|j        _        t          j                    |_	        d|j	        _        |j        
                    |           x|                     |j        |           t          |j                  |_        d S )Nc                 &    g | ]}|j         j        S rO   r   r   s     r.   r]   zmerge.<locals>.<listcomp>  r   r0   c                     g | ]	}|j         
S rO   )EntryExitRecordr   s     r.   r]   zmerge.<locals>.<listcomp>  s    (((q	(((r0   r   )r   r+   r   r   r   r   r  r  EntryAnchor
ExitAnchorr6   r   ry   EntryExitCount)rE   r-   rm   r   r   r   r   s          r.   r4   r4     s     (((C(((((C((( NFF DKKMMDM!DMD ) ) "")++!" !##C((((
d*F333d233Dr0   c                     t          d |D                       rd |_        t          d |D                       rd |_        |                     ||           d S )Nc              3   (   K   | ]}|j         d u V  d S r*   )r  rX   masters     r.   rZ   zmerge.<locals>.<genexpr>  s*      
8
8&6%
8
8
8
8
8
8r0   c              3   (   K   | ]}|j         d u V  d S r*   )r  r  s     r.   rZ   zmerge.<locals>.<genexpr>  s*      
7
76$
7
7
7
7
7
7r0   )rh   r  r  ru   r   s      r.   r4   r4     sk    

8
8C
8
8
888  

7
73
7
7
777 
c"""""r0   c                 x    d |D             x} _         t          t          ||                    ||j        fgz   D ]\  }}|s|d         j        j                            d          rt          d |D                       st           dd |D                       t          d |D                       st                     |d         j	        |_
        d |D             }|d d = |                    |           |j        o$t          |j        d         t          j                  }|r5t          |j         j                  |_         fd	|D             x} _         n|j        o$t          |j        d         t          j                  }|rd
 |D             t%          fdD                       sZd |D             }	t'          t(          |	          t+          |j         j                  |_         fd|D             x} _         d}
nd}
                     |j        |           t/          |j                  |_        |rit/          |j                  dk    r|j        d         j        dk    sJ |j        d         j        j        s*|j                            d           |xj        dz  c_        t/          |j                  dk    r|j        d         j        dk    sJ |j        d         j        j        s*|j                            d           |xj        dz  c_         j        j                            dt?                                }|dk    rSt@          !                    d           tE           j        ||j                  |_        t/          |j                  |_        nh|rf|
rd|j        d         }|j        j        }d t          ||j#                  D             }tI          | j        %                                          |_         &                    ||ddg            ` d S )Nc                     g | ]	}|j         
S rO   )SubTabler   s     r.   r]   zmerge.<locals>.<listcomp>  s    *C*C*C!1:*C*C*Cr0   r   	Extensionc                     g | ]	}|j         
S rO   ri   rX   sts     r.   r]   zmerge.<locals>.<listcomp>  s    888bR\888r0   c                 &    g | ]}|j         j        S rO   )ri   r5   r  s     r.   r]   zmerge.<locals>.<listcomp>  s    ===2.===r0   r^   c                     g | ]	}|j         
S rO   )ExtensionLookupTyper  s     r.   r]   zmerge.<locals>.<listcomp>  s    BBBR3BBBr0   c                     g | ]	}|j         
S rO   )ExtSubTabler  s     r.   r]   zmerge.<locals>.<listcomp>  s    444"r~444r0   c                 :    g | ]}t          |j                  S rO   )r  r+   )rX   r  rE   s     r.   r]   zmerge.<locals>.<listcomp>  s3     /
 /
 /
HJ22v{CC/
 /
 /
r0   c                 ,    g | ]}t          |          S rO   rx   r  s     r.   r]   zmerge.<locals>.<listcomp>  s    888CGG888r0   c                 (    g | ]}|d          k    S r  rO   )rX   numsnumSubtabless     r.   r]   zmerge.<locals>.<listcomp>  s"    IIIDQ/IIIr0   c                 &    g | ]}|D ]	}|j         
S rO   r   )rX   r  ts      r.   r]   zmerge.<locals>.<listcomp>  s'    "Q"Q"QRb"Q"Q1="Q"Q"Q"Qr0   c                 <    g | ]}t          |j                  S rO   )r  r+   )rX   r  rE   mirfs     r.   r]   zmerge.<locals>.<listcomp>  s7     7 7 7 8FKNN7 7 7r0   TFr   rb  r   z0fontTools.otlLib.optimize.gpos:COMPRESSION_LEVELr#  zCompacting GPOS...c                     i | ]\  }}||	S rO   rO   )rX   r  	valRecords      r.   r   zmerge.<locals>.<dictcomp>  s+     
 
 
!1	E9
 
 
r0   r  SubTableCountr   )'r   r   r}   r  ri   r5   
startswithr   r#   r  
LookupTyper  r   r   r   r  r+   r   rh   r   r   r  r   ry   r  r   r   r   popcfgrI   r   loginfor   r   r   r   ru   )rE   r-   rm   r   r   stsnew_sts	isPairPosisSinglePosvalueFormatList	flattenedlevelsinglePosTabler   singlePosMappingr  r  s   `              @@r.   r4   r4     s   *C*Cs*C*C*CCI' s3	**++dm/D.EE    3 	q6$//<< 	 88C88899 ,(=====   
 BBcBBBCC 5,V444q65AL44444GAAAJJwJ*T]1-=rz"J"JI " ?M6;
 
/
 /
 /
 /
NW/
 /
 /
 	
	F++ mR
4=3CR\(R(R 	"88i888LIIIILIIIJJ " #R"Q9"Q"Q"Qc?33 CM6;! !7 7 7 7 7'7 7 7 	F3 !		!	
dmY///T]++D $
4=!!Q&&4=+;+Ba+G+G+G+G}Q(/ 	$Ma   !# 4=!!Q&&4=+<+Cq+H+H+H+H}R )0 	$Mb!!!!# ##>/11 $ 
 
 A::HH)***,V[%OODM!$T]!3!3D	 

 

q)(/
 
58AU5V5V
 
 
 'fk<<>>
 
 cJ+HIIIr0   c                       e Zd ZdZd ZdS )InstancerMergerzLA merger that takes multiple master fonts, and instantiates
    an instance.c                     t                               | |           || _        || _        |                    |          | _        d S r*   )r(   r/   modellocationgetMasterScalarsmasterScalars)r-   r+   r	  r
  s       r.   r/   zInstancerMerger.__init__#  s@    d###
 "33H==r0   Nr5   r   r   __doc__r/   rO   r0   r.   r  r    s-         > > > > >r0   r  c                     |j         dk    sJ d |D             }| j        }| j        }t          |                    ||                    |_        d S )Nr   c                     g | ]	}|j         
S rO   
CoordinaterX   as     r.   r]   zmerge.<locals>.<listcomp>-  s    (((qal(((r0   )r   r	  r  r   interpolateFromValuesAndScalarsr  )rE   r-   rm   Coordsr	  r  s         r.   r4   r4   *  s_    ;!((C(((FLE(M--fmDD DOOOr0   c                    |j         dk    sJ d |D             }d |D             }| j        }| j        }t          |                    ||                    |_        t          |                    ||                    |_        d S )Nr   c                     g | ]	}|j         
S rO   XCoordinater  s     r.   r]   zmerge.<locals>.<listcomp>8      ***q}***r0   c                     g | ]	}|j         
S rO   YCoordinater  s     r.   r]   zmerge.<locals>.<listcomp>9  r  r0   )r   r	  r  r   r  r  r  )rE   r-   rm   XCoordsYCoordsr	  r  s          r.   r4   r4   5  s    ;!**c***G**c***GLE(M--g}EE D --g}EE Dr0   c                     | j         }| j        }dD ]i\  }t          ||          rJ t          |          rBfd|D             }t          |                    ||                    }t          ||           jd S )N)XAdvance
XAdvDevice)YAdvance
YAdvDevice)
XPlacement
XPlaDevice)
YPlacement
YPlaDevicec                 2    g | ]}t          |d           S r  rc   rX   r  names     r.   r]   zmerge.<locals>.<listcomp>R  s%    777agaq))777r0   )r	  r  rg   r   r  r  )	rE   r-   rm   r	  r  	tableNamerr   rq   r-  s	           @r.   r4   r4   D  s    LE(M ' 'i 4+++++4 	'77773777F55fmLL E D$&&&' 'r0   c                       e Zd ZdZddZdS )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.Tc                 X    t                               | |           || _        || _        d S r*   )r(   r/   	instancerdeleteVariations)r-   r+   r2  r3  s       r.   r/   zMutatorMerger.__init__d  s+    d###" 0r0   NTr  rO   r0   r.   r0  r0  ^  s2         
1 1 1 1 1 1r0   r0  c                 B   |d         j                                         |_         |j        dk    rd S | j        }|j        }| j        r|`|rD|j        dk    sJ |j        dz  |j        z   }t          ||                   }|xj
        |z  c_
        | j        r	d|_        d S d S )Nr            r   )r@   r   r   r2  DeviceTabler3  DeltaFormat	StartSizeEndSizer   r  )rE   r-   rm   r2  devvaridxdeltas          r.   r4   r4   j  s     FO((**DM{a I

C 
 !&((((-2%4	&)**5   r0   c           	         |d         j                                         |_         |j        dk    rd S | j        }dD ]}|dz   }t	          ||          st          ||          }| j        rt          ||           |B|j        dk    sJ |j	        dz  |j
        z   }t          ||                   }|dz   }	t          ||	t          ||	          |z              | j        r	d|_        d S d S )	Nr   r6  XYr9  r7  r8  r  r   )r@   r   r   r2  rg   rH   r3  delattrr:  r;  r<  r   r  )
rE   r-   rm   r2  rY   r.  r=  r>  r?  r;   s
             r.   r4   r4     s    FO((**DM{a I 9 9%	tY'' 	dI&&" 	%D)$$$;&((((-2%4	&)**<dGD$//%78888  r0   c           
         |d         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              d S )Nr   r"  r7  r8  )r@   r   r2  rg   rH   r3  rB  r:  r;  r<  r   r  )	rE   r-   rm   r2  r-  r.  r=  r>  r?  s	            r.   r4   r4     s     FO((**DM I < <i tY'' 	dI&&" 	%D)$$$;&((((-2%4	&)**dGD$2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                               | |           t          j        |          | _        |                     |           d S r*   )r(   r/   r   OnlineVarStoreBuilderstore_buildersetModel)r-   r	  axisTagsr+   s       r.   r/   zVariationMerger.__init__  sA    d###%;HEEer0   c                 H    || _         | j                            |           d S r*   )r	  rH  rI  )r-   r	  s     r.   rI  zVariationMerger.setModel  s&    
##E*****r0   c                    d }d }d |v rt          |          r|t          | |          d S | j        }| j        r$t          d |D             | j                  | _        | j        }|                    |          \  }}|                     |           t          t          |           	                    ||           |r|                     |           |r	|| _        d S d S )N)r`   c                     g | ]}|d uS r*   rO   r\   s     r.   r]   z/VariationMerger.mergeThings.<locals>.<listcomp>  s    $@$@$@qQd]$@$@$@r0   )
r   r   r,   r   r	  getSubModelrI  superrE  rj   )r-   rl   rm   masterModelorigTTFsr	  ri   s         r.   rj   zVariationMerger.mergeThings  s    3;;s|| ?$Ts3333 yHy M#$@$@C$@$@$@$)LL	*K$0055JE3MM%   ot$$00c::: 	'MM+&&& 	! DIII	! 	!r0   )r5   r   r   r  r/   rI  rj   __classcell__r  s   @r.   rE  rE    s`           
+ + +! ! ! ! ! ! ! ! !r0   rE  c                     t          |          r
|d         d fS |                     |          \  }}|t          j        |          fS r   )r   storeMastersr   buildVarDevTable)rH  master_valuesbasevarIdxs       r.   rU  rU    sO     &Q%% --m<<LD&)&1111r0   c                     |j         dk    rt          | d          t          | j        d |D                       \  |_        }|rd|_         ||_        d S d S )Nr   za baseline coordinater   c                     g | ]	}|j         
S rO   r  r  s     r.   r]   zmerge.<locals>.<listcomp>      999q|999r0   r6  r   r%   rU  rH  r  r9  rE   r-   rm   r9  s       r.   r4   r4     sy    {a1HIIII#399S999$ $ DO[  '&' 'r0   c                     |j         dk    rt          | d          t          | j        d |D                       \  |_        }|rd|_         ||_        d S d S )Nr   za caretr   c                     g | ]	}|j         
S rO   r  r  s     r.   r]   zmerge.<locals>.<listcomp>  r[  r0   r6  r\  r]  s       r.   r4   r4     sx    {a;;;;#399S999$ $ DO[  '&' 'r0   c                    |j         dk    rt          | d          t          | j        d |D                       \  |_        }t          | j        d |D                       \  |_        }|s|rd|_         ||_        ||_        d S d S )Nr   z	an anchorr   c                     g | ]	}|j         
S rO   r  r  s     r.   r]   zmerge.<locals>.<listcomp>
      :::q}:::r0   c                     g | ]	}|j         
S rO   r  r  s     r.   r]   zmerge.<locals>.<listcomp>  rb  r0   r6  )r   r%   rU  rH  r  r  XDeviceTableYDeviceTable)rE   r-   rm   rd  re  s        r.   r4   r4     s    {a====%5::c:::& &"Dl &6::c:::& &"Dl  )| )(() )r0   c                     dD ]]\  }t          |          rHt          | j        fd|D                       \  }}t          ||           |rt          |||           ^d S )Nr"  c                 2    g | ]}t          |d           S r  rc   r,  s     r.   r]   zmerge.<locals>.<listcomp>  s%    &H&H&Hqwq$':':&H&H&Hr0   )rg   rU  rH  r  )rE   r-   rm   r.  rq   deviceTabler-  s         @r.   r4   r4     s     6 6i 4 	6!1$&H&H&H&HC&H&H&H" "E; D$&&& 6i5556 6r0   c                       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dS )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.
    Tc                     t                               | |||           i | _        g | _        t	                      | _        g | _        d | _        |rt                      | _        d| _	        d S )NF)
rE  r/   varIndexCachevarIdxesr   varTableIdslayerslayerReuseCacher   _doneBaseGlyphs)r-   r	  rJ  r+   allowLayerReuses        r.   r/   zCOLRVariationMerger.__init__1  sn      uh===   55# 	5#2#4#4D $r0   COLRc                     d|v r$d|v r |                      |d         j                   t                              | |||           d S )Nrt  )expandPaintColrLayersrd   rE  r   )r-   r+   r   r   s       r.   r   zCOLRVariationMerger.mergeTablesC  sR    Y6T>> &&tF|'9:::##D$YGGGGGr0   c                     dS )NTrO   )r   s    r.   <lambda>zCOLRVariationMerger.<lambda>P  s    4 r0   c                    |j         }|j        }d}	  ||          } ||          }n# t          $ r Y nw xY w|s$t          | t	          |          j        |          |}g }|D ]E}	t          |	dd           }	  ||          }n# t          $ r Y nw xY w|                    |           Ft          ||          s%t          | t	          |          j        ||          |S )NF)r   rq   r   r  )
r   
formatEnum
ValueErrorr%   rA   r5   rH   r6   r   r$   )
r-   rl   rm   validatefmtrz  okr_   r`   rY   s
             r.   checkFormatEnumz#COLRVariationMerger.checkFormatEnumP  s7   j^
	*S//C #BB  	 	 	D	  	R#D4993ESQQQQ 	 	A!Xt,,C joo   JJsOOOO(C(( 	%c+!	    s   ) 
669B
BBc                     |                                 D ]\	 |                     |         fd|D                        ,# t          $ r$}|j                            dd            d }~ww xY wd S )Nc                 :    g | ]}|                               S rO   r   )rX   rY   r   s     r.   r]   z7COLRVariationMerger.mergeSparseDict.<locals>.<listcomp>q  s#    )@)@)@q!%%(()@)@)@r0   [])rW   rj   r&   rk   r6   )r-   rl   rm   rt   r   s       @r.   mergeSparseDictz#COLRVariationMerger.mergeSparseDictn  s     	 	A  Q)@)@)@)@C)@)@)@AAAA#   z1zzz***	 	s   (A
A0A++A0c                     |D ]gt          |          }fd|D             }	 |                     ||           8# t          $ r#}|j                            d             d }~ww xY wd S )Nc                 0    g | ]}t          |          S rO   rc   rX   ro   r;   s     r.   r]   z2COLRVariationMerger.mergeAttrs.<locals>.<listcomp>y  s#    :::dgdD)):::r0   rf   )rH   rj   r&   rk   r6   )r-   rl   rm   r<   rq   rr   rt   r;   s          @r.   
mergeAttrszCOLRVariationMerger.mergeAttrsv  s     	 	DC&&E::::c:::F  ////#   z4zz***	 	s   <
A)A$$A)c                 P   fd|D             }d}|                               t          t                    rd}fd|D             }|d         }t          j        }t          |          s| j                            |          \  }}|r                    |          }||fS )Nc                 0    g | ]}t          |          S rO   rc   r  s     r.   r]   z;COLRVariationMerger.storeMastersForAttr.<locals>.<listcomp>  s#    ===t,,===r0   FTc                 :    g | ]}                     |          S rO   )toInt)rX   rY   convs     r.   r]   z;COLRVariationMerger.storeMastersForAttr.<locals>.<listcomp>  s#    BBBqTZZ]]BBBr0   r   )	getConverterByNamer   r   r   NO_VARIATION_INDEXr   rH  rT  fromInt)	r-   rl   rm   r;   rV  is_fixed_size_float	baseValuerX  r  s	      `    @r.   storeMastersForAttrz'COLRVariationMerger.storeMastersForAttr  s    =======
 $%%d++dN++ 	C"&BBBBMBBBM!!$	&&& 	O $ 2 ? ? N NIv 	0Y//I&  r0   returnc                    t          |          }| j                            |          }|ht          t	          | j                  t	          |          z
  dz             D ]3}| j        ||t	          |          z            |k    r|x| j        |<   } n4|t          t	          |          dz
  dd          D ]c}| j        | d          |d |         k    rEt	          | j                  |z
  }|| j        |<   | j                            ||d                      nd|8t	          | j                  x| j        |<   }| j                            |           |S )Nr   r   rb  )tuplerl  rI   r*  ry   rm  r  )r-   rm  re   varIndexBaser~   ns         r.   storeVariationIndicesz)COLRVariationMerger.storeVariationIndices  sr    Hoo)--c223t}--H=ABB  =QX%6!678CC=>>D&s+lE D 3x==1,a44  =!%"1"55#&t}#5#5#9L.:D&s+M((!""666E	 6 585G5GGDs#lM  ***r0   c                    t           j        }g }|D ]B}|                     |||          \  }}t          |||           |                    |           Ct          d |D                       r|                     |          }|S )Nc              3   6   K   | ]}|t           j        k    V  d S r*   )r   r  r\   s     r.   rZ   z9COLRVariationMerger.mergeVariableAttrs.<locals>.<genexpr>  s*      <<aqB))<<<<<<r0   )r   r  r  r  r6   anyr  )	r-   rl   rm   r<   r  rm  r;   r  rX  s	            r.   mergeVariableAttrsz&COLRVariationMerger.mergeVariableAttrs  s    , 	$ 	$D $ 8 8c4 H HIvCy)))OOF####<<8<<<<< 	@55h??Lr0   c                    t          |dd           D ]}|d         }|j        }t          |          j        } |            }|j                            |j                   |                                 |d         j        }|j        |t          ||j	                  |j        <   t          ||j	        |           d S )NTc                 X    t          t          | d         j                  dd           d uS )Nrb  VarType)rH   rA   rq   )paths    r.   rx  z?COLRVariationMerger.convertSubTablesToVarType.<locals>.<lambda>  s)    T"X^,,i>>dJ r0   )	skip_root	predicaterb  )r   rq   rA   r  r@   r   populateDefaultsr   rH   r-  r  )clsrd   r  r  subTablevarTypenewSubTableparents           r.   convertSubTablesToVarTypez-COLRVariationMerger.convertSubTablesToVarType  s    " 
 
 
 	6 	6D bBxH8nn,G!'))K ''(9:::((***"X^Fx#5@((225555#	6 	6r0   c                 |   | j         sdS t                      }g }| j        j        D ]M}|j        g}|r?|                                }|j        t          j        j	        k    r2|j        t          j        j
        k    rt          t          ||                     }t          |          }|D ]q}t          |          |v r't          j        |          }t          |          |vsJ |                    |           |                    t          |                     r||_        t          |          |_        n|                    |           }|                    t/          |                     |?Ot          |          t          |          k    sJ || j         _        t          |          | j         _        dS )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_layersry   idr   rI  r6   r,  FirstLayerIndex	NumLayersgetChildrenr  reversed
LayerCount)	colruniqueLayerIDsnewLayerListr   frontierpaintchildrenfirst_layer_indexlayers	            r.   rv  z)COLRVariationMerger.expandPaintColrLayers  s    ~ 	F%: 	4 	4C	{H 4 <2>#@@@\R^%CCC  $OE4$@$@AAH(+L(9(9%!) 6 6e9966$(M%$8$8E#%e99N#B#B#B#B$++E222&**2e995555,=E)&)(mmEOO$0066H 2 2333)  4, <  C$7$77777+$'$5$5!!!r0   Nr4  )rs  )r5   r   r   r  r/   r   r  r  r  r  r   r  r  r   r  staticmethodrv  rO   r0   r.   rj  rj  &  s         % % % %$H H H H 2@    <    ! ! !,    :S     6 6 [6( ,6 ,6 \,6 ,6 ,6r0   rj  c                 l   d |j         D             }d |D             }t          |                                          D ]l\  }	 |                     |         fd|D                        /# t          $ r1}|j                            d| d           d|j        d<    d }~ww xY wd| _        d S )	Nc                     i | ]
}|j         |S rO   	BaseGlyphrX   r   s     r.   r   zmerge.<locals>.<dictcomp>  s    
C
C
C#3=#
C
C
Cr0   c                 0    g | ]}d  |j         D             S )c                     i | ]
}|j         |S rO   r  r  s     r.   r   z$merge.<locals>.<listcomp>.<dictcomp>	  s    EEEssEEEr0   )r  )rX   rM   s     r.   r]   zmerge.<locals>.<listcomp>	  s*    SSS!EEa.DEEESSSr0   c                 :    g | ]}|                               S rO   r   )rX   rY   r   s     r.   r]   zmerge.<locals>.<listcomp>  s#    'B'B'BQa'B'B'Br0   z.BaseGlyphPaintRecord[r  zbase glyph r
  T)	r  r|   rW   rj   r&   rk   r6   causerq  )rE   r-   rm   rl   mastersr~   rt   r   s          @r.   r4   r4     s     D
C)B
C
C
CCSSsSSSG#((**%%  1	s1v'B'B'B'B''B'B'BCCCC 	 	 	GNN8A888999"5"5"5AGJ	
 "Fs   (A//
B*9,B%%B*c                 r    | j         s
J d            t          | j                  |_        | j        |_        d S )Nz-BaseGlyphList must be merged before LayerList)rq  ry   ro  r  r  r   s      r.   r4   r4     s:     !RR#RRRR&-((DODJJJr0   c              #      K   | j         t          j        j        k    sJ |                     |          D ]7}|j         t          j        j        k    rt          ||          E d {V  3|V  8d S r*   )r   r   r  r  r  r  )rootr  r  s      r.   r  r  !  s      ;".88888!!$''  <2>999&ud3333333333KKKK	 r0   c                     t          t          | j        d         j                            }t	           j                  t	                    k    sJ  fdt          t	                              D             }	                      ||           n-# t          $ r }|j	        
                    d            d }~ww xY w j         j                            |          }t	          |          t          k    }t          |t                    } fdfd|D             }t	          |          dk    rF|d         j        t           j        j        k    r&|d         j        |_        |d         j        |_        d S t	          |          |_        t	           j                  |_         j                            |            j        $|s$ j                            ||j                   d S d S d S )	Nrt  c           	          g | ];}t          t          |         j        |         d          j                            <S rs  )r   r  r,   rd   )rX   r~   rm   r-   s     r.   r]   z*_merge_PaintColrLayers.<locals>.<listcomp>3  sM        	_SVTYq\&%9%?@@AA  r0   z.Layers)r  c                    t          | t                    rfd| D             }t          j                    } t	          t          j        j                  | _        t          |          | _	        t          j
                  | _        j
                            |           j         j                            || j                   | S )Nc                 &    g | ]} |          S rO   rO   rX   r   listToColrLayerss     r.   r]   zD_merge_PaintColrLayers.<locals>.listToColrLayers.<locals>.<listcomp>O  s%    999a&&q))999r0   )r   r   r   r  r   r  r  r   ry   r  ro  r  r  rp  r,  )r  ro  r  r-   s     r.   r  z0_merge_PaintColrLayers.<locals>.listToColrLayersM  s    eT"" 	H99995999FHJJEr~=>>EL!&kkEO$'$4$4E!Kv&&&#/$((1FGGGr0   c                 &    g | ]} |          S rO   rO   r  s     r.   r]   z*_merge_PaintColrLayers.<locals>.<listcomp>Y  s%    :::!""1%%:::r0   r   r   )r   r  r+   rd   ry   r,   r*  r   r&   rk   r6   rp  	try_reuser   r   r   r   r  r  r  r  ro  r  r,  )r-   rl   rm   
out_layersmaster_layersesrt   is_treer  s   ` `    @r.   _merge_PaintColrLayersr  *  s    oc49V+<+BCCDDJ ty>>SXX%%%%    s3xx  O

O4444    	
y!!!	 ')33J??
 *oo ::G!*0JKKKJ
 
 
 
 
 
 ;:::z:::J
:!
1 48V V V
 #1/(m;J!$+..:&&& +G+ $$Z1DEEEEE ,+++s   B 
C#B>>Cc                    	                       ||d           }|t          j        j        u rt	           ||           d S |                                }d	|"t          j        t          |          |          		fd|	                                D             } 
                    |||                                ||	          }d |                                D             }|t          j        k    pt           fd|D                       }|r:	r||_        |r                     |           |J t#          |          |_        d S d S )Nc                 ,    |                                   S r*   )is_variable)r}  s    r.   rx  zmerge.<locals>.<lambda>p  s    COO<M<M8M r0   rO   c              3   8   K   | ]}|j         v|j         V  d S r*   r-  rX   r  varAttrss     r.   rZ   zmerge.<locals>.<genexpr>{  1      RRa16;Q;Q16;Q;Q;Q;QRRr0   c                     g | ]	}|j         
S rO   )rq   r  s     r.   r]   zmerge.<locals>.<listcomp>  s    999b999r0   c              3   D   K   | ]}t          |          j        v V  d S r*   r  rn  )rX   rd   rE   s     r.   rZ   zmerge.<locals>.<genexpr>  sB       > >,15		V''> > > > > >r0   )r  r   r  r  r  as_variabler
   getVariableAttrsrA   getConvertersr  r  iterSubTablesr  r  VarIndexBaser  r   r   )
rE   r-   rm   r}  	varFormatstaticAttrsr  	subTables
isVariabler  s
   `        @r.   r4   r4   n  s   

 
 s,M,M
N
NC
bn,,,vtS111!!IH*4::yAARRRR4#5#5#7#7RRRK
dC---,,T3AAL99D$6$6$8$8999I !66 # > > > >5>> > > ; ;J  % 	- !-D 	3,,T222$$$)nn% %r0   c                 t   t          |          j        }t          j        |          fd|                                D             }|                     |||           |                     ||          }|t          j        k    r0||_	        | j
                            t          |                     d S d S )Nc              3   8   K   | ]}|j         v|j         V  d S r*   r  r  s     r.   rZ   zmerge.<locals>.<genexpr>  r  r0   )rA   r  r
   r  r  r  r  r   r  r  rn  r,  r  )rE   r-   rm   r  r  r  r  s         @r.   r4   r4     s    4jj G&w//HRRRR4#5#5#7#7RRRK
dC---,,T3AALr,,,(r$xx((((( -,r0   c                 *                          ||d |                                D                        t           fd|j        D                       r>                     |            j                            t          |                     d S d S )Nc              3   $   K   | ]}|j         V  d S r*   r  r  s     r.   rZ   zmerge.<locals>.<genexpr>  s$      !G!GQ!&!G!G!G!G!G!Gr0   c              3   D   K   | ]}t          |          j        v V  d S r*   r  )rX   stoprE   s     r.   rZ   zmerge.<locals>.<genexpr>  s1      
E
Ed2d88v))
E
E
E
E
E
Er0   )r  r  r  	ColorStopr  rn  r,  r  r   s   `  r.   r4   r4     s    
dC!G!G$2D2D2F2F!G!G!GHHH

E
E
E
Edn
E
E
EEE )((...r$xx((((() )r0   clipsc                 2    |                      ||           d S r*   )r  r   s      r.   r4   r4     s      4%%%%%r0   r
  r*   )F)rr  rs  )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   r  r   r   r   r   r&  r2  r?  r\  rc  r   r  MarkBasePosMarkMarkPosr  r  r  r  r  
CursivePosr  Lookupr  
CaretValuer0  rE  rU  	BaseCoordrj  r  r  r  r  r  ClipBox	Affine2x3r  	ColorLineClipListrO   r0   r.   <module>r     sJ	    
			          R R R R R R R R ( ( ( ( ( ( - - - - - - 5 5 5 5 5 5 1 1 1 1 1 1 3 3 3 3 3 3 > > > > > > < < < < < < < < < < < < 6 6 6 6 6 6 6 6 6 6 S S S S S S S S S S S S S S 7 7 7 7 7 7       3 3 3 3 3 3       
 g122                         r r r r rV r r rp	 	 	 	 	V 	 	 	 rw00# # 10#2  " " " "J v)**# # +*# ry!!# # "!#  $  6 r|$$: : %$:z rz""24 24 #"24j, , ,B   8   6K K K K\&3 &3 &3R rz""( ( #"(VS) S) S) S)l r~&&T T '&T r~&&T T '&T  2  2  <  *  0 r}%%4 4 &%4. r)**# # +*# ry!!a  a  "!a R> > > > >n > > > &&  '& 	""  #" *++' ' ,+'2	1 	1 	1 	1 	1N 	1 	1 	1 bm$$  %$* bi    ! : f())< < *)<>%! %! %! %! %!n %! %! %!P2 2 2 %%' ' &%' &&' ' '&' 	"") ) #") *++6 6 ,+6 \6 \6 \6 \6 \6/ \6 \6 \6~ B,--" " .-"" BL))  *)  AF AF AFH RXrz233%% %% 43%%P R\2<899) ) :9)  BL))) ) *)) BK11& & 21& & &r0   