o
    liZ                     @   s   d Z ddlmZ ddlZddlmZ ddlZddlm	Z	m
Z
 ddlmZ ddlmZ ed	d
d Zdd ZG dd dZG dd deZdS )z7
Common functionality between the PDF and PS backends.
    )BytesION)subset   )font_managerft2font)AFM)RendererBase2   c                 C   s6   t | d}t|W  d    S 1 sw   Y  d S )Nrb)openr   )fnamefh r   a/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/matplotlib/backends/_backend_pdf_ps.py_cached_get_afm_from_fname   s   $r   c                 C   s   t jddd}| jg d7  _| drd|_t | |%}t j|d}|j|d | | t }|j	|dd	 |W  d
   S 1 sFw   Y  d
S )aD  
    Subset a TTF font

    Reads the named fontfile and restricts the font to the characters.
    Returns a serialization of the subset font as file-like object.

    Parameters
    ----------
    symbol : str
        Path to the font file
    characters : str
        Continuous set of characters to include in subset
    T)glyph_namesrecommended_glyphs)FFTMPfEdBDFmetaz.ttcr   )options)textF)reorderTablesN)
r   Optionsdrop_tablesendswithfont_number	load_font	Subsetterpopulater   save)fontfile
charactersr   font	subsetterr   r   r   r   get_glyphs_subset   s   

$r&   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	CharacterTrackerz
    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                 C   s
   i | _ d S N)usedselfr   r   r   __init__D   s   
zCharacterTracker.__init__c                 C   s<   | |}| D ]\}}| j|jt t| q	dS )z:Record that string *s* is being typeset using font *font*.N)_get_fontmapitemsr)   
setdefaultr   setaddord)r+   r$   schar_to_font_c_fr   r   r   trackG   s   
zCharacterTracker.trackc                 C   s   | j |jt | dS )zARecord that codepoint *glyph* is being typeset using font *font*.N)r)   r/   r   r0   r1   )r+   r$   glyphr   r   r   track_glyphM   s   zCharacterTracker.track_glyphN)__name__
__module____qualname____doc__r,   r7   r9   r   r   r   r   r'   <   s
    r'   c                       sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Z fddZdd Z	dd Z
  ZS )RendererPDFPSBasec                    s   t    || _|| _d S r(   )superr,   widthheight)r+   r@   rA   	__class__r   r   r,   W   s   

zRendererPDFPSBase.__init__c                 C      dS )NFr   r*   r   r   r   flipy\      zRendererPDFPSBase.flipyc                 C   rD   )NTr   r*   r   r   r   option_scale_image`   rF   z$RendererPDFPSBase.option_scale_imagec                 C   s   t jd  S )Nzimage.composite_image)mplrcParamsr*   r   r   r   option_image_nocomposited   s   z*RendererPDFPSBase.option_image_nocompositec                 C   s   | j d | jd fS )Ng      R@)r@   rA   r*   r   r   r   get_canvas_width_heighti   s   z)RendererPDFPSBase.get_canvas_width_heightc                    s   |dkrt  |||S |r| jj|d|}|j|j|jfS tj	| j
 rK| |}||\}}}}	}
| d }||9 }|	|9 }	|
|9 }
||	|
fS | |}|j|dtjd | \}}	| }
d}||9 }|	|9 }	|
|9 }
||	|
fS )NTeXH   i  g        )flagsg      ?)r?   get_text_width_height_descent
_text2pathmathtext_parserparser@   rA   depthrH   rI   _use_afm_rc_name_get_font_afmget_str_bbox_and_descentget_size_in_points_get_font_ttfset_textr   LOAD_NO_HINTINGget_width_heightget_descent)r+   r3   propismathrR   r$   lbwhdscalerB   r   r   rO   m   s,   



z/RendererPDFPSBase.get_text_width_height_descentc                 C   s   t j|d| jd}t|S )Nafm)fontext	directory)r   findfont_afm_font_dirr   )r+   r]   r   r   r   r   rU      s   zRendererPDFPSBase._get_font_afmc                 C   s2   t j|}t |}|  || d |S )NrM   )r   fontManager_find_fonts_by_propsget_fontclearset_sizerW   )r+   r]   fnamesr$   r   r   r   rX      s
   
zRendererPDFPSBase._get_font_ttf)r:   r;   r<   r,   rE   rG   rJ   rK   rO   rU   rX   __classcell__r   r   rB   r   r>   R   s    r>   )r=   ior   	functools	fontToolsr   
matplotlibrH    r   r   _afmr   backend_basesr   	lru_cacher   r&   r'   r>   r   r   r   r   <module>   s    
&