
    hP                         S r SSKJr  SSKrSSKrSSKJr  SSKrSSK	J
r
Jr  SSKJr  SSKJr  \R                   " S	5      S
 5       rS rS r " S S5      r " S S\5      rg)z7
Common functionality between the PDF and PS backends.
    )BytesION)subset   )font_managerft2font)AFM)RendererBase2   c                 f    [        U S5       n[        U5      sS S S 5        $ ! , (       d  f       g = f)Nrb)openr   )fnamefhs     U/var/www/html/env/lib/python3.13/site-packages/matplotlib/backends/_backend_pdf_ps.py_cached_get_afm_from_fnamer      s!    	eT	b2w 
		s   "
0c                 ,   [         R                  " SSS9nU=R                  / SQ-  sl        U R                  S5      (       a  SUl        [         R
                  " X5      n[         R                  " US9nUR                  US9  UR                  U5        U$ )aj  
Subset a TTF font

Reads the named fontfile and restricts the font to the characters.

Parameters
----------
fontfile : str
    Path to the font file
characters : str
    Continuous set of characters to include in subset

Returns
-------
fontTools.ttLib.ttFont.TTFont
    An open font object representing the subset, which needs to
    be closed by the caller.
T)glyph_namesrecommended_glyphs)FFTMPfEdBDFmetaMERGTSIVZapfbdatbloccidgfdscfeatfmtxfondjustkerxltagmorxtrakxrefz.ttcr   )options)text)r   Optionsdrop_tablesendswithfont_number	load_font	Subsetterpopulate)fontfile
charactersr)   font	subsetters        r   get_glyphs_subsetr6      s    ( nn$GG   .   H.D  1IJ'TK    c                 :    [        5       nU R                  USS9  U$ )z
Convert a TTFont object into a file-like object.

Parameters
----------
font : fontTools.ttLib.ttFont.TTFont
    A font object

Returns
-------
BytesIO
    A file object with the font saved into it
F)reorderTables)r   save)r4   r   s     r   font_as_filer;   O   s      
BIIbI&Ir7   c                   *    \ rS rSrSrS rS rS rSrg)CharacterTrackerb   z
Helper for font subsetting by the pdf and ps backends.

Maintains a mapping of font paths to the set of character codepoints that
are being used from that font.
c                     0 U l         g Nusedselfs    r   __init__CharacterTracker.__init__j   s	    	r7   c                     UR                  U5      nUR                  5        HK  u  pEU R                  R                  UR                  [        5       5      R                  [        U5      5        MM     g)z:Record that string *s* is being typeset using font *font*.N)_get_fontmapitemsrB   
setdefaultr   setaddord)rD   r4   schar_to_font_c_fs         r   trackCharacterTracker.trackm   sP    ((+"((*FBII  35155c"g> +r7   c                 ~    U R                   R                  UR                  [        5       5      R	                  U5        g)zARecord that codepoint *glyph* is being typeset using font *font*.N)rB   rJ   r   rK   rL   )rD   r4   glyphs      r   track_glyphCharacterTracker.track_glyphs   s'    		TZZ/33E:r7   rA   N)	__name__
__module____qualname____firstlineno____doc__rE   rR   rV   __static_attributes__ r7   r   r=   r=   b   s    ?;r7   r=   c                   X   ^  \ rS rSrU 4S jrS rS rS rS rU 4S jr	S r
S	 rS
rU =r$ )RendererPDFPSBasex   c                 :   > [         TU ]  5         Xl        X l        g r@   )superrE   widthheight)rD   rd   re   	__class__s      r   rE   RendererPDFPSBase.__init__}   s    
r7   c                     g)NFr^   rC   s    r   flipyRendererPDFPSBase.flipy   s    r7   c                     g)NTr^   rC   s    r   option_scale_image$RendererPDFPSBase.option_scale_image   s    r7   c                 2    [         R                  S   (       + $ )Nzimage.composite_image)mplrcParamsrC   s    r   option_image_nocomposite*RendererPDFPSBase.option_image_nocomposite   s     << 7888r7   c                 >    U R                   S-  U R                  S-  4$ )Ng      R@)rd   re   rC   s    r   get_canvas_width_height)RendererPDFPSBase.get_canvas_width_height   s    zzD $++"444r7   c                   > US:X  a  [         TU ]  XU5      $ U(       aJ  U R                  R                  R	                  USU5      nUR
                  UR                  UR                  4$ [        R                  U R                     (       aI  U R                  U5      nUR                  U5      u  pgpn
UR                  5       S-  nX-  nX-  n	X-  n
XU
4$ U R                  U5      nUR                  US[         R"                  R$                  S9  UR'                  5       u  pUR)                  5       n
SnX-  nX-  n	X-  n
XU
4$ )NTeXH   i  g        )flagsg      ?)rc   get_text_width_height_descent
_text2pathmathtext_parserparserd   re   depthro   rp   _use_afm_rc_name_get_font_afmget_str_bbox_and_descentget_size_in_points_get_font_ttfset_textr   	LoadFlags
NO_HINTINGget_width_heightget_descent)rD   rN   propismathr}   r4   lbwhdscalerf   s               r   rz   /RendererPDFPSBase.get_text_width_height_descent   s.   U?78&IIOO3399!RFE;;ekk99\\$//0%%d+D 99!<MA!++-4EJAJAJA7N%%d+DMM!S(9(9(D(DME((*DA  "AEJAJAJA7Nr7   c                 X    [         R                  " USU R                  S9n[        U5      $ )Nafm)fontext	directory)r   findfont_afm_font_dirr   )rD   r   r   s      r   r   RendererPDFPSBase._get_font_afm   s*    %%%4+=+=?)%00r7   c                 D   [         R                  R                  U5      n [         R                  " U5      nUR	                  5         UR                  UR                  5       S5        U$ ! [         a,    [        R                  " [        5      R                  SU5        e f = f)Nrx   zMThe PostScript/PDF backend does not currently support the selected font (%s).)r   fontManager_find_fonts_by_propsget_fontclearset_sizer   RuntimeErrorlogging	getLoggerrX   warning)rD   r   fnamesr4   s       r   r   RendererPDFPSBase._get_font_ttf   s    ))>>tD		((0DJJLMM$113R8K 	h'//239; 		s   AA) )6B)re   rd   )rX   rY   rZ   r[   rE   ri   rl   rq   rt   rz   r   r   r]   __classcell__)rf   s   @r   r`   r`   x   s0    

9
541
 r7   r`   )r\   ior   	functoolsr   	fontToolsr   
matplotlibro    r   r   _afmr   backend_basesr	   	lru_cacher   r6   r;   r=   r`   r^   r7   r   <module>r      sf         $  ( R 
5p&; ;,E Er7   