a
    ZXh                     @   sl  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-dZ.ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: G dd de;Z<G dd de<Z=e=>ej?ddd Z@dd ZAdgdd ZBe=>ejCd!d Z@e=>ejDd"d Z@d#d$ ZEd%d& ZFe=>ejGd'd Z@e=>ejHd(d Z@d)d* ZIdhd+d,ZJdid-d.ZKdjd0d1ZLd2d3 ZMe=>ejNd4d Z@dkd7d8ZOe=>ejPd9d Z@e=>ejQd:d Z@d;d< ZRd=d> ZSd?d@ ZTdAdB ZUdCdD ZVe=>ejWdEd Z@e=>ejXdFd Z@e=>ejYdGd Z@G dHdI dIe=ZZeZ>ej[dJd Z@eZ>ejDdKd Z@eZ>ejCdLd Z@G dMdN dNe=Z\e\>ej[dOd Z@e\>ejDdPd Z@e\>ejCdQd Z@G dRdS dSe=Z]dTdU Z^e]>ej_dVd Z@e]>ej[dWd Z@e]>ejDdXd Z@e]>ejCdYd Z@G dZd[ d[e]Z`e`>ejad\d Z@e`>ejbd]d Z@d^d_ Zcd`da Zde`>ejeejffdbd Z@e`>ejgejhfdcd Z@e`>ejiddd Z@e`>ejjdedfd Z@dS )lz4
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                   @   sV   e Zd ZdddZedddZei fddZdd
dZdd Zdd Z	dd Z
dS )MergerNc                 C   s   || _ d | _d S N)fontttfs)selfr(    r+   \/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/fontTools/varLib/merger.py__init__/   s    zMerger.__init__r'   c                    s^   t ksJ ddjvr i _tttjfv r8ft tkrJ f  fdd}|S )NzSubclass Merger instead.mergersc                    sn   | j dksJ g }D ]R}||v r$q|| j|i } D ]&}||vs^J d|j |f | ||< q@qd S )Nmergez=Oops, class '%s' has merge function for '%s' defined already.)__name__appendr.   
setdefault)methoddoneZclazzr.   attrattrscelfclazzesr+   r,   wrapper>   s    

zMerger.merger.<locals>.wrapper)r&   __dict__r.   typeenumEnumMetastr)r8   r9   r7   r:   r+   r6   r,   merger4   s    
zMerger.mergerc                 C   sP   t |}|  D ]:} t| dd }|d u r, qL| j|d }|d ur|  S q|S )Nr.   )r<   mrogetattrr.   get)r8   thing_defaulttypr.   mr+   r+   r,   
mergersForP   s    
zMerger.mergersForr+   c              
      s  t |dr|jdd |D ]}t |dr|jdd qtt| tfdd|D stt| dd |D d| |}|d	| j	j
}zLD ]B  |v rqt| } fd
d|D }| |}	|	| || qW n8 ty }
 z|
jd    W Y d }
~
n
d }
~
0 0 d S )NensureDecompiledF)Zrecursec                 3   s"   | ]} t t| kV  qd S r'   sortedvarskeys.0vrM   r+   r,   	<genexpr>f       z&Merger.mergeObjects.<locals>.<genexpr>c                 S   s   g | ]}t t| qS r+   rJ   rN   r+   r+   r,   
<listcomp>h   rS   z'Merger.mergeObjects.<locals>.<listcomp>expectedgot*c                    s   g | ]}t | qS r+   rB   rO   tablekeyr+   r,   rT   q   rS   .)hasattrrI   rK   rL   rM   allr    rH   rC   	__class__mergeThingsrB   r%   stackr1   )r*   outlstexcludeitemr.   ZdefaultMergervaluevalues
mergerFuncer+   )r]   rM   r,   mergeObjects_   s.    



zMerger.mergeObjectsc                 C   s   t ||ts(t| t|dd |D dtt|t| D ]T\}\}}z| || W q: ty } z|jd|   W Y d }~q:d }~0 0 q:d S )Nc                 S   s   g | ]}t |qS r+   lenrO   xr+   r+   r,   rT   z   rS   z%Merger.mergeLists.<locals>.<listcomp>rU   z[%d])	r   rn   r   	enumerateziprb   r%   rc   r1   )r*   rd   re   irh   ri   rk   r+   r+   r,   
mergeListsx   s    zMerger.mergeListsc                 C   s   t ||ts*t| t|jdd |D d| |d d }|d urR|| || nnt|tjrxt ||st	| ||dnHt
|dr| || n0t|tr| || nt ||st	| ||dd S )Nc                 S   s   g | ]}t |jqS r+   )r<   r0   ro   r+   r+   r,   rT      rS   z&Merger.mergeThings.<locals>.<listcomp>rU   r;   )r   r<   r   r0   rH   rC   
isinstancer=   Enumr   r_   rl   listrt   )r*   rd   re   rj   r+   r+   r,   rb      s     



