o
    l^Uf                     @   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      g | ]}t |qS  float.0vr   r   8lib/python3.10/site-packages/fontTools/varLib/builder.py
<listcomp>	       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   r   r   r   r   r   r   r   r      r   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J d|  ft }g |_ D ]}|jt| |d q|S )Nc                 3       | ]}| v V  qd S Nr   r	   tagaxisTagsr   r   	<genexpr>       z!buildVarRegion.<locals>.<genexpr>Unknown axis tag found.r   r   r   )allkeysr   Z	VarRegionr   appendr   get)supportr   r   r   r   r   r   buildVarRegion   s   r'   c              	      s|   t  fdd|  D sJ d|  ft }g |_t D ]\}}|| vr(q|jt|| |d qt	|j|_
|S )Nc                 3   r   r   r   r   r   r   r   r   "   r   z'buildSparseVarRegion.<locals>.<genexpr>r    r!   )r"   r#   r   ZSparseVarRegionr   	enumerater$   r   r%   lenZSparseRegionCount)r&   r   r   ir   r   r   r   buildSparseVarRegion!   s   r+   c                 C   D   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      
r2   c                 C   r,   r   )r   SparseVarRegionListr)   r.   r/   r$   r+   r0   r1   r   r   r   buildSparseVarRegionList=   r3   r5   c                    s    fdd|D S )Nc                    s   g | ]} | qS r   r   r	   r*   lstr   r   r   H   r   z _reorderItem.<locals>.<listcomp>r   )r8   mappingr   r7   r   _reorderItemG   s   r:   Fc                 C   s^  | j }| j}dg| }|D ]}dd |D }dd t||D }q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| _ t	t|D ]}
t||
 |	||
< qq|rt
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_lengthr6   r   r   r   r   U   s    z.VarData_calculateNumShorts.<locals>.<listcomp>c                 S   s   g | ]}t | qS r   )max)r	   Zpairr   r   r   r   V   r   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   r   z-VarData_calculateNumShorts.<locals>.<genexpr>c                 s        | ]\}}|d kr|V  qdS rB   r   r	   r*   rA   r   r   r   r   h       c                 s        | ]\}}|d kr|V  qdS rB   r   rE   r   r   r   r   i   rF   c                 s   rG      Nr   rE   r   r   r   r   j   rF   c                 s   rD   rB   r   rE   r   r   r   r   t   rF   r;   )defaultrI      c                 s   rD   rH   r   rE   r   r   r   r   y   rF   )VarRegionCountItemzipanyextendr(   r:   VarRegionIndexr)   ranger=   Z	NumShorts)r   optimizecountitemsZbit_lengthsitemZblZbyte_lengthsZ	longWordsr9   r*   r   r   r   VarData_calculateNumShortsK   s4   


rW   Tc                 C   s   t | |dS )zDeprecated name for VarData_calculateNumShorts() which
    defaults to optimize=True.  Use varData.calculateNumShorts()
    or varData.optimize().rS   rW   )r   rS   r   r   r   VarData_CalculateNumShorts   s   rZ   c                 C   s   t | ddS )NTrX   rY   )r   r   r   r   VarData_optimize   s   r[   c                 C   st   t  }t| |_t|j }|_g  }|_|r,|D ]}t||ks$J |t| qt|j|_|j	|d |S )NrX   )
r   VarDatalistrQ   r)   rL   rM   r$   	ItemCountcalculateNumShorts)varRegionIndicesrU   rS   r   regionCountrecordsrV   r   r   r   buildVarData   s   

rc   c                 C   .   t  }d|_| |_t||_t|j|_|S NrI   )r   ZVarStoreFormatr-   r]   r\   r)   ZVarDataCount)varRegionListZvarDataListr   r   r   r   buildVarStore      
rh   c                 C   sn   t  }d|_t| |_t|j }|_g  }|_|r/|D ]}t||ks'J |t| qt|j|_	|S re   )
r   MultiVarDatarf   r]   rQ   r)   rL   rM   r$   r^   )r`   rU   r   ra   rb   rV   r   r   r   buildMultiVarData   s   

rk   c                 C   rd   re   )r   ZMultiVarStorerf   r4   r]   rj   r)   ZMultiVarDataCount)rg   ZmultiVarDataListr   r   r   r   buildMultiVarStore   ri   rl   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	VarIdxMaprN   r9   )varIdxesZ
glyphOrderr   r   r   r   buildVarIdxMap   s   rp   c                 C   sP   t | }tdd t|D rd S t }||_t|dkr#d|_|S d|_|S )Nc                 s   s    | ]	\}}||kV  qd S r   r   )r	   r*   r
   r   r   r   r      s    z(buildDeltaSetIndexMap.<locals>.<genexpr>  rI   r   )r]   r"   r(   r   ZDeltaSetIndexMapr9   r)   rf   )ro   r9   r   r   r   r   buildDeltaSetIndexMap   s   rr   c                 C   s&   t  }d|_| d? |_| d@ |_|S )NrK      rq   )r   ZDeviceZDeltaFormatZ	StartSizeZEndSize)ZvarIdxr   r   r   r   buildVarDevTable   s
   

rt   N)F)T)Z	fontToolsr   ZfontTools.ttLib.tablesr   r   r   r   r'   r+   r2   r5   r:   rW   r\   r_   rZ   r[   rS   rc   rh   rk   rl   rp   rr   rt   r   r   r   r   <module>   s*    


5

	
