
    <`r                        d Z ddlZddlZddlmZ ddl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 ddlmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"  ej#        d          Z$ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m-Z-m.Z.  G d de/          Z0 G d de0          Z1e12                    ej3        d          d             Z4d Z5dAdZ6d Z7d Z8e12                    ej9                  d             Z4e12                    ej:                  d             Z4d Z;dBdZ<dBd Z=dCd"Z>d# Z?e12                    ej@                  d$             Z4dDd'ZAe12                    ejB                  d(             Z4e12                    ejC                  d)             Z4d* ZDd+ ZEd, ZFd- ZGd. ZHe12                    ejI                  d/             Z4 G d0 d1e1          ZJeJ2                    ejK                  d2             Z4eJ2                    ejL                  d3             Z4eJ2                    ejM                  d4             Z4 G d5 d6e1          ZNeN2                    ejK                  d7             Z4eN2                    ejL                  d8             Z4eN2                    ejM                  d9             Z4 G d: d;e1          ZOd< ZPeO2                    ejQ                  d=             Z4eO2                    ejK                  d>             Z4eO2                    ejL                  d?             Z4eO2                    ejM                  d@             Z4dS )Ez4
Merge OpenType Layout tables (GDEF / GPOS / GSUB).
    N)ior)classifyTools)otRound)otTables)otBase)DefaultTable)buildermodelsvarStore)nonNoneallNoneallEqual
allEqualTo)VarStoreInstancer)reduce)buildSinglePos)compact_pair_posGPOS_COMPACT_MODE_DEFAULTGPOS_COMPACT_MODE_ENV_KEYzfontTools.varLib.merger   )
ShouldBeConstant
FoundANoneMismatchedTypesLengthsDiffer
KeysDifferInconsistentGlyphOrderInconsistentExtensionsUnsupportedFormatr   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 S N)font)selfr$   s     7lib/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          k    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__appendr*   
setdefault)methoddoneclazzr*   attrattrscelfclazzess        r&   wrapperzMerger.merger.<locals>.wrapper5   s    
/W
$
$
$
$
4  u}}hKKl%%eR00G  INY]Y]Y]^  WT]] $r(   )r!   __dict__r*   typestr)r5   r6   r4   r7   s   ``` r&   mergerzMerger.merger,   s    	3dm##4<	']]dZ7	%[[C85       
.r(   c                     t          |          }|                                 D ]8} t          | dd           }| n"| j                            |d           }||c S 9|S )Nr*   )r9   mrogetattrr*   get)r5   thing_defaulttypr*   ms         r&   
mergersForzMerger.mergersForC   sp    U#hhjj  dT9d++7o	E|T""1mHHH  
/r(    c                    t          |d          r|                                 |D ]&}t          |d          r|                                 '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ensureDecompiledc              3   |   K   | ]6}t          t          |                                                    k    V  7d S r#   sortedvarskeys).0vrL   s     r&   	<genexpr>z&Merger.mergeObjects.<locals>.<genexpr>Z   s>      99TVDGGLLNN+++999999r(   c                 j    g | ]0}t          t          |                                                    1S rE   rI   rM   rN   s     r&   
<listcomp>z'Merger.mergeObjects.<locals>.<listcomp>\   s.    ---AQ		---r(   expectedgot*c                 0    g | ]}t          |          S rE   r>   )rM   tablekeys     r&   rR   z'Merger.mergeObjects.<locals>.<listcomp>d   s#    333egeS!!333r(   .)hasattrrG   rJ   rK   rL   allr   rD   r?   	__class__mergeThingsr>   r   stackr.   )r%   outlstexcludeitemr*   defaultMergervaluevalues
mergerFuncerZ   rL   s              @@r&   mergeObjectszMerger.mergeObjectsS   s   S$%%   dd&'' 	S		  	!	!$	9999S999	9	9 	D4-----
 
 
  OOC  '++c4>#=>>-		 $ $s