zMerger.mergeThingsc                    st   |D ]j  |vrqz(|| _ | |   fdd|D  W q tyl } z|j   W Y d }~qd }~0 0 qd S )Nc                    s   g | ]}|  qS r+   rC   rO   rG   tagr+   r,   rT      rS   z&Merger.mergeTables.<locals>.<listcomp>)r)   rb   r%   rc   r1   )r*   r(   master_ttfs	tableTagsrk   r+   rz   r,   mergeTables   s    "zMerger.mergeTables)N)r'   )r+   )r0   
__module____qualname__r-   classmethodr@   rH   rl   rt   rb   r~   r+   r+   r+   r,   r&   .   s   


r&   c                   @   s   e Zd ZdS )AligningMergerN)r0   r   r   r+   r+   r+   r,   r      s   r   ZGlyphClassDefc                    s   |d u r"t |st| d |dd S dd |D }i |_|j}t }|jdd |D   |D ]V t fdd|D }t|st| |d |d  gd	|sd | < qZ|d | < qZd S )
NrU   c                 S   s   g | ]
}|j qS r+   )	classDefsrO   lr+   r+   r,   rT      rS   merge.<locals>.<listcomp>c                 S   s   g | ]}|  qS r+   rQ   r   r+   r+   r,   rT      rS   c                 3   s   | ]}|  V  qd S r'   rx   r   kr+   r,   rR      rS   merge.<locals>.<genexpr>r   r^   )rV   rW   rc   )r   r   r   setupdater   r   r   )r@   r*   re   ZallKeysZ	allValuesr+   r   r,   r/      s$    
r/   c                    sT    j dkr S t }d|_  j|_ j|_ fdd|jjD |_t|j|_|S )N   c                    s   g | ]
} j qS r+   ValuerO   _r*   r+   r,   rT      rS   z._SinglePosUpgradeToFormat2.<locals>.<listcomp>)	Formatot	SinglePosCoverageValueFormatglyphsr   rn   
ValueCount)r*   retr+   r   r,   _SinglePosUpgradeToFormat2   s    
r   c                    s   |du rdd |D }ndd t ||D }t }|j|  |  jt|dtfdd|D snt ~d}|du r fdd|D }n(t|t|ksJ  fd	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                 S   s   g | ]}t |qS r+   )r   r   r+   r+   r,   rT      rS   z&_merge_GlyphOrders.<locals>.<listcomp>c                 S   s$   g | ]\}}d d t ||D qS )c                 S   s   i | ]\}}||qS r+   r+   )rO   grP   r+   r+   r,   
<dictcomp>   rS   z1_merge_GlyphOrders.<locals>.<listcomp>.<dictcomp>)rr   )rO   r   vsr+   r+   r,   rT      rS   r\   c                 3   s   | ]}t | d |kV  qdS )r\   N)rK   rO   r   )sortKeyr+   r,   rR      rS   z%_merge_GlyphOrders.<locals>.<genexpr>c                    s    g | ]  fd dD qS )c                    s   g | ]}|v r|n qS r+   r+   rO   glyphdefaultdict_setr+   r,   rT      rS   1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>r+   rO   r   orderr   r,   rT      s   c                    s    g | ]  fd dD qS )c                    s    g | ]}|v r| n qS r+   r+   r   r   r+   r,   rT      rS   r   r+   r   r   r   r,   rT      s   )	rr   r   r   getReverseGlyphMap__getitem__rK   r`   r!   rn   )r(   re   Z
values_lstr   Z	dict_setsZcombinedZpaddedValuespaddedr+   )r   r   r   r,   _merge_GlyphOrders   s(    

r   c                 C   s    |d j  |_ | || d S Nr   r;   copyrl   r@   r*   re   r+   r+   r,   r/      s    c                 C   s    |d j  |_ | || d S r   r   r   r+   r+   r,   r/      s    c                 C   s~   |D ]t}|d u st |tjks|jd u s||jjvr6q|jdkrJ|j  S |jdkrl|j|jj|   S t| ddqd S )Nr   r   single positioning lookupsubtable)	r<   r   r   r   r   r   r   indexr$   )r@   	subtablesr   r*   r+   r+   r,   %_Lookup_SinglePos_get_effective_value  s     



r   c           
      C   s   |D ]}|d u st |tjks|jd u s||jjvr6q|jdkr~|j|jj| }|j}|D ]}|j	|kr^|    S q^qq|jdkr|j
j|d}|jj|d}	|j| j|	   S t| ddqd S )Nr   r   r   pair positioning lookupr   )r<   r   PairPosr   r   r   PairSetr   PairValueRecordSecondGlyph	ClassDef1r   rC   	ClassDef2Class1RecordClass2Recordr$   )
r@   r   Z
firstGlyphZsecondGlyphr*   pspvrrecZklass1Zklass2r+   r+   r,   (_Lookup_PairPos_get_effective_value_pair  s.    



r   c           
         s  t tjdd |D d |_t|dksBd@ dksBt| dd|jj tdd	 |D rt fd
d	|D rt	
|j|_dkr| |jdd |D  |j |_d S d|_dd |D }t| jdd |D dd |D \}}||j_fdd|D |_t|j|_t|D ]^\}}t|D ]J\}}|| d urFq,t| | j| |}	|	d u rlt	
}	|	||< q,q| |j| | j||dd t tjdd |jD d|_d S )Nc                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT   6  rS   r   r   r   ir   r   c                 s   s   | ]}|j d kV  qdS )r   Nr   rN   r+   r+   r,   rR   <  rS   r   c                 3   s   | ]} |j jkV  qd S r'   r   r   rN   )coverageGlyphsr+   r,   rR   <  s   c                 S   s$   g | ]}|j d ur|j nt qS r'   )r   r	   ValueRecordrN   r+   r+   r,   rT   F  rS   r   c                 S   s   g | ]}t |qS r+   )r   rN   r+   r+   r,   rT   M  rS   c                 S   s   g | ]}|j jqS r+   r   rN   r+   r+   r,   rT   Q  rS   c                 S   s   g | ]
}|j qS r+   r   rN   r+   r+   r,   rT   Q  rS   c                    s   g | ]}t  qS r+   )r	   r   r   )valueFormatr+   r,   rT   U  rS   )r   r   r   r   r   rf   c                 S   s   g | ]}|  qS r+   )ZgetEffectiveFormatrN   r+   r+   r,   rT   n  rS   )r   int__or__r   rn   r$   r   r   r`   r	   r   r   rb   	getFormatr   r   r(   r   rq   r   lookup_subtablesrt   rl   )
r@   r*   re   r   r   rs   ri   jr   rP   r+   )r   r   r,   r/   4  sP    

c                 C   sp  t | jdd |D dd |D \}}g  |_}|D ]L}t }||_| jrXt| jnd |_| j	rpt| j	nd |_
|| q4t|j|_t|D ]\}}	t|D ]\}
}t }||_|	|
 d ur|	|
 }nt| | j| |j|}|d u rd\}}nt|dd }t|dd }| jr*tj| j|dnd |_| j	rHtj| j	|dnd |_
