a
    QhE                     @   sl  d Z ddlmZmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZmZmZ G dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd de"Z#G dd de"Z$dd Z%G dd de"Z&d d!d"d#Z'G d$d% d%eZ(G d&d' d'Z)d(S ))zGlyphSets returned by a TTFont.    )ABCabstractmethod)Mapping)contextmanager)copydeepcopy)SimpleNamespace)Vector)otRoundfixedToFloat)deprecateFunction)	TransformDecomposedTransform)TransformPenTransformPointPen)DecomposingRecordingPenlerpRecordingsreplayRecordingc                   @   sh   e Zd ZdZddddZeedddZed	d
 Zdd Z	dd Z
dd Zededdd ZdS )_TTGlyphSetzlGeneric dict-like GlyphSet class that pulls metrics from hmtx and
    glyph shape from TrueType or CFF.
    TrecalcBoundsc                C   s   || _ || _d| jv r,dd | jd jD ni | _|d ur>|ni | _i | _|d urV|ni | _d| _g | _g | _	|| _
|d j| _t|ddd | _d | _|rddlm} t|d	d
d | _| jd ur|| jj|d j|| _d S )Nfvarc                 S   s   i | ]}|j d qS )r   axisTag).0Zaxis r   S/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/ttGlyphSet.py
<dictcomp>       z(_TTGlyphSet.__init__.<locals>.<dictcomp>r   hmtxZvmtxmetricsVarStoreInstancerZHVARtable)r   fontaxesdefaultLocationNormalizedlocationrawLocationoriginalLocationdepthlocationStackrawLocationStackglyphsMappingr    hMetricsgetattrgetvMetrics	hvarTablefontTools.varLib.varStorer"   ZVarStorehvarInstancer)selfr$   r'   r-   r   r"   r   r   r   __init__   s.    
z_TTGlyphSet.__init__resetc                 c   s   | j | j | j| j |r:| j | _| j | _n| j | _i | _| j| | j| z"d V  W | j 	 | _| j	 | _n| j 	 | _| j	 | _0 d S N)
r+   appendr'   r,   r(   r)   r   r&   updatepop)r5   r'   r8   r   r   r   pushLocation5   s    z_TTGlyphSet.pushLocationc              	   c   sB   z,| j }|  j d7  _ |V  W |  j d8  _ n|  j d8  _ 0 d S )N   )r*   )r5   r*   r   r   r   	pushDepthH   s
    z_TTGlyphSet.pushDepthc                 C   s
   || j v S r9   r-   r5   	glyphNamer   r   r   __contains__Q   s    z_TTGlyphSet.__contains__c                 C   s   t | j S r9   )iterr-   keysr5   r   r   r   __iter__T   s    z_TTGlyphSet.__iter__c                 C   s
   t | jS r9   )lenr-   rF   r   r   r   __len__W   s    z_TTGlyphSet.__len__z#use 'glyphName in glyphSet' instead)categoryc                 C   s
   || j v S r9   r@   rA   r   r   r   has_keyZ   s    z_TTGlyphSet.has_keyN)__name__
