o
    :ai                     @   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   E/usr/lib/python3/dist-packages/matplotlib/backends/_backend_pdf_ps.py_cached_get_afm_from_fname   s   $r   c                 C   s   t jddd}| jddg7  _t | |%}t j|d}|j|d | | t }|j|dd |W  d	   S 1 s>w   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)Zglyph_namesZrecommended_glyphsZFFTMZPfEd)options)textF)ZreorderTablesN)r   ZOptionsZdrop_tablesZ	load_fontZ	SubsetterZpopulater   Zsave)ZfontfileZ
charactersr   fontZ	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__;   s   
zCharacterTracker.__init__c                 C   s"   | j |jt tt| dS )z:Record that string *s* is being typeset using font *font*.N)r   
setdefaultr   setupdatemapord)r   r   sr   r   r   track>   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   r   add)r   r   Zglyphr   r   r   track_glyphB   s   zCharacterTracker.track_glyphN)__name__
__module____qualname____doc__r   r!   r#   r   r   r   r   r   3   s
    r   c                       sT   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )RendererPDFPSBasec                    s   t    || _|| _d S r   )superr   widthheight)r   r*   r+   	__class__r   r   r   L   s   

zRendererPDFPSBase.__init__c                 C      dS )NFr   r   r   r   r   flipyQ      zRendererPDFPSBase.flipyc                 C   r.   )NTr   r   r   r   r   option_scale_imageU   r0   z$RendererPDFPSBase.option_scale_imagec                 C   s   t jd  S )Nzimage.composite_image)mplrcParamsr   r   r   r   option_image_nocompositeY   s   z*RendererPDFPSBase.option_image_nocompositec                 C   s   | j d | jd fS )Ng      R@)r*   r+   r   r   r   r   get_canvas_width_height^   s   z)RendererPDFPSBase.get_canvas_width_heightc                 C   s,  |dkr|   }| }|j||| d\}}}|||fS |r?ddlm}	 | jjj|d|t| |	o4t	j
d 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 )NZTeX)Zrendererr   )
RendererPSH   z	ps.useafm)Z_force_standard_ps_fontsi  g        )flagsg      ?)Zget_texmanagerget_size_in_pointsget_text_width_height_descentZmatplotlib.backends.backend_psr6   Z
_text2pathZmathtext_parserparse
isinstancer2   r3   r*   r+   depthZ_use_afm_rc_name_get_font_afmZget_str_bbox_and_descent_get_font_ttfZset_textr   ZLOAD_NO_HINTINGZget_width_heightZget_descent)r   r    propZismathZ
texmanagerZfontsizewhdr6   r;   r   lbZscaler   r   r   r:   b   s@   





z/RendererPDFPSBase.get_text_width_height_descentc                 C   s   t j|d| jd}t|S )Nafm)ZfontextZ	directory)r   findfontZ_afm_font_dirr   )r   r@   r   r   r   r   r>      s   zRendererPDFPSBase._get_font_afmc                 C   s0   t |}t |}|  || d |S )Nr7   )r   rG   Zget_fontclearZset_sizer9   )r   r@   r   r   r   r   r   r?      s
   

zRendererPDFPSBase._get_font_ttf)r$   r%   r&   r   r/   r1   r4   r5   r:   r>   r?   __classcell__r   r   r,   r   r(   G   s    #r(   )r'   ior   	functoolsZ	fontToolsr   Z
matplotlibr2    r   r   rF   r   Zbackend_basesr   	lru_cacher   r   r   r(   r   r   r   r   <module>   s    