||	|
< qq|`| |j| d S )Nc                 S   s   g | ]}d d |j D qS )c                 S   s   g | ]
}|j qS r+   r   rN   r+   r+   r,   rT   w  rS   z$merge.<locals>.<listcomp>.<listcomp>r   r   r+   r+   r,   rT   w  rS   r   c                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT   x  rS   )NNValue1Value2)src)r   r(   r   r   r   valueFormat1r	   r   r   valueFormat2r   r1   rn   PairValueCountrq   r   r   _firstGlyphrB   rt   )r@   r*   re   r   r   pvrsr   r   rs   ri   r   rP   ZvpairZv1Zv2r+   r+   r,   r/   r  sN    


c                 C   s   t dd |D sJ d|j| |dd t }g |_d|_t|jdd |D dd |D |d	\}}|| j_	d
d |D | _t
| j| _t|| jD ]\}}||_q|| j| d S )Nc                 S   s   g | ]}|j r|jd kqS r   r   ValueFormat2r   r+   r+   r,   rT     rS   z)_PairPosFormat1_merge.<locals>.<listcomp>Report bug against fonttools.)r   r   PairSetCountValueFormat1r   r   r   c                 S   s   g | ]}|j jqS r+   r   rN   r+   r+   r,   rT     rS   c                 S   s   g | ]
}|j qS r+   r   rN   r+   r+   r,   rT     rS   r   c                 S   s   g | ]}t  qS r+   )r   r   r   r+   r+   r,   rT     rS   )r   rl   r   r   r   r   r   r(   r   r   rn   r   rr   r   rt   )r*   re   r@   emptyr   r   r   r   r+   r+   r,   _PairPosFormat1_merge  s2    
r   c           
      C   s   t | tr| }n| r | jr | jni }|r4t| nd}g }t|d D ]}|t  qH| D ]\}}|| 	| qb|d u rd |d< n6t| |d< }|dd  D ]}	|	
| ||	 q|S )Nr   r   )ru   dictr   maxri   ranger1   r   itemsaddintersection_updatedifference_update)
r*   	allGlyphsr   rG   r   r   r   rP   Zclass0sr+   r+   r,   _ClassDef_invert  s     


r   c                 C   s   t  }i  |_}|d u }|r,d gt|  }t }t| |D ]0\}}t||}|d u rd|dd  }|| q>|	 }	|r|	
dt  t|	D ]$\}
}|
dkrq|D ]}|
||< qq||	fS )Nr   r   )r   ClassDefr   rn   r   
Classifierrr   r   r   Z
getClassesinsertr   rq   )re   ZallGlyphsesr*   r   ZallGlyphsesWasNone
classifierZclassDefr   Zsetsclassesrs   classSetr   r+   r+   r,   _ClassDef_merge_classify  s(    

r   Fc                 C   s  dd |D }t dd |D dd |D \| _}t|| _g }t||D ]\}}d }	t|jj}
|jj}g }|D ]}t	t
|}||
vrd }	|	d u rt }	g  }|	_t|jD ]P}|rd }n8t }| jrt| jnd |_| jrt| jnd |_|| q|	}n||d}|| }|| qr|| qJ|}~t dd |D \| _}t|| _g }t||D ]\}}|jj}g }|D ]t}|j}t }g  }|_|D ]F}|s|d }n t	t
|}||d}|| }|t| q|| q|| qp|}~|S )Nc                 S   s   g | ]
}|j qS r+   )r   r   r+   r+   r,   rT     rS   z2_PairPosFormat2_align_matrices.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r+   )r   r   r+   r+   r,   rT     rS   c                 S   s   g | ]}|j jqS r+   r   r   r+   r+   r,   rT     rS   r   c                 S   s   g | ]
}|j qS r+   )r   r   r+   r+   r,   rT   4  rS   )r   r   rn   Class1Countrr   r   r   r   r   nextiterr   r   r   r   Class2Countr   r	   r   r   r   r   r1   rC   r   r   deepcopy)r*   re   r(   transparentmatricesr   Znew_matricesr   matrixZnullRowZcoverageZ	classDef1Zclass1Recordsr   ZexemplarGlyphZclass2recordsr   Zrec2Zrec1klassZ	classDef2Zrec1oldZoldClass2RecordsZrec1newZclass2Recordsr+   r+   r,   _PairPosFormat2_align_matrices   sx    







r   c                 C   s   t dd |D sJ d|j| |dd t|jdd |D \}}|| j_t||jD ]$\}}|jj|krX||d ksXJ qXt| ||j}t	|d | _
|| j
| d S )	Nc                 S   s   g | ]}|j r|jd kqS r   r   r   r   r+   r+   r,   rT   P  rS   z)_PairPosFormat2_merge.<locals>.<listcomp>r   )r   r   r   r   r   r   r   r   r   c                 S   s   g | ]}|j jqS r+   r   rN   r+   r+   r,   rT   c  rS   r   )r   rl   r   r(   r   r   rr   r   r   rw   r   rt   )r*   re   r@   r   r   r   r   r   r+   r+   r,   _PairPosFormat2_mergeN  s$    	r  c                 C   sl  t tjdd |D d | _|_t tjdd |D d | _|_|jdkrXt|||  n$|jdkrpt	|||  nt
| dd| `| `d}d}|jdkr|jD ]P}|jD ]D}t|d	d }|d ur|| O }t|d
d }|d ur|| O }qqnl|jdkr\|jD ]X}	|	jD ]J}
t|
d	d }|d ur2|| O }t|
d
d }|d ur|| O }qq||_||_d S )Nc                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT   z  rS   r   r   c                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT   }  rS   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r  r$   r   r   rB   r   r   r   )r@   r*   re   Zvf1Zvf2ZpairSetZpairValueRecordZpv1Zpv2Zclass1RecordZclass2Recordr+   r+   r,   r/   w  sD    








MarkBasec                    sx  t dd |D | _t|jfdd|D fdd|D \}}|t| d _t|j fdd|D  fdd|D \}}|t|  d _g }	t|t| D ]\}
}d	d |D }t|st||d
 |dnPt	
 }|d
 |_dd |D }t|rd }nt	 }d|_||| ||_|	| qt	 }|	|_
t|	|_t| d | g }	t|t| D ]\}
}t|rd }ntt	 d  }g }t| d |  fdd|D }|D ] }|d g| jt|   qt| D ]:}t|rd }nt	 }d|_||| || q|	| qjtt	 d  }t| d |	 t| d t|	 t|  d | d S )Nc                 s   s   | ]}|j V  qd S r'   )
ClassCountr   r+   r+   r,   rR     rS   z,_MarkBasePosFormat1_merge.<locals>.<genexpr>c                    s   g | ]}t | d  jqS r   rB   r   r   r  r+   r,   rT     rS   z-_MarkBasePosFormat1_merge.<locals>.<listcomp>c                    s   g | ]}t | d  jqS )Array)rB   
MarkRecordr   r
  r+   r,   rT     rS   r   c                    s   g | ]}t | d  jqS r  r	  r   r  r+   r,   rT     rS   c                    s$   g | ]}t t | d   d qS )r  RecordrY   r   r  r+   r,   rT     rS   c                 S   s   g | ]}|d ur|j qS r'   )ClassrO   rr+   r+   r,   rT     rS   r   rU   c                 S   s   g | ]}|d u rd n|j qS r'   )
MarkAnchorr  r+   r+   r,   rT     rS   r   r  r  Anchorc                    s&   g | ]}|d u rg nt | d qS )Nr  rY   r  r  r+   r,   rT     s   ZCount)r   r  r   r(   rB   r   rr   r   r   r   r  r  r   r  r   rb   r  r1   Z	MarkArrayrn   Z	MarkCountsetattrextend)r*   re   r@   r  r  ZMarkCoverageGlyphsZMarkRecordsZBaseCoverageGlyphsZBaseRecordsrecordsr   ZglyphRecordsZ
allClassesr   Z
allAnchorsanchorarrayZanchorsZglyphAnchorsr   r+   )r  r  r,   _MarkBasePosFormat1_merge  sp    





r  c                 C   sZ   t |jdd |D s2t| d|jdd |D d|jdkrJt|||  nt| ddd S )	Nc                 s   s   | ]}|j V  qd S r'   r   r   r+   r+   r,   rR     rS   r   zmark-to-base positioning lookupc                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT      rS   r   r   rV   rW   r   r   r   r   r#   r  r$   r   r+   r+   r,   r/     s    
c                 C   s^   t |jdd |D s2t| d|jdd |D d|jdkrNt||| dd	 nt| dd
d S )Nc                 s   s   | ]}|j V  qd S r'   r   r   r+   r+   r,   rR   
  rS   r   zmark-to-mark positioning lookupc                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT     rS   r   r  r   ZMark1ZMark2r   r  r   r+   r+   r,   r/     s    
c                 C   s   t  }t  |_t|dd | D dd | D \}}||j_g  |_}t| D ],}|D ]}|d urX||  qPqXdsPJ qPt|j|_	|S )Nc                 S   s   g | ]}d d |j D qS )c                 S   s   g | ]
}|j qS r+   r   rN   r+   r+   r,   rT     rS   z/_PairSet_flatten.<locals>.<listcomp>.<listcomp>r   r   r+   r+   r,   rT     rS   z$_PairSet_flatten.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   rT     rS   F)
r   r   r   r   r   r   rr   r1   rn   r   )re   r(   r*   r   r   r   ri   rP   r+   r+   r,   _PairSet_flatten  s"    



r  c                    s   t dd | D sJ dt }d|_t |_ttjdd | D d|_ttjdd | D d|_	t
 dd | D d	d | D \}}||j_ fd
dt| D |_t|j|_|S )Nc                 S   s   g | ]}|j r|jd kqS r   r   r   r+   r+   r,   rT   2  rS   z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>r   r   c                 S   s   g | ]
}|j qS r+   r  r   r+   r+   r,   rT   8  rS   r   c                 S   s   g | ]
}|j qS r+   r  r   r+   r+   r,   rT   9  rS   c                 S   s   g | ]}|j jqS r+   r   rN   r+   r+   r,   rT   =  rS   c                 S   s   g | ]
}|j qS r+   r   rN   r+   r+   r,   rT   =  rS   c                    s    g | ]}t d d |D  qS )c                 S   s   g | ]}|d ur|qS r'   r+   rN   r+   r+   r,   rT   B  rS   zG_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>.<listcomp>)r  )rO   ri   r(   r+   r,   rT   A  s   )r   r   r   r   r   r   r   r   r   r   r   r   rr   r   rn   r   )re   r(   r*   r   r   r+   r  r,   (_Lookup_PairPosFormat1_subtables_flatten0  s&    

r  c                 C   s  t dd | D sJ dt }d|_t |_ttjdd | D d|_ttjdd | D d|_	t
|dd | D \}}||j_t|| |d	d
}g  }|_t| D ]^}t }|| g |_|j}ttdd |D  D ]$}	ttdd |	D }
||
 qq|S )Nc                 S   s   g | ]}|j r|jd kqS r   r   r   r+   r+   r,   rT   K  rS   z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>r   r   c                 S   s   g | ]
}|j qS r+   r  r   r+   r+   r,   rT   Q  rS   r   c                 S   s   g | ]
}|j qS r+   r  r   r+   r+   r,   rT   R  rS   c                 S   s   g | ]}|j jqS r+   r   rN   r+   r+   r,   rT   U  rS   T)r   c                 s   s   | ]}|j V  qd S r'   )r   r  r+   r+   r,   rR   `  rS   z;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>c                 s   s   | ]}|d ur|V  qd S r'   r+   rO   cr+   r+   r,   rR   a  rS   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r1   r   rw   r   r   )re   r(   r*   r   r   r   r   rowsrowcolscolr+   r+   r,   (_Lookup_PairPosFormat2_subtables_flattenI  s.    