__module____qualname____doc__r6   r   boolr=   r?   rC   rG   rI   r   DeprecationWarningrK   r   r   r   r   r      s   
r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )_TTGlyphSetGlyfTc                    s0   |d | _ t j||| j |d |d| _d S Nglyfr   Zgvar	glyfTablesuperr6   r0   	gvarTabler5   r$   r'   r   	__class__r   r   r6   b   s    
_TTGlyphSetGlyf.__init__c                 C   s   t | || jdS Nr   _TTGlyphGlyfr   rA   r   r   r   __getitem__g   s    _TTGlyphSetGlyf.__getitem__)TrL   rM   rN   r6   r`   __classcell__r   r   rZ   r   rR   a   s   rR   c                       s&   e Zd Zd fdd	Zdd Z  ZS )rR   Tc                    s0   |d | _ t j||| j |d |d| _d S rS   rU   rY   rZ   r   r   r6   l   s    
r\   c                 C   s   t | || jdS r]   r^   rA   r   r   r   r`   q   s    ra   )Trb   r   r   rZ   r   rR   k   s   c                       s>   e Zd Z fddZdd Zdd Zeeddd	Z  Z	S )
_TTGlyphSetCFFc                    sJ   d|v rdnd}t || j d j| _t ||| j | | d S )NCFF2zCFF r   )listcffvaluesZCharStringscharStringsrW   r6   setLocation)r5   r$   r'   ZtableTagrZ   r   r   r6   v   s    z_TTGlyphSetCFF.__init__c                 C   s
   t | |S r9   )_TTGlyphCFFrA   r   r   r   r`   |   s    z_TTGlyphSetCFF.__getitem__c                 C   sV   d | _ |rLddlm} t| jdd }|d urR||j| jd j|}|j| _ nd | _ d S )Nr   r!   varStorer   )	blenderr3   r"   r/   ri   Z
otVarStorer$   r%   ZinterpolateFromDeltas)r5   r'   r"   rl   	instancerr   r   r   rj      s    
z_TTGlyphSetCFF.setLocationr7   c              
   c   sb   |  | t| ||6}z|V  W |  | j n|  | j 0 W d    n1 sT0    Y  d S r9   )rj   r   r=   r'   )r5   r'   r8   valuer   r   r   r=      s
    
z_TTGlyphSetCFF.pushLocation)
rL   rM   rN   r6   r`   rj   r   rP   r=   rc   r   r   rZ   r   rd   u   s
   rd   c                       s$   e Zd Z fddZdd Z  ZS )_TTGlyphSetVARCc                    s&   || _ t ||| |d j| _d S )NVARC)glyphSetrW   r6   r#   	varcTable)r5   r$   r'   rr   rZ   r   r   r6      s    z_TTGlyphSetVARC.__init__c                 C   s&   | j }||jjvr| j| S t| |S r9   )rs   Coverageglyphsrr   _TTGlyphVARC)r5   rB   varcr   r   r   r`      s    
z_TTGlyphSetVARC.__getitem__rb   r   r   rZ   r   rp      s   rp   c                   @   s2   e Zd ZdZddddZedd Zdd	 Zd
S )_TTGlyphaS  Glyph object that supports the Pen protocol, meaning that it has
    .draw() and .drawPoints() methods that take a pen object as their only
    argument. Additionally there are 'width' and 'lsb' attributes, read from
    the 'hmtx' table.

    If the font contains a 'vmtx' table, there will also be 'height' and 'tsb'
    attributes.
    Tr   c                C   s   || _ || _|| _|j| \| _| _|jd urB|j| \| _| _nd\| _| _|j	r|j
d ur|j
jd u rv|j|n|j
jj| }|  j|j| 7  _d S )NNN)rr   namer   r.   widthlsbr1   heighttsbr'   r2   ZAdvWidthMapr$   
getGlyphIDmappingr4   )r5   rr   rB   r   Zvaridxr   r   r   r6      s    

z_TTGlyph.__init__c                 C   s   t dS dDraw the glyph onto ``pen``. See fontTools.pens.basePen for details
        how that works.
        N)NotImplementedErrorr5   penr   r   r   draw   s    z_TTGlyph.drawc                 C   s   ddl m} | || dS )eDraw the glyph onto ``pen``. See fontTools.pens.pointPen for details
        how that works.
        r   )SegmentToPointPenN)ZfontTools.pens.pointPenr   r   )r5   r   r   r   r   r   
drawPoints   s    z_TTGlyph.drawPointsN)rL   rM   rN   rO   r6   r   r   r   r   r   r   r   rx      s
   	
rx   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r_   c                 C   sT   |   \}}| j *}|r d}||| jj| W d   n1 sF0    Y  dS )r   r   N)_getGlyphAndOffsetrr   r?   r   rV   r5   r   glyphoffsetr*   r   r   r   r      s
    z_TTGlyphGlyf.drawc                 C   sT   |   \}}| j *}|r d}||| jj| W d   n1 sF0    Y  dS )r   r   N)r   rr   r?   r   rV   r   r   r   r   r      s
    z_TTGlyphGlyf.drawPointsc                 C   sN   | j jr| j jd ur|  }n| j j| j }t|drB| j|j nd}||fS )NxMinr   )	rr   r'   rX   _getGlyphInstancerV   rz   hasattrr|   r   )r5   r   r   r   r   r   r      s
    