g~~xCE3333s333FS-00JJtUF####$ $ 
 	 	 	7>>#c'	s   +AD8 8
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 rE   lenrM   xs     r&   rR   z%Merger.mergeLists.<locals>.<listcomp>m   s    4I4I4ISVV4I4I4Ir(   rS   z[%d])	r   rn   r   	enumeratezipr_   r   r`   r.   )r%   ra   rb   irf   rg   ri   s          r&   
mergeListszMerger.mergeListsk   s    	Cc	"	" K	tc#hh4I4IS4I4I4I	J	J	JJ#CS#Y$7$788 
 
av
UF####
 
 
 
GNN6A:	

 
s   -B
B1B,,B1c                    t          ||t                    s.t          | t          |          j        d |D                       |                     |                              d d           }| || ||           d S t          |d          r|                     ||           d S t          |t                    r| 
                    ||           d S t          ||          st          | ||          d S )Nc                 6    g | ]}t          |          j        S rE   )r9   r-   ro   s     r&   rR   z&Merger.mergeThings.<locals>.<listcomp>y   s!    	(	(	(q$q''
	(	(	(r(   rS   r8   )r   r9   r   r-   rD   r?   r\   rj   
isinstancelistrt   r   )r%   ra   rb   rh   s       r&   r_   zMerger.mergeThingsu   s   	Cd	#	# 	3ii 	(	(C	(	(	(
 
 
  s##''d33*:dCsJ 8S##t 8??3
S#

 8
4#3
7
7
778 8r(   c                     |D ]p|vr	 fd|D             | _         |                     |         fd|D                        D# t          $ r }|j                                        d }~ww xY wd S )Nc                     g | ]}|v |	S rE   rE   rM   rC   tags     r&   rR   z&Merger.mergeTables.<locals>.<listcomp>   s    444q3!88888r(   c                 ,    g | ]}|v r|         nd S r#   rE   r{   s     r&   rR   z&Merger.mergeTables.<locals>.<listcomp>   s9     !" !" !" ,/!883 !" !" !"r(   )ttfsr_   r   r`   r.   )r%   r$   master_ttfs	tableTagsri   r|   s        @r&   mergeTableszMerger.mergeTables   s     
 
c	oox
4444K444DIT#Y !" !" !" !" !" !" !" # # # #
 
 
 
GNN3	

 
s   ;A
A2A--A2)r#   )rE   )r-   
__module____qualname__r'   classmethodr;   rD   rj   rt   r_   r   rE   r(   r&   r!   r!   '   s               +, &(    +	 	 	 	0
 
 
8 8 8"	
 	
 	
 	
 	
r(   r!   c                       e Zd ZdS )AligningMergerN)r-   r   r   rE   r(   r&   r   r      s        r(   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 )NrS   c                     g | ]	}|j         
S rE   )	classDefsrM   ls     r&   rR   zmerge.<locals>.<listcomp>   s    !!!!!!r(   c                 6    g | ]}|                                 S rE   )rL   r   s     r&   rR   zmerge.<locals>.<listcomp>   s     (((q!&&(((((r(   c              3   B   K   | ]}|                               V  d S r#   )r?   )rM   r   ks     r&   rO   zmerge.<locals>.<genexpr>   s-      ,,1aeeAhh,,,,,,r(   r   r[   )rT   rU   r`   )r   NotANoner   setupdater   r   r   )r;   r%   rb   allKeys	allValuesr   s        @r&   r,   r,      s   L	 2	&4S	1	1	11&!!S!!!55((C((())
  Q,,,,,,,,,)	)		 S	&9Q<Sq		R	R	RR	 477q\477 r(   c                       j         dk    r S t          j                    }d|_          j        |_         j        |_         fd|j        j        D             |_        t          |j                  |_        |S )N   c                     g | ]	}j         
S rE   Value)rM   _r%   s     r&   rR   z._SinglePosUpgradeToFormat2.<locals>.<listcomp>   s    666Qdj666r(   )	Formatot	SinglePosCoverageValueFormatglyphsr   rn   
ValueCount)r%   rets   ` r&   _SinglePosUpgradeToFormat2r      sm    K1Tk	|~~#6666#,"5666ci..r(   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 )aB  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 rE   )r   r   s     r&   rR   z&_merge_GlyphOrders.<locals>.<listcomp>   s    ###!s1vv###r(   c                 H    g | ]\  }}d  t          ||          D              S )c                     i | ]\  }}||	S rE   rE   )rM   grN   s      r&   
<dictcomp>z1_merge_GlyphOrders.<locals>.<listcomp>.<dictcomp>   s    )))!!)))r(   )rr   )rM   r   vss      r&   rR   z&_merge_GlyphOrders.<locals>.<listcomp>   s3    JJJda))s1Ryy)))JJJr(   rZ   c              3   B   K   | ]}t          |           |k    V  dS )r   N)rJ   )rM   r   sortKeys     r&   rO   z%_merge_GlyphOrders.<locals>.<genexpr>   s5      88bF27###r)888888r(   c                 0    g | ]fd D             S )c                      g | ]
}|v r|nS rE   rE   rM   glyphdefaultdict_sets     r&   rR   z1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>   s7       
 x''UUW   r(   rE   rM   r   r   orders    @r&   rR   z&_merge_GlyphOrders.<locals>.<listcomp>   P          	            r(   c                 0    g | ]fd D             S )c                 ,    g | ]}|v r|         nS rE   rE   r   s     r&   rR   z1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>   s;       
 !& 1 1Xe__w   r(   rE   r   s    @r&   rR   z&_merge_GlyphOrders.<locals>.<listcomp>   r   r(   )	rr   r   r   getReverseGlyphMap__getitem__rJ   r]   r   rn   )
r$   rb   
values_lstr   	dict_setscombinedpaddedValuespaddedr   r   s
      `    @@r&   _merge_GlyphOrdersr      sC    ##s###))JJc#j6I6IJJJ)EE)""$$0	g	&	&	&8888C88888 !                 && 
