U
    #vh%                     @   s   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ZedZd	d
 Zdd ZdddZdddZedkrd dlZee  dS )    )	_add_avarload_designspace)VariationModel)VarStoreInstancer)fixedToFloat)makeOutputFileName)productNzfontTools.varLib.avarc                 C   s8   | dkr|j | |j|j    S |j | |j |j   S d S )Nr   )defaultValueZmaxValueZminValue)vaxis r   9/tmp/pip-unpacked-wheel-1ufboor8/fontTools/varLib/avar.py_denormalize   s    r   c              	   C   s\  t | |}|j}|j}dd |D }|D ]}| |}|| }|| }	t|	 }
|	 D ]\}\}}}||fD ]}|dkrqr| D ]<}t|}t| }||
krq||krq|| |kr qrqt|d ddD ]`}|| }t| }||
krq||krqdd | D }|| |krd |t	| <  qrqdsrt
dqrq\q(d	d
 | D S )Nc                 S   s   i | ]}t | d qS N)tupleitems).0kr   r   r   
<dictcomp>'   s     
 z#_pruneLocations.<locals>.<dictcomp>r      r   r   c                 S   s   i | ]\}\}}}||qS r   r   )r   r   _ZdefaultVr   r   r   r   G   s     FzNo pin foundc                 S   s   g | ]}t |qS r   dictr   tr   r   r   
<listcomp>O   s     z#_pruneLocations.<locals>.<listcomp>)r   mappingZsupportsindexsetkeysr   r   ranger   AssertionError)	locationspolesaxisTagsmodelZmodelMappingZmodelSupportsZpinslocationiZsupportZsupportAxesaxisTagZminVr   ZmaxVr
   ZpinZpinLocationZpinAxesZcandidateIdx	candidateZcandidateAxesr   r   r   _pruneLocations   sJ    



r,   Tc                     s2  | d j }dd |D dd |D }dd t|D  d| krHi i fS | d }dd |j D }g }t|d	d
dkr|jj}|jj}dd i}	t	dh}
|j
D ]}|j}|D ]}g }g }|| }t|jD ]r\}}|jdkrq|| }|||jf g }|jdkr|||jf |jdkr6|||jf || qt	t| }t|}d |	|< |
| |
| qqdd t|
 fdddD }
dd |	 D }	t|
t|	|}
|jj}t||}|
D ]}|| i }t|D ]T\}}|}|d k	r|| }|| }|dkr||d}|t|d }|||< q|||f q|d d i ksdt|d d
 i kr|d |r*| D ]J\}krt d fddfdd| D |< qt|D ]F\}\}}fdd| D }fdd| D }||f||< q||fS )Nfvarc                 S   s   i | ]}|j |qS r   r*   r   ar   r   r   r   T   s      z&mappings_from_avar.<locals>.<dictcomp>c                 S   s   g | ]
}|j qS r   r.   r/   r   r   r   r   U   s     z&mappings_from_avar.<locals>.<listcomp>c                 S   s   i | ]\}}|j |qS r   r.   )r   r)   r0   r   r   r   r   V   s      avarc                 S   s*   i | ]"\}}|r|d dddkr||qS )r   r   r   r   r   )r   tagsegr   r   r   r   Z   s
     ZmajorVersionr      r   r   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r      s   c                    s   t | t fdd| D fS )Nc                 3   s   | ]\}} | V  qd S r   r   )r   r2   r   axisIndexesr   r   	<genexpr>   s     z7mappings_from_avar.<locals>.<lambda>.<locals>.<genexpr>)lenr   )r   r5   r   r   <lambda>       z$mappings_from_avar.<locals>.<lambda>)keyc                 S   s   g | ]}t |qS r   r   r   r   r   r   r      s        zUnknown axis tag c                    s   t |   S r   r   )r
   )axisMapr2   r   r   r9      r:   c                    s   i | ]\}} | |qS r   r   )r   r   r
   )denormr   r   r      s      c                    s    i | ]\}}|t | | qS r   r=   r   r2   valr>   r   r   r      s     c                    s    i | ]\}}|t | | qS r   r=   r@   rB   r   r   r      s     )!axes	enumeratesegmentsr   getattrtableZVarStoreZVarRegionListZRegionr    ZVarDataZVarRegionIndexZVarRegionAxisZ	PeakCoordappendZ
StartCoordZEndCoordr   r   addupdatesortedr!   r,   listZ	VarIdxMapr   ZsetLocationgetfi2flr#   pop
ValueError) fontZdenormalizeZfvarAxesr&   r1   ZaxisMapsmappingsZvarStoreZregionsr%   ZinputLocationsZvarDataZregionIndicesZregionIndexZpeakLocationZcornersZregionZ	axisIndexr   r*   ZcornerZ	varIdxMapZ	instancerr(   ZoutputLocationZvarIdxdeltar
   r3   r)   ZinputLocZ	outputLocr   )r6   r>   r?   r2   r   mappings_from_avarR   s    













rT   c                 C   s  | dkrddl }|jdd } ddlm} ddlm} ddlm} ddl}|j	dd d}|j
d	d
dd |j
dddddd |j
ddtdd |j
ddddd || }||jrdndd ||j}d|krtd dS |jdkr$dd lm}	 t|\}
}|	|
 |	| tt|d! dS d"d# |d jD }t|jd$d%}d&|kr`td' |d&= t||j|j| |jdkrt|jd(d)d*}n|j}|rtd+| || dS ),z8Add `avar` table from designspace file to variable font.Nr   r   )configLogger)TTFont)DesignSpaceDocumentzfonttools varLib.avar)descriptionrQ   zvarfont.ttfzVariable-font file.)metavarhelpdesignspacezfamily.designspacezDesignspace file.?)rY   rZ   nargsdefaultz-oz--output-filezOutput font file name.)typerZ   z-vz	--verbose
store_truezRun more verbosely.)actionrZ   INFOWARNING)levelr-   zNot a variable font.)pprintrR   c                 S   s   g | ]
}|j qS r   r.   r/   r   r   r   r      s     zmain.<locals>.<listcomp>F)Zrequire_sourcesr1   z(avar table already present, overwriting.Tz.avar)Z	overWritesuffixz	Saving %s)sysargvZ	fontToolsrU   ZfontTools.ttLibrV   ZfontTools.designspaceLibrW   argparseArgumentParseradd_argumentstr
parse_argsverboserQ   logerrorr[   re   rT   printr8   rC   r   warningr   ZaxisMappingsZoutput_filer   infosave)argsrg   rU   rV   rW   ri   parseroptionsrQ   re   rE   rR   r&   Zdsoutfiler   r   r   main   sp       




ry   __main__)T)N)ZfontTools.varLibr   r   ZfontTools.varLib.modelsr   ZfontTools.varLib.varStorer   ZfontTools.misc.fixedToolsr   rN   ZfontTools.misc.cliToolsr   	itertoolsr   logging	getLoggerro   r   r,   rT   ry   __name__rg   exitr   r   r   r   <module>   s   
?
g
H