U
    #vh                     @   s   d dl mZ d dlmZ dd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zd(ddZeej_d)ddZdd Zeej_d*ddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )+    )ttLib)otTablesc                 C   s&   t  }dd | D \|_|_|_|S )Nc                 S   s   g | ]}t |qS  float.0vr   r   </tmp/pip-unpacked-wheel-1ufboor8/fontTools/varLib/builder.py
<listcomp>	   s     z&buildVarRegionAxis.<locals>.<listcomp>)otVarRegionAxis
StartCoord	PeakCoordEndCoord)axisSupportselfr   r   r
   buildVarRegionAxis   s    r   c                 C   s,   t  }| |_dd |D \|_|_|_|S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r
   r      s     z,buildSparseVarRegionAxis.<locals>.<listcomp>)r   SparseVarRegionAxisZ	AxisIndexr   r   r   )Z	axisIndexr   r   r   r   r
   buildSparseVarRegionAxis   s    r   c                    s\   t  fdd|  D s(td|  ft }g |_ D ]}|jt| |d q:|S )Nc                 3   s   | ]}| kV  qd S Nr   r   tagaxisTagsr   r
   	<genexpr>   s     z!buildVarRegion.<locals>.<genexpr>Unknown axis tag found.r   r   r   )	allkeysAssertionErrorr   Z	VarRegionr   appendr   get)supportr   r   r   r   r   r
   buildVarRegion   s    r$   c              	      s|   t  fdd|  D s(td|  ft }g |_t D ],\}}|| krPq>|jt|| 	|d q>t
|j|_|S )Nc                 3   s   | ]}| kV  qd S r   r   r   r   r   r
   r   "   s     z'buildSparseVarRegion.<locals>.<genexpr>r   r   )r   r   r    r   ZSparseVarRegionr   	enumerater!   r   r"   lenZSparseRegionCount)r#   r   r   ir   r   r   r
   buildSparseVarRegion!   s    r(   c                 C   sD   t  }t||_g |_| D ]}|jt|| qt|j|_|S r   )r   VarRegionListr&   RegionAxisCountRegionr!   r$   RegionCountZsupportsr   r   r#   r   r   r
   buildVarRegionList3   s    
r.   c                 C   sD   t  }t||_g |_| D ]}|jt|| qt|j|_|S r   )r   SparseVarRegionListr&   r*   r+   r!   r(   r,   r-   r   r   r
   buildSparseVarRegionList=   s    
r0   c                    s    fdd|D S )Nc                    s   g | ]} | qS r   r   r   r'   lstr   r
   r   H   s     z _reorderItem.<locals>.<listcomp>r   )r3   mappingr   r2   r
   _reorderItemG   s    r5   Fc                 C   s`  | j }| j}dg| }|D ]&}dd |D }dd t||D }qdd |D }tdd |D }|rg }	|	dd t|D  |	d	d t|D  |	d
d t|D  t||	}t| j|	| _t| j| _ t	t|D ]}
t||
 |	||
< q|r0t
dd t|D ddd | _|  jdO  _n t
dd t|D ddd | _t| j| _ | S )Nr   c                 S   s   g | ]}||d k    qS ))
bit_lengthr1   r   r   r
   r   U   s     z.VarData_calculateNumShorts.<locals>.<listcomp>c                 S   s   g | ]}t | qS r   )max)r   pairr   r   r
   r   V   s     c                 S   s    g | ]}|r|d  d? ndqS )      r   r   r   br   r   r
   r   `   s     c                 s   s   | ]}|d kV  qdS    Nr   r<   r   r   r
   r   c   s     z-VarData_calculateNumShorts.<locals>.<genexpr>c                 s   s   | ]\}}|d kr|V  qdS r>   r   r   r'   r=   r   r   r
   r   h   s      c                 s   s   | ]\}}|d kr|V  qdS r>   r   r@   r   r   r
   r   i   s      c                 s   s   | ]\}}|d kr|V  qdS    Nr   r@   r   r   r
   r   j   s      c                 s   s   | ]\}}|d kr|V  qdS r>   r   r@   r   r   r
   r   t   s      r6   )defaultrB      c                 s   s   | ]\}}|d kr|V  qdS rA   r   r@   r   r   r
   r   y   s      )VarRegionCountItemzipanyextendr%   r5   VarRegionIndexr&   ranger8   Z	NumShorts)r   optimizecountitemsZbit_lengthsitemblZbyte_lengthsZ	longWordsr4   r'   r   r   r
   VarData_calculateNumShortsK   s4    


rQ   Tc                 C   s   t | |dS )zDeprecated name for VarData_calculateNumShorts() which
    defaults to optimize=True.  Use varData.calculateNumShorts()
    or varData.optimize().rL   rQ   )r   rL   r   r   r
   VarData_CalculateNumShorts   s    rT   c                 C   s   t | ddS )NTrR   rS   )r   r   r   r
   VarData_optimize   s    rU   c                 C   st   t  }t| |_t|j }|_g  }|_|rX|D ]"}t||ksHt|t| q4t|j|_	|j
|d |S )NrR   )r   VarDatalistrJ   r&   rE   rF   r    r!   	ItemCountcalculateNumShorts)varRegionIndicesrN   rL   r   regionCountrecordsrO   r   r   r
   buildVarData   s    

r]   c                 C   s.   t  }d|_| |_t||_t|j|_|S NrB   )r   ZVarStoreFormatr)   rW   rV   r&   ZVarDataCount)varRegionListZvarDataListr   r   r   r
   buildVarStore   s    
ra   c                 C   sn   t  }d|_t| |_t|j }|_g  }|_|r^|D ]"}t||ksNt|	t| q:t|j|_
|S r^   )r   MultiVarDatar_   rW   rJ   r&   rE   rF   r    r!   rX   )rZ   rN   r   r[   r\   rO   r   r   r
   buildMultiVarData   s    

rc   c                 C   s.   t  }d|_| |_t||_t|j|_|S r^   )r   ZMultiVarStorer_   r/   rW   rb   r&   ZMultiVarDataCount)r`   ZmultiVarDataListr   r   r   r
   buildMultiVarStore   s    
rd   c                 C   s"   t  }dd t|| D |_|S )Nc                 S   s   i | ]\}}||qS r   r   )r   gr	   r   r   r
   
<dictcomp>   s      z"buildVarIdxMap.<locals>.<dictcomp>)r   Z	VarIdxMaprG   r4   )varIdxesZ
glyphOrderr   r   r   r
   buildVarIdxMap   s    rh   c                 C   sJ   t | }tdd t|D r"d S t }||_t|dkr@dnd|_|S )Nc                 s   s   | ]\}}||kV  qd S r   r   )r   r'   r	   r   r   r
   r      s     z(buildDeltaSetIndexMap.<locals>.<genexpr>  rB   r   )rW   r   r%   r   ZDeltaSetIndexMapr4   r&   r_   )rg   r4   r   r   r   r
   buildDeltaSetIndexMap   s    rj   c                 C   s&   t  }d|_| d? |_| d@ |_|S )NrD      ri   )r   ZDeviceZDeltaFormatZ	StartSizeZEndSize)ZvarIdxr   r   r   r
   buildVarDevTable   s
    

rl   N)F)T)T)Z	fontToolsr   ZfontTools.ttLib.tablesr   r   r   r   r$   r(   r.   r0   r5   rQ   rV   rY   rT   rU   rL   r]   ra   rc   rd   rh   rj   rl   r   r   r   r
   <module>   s(   


5

	