SS__	$	$	$	$              & 	vr(   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)	r9   r   r   r   r   r   r   indexr   )r;   	subtablesr   r%   s       r&   %_Lookup_SinglePos_get_effective_valuer      s     I IT	\	$ZZ2<	]
$-&&&	[A
*{a
*T])//66
7777	6,G	H	H	HHr(   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   )r9   r   PairPosr   r   r   PairSetr   PairValueRecordSecondGlyph	ClassDef1r   r?   	ClassDef2Class1RecordClass2Recordr   )
r;   r   
firstGlyphsecondGlyphr%   pspvrrecklass1klass2s
             r&   (_Lookup_PairPos_get_effective_value_pairr      s!    G GT	\	$ZZ2:	]t}+++	[AT])//
;;<2		3  s
+%%ZZZZZ &{aN$((Q776N$((a886

F
#
0
8888	6,E	F	F	FFr(   c                   
 t          t          j        d |D             d          x|_        t	          |          dk    sdz  dk    st          | d          |j        j        
t          d |D                       ryt          
fd|D                       r^t          j
                  |_        |                     |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 rE   r   r   s     r&   rR   zmerge.<locals>.<listcomp>  s    5Q5Q5Qam5Q5Q5Qr(   r   r   ir   r   c              3   ,   K   | ]}|j         d k    V  dS )r   Nr   rQ   s     r&   rO   zmerge.<locals>.<genexpr>	  s(      ##!A######r(   c              3   8   K   | ]}|j         j        k    V  d S r#   r   r   )rM   rN   coverageGlyphss     r&   rO   zmerge.<locals>.<genexpr>	  s.      +]+]TUNaj>O,O+]+]+]+]+]+]r(   c                     g | ]	}|j         
S rE   r   rQ   s     r&   rR   zmerge.<locals>.<listcomp>  s    !7!7!7a!'!7!7!7r(   r   c                 ,    g | ]}t          |          S rE   )r   rQ   s     r&   rR   zmerge.<locals>.<listcomp>  s!    333!"1%%333r(   c                 &    g | ]}|j         j        S rE   r   rQ   s     r&   rR   zmerge.<locals>.<listcomp>      	)	)	)!*
	)	)	)r(   c                     g | ]	}|j         
S rE   r   rQ   s     r&   rR   zmerge.<locals>.<listcomp>  s    			a!'			r(   c                 8    g | ]}t          j                  S rE   )r   ValueRecord)rM   r   valueFormats     r&   rR   zmerge.<locals>.<listcomp>  s$    ???1v!+..???r(   )r   r   r   r   rc   c                 6    g | ]}|                                 S rE   )getEffectiveFormatrQ   s     r&   rR   zmerge.<locals>.<listcomp>-  s$    'S'S'S1(<(<(>(>'S'S'Sr(   )r   int__or__r   rn   r   r   r   r]   r   r   r   r_   	getFormatr   r   r$   r   rq   r   lookup_subtablesrt   rj   )r;   r%   rb   r   r   rs   rg   jr   rN   r   r   s             @@r&   r,   r,     s   "(5Q5QS5Q5Q5QST"U"UUK	SQ;-22&+FGGGG -&##s##### 	+]+]+]+]Y\+]+]+](](] 	!+..$*TZ!7!73!7!7!7888Z))++$& 33s333 %V[	)	)S	)	)	)		3			! ! ???????tz??6"" 
 
XQv6"" 	 	gaQiX
 -VV5LQ5OQVWW1i;''A6!99	 4:v&&& T3<  > > >3:'S'S
'S'S'SUVWWr(   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 rE   r   rQ   s     r&   rR   z$merge.<locals>.<listcomp>.<listcomp>3      000am000r(   r   rM   r   s     r&   rR   zmerge.<locals>.<listcomp>3  *    ???R00R/000???r(   c                     g | ]	}|j         
S rE   r   r   s     r&   rR   zmerge.<locals>.<listcomp>4      &&&BR&&&r(   NNValue1Value2)src)r   r$   r   r   r   valueFormat1r   r   r   valueFormat2r   r.   rn   PairValueCountrq   r   r   _firstGlyphr>   rt   )r;   r%   rb   r   r   pvrsr   r   rs   rg   r   rN   vpairv1v2s                  r&   r,   r,   /  s    %V[??3???&&#&&&( (  "!  U
##/:@:MWv!&"5666SW#*:@:MWv!&"5666SW#*++c4/006""  XQv6""  ga	11=Qi1IEE4V$Q')95 E mFB	$	'	'B	$	'	'BAGAT^f !4"====Z^18AGAT^f !4"====Z^186!99#$ 
4'00000r(   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&   rR   z)_PairPosFormat1_merge.<locals>.<listcomp>W  &    @@@!ai@!.A%@@@r(   Report bug against fonttools.)r   r   PairSetCountValueFormat1r  r   r   c                 &    g | ]}|j         j        S rE   r   rQ   s     r&   rR   z)_PairPosFormat1_merge.<locals>.<listcomp>e  r   r(   c                     g | ]	}|j         
S rE   r   rQ   s     r&   rR   z)_PairPosFormat1_merge.<locals>.<listcomp>f      	!	!	!!)	!	!	!r(   )r   c                 4    g | ]}t          j                    S rE   )r   r   )rM   r   s     r&   rR   z)_PairPosFormat1_merge.<locals>.<listcomp>j  s    ...!...r(   )r   rj   r   r   r   r  r   r$   r   r   rn   r  rr   r  rt   )r%   rb   r;   emptyr   r   r   r   s           r&   _PairPosFormat1_merger  V  s/   @@s@@@AAbbCbbbb T3)  * * *
 
 %V[	)	)S	)	)	)	!	!S	!	!	!  
 ..v...&&fdl++  YUB"..4<(((((r(   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   )rw   dictr   maxrg   ranger.   r   itemsaddintersection_updatedifference_update)
