U
    ÂmœdŠ  ã                   @   s  d Z ddl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 ddlmZ dZee de ¡jdƒZee d	e ¡jd
ƒZdZee de ¡jdƒZee d	e ¡jd
ƒZdddddddddddddddddddddddd d!œZed"d#„ ƒZed$d%„ ƒZd&d'„ ZdS )(zŸ
A module for parsing and generating `fontconfig patterns`_.

.. _fontconfig patterns:
   https://www.freedesktop.org/software/fontconfig/fontconfig-user.html
é    )Ú	lru_cacheÚpartialN)ÚGroupÚOptionalÚParseExceptionÚRegexÚ	StringEndÚSuppressÚ
ZeroOrMore)Ú_apiz\\\-:,z
\\(?=[%s])Ú z(?=[%s])z\\z\\=_:,)ÚweightÚlight)r   Úbook)r   Úregular)r   Únormal)r   Úmedium)r   Údemibold)r   Úsemibold)r   Úbold)r   z
extra bold)r   Úblack)r   Úheavy)Úslantr   )r   Úitalic)r   Úoblique)Úwidthzultra-condensed)r   zextra-condensed)r   Ú	condensed)r   zsemi-condensed)r   Úexpanded)r   zextra-expanded)r   zultra-expanded)ZthinZ
extralightZ
ultralightr   r   r   r   r   r   r   r   Z	extraboldr   r   Úromanr   r   ZultracondensedZextracondensedr   Zsemicondensedr   ZextraexpandedZultraexpandedc                  C   sŽ   dd„ } t dttf ƒ}t dƒ}t dƒ}t dttf ƒ}t|tdƒ | |ƒ |B ƒ}t| |ƒdƒƒtd| |ƒd	ƒ ƒ td
|dƒ ƒ tƒ  S )Nc                 S   s   | t tdƒ|  ƒ S )Nú,)r
   r	   )Úelem© r!   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/_fontconfig_pattern.pyÚcomma_separated;   s    z0_make_fontconfig_parser.<locals>.comma_separatedz([^%s]|(\\[%s]))*z([0-9]+\.?[0-9]*|\.[0-9]+)z[a-z]+ú=Úfamiliesú-Úsizesú:zproperties*)r   Ú_family_puncÚ_value_puncr   r	   r   r
   r   )r#   ÚfamilyÚsizeÚnameÚvalueÚpropr!   r!   r"   Ú_make_fontconfig_parser9   s    ÿþýÿr0   c              
   C   s  t ƒ }z| | ¡}W n8 tk
rL } ztdt |d¡ ƒd‚W 5 d}~X Y nX | ¡  i }d|krvtt|d ƒ•|d< d|krŒ|d •|d< | dg ¡D ]d}t	|ƒd	krÜ|d t
krÐtjd
d|d ›d�d� q˜t
|d  }|^}}| |g ¡ tt|ƒ¡ q˜|S )zs
    Parse a fontconfig *pattern* into a dict that can initialize a
    `.font_manager.FontProperties` object.
    Ú
r   Nr%   r+   r'   r,   Ú
propertiesé   z3.7zSupport for unknown constants (z@) is deprecated since %(since)s and will be removed %(removal)s.)Úmessage)r0   ÚparseStringr   Ú
ValueErrorÚexplainÚ
resetCacheÚmapÚ_family_unescapeÚgetÚlenÚ
_CONSTANTSr   Zwarn_deprecatedÚ
setdefaultÚextendÚ_value_unescape)ÚpatternÚparserÚparseÚerrÚpropsr/   ÚkÚvr!   r!   r"   Úparse_fontconfig_patternP   s.    ( ÿrH   c                    s>   ‡ fdd„dD ƒ}d  dd„ ˆ  ¡ D ƒ¡d  dd„ |D ƒ¡ S )	z;Convert a `.FontProperties` to a fontconfig pattern string.c                    s"   g | ]}|t ˆ d |› �ƒƒ f‘qS )Úget_)Úgetattr)Ú.0rF   ©Údr!   r"   Ú
<listcomp>r   s   ÿz/generate_fontconfig_pattern.<locals>.<listcomp>)ÚstyleÚvariantr   ZstretchÚfiler,   r   c                 s   s   | ]}t |ƒV  qd S )N)Ú_family_escape)rK   Úfr!   r!   r"   Ú	<genexpr>v   s     z.generate_fontconfig_pattern.<locals>.<genexpr>r   c                 s   s2   | ]*\}}|d k	rd|› dt t|ƒƒ› �V  qd S )Nr(   r$   )Ú_value_escapeÚstr)rK   rF   rG   r!   r!   r"   rT   w   s    ÿ)ÚjoinZ
get_family)rM   Zkvsr!   rL   r"   Úgenerate_fontconfig_patternp   s    
ÿ
ÿÿrX   )Ú__doc__Ú	functoolsr   r   ÚreÚ	pyparsingr   r   r   r   r   r	   r
   Z
matplotlibr   r)   ÚcompileÚsubr:   rR   r*   r@   rU   r=   r0   rH   rX   r!   r!   r!   r"   Ú<module>   sP   $è

