a
    w=ic                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlmZ ddl	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dd ZdS )zGlyphSets returned by a TTFont.    )ABCabstractmethod)Mappingcopy)otRound)deprecateFunctionc                   @   sD   e Zd ZdZ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.
    c                 C   s|   || _ || _|| _|d j| _t|ddd | _|rxddlm	} t|ddd | _
| j
d urx|| j
j|d j|| _d S )	NZhmtxZvmtxmetricsr   VarStoreInstancerZHVARtablefvar)fontlocationglyphsMappingr
   hMetricsgetattrgetvMetricsfontTools.varLib.varStorer   	hvarTableZVarStoreaxeshvarInstancer)selfr   r   r   r    r   k/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/ttLib/ttGlyphSet.py__init__   s    
z_TTGlyphSet.__init__c                 C   s
   || j v S Nr   r   	glyphNamer   r   r   __contains__    s    z_TTGlyphSet.__contains__c                 C   s   t | j S r   )iterr   keysr   r   r   r   __iter__#   s    z_TTGlyphSet.__iter__c                 C   s
   t | jS r   )lenr   r%   r   r   r   __len__&   s    z_TTGlyphSet.__len__z#use 'glyphName in glyphSet' instead)categoryc                 C   s
   || j v S r   r   r    r   r   r   has_key)   s    z_TTGlyphSet.has_keyN)__name__
__module____qualname____doc__r   r"   r&   r(   r   DeprecationWarningr*   r   r   r   r   r	   
   s   r	   c                       s$   e Zd Z fddZdd Z  ZS )_TTGlyphSetGlyfc                    s0   |d | _ t ||| j  |r,|d| _d S )NZglyfZgvar)	glyfTablesuperr   r   	gvarTable)r   r   r   	__class__r   r   r   1   s    
z_TTGlyphSetGlyf.__init__c                 C   s
   t | |S r   )_TTGlyphGlyfr    r   r   r   __getitem__7   s    z_TTGlyphSetGlyf.__getitem__r+   r,   r-   r   r7   __classcell__r   r   r4   r   r0   0   s   r0   c                       s$   e Zd Z fddZdd Z  ZS )_TTGlyphSetCFFc                    s   d|v rdnd}t || j d j| _t ||| j d | _|rddlm	} t
| jdd }|d ur||j|d j|}|j| _d S )NZCFF2zCFF r   r   varStorer   )listZcffvaluesZCharStringscharStringsr2   r   blenderr   r   r   Z
otVarStorer   ZinterpolateFromDeltas)r   r   r   ZtableTagr   r;   Z	instancerr4   r   r   r   <   s    z_TTGlyphSetCFF.__init__c                 C   s
   t | |S r   )_TTGlyphCFFr    r   r   r   r7   K   s    z_TTGlyphSetCFF.__getitem__r8   r   r   r4   r   r:   ;   s   r:   c                   @   s,   e Zd ZdZ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.
    c                 C   s   || _ || _|j| \| _| _|jd ur<|j| \| _| _nd\| _| _|jr|j	d ur|j	j
d u rp|j|n|j	j
j| }|  j|j| 7  _d S )NNN)glyphSetnamer   widthlsbr   heighttsbr   r   ZAdvWidthMapr   Z
getGlyphIDmappingr   )r   rC   r!   Zvaridxr   r   r   r   Z   s    

z_TTGlyph.__init__c                 C   s   t dS zdDraw the glyph onto ``pen``. See fontTools.pens.basePen for details
        how that works.
        N)NotImplementedErrorr   penr   r   r   drawk   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.pointPenrP   rN   )r   rM   rP   r   r   r   
drawPointsr   s    z_TTGlyph.drawPointsN)r+   r,   r-   r.   r   r   rN   rQ   r   r   r   r   rA   O   s
   	
rA   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r6   c                 C   s"   |   \}}||| jj| dS rJ   )_getGlyphAndOffsetrN   rC   r1   r   rM   glyphoffsetr   r   r   rN   |   s    z_TTGlyphGlyf.drawc                 C   s"   |   \}}||| jj| dS )rO   N)rR   rQ   rC   r1   rS   r   r   r   rQ      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   )	rC   r   r3   _getGlyphInstancer1   rD   hasattrrF   rV   )r   rT   rU   r   r   r   rR      s
    
z_TTGlyphGlyf._getGlyphAndOffsetc                 C   s<  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 u r8|| _|| _|S )Nr   )	iup_delta)GlyphCoordinates)supportScalarrB      )ZfontTools.varLib.iuprY   ZfontTools.ttLib.tables._g_l_y_frZ   ZfontTools.varLib.modelsr[   rC   r1   r3   
variationsrD   r   r   Z_getCoordinatesAndControlsr   r   coordinatesr<   ranger'   r   _setCoordinatesrF   rH   r   rE   rG   )r   rY   rZ   r[   rC   r1   r]   r   r   r^   _Z
origCoordsZendPtsvarZscalardeltacontrolrT   rE   rF   rG   rH   r   r   r   rW      sD    &z_TTGlyphGlyf._getGlyphInstanceN)r+   r,   r-   rN   rQ   rR   rW   r   r   r   r   r6   {   s   	r6   c                   @   s   e Zd Zdd ZdS )r@   c                 C   s   | j j| j || j j dS rJ   )rC   r>   rD   rN   r?   rL   r   r   r   rN      s    z_TTGlyphCFF.drawN)r+   r,   r-   rN   r   r   r   r   r@      s   r@   c                 C   s4  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 || _	| 
| t|| }
t|| }t| j| }t|| j }|
|||fS )N   r   r\   c                 S   s   g | ]}t |qS r   r   ).0compr   r   r   
<listcomp>       z#_setCoordinates.<locals>.<listcomp>x)r'   r_   ZisComposite
componentsziprX   rn   yZnumberOfContoursr^   ZrecalcBoundsr   rV   ZyMax)rT   Zcoordr1   Z	leftSideXZ
rightSideXZtopSideYZbottomSideYra   prk   ZhorizontalAdvanceWidthZverticalAdvanceWidthZleftSideBearingZtopSideBearingr   r   r   r`      s6    


r`   N)r.   abcr   r   collections.abcr   r   ZfontTools.misc.fixedToolsr   ZfontTools.misc.loggingToolsr   r	   r0   r:   rA   r6   r@   r`   r   r   r   r   <module>   s   &,A