
    g	              	       $   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mZ dZ e ej                  dez        j                   d      Z e ej                  dez        j                   d	      Zd
Z e ej                  dez        j                   d      Z e ej                  dez        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.d/d0d1Zed2        Zed3        Zd4 Zy)5z
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oneOfz\\\-:,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                     d } t        dt         dt         d      }t        d      }t        d      }t        dt         dt         d      }t        |t	        d      z    | |      z   t        t              z        }t          | |      d            t        d	  | |      d
      z         z   t        d |d      z         z   t               z   S )Nc                 6    | t        t        d      | z         z   S )N,)r   r
   )elems    [/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/_fontconfig_pattern.pycomma_separatedz0_make_fontconfig_parser.<locals>.comma_separated9   s    j#!5666    z([^z]|(\\[z]))*z([0-9]+\.?[0-9]*|\.[0-9]+)z[a-z]+=families-sizes:zproperties*)
r   _family_punc_value_puncr   r
   r   
_CONSTANTSr   r   r	   )r.   familysizenamevalueprops         r-   _make_fontconfig_parserr=   7   s    7 c,vl^4@AF./DDSVK==>E$#&)??5CTTUD((45
3..w77
8	9
S4..
/	0 +	r/   c                    t               }	 |j                  |       }|j                          i }d|v rg t        t        |d         |d<   d|v r
g |d   |d<   |j                  dg       D ]O  }t        |      d	k(  rt        |d      }|^}}|j                  |g       j                  t        t        |             Q |S # t        $ r(}t        dt        j                  |d      z         dd}~ww xY w)
zs
    Parse a fontconfig *pattern* into a dict that can initialize a
    `.font_manager.FontProperties` object.
    
r   Nr1   r8   r3   r9   
properties   )r=   parseStringr   
ValueErrorexplain
resetCachemap_family_unescapegetlenr7   
setdefaultextend_value_unescape)patternparserparseerrpropsr<   kvs           r-   parse_fontconfig_patternrT   M   s    %&FJ""7+ EUEC 0%
2CDEh%)%.)f		,+ @t9>d1g&DAB&&s?A'>?	@
 L  J 6 6sA >>?TIJs   B? ?	C0#C++C0c           
          dD cg c]  }| t        | d|              f }}dj                  d | j                         D              dj                  d |D              z   S c c}w )z;Convert a `.FontProperties` to a fontconfig pattern string.)stylevariantr   stretchfiler9   get_r+   c              3   2   K   | ]  }t        |        y w)N)_family_escape).0fs     r-   	<genexpr>z.generate_fontconfig_pattern.<locals>.<genexpr>m   s     ?1^A&?s   r   c           	   3   Z   K   | ]#  \  }}|d| dt        t        |              % y w)Nr4   r0   )_value_escapestr)r]   rR   rS   s      r-   r_   z.generate_fontconfig_pattern.<locals>.<genexpr>n   s7      8!Q !AmCF345 8s   )+)getattrjoin
get_family)drR   kvss      r-   generate_fontconfig_patternrh   g   s     NO %wqD*%'( OC O HH???gg 8"%8 88 9	Os   A#)__doc__	functoolsr   r   re	pyparsingr   r   r   r   r	   r
   r   r   r5   compilesubrG   r\   r6   rL   ra   r7   r=   rT   rh    r/   r-   <module>rp      s   ) 	T T T :2::ml&BCGGL K,$>?CCUK*"**][%@AEErJ


;#<=AA5I
)) ) )	
 ( + * * , , ( . ) ) )  )!" *#$ 32,1+111
8  *  29r/   