r%   	allGlyphsr   rC   r   r   r   rN   class0ss
             r&   _ClassDef_invertr#  q  s/   tT @)) $??dnnR) )0S				q	
A,,  Q**SUUOO  SQqa&**Q---- #a&& 	NN"#a&6qrr7  a   	Ar(   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   rn   r   
Classifierrr   r#  r   
getClassesinsertr   rq   )rb   allGlyphsesr%   r   allGlyphsesWasNone
classifierclassDefr   setsclassesrs   classSetr   s                r&   _ClassDef_merge_classifyr0    s&   
  )!T) "S!+&((sK00  Xi	(I	.	.$
qrr(4D  "" 	..CEEW%%  ZQx!VV  a9Q<< 	gr(   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 rE   )r   r   s     r&   rR   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>  s    )))Q^)))r(   c                     g | ]	}|j         
S rE   )r   r   s     r&   rR   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>      4N4N4NQQ[4N4N4Nr(   c                 &    g | ]}|j         j        S rE   r   r   s     r&   rR   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>  s     PpPpPpghQRQ[QbPpPpPpr(   r   c                     g | ]	}|j         
S rE   )r   r   s     r&   rR   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>  r4  r(   )r0  r   rn   Class1Countrr   r   r   r   r   nextiterr   r   r   r  Class2Countr  r   r   r   r  r   r.   r?   r   copydeepcopy)r%   rb   r$   transparentmatricesr.  new_matricesr   matrixnullRowcoverage	classDef1class1Recordsr/  exemplarGlyphclass2recordsr   rec2rec1klass	classDef2rec1oldoldClass2Recordsrec1newclass2Recordss                            r&   _PairPosFormat2_align_matricesrO    s&   ))S))) 44N4N#4N4N4NPpPploPpPpPpqqLLS(## % %XQv'"##(k#)-  hX''=8##
 G  W,..]W)AM"" ! !	 Zttot>B>OYV'(9:::UYt{>B>OYV'(9:::UYt{4    DDMM-++E%=Dm$$$$ 44N4N#4N4N4NOOLLS(## % %XQvk#)- ! !g*_7*,,=7' . .x $QTT$x..))]]]=!,,UU#Tt,,----    m$$$$r(   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&   rR   z)_PairPosFormat2_merge.<locals>.<listcomp>  &    EEE!anE!.A%EEEr(   r  )r   r   r7  r   r:  r   r  r  r   c                 &    g | ]}|j         j        S rE   r   rQ   s     r&   rR   z)_PairPosFormat2_merge.<locals>.<listcomp>      +++!AJ+++r(   r   )r   rj   r   r$   r   r   rr   r   rO  rx   r   rt   )r%   rb   r;   r   r   r   r   r>  s           r&   _PairPosFormat2_mergerW    s   EEsEEEFFggHggggT3)  * * *  ++s+++- - F344  [QyZ&  
y}



*4fkBB(1+&&4$h/////r(   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 rE   r  r   s     r&   rR   zmerge.<locals>.<listcomp>      >[>[>[RSq~>[>[>[r(   r   c                     g | ]	}|j         
S rE   r  r   s     r&   rR   zmerge.<locals>.<listcomp>  r[  r(   r   r   r   r   r   r   )r   r   r   r   r  r  r  r   r  rW  r   r   r   r>   r   r   r   )r;   r%   rb   vf1vf2pairSetpairValueRecordpv1pv2class1Recordclass2Records              r&   r,   r,   
  s   +1#*>[>[WZ>[>[>[]^+_+__t(+1#*>[>[WZ>[>[>[]^+_+__t(K1c6****
kQc6****&+DEEEE&- 	K1  g!1  
/8T
2
2C
CMMOOS
/8T
2
2C
CMMOOS kQ'  l#0  |
,$
/
/C
CMMOOS
,$
/
/C
CMMOOS r(   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&   rO   z,_MarkBasePosFormat1_merge.<locals>.<genexpr>2  s$      11q|111111r(   c                 @    g | ]}t          |d z             j        S r   r>   r   rM   r   rf  s     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>6  *    888q4
?##*888r(   c                 @    g | ]}t          |d z             j        S )Array)r>   
MarkRecordrn  s     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>7  s*    9994<  +999r(   r   c                 @    g | ]}t          |d z             j        S rl  rm  rM   r   rg  s     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp><  ro  r(   c           	      X    g | ]&}t          t          |d z             dz             'S )rq  RecordrX   rt  s     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>=  s5    FFFQ4<(($x-88FFFr(   c                      g | ]}||j         S r#   )ClassrM   rs     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>C  s    ???Ar(   r   rS   c                 $    g | ]}|d n|j         S r#   )
MarkAnchorry  s     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>Z  s"    KKKKKKr(   r   rq  rv  Anchorc                 >    g | ]}|g nt          |dz             S )Nr}  rX   )rM   rz  rg  s     r&   rR   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>q  s?       	
 224=(A(A   r(   Count)r  rj  r   r$   r>   r   rr   r   r   r   rr  rx  r   r}  r   r_   r|  r.   	MarkArrayrn   	MarkCountsetattrextend)r%   rb   r;   rf  rg  MarkCoverageGlyphsMarkRecordsBaseCoverageGlyphsBaseRecordsrecordsr   glyphRecords
