B
    Sc                 @   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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S )!    )ttLib)otTablesc             C   s&   t  }dd | D \|_|_|_|S )Nc             S   s   g | ]}t |qS  )float).0vr   r   7lib/python3.7/site-packages/fontTools/varLib/builder.py
<listcomp>   s    z&buildVarRegionAxis.<locals>.<listcomp>)otVarRegionAxisZ
StartCoordZ	PeakCoordZEndCoord)ZaxisSupportselfr   r   r   buildVarRegionAxis   s    r   c                s`   t  fdd|  D s(td|  ft }g |_x$ D ]}|jt| |d q<W |S )Nc             3   s   | ]}| kV  qd S )Nr   )r   tag)axisTagsr   r   	<genexpr>   s    z!buildVarRegion.<locals>.<genexpr>zUnknown axis tag found.)r   r   r   )	allkeysAssertionErrorr
   Z	VarRegionr   appendr   get)supportr   r   r   r   )r   r   buildVarRegion   s    (
r   c             C   sH   t  }t||_g |_x| D ]}|jt|| qW t|j|_|S )N)r
   VarRegionListlenZRegionAxisCountZRegionr   r   ZRegionCount)Zsupportsr   r   r   r   r   r   buildVarRegionList   s    

r   c                s    fdd|D S )Nc                s   g | ]} | qS r   r   )r   i)lstr   r   r	      s    z _reorderItem.<locals>.<listcomp>r   )r   mappingr   )r   r   _reorderItem   s    r   Fc             C   sj  | j }| j}dg| }x.|D ]&}dd |D }dd t||D }qW dd |D }tdd |D }|rg }	|	dd t|D  |	d	d t|D  |	d
d t|D  t||	}t| j|	| _t| j| _ x&t	t|D ]}
t||
 |	||
< qW |r:t
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_length)r   r   r   r   r   r	   *   s    z.VarData_calculateNumShorts.<locals>.<listcomp>c             S   s   g | ]}t | qS r   )max)r   Zpairr   r   r   r	   +   s    c             S   s    g | ]}|r|d  d? ndqS )      r   r   )r   br   r   r   r	   5   s    c             s   s   | ]}|d kV  qdS )   Nr   )r   r$   r   r   r   r   8   s    z-VarData_calculateNumShorts.<locals>.<genexpr>c             s   s   | ]\}}|d kr|V  qdS )r%   Nr   )r   r   r$   r   r   r   r   =   s    c             s   s   | ]\}}|d kr|V  qdS )r%   Nr   )r   r   r$   r   r   r   r   >   s    c             s   s   | ]\}}|d kr|V  qdS )   Nr   )r   r   r$   r   r   r   r   ?   s    c             s   s   | ]\}}|d kr|V  qdS )r%   Nr   )r   r   r$   r   r   r   r   H   s    r   )defaultr&   i   c             s   s   | ]\}}|d kr|V  qdS )r&   Nr   )r   r   r$   r   r   r   r   K   s    )VarRegionCountItemzipanyextend	enumerater   VarRegionIndexr   ranger!   Z	NumShorts)r   optimizecountitemsZbit_lengthsitemZblZbyte_lengthsZ	longWordsr   r   r   r   r   VarData_calculateNumShorts    s0    



  r4   Tc             C   s   t | |dS )zDeprecated name for VarData_calculateNumShorts() which
	defaults to optimize=True.  Use varData.calculateNumShorts()
	or varData.optimize().)r0   )r4   )r   r0   r   r   r   VarData_CalculateNumShortsR   s    r5   c             C   s   t | ddS )NT)r0   )r4   )r   r   r   r   VarData_optimizeX   s    r6   c             C   sx   t  }t| |_t|j }|_g  }|_|r\x*|D ]"}t||ksJt|t| q6W t|j|_	|j
|d |S )N)r0   )r
   VarDatalistr.   r   r(   r)   r   r   Z	ItemCountcalculateNumShorts)ZvarRegionIndicesr2   r0   r   ZregionCountZrecordsr3   r   r   r   buildVarData^   s    


r:   c             C   s.   t  }d|_| |_t||_t|j|_|S )Nr&   )r
   ZVarStoreFormatr   r8   r7   r   ZVarDataCount)ZvarRegionListZvarDataListr   r   r   r   buildVarStorel   s    
r<   c             C   s"   t  }dd t|| D |_|S )Nc             S   s   i | ]\}}||qS r   r   )r   gr   r   r   r   
<dictcomp>y   s    z"buildVarIdxMap.<locals>.<dictcomp>)r
   Z	VarIdxMapr*   r   )varIdxesZ
glyphOrderr   r   r   r   buildVarIdxMapw   s    r@   c             C   s,   t  }t| |_t| dkr"dnd|_|S )Ni  r&   r   )r
   ZDeltaSetIndexMapr8   r   r   r;   )r?   r   r   r   r   buildDeltaSetIndexMap}   s    
rA   c             C   s&   t  }d|_| d? |_| d@ |_|S )Ni      i  )r
   ZDeviceZDeltaFormatZ	StartSizeZEndSize)ZvarIdxr   r   r   r   buildVarDevTable   s
    

rC   N)F)T)T)Z	fontToolsr   ZfontTools.ttLib.tablesr   r
   r   r   r   r   r4   r7   r9   r5   r6   r0   r:   r<   r@   rA   rC   r   r   r   r   <module>   s   

0

