
    ^j              	       (   d Z ddl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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
    )cache	lru_cachepartialN)GroupOptionalParseExceptionRegex	StringEndSuppress
ZeroOrMoreone_ofz\\\-:,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    W/opt/ringagent/.cad-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$#&)??6*CUUVD((45
3..w77
8	9
S4..
/	0 +	r0   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   Nr2   r9   r4   r:   
properties   )r>   parse_stringr   
ValueErrorexplainreset_cachemap_family_unescapegetlenr8   
setdefaultextend_value_unescape)patternparserparseerrpropsr=   kvs           r.   parse_fontconfig_patternrU   M   s    %&FJ##G, 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filer:   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)Nr5   r1   )_value_escapestr)r^   rS   rT   s      r.   r`   z.generate_fontconfig_pattern.<locals>.<genexpr>n   s7      8!Q !AmCF345 8s   )+)getattrjoin
get_family)drS   kvss      r.   generate_fontconfig_patternri   g   s     NO %wqD*%'( OC O HH???gg 8"%8 88 9	Os   A#)__doc__	functoolsr   r   r   re	pyparsingr   r   r   r	   r
   r   r   r   r6   compilesubrH   r]   r7   rM   rb   r8   r>   rU   ri    r0   r.   <module>rq      s   0 / 	U U U :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9r0   