U
    md                     @   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rtjd
d|d dd qt
|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   $