z_TTGlyphGlyf._getGlyphAndOffsetc                 C   sB  ddl m} ddlm} ddlm} | j}|j}|jj	| j
 }|j}|j}|| j
||\}	}
d\}}|D ]}||j|j}|sqj|j}d |v r|d u r|| j
||\}}|d dkr|d nttt|d }||||}|	||| 7 }	qjt|| j
 }t||	|| jd\}}}}|| _|| _|jd u r>|| _|| _|S )Nr   )	iup_delta)GlyphCoordinates)supportScalarry   r>   r   )ZfontTools.varLib.iupr   ZfontTools.ttLib.tables._g_l_y_fr   fontTools.varLib.modelsr   rr   rV   rX   
variationsrz   r.   r1   Z_getCoordinatesAndControlsr'   r%   coordinatesrf   rangerH   r   _setCoordinatesr   r|   r~   r2   r{   r}   )r5   r   r   r   rr   rV   r   r.   r1   r   _Z
origCoordsZendPtsvarscalardeltaZcontrolr   r{   r|   r}   r~   r   r   r   r      sH    &
z_TTGlyphGlyf._getGlyphInstanceN)rL   rM   rN   r   r   r   r   r   r   r   r   r_      s   	r_   c                   @   s   e Zd Zdd ZdS )rk   c                 C   s   | j j| j || j j dS r   )rr   ri   rz   r   rm   r   r   r   r   r      s    z_TTGlyphCFF.drawN)rL   rM   rN   r   r   r   r   r   rk     s   rk   c                 C   s   | j dkrJ| j}|| j}||d}| j}| j}||  koD|kS   S | j dkrt| j}	|	|| j d 7 }	|	dkS | j dkr| jD ]}
t	|
|||s dS qdS | j dkr| jD ]}
t	|
|||r dS qdS | j dkrt	| j
||| S dS d S )	Nr>   r         FT      )FormatZ	AxisIndexr   r0   ZFilterRangeMinValueZFilterRangeMaxValueZDefaultValueZVarIdxConditionTable_evaluateConditionZconditionTable)	conditionfvarAxesr'   rn   Z	axisIndexr   Z	axisValueZminValueZmaxValuero   Zsubconditionr   r   r   r   '  s4    








r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rv   c                    st  ddl m}m} | j}|j}|jj| j}|j	j
| }ddlm}	 ddlm}
 |jd j |	|j | jj}|jD ]}|j|j@ r|jj|j }t| | jj|sqti }|jdur,|jj|j }t|j}|j|kr|t ||j d7 }t!|t!|ksJ t!|t!|f fdd	t"||D }|j#|krT||j# }t$|}|%| |j&}|j|j'@ }| jj(|| | j(|| | j|j)k}|sz|*|j)|| jj+ W n t,y   d
}Y n0 |r.|- }|j)| jkr| jn|j}||j) }|rt.||}|/| nt0||}|1| W d   n1 sD0    Y  W d   qt1 sd0    Y  qtdS )r   r   )VarComponentFlagsNO_VARIATION_INDEX)MultiVarStoreInstancerr!   r   N   c                    s   i | ]\}} | j |qS r   r   )r   ivr   r   r   r   s  s   z&_TTGlyphVARC._draw.<locals>.<dictcomp>T)2ZfontTools.ttLib.tables.otTablesr   r   rr   rs   rt   ru   indexrz   ZVarCompositeGlyphsZVarCompositeGlyphZfontTools.varLib.multiVarStorer   r3   r"   r$   r%   ZMultiVarStorer'   
componentsflagsZHAVE_CONDITIONZConditionListr   ZconditionIndexr   ZaxisIndicesIndexZAxisIndicesListZItemr	   
axisValuesZaxisValuesVarIndexfi2flrH   zipZtransformVarIndexr   ZapplyTransformDeltas	transformZRESET_UNSPECIFIED_AXESr=   rB   ZaddVarComponentr(   AttributeErrorZtoTransformr   r   r   r   )r5   r   Z
isPointPenr   r   rr   rw   idxr   r   r"   rn   compr   r'   ZaxisIndicesr   Zdeltasr   r8   ZshouldDecomposetZcompGlyphSetgZtPenr   r   r   _drawK  sv    