r%  c                 C   s   t | } t| }d}||k r4| | jdkr4|d7 }qt| d| |g| d|< t| }|}|dkr| |d  jdkr|d8 }q\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   )rw   rn   r   r  r%  )re   r(   r   rs   r+   r+   r,   &_Lookup_PairPos_subtables_canonicalizeg  s    

r&  c                 C   s   t |dd | D d \}}t|}t }d|_||_t |_||j_||_d g| |_	| D ]}|jdkr|j	}|jjD ]}	|
|	}
t||j	|
< qzq^|jdkr^t|jjD ],\}}	|j	| }|
|	}
t||j	|
< qq^|gS )Nc                 S   s   g | ]}|j jqS r+   r   rN   r+   r+   r,   rT   }  rS   z7_Lookup_SinglePos_subtables_flatten.<locals>.<listcomp>r   r   )r   rn   r   r   r   r   r   r   r   r   r   r   r   rq   )re   r(   Zmin_inclusive_rec_formatr   r   Z
num_glyphsnewZ	singlePosZval_recgnamers   r   r+   r+   r,   #_Lookup_SinglePos_subtables_flatten|  s*    





r)  c                 C   s   t | jdd |D dd |D \}}d|_t |_||j_g |_|D ]<}t }t |_d|j_t |_	d|j	_|j
| qH| |j| t|j|_d S )Nc                 S   s   g | ]}|j jqS r+   r   r   r+   r+   r,   rT     rS   r   c                 S   s   g | ]
}|j qS r+   )EntryExitRecordr   r+   r+   r,   rT     rS   r   )r   r(   r   r   r   r   r*  r  EntryAnchor
ExitAnchorr1   rt   rn   ZEntryExitCount)r@   r*   re   r   r   r   r   r+   r+   r,   r/     s$    