allClassesr   
allAnchorsanchorarrayanchorsglyphAnchorsr   s      ``               r&   _MarkBasePosFormat1_merger  1  s   11S11111 V[8888C8889999S999; ; ![ *<tJ& V[8888C888FFFF#FFFH H ![ *<tJ& -sK/@AA    ^Q|?????*$ 
*		 	&:a=j	I	I	II	3!}39KKlKKK:j +FFY[[FFM
vz***3>	..	w<<tG|U### -sK/@AA  ^Q|\ 	33	#T(]	#	#	%	%37
3Xw'''     < 2 2qHHdVtQ/01111,'  zz ,VVikkVV]
+++NN6	..	"T'\	"	"	$	$Xw'''Wc'll+++tG|U#####r(   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&   rO   zmerge.<locals>.<genexpr>  $       7 7a 7 7 7 7 7 7r(   zmark-to-base positioning lookupc                     g | ]	}|j         
S rE   r   r   s     r&   rR   zmerge.<locals>.<listcomp>      Qr(   r   rT   rU   r   r   r   r   InconsistentFormatsr  r   r;   r%   rb   s      r&   r,   r,     s    4; 7 73 7 7 788 	-K#		 	 	  	K1D#v.....&+LMMMMr(   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&   rO   zmerge.<locals>.<genexpr>  r  r(   zmark-to-mark positioning lookupc                     g | ]	}|j         
S rE   r   r   s     r&   rR   zmerge.<locals>.<listcomp>  r  r(   r  r   Mark1Mark2r   r  r  s      r&   r,   r,     s    4; 7 73 7 7 788 	-K#		 	 	  	K1D#vw@@@@@&+LMMMMr(   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 rE   r   rQ   s     r&   rR   z/_PairSet_flatten.<locals>.<listcomp>.<listcomp>  r   r(   r   r   s     r&   rR   z$_PairSet_flatten.<locals>.<listcomp>  r   r(   c                     g | ]	}|j         
S rE   r   r   s     r&   rR   z$_PairSet_flatten.<locals>.<listcomp>  r   r(   )
r   r   r   r   r   r   rr   r.   rn   r  )rb   r$   r%   r   r   r  rg   rN   s           r&   _PairSet_flattenr    s    

 %T??3???&&#&&&( ( !!F|  V  amKKNNN	E  < 
 4/00r(   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&   rR   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>  r  r(   r  r   c                     g | ]	}|j         
S rE   rZ  r   s     r&   rR   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>      (E(E(EA(E(E(Er(   r   c                     g | ]	}|j         
S rE   r]  r   s     r&   rR   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>  r  r(   c                 &    g | ]}|j         j        S rE   r   rQ   s     r&   rR   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>  r   r(   c                     g | ]	}|j         
S rE   r  rQ   s     r&   rR   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>  r  r(   c                 D    g | ]}t          d  |D                       S )c                     g | ]}||S r#   rE   rQ   s     r&   rR   zG_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>.<listcomp>  s    "F"F"F1r(   )r  )rM   rg   r$   s     r&   rR   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>  sB     & & & ""F"Ff"F"F"FMM & & &r(   )r   r   r   r   r   r   r   r   r  r  r   r   rr   r   rn   r  )rb   r$   r%   r   r   s    `   r&   (_Lookup_PairPosFormat1_subtables_flattenr    s"   @@s@@@AAbbCbbbb

CJ(E(E(E(E(EqIICJ(E(E(E(E(EqII %T	)	)S	)	)	)	!	!S	!	!	!# # & & & &V& & &&&r(   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
  rR  r   s     r&   rR   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>  rS  r(   r  r   c                     g | ]	}|j         
S rE   rZ  r   s     r&   rR   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>  r  r(   r   c                     g | ]	}|j         
S rE   r]  r   s     r&   rR   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>  r  r(   c                 &    g | ]}|j         j        S rE   r   rQ   s     r&   rR   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>  rU  r(   T)r=  c              3   $   K   | ]}|j         V  d S r#   )r   ry  s     r&   rO   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>  s$      551555555r(   c              3      K   | ]}||V  	d S r#   rE   )rM   cs     r&   rO   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>  s"      44am1mmmm44r(   )r   r   r   r   r   r   r   r   r  r  r   r   rO  r   rr   r.   r   rx   r8  r9  )rb   r$   r%   r   r   r>  r@  rowsrowcolscols              r&   (_Lookup_PairPosFormat2_subtables_flattenr    s   EEsEEEFFggHgggg

CJ(E(E(E(E(EqIICJ(E(E(E(E(EqII  ++s+++- -*4dMMM  $
(^  T
#--##455555556  d	d44d44444	5	53::c???? 	r(   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   )rx   rn   r   r  r  )rb   r$   r   rs   s       r&   &_Lookup_PairPos_subtables_canonicalizer    s     CyyXX1uuQ!##q&! 	1uuQ!##4S!WdCCDRaRXX1uuQU"a''q&! 	1uuQU"a''4SWdCCDQRRr(   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 rE   r   rQ   s     r&   rR   z7_Lookup_SinglePos_subtables_flatten.<locals>.<listcomp>  s    """1:"""r(   r   r   )r   rn   r   r   r   r   r   r   r   r   r   r;  r<  rq   )rb   r$   min_inclusive_rec_formatr   r   
num_glyphsnew	singlePosval_recgnamers   r   s               r&   #_Lookup_SinglePos_subtables_flattenr    sM   ""c"""D* *&kk	|~~+Vj  
* 
*Y_7") * *uUA=))CIaLL* 1Y/677 * *xq%oa GUA=))CIaLL	r(   c                 v    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                  |_        |rht/          |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_        t:          j                            t@          tB                    }|rY|dk    rStD          #                    d           tI           j        ||j                  |_        t/          |j                  |_        nh|rf|
rd|j        d         }|j        j        }d t          ||j%                  D             }tM          | j        '                                          |_         (                    ||ddg            ` d S )Nc                     g | ]	}|j         
S rE   )SubTabler   s     r&   rR   zmerge.<locals>.<listcomp>  s    '@'@'@q
'@'@'@r(   r   	Extensionc                     g | ]	}|j         
S rE   r^   rM   sts     r&   rR   zmerge.<locals>.<listcomp>  s    ///RBL///r(   c                 &    g | ]}|j         j        S rE   )r^   r-   r  s     r&   rR   zmerge.<locals>.<listcomp>  s    	.	.	.B",
	.	.	.r(   rS   c                     g | ]	}|j         
S rE   )ExtensionLookupTyper  s     r&   rR   zmerge.<locals>.<listcomp>   s    999rB*999r(   c                     g | ]	}|j         
S rE   )ExtSubTabler  s     r&   rR   zmerge.<locals>.<listcomp>#  s    +++bn+++r(   c                 :    g | ]}t          |j                  S rE   )r  r$   )rM   r  r;   s     r&   rR   zmerge.<locals>.<listcomp>.  s*    (u(u(ueg)OPRTZT_)`)`(u(u(ur(   c                 ,    g | ]}t          |          S rE   rm   r  s     r&   rR   zmerge.<locals>.<listcomp>2  s    ///r3r77///r(   c                 (    g | ]}|d          k    S r
  rE   )rM   numsnumSubtabless     r&   rR   zmerge.<locals>.<listcomp>3  s"    @@@4t|A&@@@r(   c                 &    g | ]}|D ]	}|j         
S rE   r   )rM   r  ts      r&   rR   zmerge.<locals>.<listcomp>7  s'    EEE"EEQq}EEEEr(   c                 <    g | ]}t          |j                  S rE   )r  r$   )rM   r  r;   mirfs     r&   rR   zmerge.<locals>.<listcomp>;  s;     +U +U +UDF(V[$??+U +U +Ur(   TFr   rV  r   0zCompacting GPOS...c                     i | ]\  }}||	S rE   rE   )rM   r  	valRecords      r&   r   zmerge.<locals>.<dictcomp>_  s.       ui 	)  r(   r  SubTableCountr   ))r   rx   rr   r  r^   r-   
startswithr   r   r  
LookupTyper  rw   r   r   r  r$   r   r]   r   r   r  rt   rn   r  r   r   r   poposenvironr?   r   r   loginfor   r   r   r   rj   )r;   r%   rb   r   r   stsnew_sts	isPairPosisSinglePosvalueFormatList	flattenedmodesinglePosTabler   singlePosMappingr  r  s   `              @@r&   r,   r,     s   '@'@C'@'@'@@V$ 3s9%%&&dm(<'==  UQs	 V))+66 
//3///
0
0 
 	.	.#	.	.	.   
 99S999
:
: )
 
(
((a&,1<++s+++7
111v::g]Gz$-*:BJGG  9TT$-(u(u(u(ukt(u(u(uu)f%%L*T]1-=r|"L"L+ //Y///<
@@@@<@@@
A
A  FEyEEEO#''D7v{TXYYDM+U +U +U +U +UJS+U +U +U UI'III4=),,,$-(( U	T]		q	 	 T]1%5%<%A%A%A%A	q		"	) =Q 
T]		q	 	 T]2%6%=%B%B%B%B	r		#	* =R
 
13L	M	M$	 +dckk88 !!!#FKt}EE4=DM**4 	Ui 	U=#.")& v~';<<   !!16;3Q3Q3S3STT$-T3_(EFFFr(   c                       e Zd ZdZd ZdS )InstancerMergerzIA merger that takes multiple master fonts, and instantiates
	an instance.c                     t                               | |           || _        || _        |                    |          | _        d S r#   )r!   r'   modellocation
getScalarsscalars)r%   r$   r  r  s       r&   r'   zInstancerMerger.__init__p  s=    //$$*$-!!(++$,,,r(   Nr-   r   r   __doc__r'   rE   r(   r&   r  r  l  s-         , , , , ,r(   r  c                     |j         dk    sJ d |D             }| j        }| j        }t          |                    ||                    |_        d S )Nr   c                     g | ]	}|j         
S rE   
CoordinaterM   as     r&   rR   zmerge.<locals>.<listcomp>y  s    
%
%
%A1<
%
%
%r(   )r   r  r  r    interpolateFromMastersAndScalarsr  )r;   r%   rb   Coordsr  r  s         r&   r,   r,   v  sY    q
%
%
%
%
%	>5AA&'RRSSr(   c                    |j         dk    sJ d |D             }d |D             }| j        }| j        }t          |                    ||                    |_        t          |                    ||                    |_        d S )Nr   c                     g | ]	}|j         
S rE   XCoordinater  s     r&   rR   zmerge.<locals>.<listcomp>      '''aAM'''r(   c                     g | ]	}|j         
S rE   YCoordinater  s     r&   rR   zmerge.<locals>.<listcomp>  r  r(   )r   r  r  r   r  r  r  )r;   r%   rb   XCoordsYCoordsr  r  s          r&   r,   r,   ~  s    q''3'''''3'''	>EBB7GTTUUEBB7GTTUUr(   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
  rX   rM   r  names     r&   rR   zmerge.<locals>.<listcomp>  s%    ...QWQa  ...r(   )r  r  r\   r   r  r  )	r;   r%   rb   r  r  	tableNamerg   rf   r  s	           @r&   r,   r,     s    	>! 
 
_T9
 T9%%%%%T4 ....#...6599&'JJKK5
4u
 
r(   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$   r  r  s       r&   r'   zMutatorMerger.__init__  s+    //$$.*$r(   N)Tr  rE   r(   r&   r  r    s2         
+ + + + + +r(   r  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   )r8   r;  r   r  DeviceTabler  DeltaFormat	StartSizeEndSizer   r  )r;   r%   rb   r  devvaridxdeltas          r&   r,   r,     s     Q%%''K1&
 
 	F	"	"	"	"MR3;.&
)F#
$
$%//U//
 $+++ r(   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   r  XYr"  r   r!  r  r   )r8   r;  r   r  r\   r>   r  delattrr#  r$  r%  r   r  )
r;   r%   rb   r  rN   r  r&  r'  r(  r3   s
             r&   r,   r,     s    Q%%''K1&
 3 3Qo)	y	!	! i  # 
4[	F	"	"	"	"MR3;.&
)F#
$
$%	
<$	$gdD))E12222
 $+++ r(   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  r   r!  )r8   r;  r  r\   r>   r  r+  r#  r$  r%  r   r  )	r;   r%   rb   r  r  r  r&  r'  r(  s	            r&   r,   r,     s     Q%%''! 6 6_T9
 
y	!	! i  # 
4[	F	"	"	"	"MR3;.&
)F#
$
$%	$gdD!,,u45555#6 6r(   c                   .     e Zd ZdZd Zd Z fdZ xZS )VariationMergerzGA 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    //$5h??$--r(   c                 H    || _         | j                            |           d S r#   )r  r1  r2  )r%   r  s     r&   r2  zVariationMerger.setModel  s&    $*e$$$$$r(   c                 H   d }d |v rXt          |          r|t          | |          d S | j        }|                    |          \  }}|                     |           t          t          |                               ||           |r|                     |           d S d S )N)rU   )r   r   r  getSubModelr2  superr.  r_   )r%   ra   rb   masterModelr  r^   s        r&   r_   zVariationMerger.mergeThings	  s    +	S[[cll 
d$$$$
F;'',,:5#==**3444 == r(   )r-   r   r   r  r'   r2  r_   __classcell__r  s   @r&   r.  r.    s`           
% % %        r(   r.  c                     t          |          r
|d         d fS |                     |          \  }}|t          j        |          fS )Nr   )r   storeMastersr	   buildVarDevTable)r1  master_valuesbasevarIdxs       r&   r<  r<    sO    ]  	q	4	**=99vg&v....r(   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 rE   r  r  s     r&   rR   zmerge.<locals>.<listcomp>$      GbGbGbYZGbGbGbr(   r  r   r   r<  r1  r  r"  r;   r%   rb   r"  s       r&   r,   r,      ss    K1&+BCCCC 01EGbGb^aGbGbGb c c+ !$+ $! !r(   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 rE   r  r  s     r&   rR   zmerge.<locals>.<listcomp>-  rB  r(   r  rC  rD  s       r&   r,   r,   )  sr    K1&95555 01EGbGb^aGbGbGb c c+ !$+ $! !r(   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 rE   r  r  s     r&   rR   zmerge.<locals>.<listcomp>6      IeIeIe\]!-IeIeIer(   c                     g | ]	}|j         
S rE   r  r  s     r&   rR   zmerge.<locals>.<listcomp>7  rI  r(   r  )r   r   r<  r1  r  r  XDeviceTableYDeviceTable)r;   r%   rb   rK  rL  s        r&   r,   r,   2  s    K1&;7777"263GIeIeadIeIeIe"f"f<"263GIeIeadIeIeIe"f"f< #L #$+"$"$# #r(   c                     dD ]]\  }t          |          rHt          | j        fd|D                       \  }}t          ||           |rt          |||           ^d S )Nr  c                 2    g | ]}t          |d           S r
  rX   r  s     r&   rR   zmerge.<locals>.<listcomp>F  s%    ///agaq!!///r(   )r\   r<  r1  r  )r;   r%   rb   r  rf   deviceTabler  s         @r&   r,   r,   =  s    ! 
* 
*_T9
 T4 *()=////3///1 15+
4u *D)[)))
* 
*r(   r   r#   )F)rf  rg  )Rr  r  r;  operatorr   loggingfontTools.miscr   fontTools.misc.roundToolsr   fontTools.ttLib.tablesr   r   r   #fontTools.ttLib.tables.DefaultTabler   fontTools.varLibr	   r
   r   fontTools.varLib.modelsr   r   r   r   fontTools.varLib.varStorer   	functoolsr   fontTools.otlLib.builderr   fontTools.otlLib.optimize.gposr   r   r   	getLoggerr  errorsr   r   r   r   r   r   r   r   r   objectr!   r   r;   GDEFr,   r   r   r   r   r   r   r  r#  r0  rO  rW  r   r  MarkBasePosMarkMarkPosr  r  r  r  r  Lookupr  
CaretValuer}  r   r  r.  r<  	BaseCoordrE   r(   r&   <module>re     s    
			         ( ( ( ( ( ( - - - - - - 1 1 1 1 1 1 3 3 3 3 3 3 < < < < < < 6 6 6 6 6 6 6 6 6 6 J J J J J J J J J J J J 7 7 7 7 7 7       3 3 3 3 3 3          g122                       h
 h
 h
 h
 h
V h
 h
 h
Z    V    rw00  10,
 
 
       D    , r|$$+X +X %$+XZ rz""$1 $1 #"$1L) ) )6   8   4B B B BH0 0 0> rz""$ $ #"$LP$ P$ P$ P$d r~&&N N '&N r~&&N N '&N  ,  (  8  (  0 ry!!T T "!Tt, , , , ,n , , , &&T T '&T 	""V V #"V *++  ,+*	+ 	+ 	+ 	+ 	+N 	+ 	+ 	+ bm$$  %$* bi    ! : f())6 6 *)6<    n   </ / / %%! ! &%! &&! ! '&! 	""# # #"# *++* * ,+* * *r(   