z_TTGlyphVARC._drawc                 C   s   |  |d d S )NFr   r   r   r   r   r     s    z_TTGlyphVARC.drawc                 C   s   |  |d d S )NTr   r   r   r   r   r     s    z_TTGlyphVARC.drawPointsN)rL   rM   rN   r   r   r   r   r   r   r   rv   J  s   Nrv   Tr   c                C   s8  t |dksJ |d d }|d d }|d d }|d d }tdD ]
}|d= qH|  rt |t | jksrJ dd	 | jD | _t|| jD ]\}	}
t|
d
r|	\|
_|
_qn8| jdkrt |dksJ nt |t | j	ksJ || _	|r| 
| t|| }t|| }t| j| }t|| j }||||fS )Nr   r   r>   c                 S   s   g | ]}t |qS r   )r   )r   r   r   r   r   
<listcomp>  r   z#_setCoordinates.<locals>.<listcomp>x)rH   r   ZisCompositer   r   r   r   yZnumberOfContoursr   r   r
   r   ZyMax)r   coordrV   r   Z	leftSideXZ
rightSideXZtopSideYZbottomSideYr   pr   ZhorizontalAdvanceWidthZverticalAdvanceWidthZleftSideBearingZtopSideBearingr   r   r   r     s8    


r   c                   @   s:   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdS )LerpGlyphSeta+  A glyphset that interpolates between two other glyphsets.

    Factor is typically between 0 and 1. 0 means the first glyphset,
    1 means the second glyphset, and 0.5 means the average of the
    two glyphsets. Other values are possible, and can be useful to
    extrapolate. Defaults to 0.5.
          ?c                 C   s   || _ || _|| _d S r9   )	glyphset1	glyphset2factor)r5   r   r   r   r   r   r   r6     s    zLerpGlyphSet.__init__c                 C   s*   || j v r|| jv rt|| S t|d S r9   )r   r   	LerpGlyphKeyErrorr5   	glyphnamer   r   r   r`     s    
zLerpGlyphSet.__getitem__c                 C   s   || j v o|| jv S r9   )r   r   r   r   r   r   rC     s    zLerpGlyphSet.__contains__c                 C   s"   t | j}t | j}t||S r9   )setr   r   rD   intersectionr5   Zset1Zset2r   r   r   rG     s    

zLerpGlyphSet.__iter__c                 C   s"   t | j}t | j}t||S r9   )r   r   r   rH   r   r   r   r   r   rI     s    

zLerpGlyphSet.__len__N)r   )	rL   rM   rN   rO   r6   r`   rC   rG   rI   r   r   r   r   r     s   
r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   || _ || _d S r9   )glyphsetr   )r5   r   r   r   r   r   r6     s    zLerpGlyph.__init__c                 C   sb   t | jj}| jj| j | t | jj}| jj| j | | jj}tt|j	|j	|| d S r9   )
r   r   r   r   r   r   r   r   r   ro   )r5   r   Z
recording1Z
recording2r   r   r   r   r     s    zLerpGlyph.drawN)rL   rM   rN   r6   r   r   r   r   r   r     s   r   N)*rO   abcr   r   collections.abcr   
contextlibr   r   r   typesr   ZfontTools.misc.vectorr	   ZfontTools.misc.fixedToolsr
   r   r   fontTools.misc.loggingToolsr   ZfontTools.misc.transformr   r   ZfontTools.pens.transformPenr   r   ZfontTools.pens.recordingPenr   r   r   r   rR   rd   rp   rx   r_   rk   r   rv   r   r   r   r   r   r   r   <module>   s0   M

$,M#V&!