c                 C   s@   t dd |D rd |_t dd |D r0d |_| || d S )Nc                 s   s   | ]}|j d u V  qd S r'   )r+  rO   Zmasterr+   r+   r,   rR     rS   r   c                 s   s   | ]}|j d u V  qd S r'   )r,  r-  r+   r+   r,   rR     rS   )r`   r+  r,  rl   r   r+   r+   r,   r/     s
    c                    s  dd |D  } _ tt||||jfg D ]\}}|s<q.|d jjdr.tdd |D sxt ddd |D dtdd |D st |d j	|_
d	d |D }|d d = || q.|jot|jd tj}|r
t|j j|_ fd
d|D  } _ n|jo"t|jd tj}|rdd |D tfddD sdd |D }	tt|	t|j j|_ fdd|D  } _ d}
nd}
 |j| t|j|_|rt|jdkr|jd jdksJ |jd jjs|jd | jd8  _t|jdkr0|jd jdks4J |jd jjs^|jd | jd8  _ jjjdt d}|dkrt !d t" j||j|_t|j|_nF|r|
r|jd }|jj}dd t||j#D }t$| j% |_ j&||ddgd  ` d S )Nc                 S   s   g | ]
}|j qS r+   )SubTabler   r+   r+   r,   rT     rS   r   r   	Extensionc                 S   s   g | ]
}|j qS r+   ra   rO   str+   r+   r,   rT     rS   c                 S   s   g | ]}|j jqS r+   )ra   r0   r1  r+   r+   r,   rT     rS   rU   c                 S   s   g | ]
}|j qS r+   )ExtensionLookupTyper1  r+   r+   r,   rT     rS   c                 S   s   g | ]
}|j qS r+   )ZExtSubTabler1  r+   r+   r,   rT     rS   c                    s   g | ]}t | jqS r+   )r&  r(   r1  r@   r+   r,   rT     s   c                 S   s   g | ]}t |qS r+   rm   r1  r+   r+   r,   rT     rS   c                    s   g | ]}| d  kqS r   r+   )rO   nums)numSubtablesr+   r,   rT     rS   c                 S   s   g | ]}|D ]
}|j qqS r+   r   )rO   r2  tr+   r+   r,   rT     rS   c                    s   g | ]}t | jqS r+   )r)  r(   r1  )r@   mirfr+   r,   rT     s   TFr   r  r   z0fontTools.otlLib.optimize.gpos:COMPRESSION_LEVELr   zCompacting GPOS...c                 S   s   i | ]\}}||qS r+   r+   )rO   r(  Z	valRecordr+   r+   r,   r     s   merge.<locals>.<dictcomp>r.  SubTableCountr   )'r   rw   rr   r.  ra   r0   
startswithr   r"   r3  Z
LookupTyper  ru   r   r   r&  r(   r   r`   r   r   r)  rt   rn   r:  r   r   r   popcfgrC   r   loginfor   r   r   r   rl   )r@   r*   re   r   r   stsZnew_stsZ	isPairPosZisSinglePosZvalueFormatListZ	flattenedlevelZsinglePosTabler   ZsinglePosMappingr+   )r@   r8  r6  r,   r/     s    "



&&




c                   @   s   e Zd ZdZdd ZdS )InstancerMergerzLA merger that takes multiple master fonts, and instantiates
    an instance.c                 C   s(   t | | || _|| _||| _d S r'   )r&   r-   modellocationZgetMasterScalarsmasterScalars)r*   r(   rC  rD  r+   r+   r,   r-   #  s    zInstancerMerger.__init__Nr0   r   r   __doc__r-   r+   r+   r+   r,   rB    s   rB  c                 C   s>   |j dksJ dd |D }| j}| j}t||||_d S )Nr   c                 S   s   g | ]
}|j qS r+   
CoordinaterO   ar+   r+   r,   rT   -  rS   r   )r   rC  rE  r   interpolateFromValuesAndScalarsrI  )r@   r*   re   ZCoordsrC  rE  r+   r+   r,   r/   *  s    
c                 C   s^   |j dksJ dd |D }dd |D }| j}| j}t||||_t||||_d S )Nr   c                 S   s   g | ]
}|j qS r+   XCoordinaterJ  r+   r+   r,   rT   8  rS   r   c                 S   s   g | ]
}|j qS r+   YCoordinaterJ  r+   r+   r,   rT   9  rS   )r   rC  rE  r   rL  rN  rP  )r@   r*   re   ZXCoordsZYCoordsrC  rE  r+   r+   r,   r/   5  s    

c                    sd   | j }| j}dD ]N\ }t||r&J t| r fdd|D }t|||}t| | qd S )N)ZXAdvanceZ
XAdvDevice)ZYAdvanceZ
YAdvDevice)Z
XPlacementZ
XPlaDevice)Z
YPlacementZ
YPlaDevicec                    s   g | ]}t | d qS r   rY   rJ  namer+   r,   rT   R  rS   r   )rC  rE  r_   r   rL  r  )r@   r*   re   rC  rE  	tableNameri   rh   r+   rR  r,   r/   D  s    

c                   @   s   e Zd ZdZd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                 C   s   t | | || _|| _d S r'   )r&   r-   	instancerdeleteVariations)r*   r(   rV  rW  r+   r+   r,   r-   d  s    zMutatorMerger.__init__N)TrF  r+   r+   r+   r,   rU  ^  s   rU  c                 C   s   |d j  |_ |jdkrd S | j}|j}| jr4|`|rp|jdksFJ |jd> |j }t	|| }| j
|7  _
| jr|d|_d S )Nr            r   )r;   r   r   rV  DeviceTablerW  DeltaFormat	StartSizeEndSizer   rI  )r@   r*   re   rV  devvaridxdeltar+   r+   r,   r/   j  s    
c           
      C   s   |d j  |_ |jdkrd S | j}dD ]}|d }t||s@q(t||}| jrZt|| |d u rdq(|jdksrJ |j	d> |j
 }t|| }|d }	t||	t||	|  q(| jrd|_d S )	Nr   rX  ZXYr[  rY  rZ  rI  r   )r;   r   r   rV  r_   rB   rW  delattrr\  r]  r^  r   r  )
