§
    ‚Ûgm#  ã                  óâ   — 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
j        e¦  «        ZeZddd	d
dœZe G d„ d¦  «        ¦   «         Zdd„Zdd„Zdd„Z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                  óF   — 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__© ó    úX/granary/edev/quantum/lib/python3.11/site-packages/fontTools/designspaceLib/statNames.pyr   r   )   sT   € € € € € € à>Ð>àÐÐÑØÐÐÑØ%Ð%Ð%Ñ%Ø'Ð'Ð'Ñ'Ø+Ð+Ð+Ñ+Ð+Ð+r    r   Údocr   ÚuserLocationr   Úreturnc                óP  ‡— i }|                       ¦   «         }|€t                               d¦  «         n2|j        €t                               d¦  «         nd|j        i|j        ¥}i }|                      |¦  «        }|�d|j        i|j        ¥}n€t          | j	        |¦  «        }|rit          d„ |D ¦   «         ¦  «        }|                     d¦  «         |D ]8Šd                     ˆfd„|D ¦   «         ¦  «        }|s| j        �| j        }||‰<   Œ9d|vsd|vrt          ||di d¬¦  «        S |d         › d	|d         › �                     dd
¦  «        }	t!          | |¦  «        \  }
}|}||k    rt#          | |¦  «        }|j        }i }t          |¦  «                             |                     ¦   «         ¦  «        D ]WŠ|                     ‰|d         ¦  «        }|                     ‰|d         ¦  «        }|dz   |z                        ¦   «         |‰<   ŒXt          |||	||
¬¦  «        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              3  ó.   K  — | ]}|j         D ]}|V — ŒŒd S ©N)Ú
labelNames©Ú.0ÚlabelÚlanguages      r!   ú	<genexpr>zgetStatNames.<locals>.<genexpr>\   sJ   è è € ð ð Ø"¸UÔ=Mðð Ø19�ðð ð ð ð ð ð r    ú c              3  óf   •K  — | ]+}|j         °	|j                             ‰|j        ¦  «        V — Œ,d S r(   )Úelidabler)   ÚgetÚdefaultNamer*   s     €r!   r.   zgetStatNames.<locals>.<genexpr>a   sU   øè è € ð %ð %àØ œ>ð%ØÔ$×(Ò(¨°5Ô3DÑEÔEð%ð %ð %ð %ð %ð %r    )r   r   r   r   r   ú-Ú )ÚfindDefaultÚLOGGERÚwarningÚ
familyNameÚlocalisedFamilyNameÚlabelForUserLocationÚnamer)   Ú_getAxisLabelsForUserLocationÚaxesÚsetÚaddÚjoinÚelidedFallbackNamer   ÚreplaceÚ_getRibbiStyleÚgetStatNamesr   ÚunionÚkeysr2   Ústrip)r"   r#   r   ÚdefaultSourcer   r,   ÚlabelsÚ	languagesÚ	styleNamer   r   ÚregularUserLocationÚstyleNamesForStyleMapÚregularStatNamesr   r9   r-   s                   @r!   rE   rE   4   sØ  ø€ ð #%€KØ03·²Ñ0AÔ0A€MØÐÝ�ŠÐPÑQÔQÐQÐQØ	Ô	!Ð	)Ý�ŠØbñ	
ô 	
ð 	
ð 	
ð
 �-Ô*ð
àÔ/ð
ˆð
 "$€Jà×$Ò$ \Ñ2Ô2€EØÐØ˜EœJÐ;¨%Ô*:Ð;ˆ
ˆ
õ /¨s¬x¸ÑFÔFˆØð 	1Ýð ð Ø&,ðñ ô ñ ô ˆIð �MŠM˜$ÑÔÐØ%ð 1ð 1�ØŸHšHð %ð %ð %ð %à!'ð%ñ %ô %ñ ô �	ð
 !ð 7 SÔ%;Ð%GØ #Ô 6�IØ'0�
˜8Ñ$Ð$à�;ÐÐ $¨jÐ"8Ð"8åØ#Ø!Ø#Ø "Ø"ð
ñ 
ô 
ð 	
ð (¨Ô-ÐBÐB°
¸4Ô0@ÐBÐB×JÒJÈ3ÐPRÑSÔSÐå-;¸CÀÑ-NÔ-NÑ*ÐÐ*à&ÐØ˜lÒ*Ð*Ý'¨Ð-@ÑAÔAÐØ 0Ô ;ÐàÐÝ˜Ñ$Ô$×*Ò*¨:¯?ª?Ñ+<Ô+<Ñ=Ô=ð Oð OˆØ —_’_ X¨{¸4Ô/@ÑAÔAˆ
Ø)×-Ò-¨hÐ8MÈdÔ8SÑTÔTˆ	Ø)3°cÑ)9¸IÑ)E×(LÒ(LÑ(NÔ(NÐ˜HÑ%Ð%åØØØ-Ø/Ø+ðñ ô ð r    r>   ú3list[Union[AxisDescriptor, DiscreteAxisDescriptor]]ú$Dict[str, list[AxisLabelDescriptor]]c                óŒ   — t          d„ | D ¦   «         d„ ¬¦  «        }d„ |D ¦   «         }| D ]}|j        €|j        ||j        <   Œ|S )zbReturns axis labels sorted by their ordering, with unordered ones appended as
    they are listed.c              3  ó(   K  — | ]}|j         ®	|V — Œd S r(   ©ÚaxisOrdering©r+   Úaxiss     r!   r.   z'_getSortedAxisLabels.<locals>.<genexpr>”   s*   è è € Ð@Ð@�$ $Ô"3Ð"?ˆÐ"?Ð"?Ð"?Ð"?Ð@Ð@r    c                ó   — | j         S r(   rT   )Úas    r!   ú<lambda>z&_getSortedAxisLabels.<locals>.<lambda>•   s   € �a”n€ r    )Úkeyc                ó(   — i | ]}|j         |j        “ŒS r   )r<   Ú
axisLabelsrV   s     r!   ú
<dictcomp>z(_getSortedAxisLabels.<locals>.<dictcomp>—   s+   € ð :ð :ð :Ø'+ˆŒ	�4”?ð:ð :ð :r    )ÚsortedrU   r]   r<   )r>   Ú
sortedAxesÚsortedLabelsrW   s       r!   Ú_getSortedAxisLabelsrb   Œ   s|   € õ Ø@Ð@˜$Ð@Ñ@Ô@Ø$Ð$ðñ ô €Jð:ð :Ø/9ð:ñ :ô :€Lð ð 6ð 6ˆØÔÐ$Ø&*¤oˆL˜œÑ#øàÐr    úlist[AxisLabelDescriptor]c                óö  ‡— g }t          | ¦  «        }|                     ¦   «         |                     ¦   «         k    rEt                               d|                     ¦   «         › d|                     ¦   «         › d�¦  «         |                     ¦   «         D ]b\  }}||         Št          ˆfd„|D ¦   «         d ¦  «        }|€"t                               d|› d‰› d�¦  «         ŒM|                     |¦  «         Œc|S )Nz Mismatch between user location 'z' and available labels for 'z'.c              3  ó‚   •K  — | ]9}|j         ‰k    s(|j        �%|j        �|j        ‰cxk    r|j        k    ¯2n n|V — Œ:d S r(   )Ú	userValueÚuserMinimumÚuserMaximum)r+   Úlrf   s     €r!   r.   z0_getAxisLabelsForUserLocation.<locals>.<genexpr>´   su   øè è € ð 	ð 	àØ”; )Ò+Ð+à”MÐ-ØœÐ1Øœ¨ÐCÐCÒCÐC°a´mÒCÐCÐCÐCÐCð ð DÐCÐCÐCð	ð 	r    z!Document needs a label for axis 'z', user value ')rb   rG   r7   r8   ÚitemsÚnextÚdebugÚappend)r>   r#   rJ   ÚallAxisLabelsÚaxisNamer]   r,   rf   s          @r!   r=   r=   ¤   sE  ø€ ð )+€Få(¨Ñ.Ô.€MØ×ÒÑÔ˜|×0Ò0Ñ2Ô2Ò2Ð2Ý�Šð4¨|×/@Ò/@Ñ/BÔ/Bð 4ð 4Ø(×-Ò-Ñ/Ô/ð4ð 4ð 4ñ	
ô 	
ð 	
ð
 !.× 3Ò 3Ñ 5Ô 5ð !ð !Ñˆ�*Ø  Ô*ˆ	Ý/3ð	ð 	ð 	ð 	à#ð	ñ 	ô 	ð ñ0
ô 0
ˆð ˆ=Ý�LŠLØZ°HÐZÐZÈYÐZÐZÐZñô ð ð ð �MŠM˜%Ñ Ô Ð Ð à€Mr    Úselfú%Tuple[RibbiStyle, SimpleLocationDict]c                ó   — i }d„ | j         D ¦   «         }d}d}|                     d¦  «        }|�C|j        D ];}|j        ||j                 k    r#|j        |j        k     r|j        ||j        <   d} nŒ<|                     d¦  «        p|                     d¦  «        }|�]|j        D ]U}|j        ||j                 k    r=t          |j        ¦  «        t          |j        ¦  «        k     r|j        ||j        <   d} nŒVt          ||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                ó   — i | ]
}|j         |“ŒS r   )ÚtagrV   s     r!   r^   z"_getRibbiStyle.<locals>.<dictcomp>Ó   s   € Ð8Ð8Ð8 d�4”8˜TÐ8Ð8Ð8r    FÚwghtNTÚitalÚslnt)r>   r2   r]   ÚlinkedUserValuer<   rf   ÚabsÚBOLD_ITALIC_TO_RIBBI_STYLE)	rp   r#   rM   Úaxes_by_tagr   r   rW   Úregular_labelÚupright_labels	            r!   rD   rD   Ê   sK  € ð ÐØ8Ð8¨d¬iÐ8Ñ8Ô8€Kà€DØ€Fà�?Š?˜6Ñ"Ô"€DØÐØ!œ_ð 	ð 	ˆMàÔ-°¸d¼iÔ1HÒHÐHð "Ô+¨mÔ.KÒKÐKà1>Ô1HÐ# D¤IÑ.Ø�Ø�øà�?Š?˜6Ñ"Ô"Ð= k§o¢o°fÑ&=Ô&=€DØÐØ!œ_ð 	ð 	ˆMàÔ-°¸d¼iÔ1HÒHÐHõ ˜Ô/Ñ0Ô0µ3°}Ô7TÑ3UÔ3UÒUÐUà1>Ô1HÐ# D¤IÑ.Ø�Ø�øå% d¨F lÔ3ð 6Ø
ð6à
ð6ð ð r    )r"   r   r#   r   r$   r   )r>   rP   r$   rQ   )r>   rP   r#   r   r$   rc   )rp   r   r#   r   r$   rq   )r   Ú
__future__r   Údataclassesr   Útypingr   r   r   r   ÚloggingÚfontTools.designspaceLibr	   r
   r   r   r   r   r   Ú	getLoggerr   r7   ÚstrÚ
RibbiStylerz   r   rE   rb   r=   rD   r   r    r!   ú<module>r†      s„  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð €
àØØØð	ð Ð ð ð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ „ð,ðUð Uð Uð Uðpð ð ð ð0#ð #ð #ð #ðL3ð 3ð 3ð 3ð 3ð 3r    