o
    li                  	   @   sN  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i 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!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2Zed3d4 Zed5d6 Zd7d8 ZdS )9z
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\\=_:,thin)weightlight
extralight
ultralightr   book)r   r   regular)r   r   normal)r   r   medium)r   r   demibold)r   r   semibold)r   r   bold)r   r   	extrabold)r   z
extra boldblack)r   r   heavy)r   r   roman)slantr   italic)r   r   oblique)r   r   )widthzultra-condensed)r    zextra-condensed)r    	condensed)r    zsemi-condensed)r    expanded)r    zextra-expanded)r    zultra-expanded)ultracondensedextracondensedr!   semicondensedr"   extraexpanded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*   \/home/ubuntu/SoloSpeech/.venv/lib/python3.10/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   r9   c              
   C   s   t  }z|| }W n ty! } ztdt|d dd}~ww |  i }d|v r7g tt|d |d< d|v rCg |d |d< |dg D ]2}t	|d	krk|d t
vretjd
d|d dd qIt
|d  }|^}}||g tt| qI|S )zs
    Parse a fontconfig *pattern* into a dict that can initialize a
    `.font_manager.FontProperties` object.
    
r   Nr.   r4   r0   r5   
properties   z3.7zSupport for unknown constants (z@) is deprecated since %(since)s and will be removed %(removal)s.)message)r9   parseStringr   
ValueErrorexplain
resetCachemap_family_unescapegetlen
_CONSTANTSr   warn_deprecated
setdefaultextend_value_unescape)patternparserparseerrpropsr8   kvr*   r*   r+   parse_fontconfig_patternP   s4   rR   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).0rP   dr*   r+   
<listcomp>r   s    z/generate_fontconfig_pattern.<locals>.<listcomp>)stylevariantr   stretchfiler5   r(   c                 s   s    | ]}t |V  qd S )N)_family_escape)rU   fr*   r*   r+   	<genexpr>v   s    z.generate_fontconfig_pattern.<locals>.<genexpr>r   c                 s   s4    | ]\}}|d urd| dt t| V  qd S )Nr1   r-   )_value_escapestr)rU   rP   rQ   r*   r*   r+   r_   w   s    )join
get_family)rW   kvsr*   rV   r+   generate_fontconfig_patternp   s   

re   )__doc__	functoolsr   r   re	pyparsingr   r   r   r   r   r	   r
   
matplotlibr   r2   compilesubrC   r]   r3   rJ   r`   rF   r9   rR   re   r*   r*   r*   r+   <module>   sv    $	


