o
    nĎi(                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dl	Z	dd Z
dd	 ZdddZe	jfddZdddZedkrEd dl	Z	e	e  dS dS )    )VariationModel)VarStoreInstancer)fixedToFloat)productNc                 C   s4   | dkr|j | |j|j    S |j | |j |j   S )Nr   )defaultValuemaxValueminValue)vaxis r   Y/home/jeff/fluffinator/venv/lib/python3.10/site-packages/fontTools/varLib/avar/unbuild.py_denormalize   s   r   c              	   C   sT  t | |}|j}|j}dd |D }|D ]}| |}|| }|| }	t|	 }
|	 D ]r\}\}}}||fD ]f}|dv r?q8| D ]}t|}t| }||
krTqC||vrYqC|| |kra n=qCt|d ddD ]/}|| }t| }||
kr{qj||vrqjdd | D }|| |krd |t	| <  nqjJ dq8q-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   _defaultVr   r   r   r   C   s    FzNo pin foundc                 S      g | ]}t |qS r   dictr   tr   r   r   
<listcomp>K       z#_pruneLocations.<locals>.<listcomp>)
r   mappingsupportsindexsetkeysr   r   ranger   )	locationspolesaxisTagsmodelmodelMappingmodelSupportspinslocationisupportsupportAxesaxisTagminVr   maxVr	   pinpinLocationpinAxescandidateIdx	candidatecandidateAxesr   r   r   _pruneLocations   sT   

"r:   Tc                     s(  | d j }dd |D dd |D }dd t|D  d| vr$i 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 ]g}|j}|D ]_}g }g }|| }t|jD ]7\}}|jdkrqqg|| }|||jf g }|jdkr|||jf |jdkr|||jf || qgt	t| }t|}d |	|< |
| |
| qXqQdd t|
 fdddD }
dd |	 D }	t|
t|	|}
|jj}t||}|
D ]=}|| i }t|D ](\}}|}|d ur|| }|| }|dkr||d}|t|d }|||< q|||f q|d d i ks-J |d d
 i kr;|d |r| D ]%\}vrRtd fddfdd| D |< qBt|D ]#\}\}}fdd| D }fdd| D }||f||< ql||fS )Nfvarc                 S   s   i | ]}|j |qS r   r1   r   ar   r   r   r   P   r   z&mappings_from_avar.<locals>.<dictcomp>c                 S   s   g | ]}|j qS r   r<   r=   r   r   r   r   Q   s    z&mappings_from_avar.<locals>.<listcomp>c                 S   s   i | ]\}}|j |qS r   r<   )r   r.   r>   r   r   r   r   R   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   V   s    majorVersionr      r   r   c                 S   r   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   r@   r   axisIndexesr   r   	<genexpr>   s    z7mappings_from_avar.<locals>.<lambda>.<locals>.<genexpr>)lenr   )r   rD   r   r   <lambda>       z$mappings_from_avar.<locals>.<lambda>)keyc                 S   r   r   r   r   r   r   r   r      r      zUnknown axis tag c                    s   t |   S r   r   )r	   )axisMapr@   r   r   rH      s    c                    s   i | ]\}} | |qS r   r   )r   r   r	   )denormr   r   r      rI   c                        i | ]\}}|t | | qS r   rL   r   r@   valrM   r   r   r          c                    rO   r   rL   rP   rR   r   r   r      rS   ) axes	enumeratesegmentsr   getattrtableVarStoreVarRegionListRegionr#   VarDataVarRegionIndexVarRegionAxis	PeakCoordappend
StartCoordEndCoordr   r   addupdatesortedr$   r:   list	VarIdxMapr   setLocationgetfi2flpop
ValueError) fontdenormalizefvarAxesr(   r?   axisMapsmappingsvarStoreregionsr'   inputLocationsvarDataregionIndicesregionIndexpeakLocationcornersregion	axisIndexr
   r1   corner	varIdxMap	instancerr-   outputLocationvarIdxdeltar	   rA   r.   inputLoc	outputLocr   )rE   rM   rN   r@   r   mappings_from_avarN   s   














r   c                    s  | d }|j }t| \}}d| v r| d   fdd|D }ndd |D }td|d td|d td	|d |D ]}||j }|j|j|jf}	d
d |	D }	||j}
|
d u r\dnd}td|j d| d|	d  d|	d  d|	d  d| |d |
d urt|
	 D ]+}|
| }|t
|krt
|n|}|t
|krt
|n|}td| d| d|d qtd|d q:|rFtd|d |D ]z\}}td|d td|d t|	 D ]!}|| }|t
|krt
|n|}td||  d| d|d qtd |d td!|d t|	 D ]#}|| }|t
|kr t
|n|}td||  d| d|d qtd"|d td#|d qtd$|d td%|d td&|d d S )'Nr;   namec                    s   i | ]
}|j  |jqS r   )r1   getDebugName
axisNameID)r   r
   r   r   r   r      s    zunbuild.<locals>.<dictcomp>c                 S   s   i | ]}|j |j qS r   r<   r=   r   r   r   r      s    z&<?xml version='1.0' encoding='UTF-8'?>filez<designspace format="5.1">z  <axes>c                 S   s$   g | ]}|t |krt |n|qS r   )int)r   r	   r   r   r   r      s   $ zunbuild.<locals>.<listcomp>z/>>z    <axis tag="z" name="z" minimum="r   z" maximum="rC   z" default="r   "z      <map input="z
" output="z"/>z    </axis>z    <mappings>z      <mapping>z        <input>z          <dimension name="z
" xvalue="z        </input>z        <output>z        </output>z      </mapping>z    </mappings>z	  </axes>z</designspace>)rT   r   printr1   r   r   r   ri   re   r$   r   )rm   fr;   rT   rV   rq   	axisNamesr
   axisNametripletrM   closingr   r	   r   r   r@   r   r   r   unbuild   sl   
4
r   c                 C   s   | du rt jdd } ddlm} ddl}|jdd d}|jddd	d
 || }||j}d|vr;t	dt j
d dS t| dS )z,Print `avar` table as a designspace snippet.Nr   r   )TTFontzfonttools varLib.avar.unbuild)descriptionrm   zvarfont.ttfzVariable-font file.)metavarhelpr;   zNot a variable font.r   )sysargvfontTools.ttLibr   argparseArgumentParseradd_argument
parse_argsrm   r   stderrr   )argsr   r   parseroptionsrm   r   r   r   main   s   

r   __main__)Tr   )fontTools.varLib.modelsr   fontTools.varLib.varStorer   fontTools.misc.fixedToolsr   rj   	itertoolsr   r   r   r:   r   stdoutr   r   __name__exitr   r   r   r   <module>   s    
?g
?