U
    »mœdm  ã                   @   sb   d dl mZ d dlmZ d dlmZ d dlZe d¡Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ ZdS )é    )ÚotTables©ÚnormalizeValue)ÚdeepcopyNzfontTools.varLib.instancerc                 C   sh   g }| j jD ]*}|jdkr  dS | |j|j|jf¡ qt| jj	g| ƒ}||krVdS | 
|¡ dS d S )Né   TF)ÚConditionSetÚConditionTableÚFormatÚappendÚ	AxisIndexÚFilterRangeMinValueÚFilterRangeMaxValueÚ	frozensetÚFeatureTableSubstitutionÚVersionÚadd)ÚrecÚseenZconditionSetZcondZ	recordKey© r   ú_/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/varLib/instancer/featureVars.pyÚ_featureVariationRecordIsUnique
   s    
ÿ
r   c                    sF   | j }| j}||ks(|ˆ jks(|ˆ jk r,d S t‡ fdd„||fD ƒƒS )Nc                 3   s   | ]}t |ˆ ƒV  qd S )Nr   )Ú.0Úv©Ú	axisLimitr   r   Ú	<genexpr>,   s     z7_limitFeatureVariationConditionRange.<locals>.<genexpr>)r   r   ÚmaximumÚminimumÚtuple)Ú	conditionr   ÚminValueÚmaxValuer   r   r   Ú$_limitFeatureVariationConditionRange    s    ÿþýr"   c                 C   sf  d}d}g }ddl m} |dddƒ}	t| jjƒD ]ü\}
}|jdk�r|j}|| j}|j}|j	}| 
||	¡}||j  kr‚|ksˆn d}|j|ksœ|j|k r¦d } �q.||k�r,|| |_t||ƒ}|rü|\}}||_||_	d}|dksð|dkrú| |¡ n
d } �q.q0t d |
||j¡¡ d}| |¡ q0|d k	�rL|�rL|| j_d}nd}|�oZ| }|||fS )NTFr   )ÚNormalizedAxisTripleéÿÿÿÿr   zWCondition table {0} of FeatureVariationRecord {1} has unsupported format ({2}); ignored)ZfontTools.varLib.instancerr#   Ú	enumerater   r   r	   r   ÚaxisTagr   r   ÚgetÚdefaultr   r   r"   r
   ÚlogÚwarningÚformat)ÚrecordZrecIdxÚ
axisLimitsÚfvarAxesÚaxisIndexMapÚappliesÚ
shouldKeepZnewConditionsr#   Zdefault_tripleÚir   ZaxisIdxr&   r    r!   ZtripleZnewRanger   r   Ú	universalr   r   r   Ú"_instantiateFeatureVariationRecord/   sX    



  ÿÿr4   c                    sh  t | ¡ ƒ‰‡fdd„|D ƒ‰ ‡ fdd„ˆ D ƒ}d}t ƒ }g }d }t| jjƒD ]ª\}}	t|	||||ƒ\}
}}|r„t|	|ƒr„| |	¡ |
rð|sð|	jj	dksœt
‚t|	jƒ}t|j|	jjƒD ]4\}}t| jj|j jƒ|_t|jƒ| jj|j _q¶d}|rN qúqN|�r>|�r>|�s>t ¡ }t ¡ |_g |j_d|j_||_| |¡ |�rZ|| j_t|ƒ| j_n
| `d| _	d S )	Nc                    s   g | ]}|j ˆ kr|j ‘qS r   )r&   )r   Zaxis)Ú
pinnedAxesr   r   Ú
<listcomp>r   s     
 z1_instantiateFeatureVariations.<locals>.<listcomp>c                    s   i | ]}|ˆ   |¡“qS r   )Úindex)r   r&   )Ú	axisOrderr   r   Ú
<dictcomp>s   s      z1_instantiateFeatureVariations.<locals>.<dictcomp>Fi   Tr   )ÚsetZpinnedLocationr%   ÚFeatureVariationsZFeatureVariationRecordr4   r   r
   r   r   ÚAssertionErrorr   ÚzipZSubstitutionRecordZFeatureListZFeatureRecordZFeatureIndexZFeatureÚotr   r   ZConditionCountÚlenZFeatureVariationCount)Útabler.   r-   r/   ZfeatureVariationAppliedZuniqueRecordsZ
newRecordsZdefaultsSubstsr2   r,   r0   r1   r3   r(   r   ZdefaultRecordr   )r8   r5   r   Ú_instantiateFeatureVariationsp   sZ        ÿ


þÿÿ

rA   c                 C   sZ   dD ]P}|| kst | | jdd ƒs$qt d|¡ t| | j| d j|ƒ | |  ¡  qd S )N)ZGPOSZGSUBr;   z+Instantiating FeatureVariations of %s tableZfvar)Úgetattrr@   r)   ÚinforA   ZaxesZprune_lookups)Zvarfontr-   ZtableTagr   r   r   ÚinstantiateFeatureVariations©   s    
  ÿ  ÿrD   )ZfontTools.ttLib.tablesr   r>   ZfontTools.varLib.modelsr   Úcopyr   ÚloggingÚ	getLoggerr)   r   r"   r4   rA   rD   r   r   r   r   Ú<module>   s   
A9