r@   r*   re   rV  rP   rT  r_  r`  ra  r5   r+   r+   r,   r/     s(    



c           	      C   s   |d j  |_ | j}dD ]z\}}t||s.qt||}| jrHt|| |d u rRq|jdks`J |jd> |j	 }t
|| }t||t||d|  qd S )Nr   rQ  rY  rZ  )r;   r   rV  r_   rB   rW  rb  r\  r]  r^  r   r  )	r@   r*   re   rV  rS  rT  r_  r`  ra  r+   r+   r,   r/     s    


c                       s0   e Zd ZdZdd Zdd Z fddZ  ZS )VariationMergerzJA merger that takes multiple master fonts, and builds a
    variable font.c                 C   s&   t | | t|| _| | d S r'   )r&   r-   r   ZOnlineVarStoreBuilderstore_buildersetModel)r*   rC  axisTagsr(   r+   r+   r,   r-     s    zVariationMerger.__init__c                 C   s   || _ | j| d S r'   )rC  rd  re  )r*   rC  r+   r+   r,   re    s    zVariationMerger.setModelc                    s   d }d }d |v rrt |r0|d ur,t| |dd S | j}| jrTtdd |D | j| _| j}||\}}| | tt| 	|| |r| | |r|| _d S )N)rW   c                 S   s   g | ]}|d uqS r'   r+   rN   r+   r+   r,   rT     rS   z/VariationMerger.mergeThings.<locals>.<listcomp>)
r   r   r)   r   rC  ZgetSubModelre  superrc  rb   )r*   rd   re   ZmasterModelZorigTTFsrC  r0  r+   r,   rb     s$    

zVariationMerger.mergeThings)r0   r   r   rG  r-   re  rb   __classcell__r+   r+   r0  r,   rc    s   rc  c                 C   s0   t |r|d d fS | |\}}|t|fS r   )r   storeMastersr   buildVarDevTable)rd  master_valuesbasevarIdxr+   r+   r,   rj    s    rj  c                 C   sF   |j dkrt| ddt| jdd |D \|_}|rBd|_ ||_d S )Nr   za baseline coordinater   c                 S   s   g | ]
}|j qS r+   rH  rJ  r+   r+   r,   rT     rS   r   rX  r   r$   rj  rd  rI  r[  r@   r*   re   r[  r+   r+   r,   r/     s    

c                 C   sF   |j dkrt| ddt| jdd |D \|_}|rBd|_ ||_d S )Nr   za caretr   c                 S   s   g | ]
}|j qS r+   rH  rJ  r+   r+   r,   rT     rS   r   rX  rn  ro  r+   r+   r,   r/     s    

c                 C   sl   |j dkrt| ddt| jdd |D \|_}t| jdd |D \|_}|sV|rhd|_ ||_||_d S )Nr   z	an anchorr   c                 S   s   g | ]
}|j qS r+   rM  rJ  r+   r+   r,   rT   
  rS   r   c                 S   s   g | ]
}|j qS r+   rO  rJ  r+   r+   r,   rT     rS   rX  )r   r$   rj  rd  rN  rP  XDeviceTableYDeviceTable)r@   r*   re   rp  rq  r+   r+   r,   r/     s    


c                    sV   dD ]L\ }t | rt| j fdd|D \}}t| | |rt||| qd S )NrQ  c                    s   g | ]}t | d qS r   rY   rJ  rR  r+   r,   rT     rS   r   )r_   rj  rd  r  )r@   r*   re   rT  rh   ZdeviceTabler+   rR  r,   r/     s    
c                   @   s   e Zd ZdZdddZdddZdd	 fd
dZdd Zdd Zdd Z	e
dddZe
dddZedd Zed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                 C   sF   t | ||| i | _g | _t | _g | _d | _|r<t | _d| _	d S )NF)
rc  r-   varIndexCachevarIdxesr   varTableIdslayerslayerReuseCacher   _doneBaseGlyphs)r*   rC  rf  r(   ZallowLayerReuser+   r+   r,   r-   1  s    zCOLRVariationMerger.__init__COLRc                 C   s4   d|v r d|v r |  |d j t| ||| d S )Nrz  )expandPaintColrLayersr[   rc  r~   )r*   r(   r|   r}   r+   r+   r,   r~   C  s    	zCOLRVariationMerger.mergeTablesc                 C   s   dS )NTr+   )r   r+   r+   r,   <lambda>P  rS   zCOLRVariationMerger.<lambda>c           
   	   C   s   |j }|j}d}z||}W n ty.   Y n
0 ||}|sPt| t|j|d|}g }|D ]:}	t|	dd }z||}W n ty   Y n0 || q\t||st	| t|j||d|S )NF)r   rh   r   r  )
r   
formatEnum
ValueErrorr$   r<   r0   rB   r1   r   r#   )
r*   rd   re   validatefmtr}  okrV   rW   rP   r+   r+   r,   checkFormatEnumP  s6    
z#COLRVariationMerger.checkFormatEnumc                    sp   |  D ]b z"| |   fdd|D  W q tyh } z"|jd d  W Y d }~qd }~0 0 qd S )Nc                    s   g | ]}|  qS r+   rx   rN   r   r+   r,   rT   q  rS   z7COLRVariationMerger.mergeSparseDict.<locals>.<listcomp>[])rM   rb   r%   rc   r1   )r*   rd   re   rk   r+   r   r,   mergeSparseDictn  s    "z#COLRVariationMerger.mergeSparseDictc                    st   |D ]j t | } fdd|D }z| || W q tyl } z |jd    W Y d }~qd }~0 0 qd S )Nc                    s   g | ]}t | qS r+   rY   rO   rg   r5   r+   r,   rT   y  rS   z2COLRVariationMerger.mergeAttrs.<locals>.<listcomp>r^   )rB   rb   r%   rc   r1   )r*   rd   re   r7   rh   ri   rk   r+   r  r,   
mergeAttrsv  s    
zCOLRVariationMerger.mergeAttrsc                    s|    fdd|D }d}|  ttr@d}fdd|D }|d }tj}t|sf| j|\}}|rt|}||fS )Nc                    s   g | ]}t | qS r+   rY   r  r  r+   r,   rT     rS   z;COLRVariationMerger.storeMastersForAttr.<locals>.<listcomp>FTc                    s   g | ]}  |qS r+   )ZtoIntrN   )convr+   r,   rT     rS   r   )	ZgetConverterByNameru   r
   r   NO_VARIATION_INDEXr   rd  ri  ZfromInt)r*   rd   re   r5   rk  Zis_fixed_size_float	baseValuerm  r+   )r5   r  r,   storeMastersForAttr  s    


z'COLRVariationMerger.storeMastersForAttr)returnc                 C   s  t |}| j|}|d u rhtt| jt| d D ]0}| j||t|  |kr6| | j|< } qhq6|d u rtt|d ddD ]P}| j| d  |d | krt| j| }|| j|< | j||d    qq|d u rt| j | j|< }| j| |S )Nr   r   r  )tuplers  rC   r   rn   rt  r  )r*   rt  r]   varIndexBasers   nr+   r+   r,   storeVariationIndices  s$    
z)COLRVariationMerger.storeVariationIndicesc           	      C   s\   t j}g }|D ],}| |||\}}t||| || qtdd |D rX| |}|S )Nc                 s   s   | ]}|t jkV  qd S r'   )r   r  rN   r+   r+   r,   rR     rS   z9COLRVariationMerger.mergeVariableAttrs.<locals>.<genexpr>)r   r  r  r  r1   anyr  )	r*   rd   re   r7   r  rt  r5   r  rm  r+   r+   r,   mergeVariableAttrs  s    
z&COLRVariationMerger.mergeVariableAttrsc                 C   s   t |ddd dD ]n}|d }|j}t|j}| }|j|j |  |d j}|jd urr|t||j	|j< qt
||j	| qd S )NTc                 S   s   t t| d jdd d uS )Nr  VarType)rB   r<   rh   )pathr+   r+   r,   r|    s    z?COLRVariationMerger.convertSubTablesToVarType.<locals>.<lambda>)Z	skip_root	predicater  )r   rh   r<   r  r;   r   ZpopulateDefaultsr   rB   rS  r  )clsr[   r  r2  ZsubTablevarTypeZnewSubTableparentr+   r+   r,   convertSubTablesToVarType  s    



z-COLRVariationMerger.convertSubTablesToVarTypec           	      C   s  | j s
dS t }g }| jjD ]}|jg}|r| }|jtjj	krFq(n|jtjj
krtt|| }t|}|D ]B}t||v rt|}t||vsJ || |t| qn||_t||_n
|| }|t| q(qt|t|ksJ || 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   PaintFormatZPaintColrGlyphPaintColrLayersrw   _flatten_layersrn   idr   r   r1   r   FirstLayerIndex	NumLayersgetChildrenr  reversed
LayerCount)	colrZuniqueLayerIDsZnewLayerListr   ZfrontierpaintchildrenZfirst_layer_indexZlayerr+   r+   r,   r{    s4    


z)COLRVariationMerger.expandPaintColrLayersN)T)ry  )r0   r   r   rG  r-   r~   r  r  r  r  r   r  r  r   r  staticmethodr{  r+   r+   r+   r,   rr  &  s   




rr  c                    s   dd |j D }dd |D }t| D ]v\} z"| |   fdd|D  W q* ty } z2|jd| d d |jd	<  W Y d }~q*d }~0 0 q*d
| _d S )Nc                 S   s   i | ]}|j |qS r+   Z	BaseGlyphrO   r   r+   r+   r,   r     rS   r9  c                 S   s   g | ]}d d |j D qS )c                 S   s   i | ]}|j |qS r+   r  r  r+   r+   r,   r   	  rS   z$merge.<locals>.<listcomp>.<dictcomp>)r  ry   r+   r+   r,   rT   	  rS   r   c                    s   g | ]}|  qS r+   rx   rN   r   r+   r,   rT     rS   z.BaseGlyphPaintRecord[r  zbase glyph rD  T)	r  rq   rM   rb   r%   rc   r1   causerx  )r@   r*   re   rd   Zmastersrs   rk   r+   r  r,   r/     s    "c                 C   s&   | j sJ dt| j|_| j|_d S )Nz-BaseGlyphList must be merged before LayerList)rx  rn   rv  r  r  r   r+   r+   r,   r/     s    c                 c   sL   | j tjjksJ | |D ]*}|j tjjkr@t||E d H  q|V  qd S r'   )r   r   r  r  r  r  )rootr  r  r+   r+   r,   r  !  s
    r  c              
      s^  t t|jd j}tjtks,J fddttD }z|| W n2 ty } z|j	
d  W Y d }~n
d }~0 0 jd urj|}t|tk}t|td} fdd  fdd|D }t|d	kr|d
 jtjjkr|d
 j|_|d
 j|_nDt||_tj|_j| jd urZ|sZj||j d S )Nrz  c                    s*   g | ]"}t t | j| d  jqS ry  )rw   r  r)   r[   )rO   rs   )re   r*   r+   r,   rT   3  s   z*_merge_PaintColrLayers.<locals>.<listcomp>z.Layers)r  c                    sr   t | trn fdd| D }t } ttjj| _t|| _	tj
| _j
| jd urnj|| j | S )Nc                    s   g | ]} |qS r+   r+   r   listToColrLayersr+   r,   rT   O  rS   zD_merge_PaintColrLayers.<locals>.listToColrLayers.<locals>.<listcomp>)ru   rw   r   r  r   r  r  r   rn   r  rv  r  r  rw  r   )r  rv  )r  r*   r+   r,   r  M  s    


z0_merge_PaintColrLayers.<locals>.listToColrLayersc                    s   g | ]} |qS r+   r+   r   r  r+   r,   rT   Y  rS   r   r   )rw   r  r(   r[   rn   r)   r   rt   r%   rc   r1   rw  Z	try_reuser   r   r   r   r  r  r  r  rv  r  r   )r*   rd   re   Z
out_layersZmaster_layersesrk   Zis_treer+   )r  re   r*   r,   _merge_PaintColrLayers*  s0    

"
r  c           	         s     ||dd }|tjju r.t || d S | }d|d urRtt||fdd|	 D } 
|||  ||}dd | D }|tjkpt fdd|D }|rr||_|r҈ | |d usJ t||_d S )	Nc                 S   s
   |    S r'   )Zis_variable)r  r+   r+   r,   r|  p  rS   zmerge.<locals>.<lambda>r+   c                 3   s   | ]}|j  vr|j V  qd S r'   rR  r  varAttrsr+   r,   rR   {  rS   r   c                 S   s   g | ]
}|j qS r+   )rh   r1  r+   r+   r,   rT     rS   r   c                 3   s   | ]}t | jv V  qd S r'   r  ru  rZ   r4  r+   r,   rR     s   )r  r   r  r  r  Zas_variabler	   getVariableAttrsr<   getConvertersr  r  ZiterSubTablesr  r  VarIndexBaser  r   r   )	r@   r*   re   r  Z	varFormatstaticAttrsr  Z	subTablesZ
isVariabler+   )r@   r  r,   r/   n  s,    
c                    sj   t |j}t|  fdd| D }| ||| | || }|tjkrf||_	| j
t| d S )Nc                 3   s   | ]}|j  vr|j V  qd S r'   rR  r  r  r+   r,   rR     rS   r   )r<   r  r	   r  r  r  r  r   r  r  ru  r   r  )r@   r*   re   r  r  r  r+   r  r,   r/     s    


c                    sR     ||dd | D  t fdd|jD rN |  jt| d S )Nc                 s   s   | ]}|j V  qd S r'   rR  r  r+   r+   r,   rR     rS   r   c                 3   s   | ]}t | jv V  qd S r'   r  )rO   stopr4  r+   r,   rR     rS   )r  r  r  	ColorStopr  ru  r   r  r   r+   r4  r,   r/     s    
Zclipsc                 C   s   |  || d S r'   )r  r   r+   r+   r,   r/     s    )NN)N)N)F)r  r  )krG  osr   r=   operatorr   loggingZfontTools.colorLib.builderr   r   ZfontTools.miscr   ZfontTools.misc.roundToolsr   ZfontTools.misc.treeToolsr   ZfontTools.ttLib.tablesr   r   r	   Z#fontTools.ttLib.tables.otConvertersr
   Z!fontTools.ttLib.tables.otTraverser   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.varLibr   r   r   ZfontTools.varLib.modelsr   r   r   r   r   ZfontTools.varLib.varStorer   	functoolsr   ZfontTools.otlLib.builderr   ZfontTools.otlLib.optimize.gposr   r   	getLoggerr>  errorsr   r   r   r   r   r    r!   r"   r#   r$   r%   objectr&   r   r@   ZGDEFr/   r   r   r   r  r   r   r   r   r   r   r   r   r  r   r  ZMarkBasePosZMarkMarkPosr  r  r%  r&  r)  Z
CursivePosr*  ZLookuprB  Z
CaretValuerU  rc  rj  Z	BaseCoordrr  r  r  r  r  r  ZClipBoxZ	Affine2x3r  Z	ColorLineZClipListr+   r+   r+   r,   <module>   s   
4x

%





=

5!


N)

+
V









i












(







 `



		D
(


