a
    ¥Q•hm#  ã                   @  sØ   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
Z
ddlmZmZmZmZmZmZmZ e
 e¡ZeZddd	d
dœZeG dd„ dƒƒZddddœdd„Zdddœdd„Zddddœdd„Zddddœdd„ZdS ) a-  Compute name information for a given location in user-space coordinates
using STAT data. This can be used to fill-in automatically the names of an
instance:

.. code:: python

    instance = doc.instances[0]
    names = getStatNames(doc, instance.getFullUserLocation(doc))
    print(names.styleNames)
é    )Úannotations)Ú	dataclass)ÚDictÚOptionalÚTupleÚUnionN)ÚAxisDescriptorÚAxisLabelDescriptorÚDesignSpaceDocumentÚDesignSpaceDocumentErrorÚDiscreteAxisDescriptorÚSimpleLocationDictÚSourceDescriptorÚregularÚitalicÚboldzbold italic))FF)FT)TF)TTc                   @  s:   e Zd ZU dZded< ded< ded< ded< ded	< d
S )Ú	StatNamesz4Name data generated from the STAT table information.zDict[str, str]ÚfamilyNamesÚ
styleNameszOptional[str]ÚpostScriptFontNameÚstyleMapFamilyNameszOptional[RibbiStyle]ÚstyleMapStyleNameN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© r   r   ú[/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/designspaceLib/statNames.pyr   )   s   
r   r
   r   )ÚdocÚuserLocationÚreturnc                   s¨  i }|   ¡ }|du r t d¡ n&|jdu r6t d¡ nd|ji|j¥}i }|  |¡}|durnd|ji|j¥}njt| j	|ƒ}|rØt
dd„ |D ƒƒ}| d¡ |D ]8‰ d ‡ fdd„|D ƒ¡}|sÎ| jdurÎ| j}||ˆ < qžd|vsèd|vrút||di dd	�S |d › d
|d › � dd¡}	t| |ƒ\}
}|}||k�rDt| |ƒ}|j}i }t
|ƒ | ¡ ¡D ]:‰ | ˆ |d ¡}| ˆ |d ¡}|d |  ¡ |ˆ < �qZt|||	||
d	�S )aq  Compute the family, style, PostScript names of the given ``userLocation``
    using the document's STAT information.

    Also computes localizations.

    If not enough STAT data is available for a given name, either its dict of
    localized names will be empty (family and style names), or the name will be
    None (PostScript name).

    .. versionadded:: 5.0
    Nz7Cannot determine default source to look up family name.zTCannot look up family name, assign the 'familyname' attribute to the default source.Úenc                 s  s   | ]}|j D ]
}|V  qqd S ©N)Ú
labelNames)Ú.0ÚlabelÚlanguager   r   r   Ú	<genexpr>\   s   zgetStatNames.<locals>.<genexpr>ú c                 3  s$   | ]}|j s|j ˆ |j¡V  qd S r#   )Úelidabler$   ÚgetÚdefaultName)r%   r&   ©r'   r   r   r(   a   s   þ)r   r   r   r   r   ú-Ú )ÚfindDefaultÚLOGGERÚwarningÚ
familyNameÚlocalisedFamilyNameÚlabelForUserLocationÚnamer$   Ú_getAxisLabelsForUserLocationÚaxesÚsetÚaddÚjoinÚelidedFallbackNamer   ÚreplaceÚ_getRibbiStyleÚgetStatNamesr   ÚunionÚkeysr+   Ústrip)r   r    r   ZdefaultSourcer   r&   ÚlabelsÚ	languagesÚ	styleNamer   r   ÚregularUserLocationZstyleNamesForStyleMapZregularStatNamesr   r3   r   r-   r   r?   4   sn    
ÿÿþ
ÿ
þ
û

ûr?   z3list[Union[AxisDescriptor, DiscreteAxisDescriptor]]z$Dict[str, list[AxisLabelDescriptor]])r8   r!   c                 C  sL   t dd„ | D ƒdd„ d�}dd„ |D ƒ}| D ]}|jdu r,|j||j< q,|S )	zbReturns axis labels sorted by their ordering, with unordered ones appended as
    they are listed.c                 s  s   | ]}|j d ur|V  qd S r#   ©ÚaxisOrdering©r%   Úaxisr   r   r   r(   ”   ó    z'_getSortedAxisLabels.<locals>.<genexpr>c                 S  s   | j S r#   rG   )Úar   r   r   Ú<lambda>•   rK   z&_getSortedAxisLabels.<locals>.<lambda>)Úkeyc                 S  s   i | ]}|j |j“qS r   )r6   Ú
axisLabelsrI   r   r   r   Ú
<dictcomp>—   s   z(_getSortedAxisLabels.<locals>.<dictcomp>N)ÚsortedrH   rO   r6   )r8   Z
sortedAxesZsortedLabelsrJ   r   r   r   Ú_getSortedAxisLabelsŒ   s    þÿ
rR   zlist[AxisLabelDescriptor])r8   r    r!   c                   sž   g }t | ƒ}| ¡ | ¡ kr<t d| ¡ › d| ¡ › d�¡ | ¡ D ]T\}}|| ‰ t‡ fdd„|D ƒd ƒ}|d u rŽt d|› dˆ › d�¡ qD| |¡ qD|S )Nz Mismatch between user location 'z' and available labels for 'z'.c                 3  sL   | ]D}|j ˆ ks@|jd ur|jd ur|jˆ   kr<|jkrn q|V  qd S r#   )Ú	userValueÚuserMinimumÚuserMaximum)r%   Úl©rS   r   r   r(   ´   s   


úz0_getAxisLabelsForUserLocation.<locals>.<genexpr>z!Document needs a label for axis 'z', user value ')rR   rA   r1   r2   ÚitemsÚnextÚdebugÚappend)r8   r    rC   ZallAxisLabelsÚaxisNamerO   r&   r   rW   r   r7   ¤   s,    ÿÿ
þ
õÿr7   z%Tuple[RibbiStyle, SimpleLocationDict])Úselfr    r!   c           	      C  sâ   i }dd„ | j D ƒ}d}d}| d¡}|durj|jD ]4}|j||j kr4|j|jk r4|j||j< d} qjq4| d¡p|| d¡}|durÊ|jD ]<}|j||j krŒt|jƒt|jƒk rŒ|j||j< d} qÊqŒt||f i |¥|¥fS )	zœCompute the RIBBI style name of the given user location,
    return the location of the matching Regular in the RIBBI group.

    .. versionadded:: 5.0
    c                 S  s   i | ]}|j |“qS r   )ÚtagrI   r   r   r   rP   Ó   rK   z"_getRibbiStyle.<locals>.<dictcomp>FÚwghtNTÚitalÚslnt)r8   r+   rO   ÚlinkedUserValuer6   rS   ÚabsÚBOLD_ITALIC_TO_RIBBI_STYLE)	r]   r    rF   Zaxes_by_tagr   r   rJ   Zregular_labelZupright_labelr   r   r   r>   Ê   s:    

ÿ
ù	
ÿ	÷ÿþr>   )r   Ú
__future__r   Údataclassesr   Útypingr   r   r   r   ÚloggingÚfontTools.designspaceLibr   r	   r
   r   r   r   r   Ú	getLoggerr   r1   ÚstrZ
RibbiStylerd   r   r?   rR   r7   r>   r   r   r   r   Ú<module>   s$   $

ü
X&