U
    d»{jN  ã                   @   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)ÚRendererBaseé2   c              
   C   s*   t | dƒ�}t|ƒW  5 Q R £ S Q R X d S )NÚrb)Úopenr   )ÚfnameÚfh© r   úb/var/www/html/bwave/python/venv/lib/python3.8/site-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dg7  _|  d¡r2d|_t  | |¡�H}t j|d�}|j|d	� |  |¡ tƒ }|j	|d
d� |W  5 Q R £ S Q R X 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PfEdZBDFz.ttcr   )Úoptions)ÚtextF)ZreorderTablesN)
r   ÚOptionsZdrop_tablesÚendswithZfont_numberZ	load_fontZ	SubsetterZpopulater   Úsave)ZfontfileÚ
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<   |  |¡}| ¡ D ]$\}}| j |jtƒ ¡ t|ƒ¡ qdS )z:Record that string *s* is being typeset using font *font*.N)Z_get_fontmapÚitemsr   Ú
setdefaultr   ÚsetÚaddÚord)r   r   ÚsZchar_to_fontZ_cÚ_fr   r   r   ÚtrackB   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!   r"   )r   r   Zglyphr   r   r   Útrack_glyphH   s    zCharacterTracker.track_glyphN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r'   r   r   r   r   r   7   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   R   s    
zRendererPDFPSBase.__init__c                 C   s   dS )NFr   r   r   r   r   ÚflipyW   s    zRendererPDFPSBase.flipyc                 C   s   dS )NTr   r   r   r   r   Úoption_scale_image[   s    z$RendererPDFPSBase.option_scale_imagec                 C   s   t jd  S )Nzimage.composite_image)ÚmplÚrcParamsr   r   r   r   Úoption_image_nocomposite_   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_heightd   s    z)RendererPDFPSBase.get_canvas_width_heightc                 C   s  |dkr8|   ¡ }| ¡ }|j||| d�\}}}|||fS |r^| jj |d|¡}	|	j|	j|	jfS t	j
| j r¶|  |¡}
|
 |¡\}}}}}| ¡ d }||9 }||9 }||9 }|||fS |  |¡}
|
j|dtjd� |
 ¡ \}}|
 ¡ }d}||9 }||9 }||9 }|||fS d S )NÚTeX)ÚrendereréH   iè  g        )Úflagsg      �?)Zget_texmanagerÚget_size_in_pointsÚget_text_width_height_descentZ
_text2pathZmathtext_parserÚparser.   r/   Údepthr4   r5   Z_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Údr>   r   ÚlÚbÚscaler   r   r   r=   h   s:      ÿ



z/RendererPDFPSBase.get_text_width_height_descentc                 C   s   t j|d| jd�}t|ƒS )NZafm)ZfontextÚ	directory)r   ZfindfontZ_afm_font_dirr   )r   rB   r   r   r   r   r@   †   s      ÿzRendererPDFPSBase._get_font_afmc                 C   s2   t j |¡}t  |¡}| ¡  | | ¡ d¡ |S )Nr:   )r   ZfontManagerZ_find_fonts_by_propsZget_fontÚclearZset_sizer<   )r   rB   Úfnamesr   r   r   r   rA   ‹   s
    
zRendererPDFPSBase._get_font_ttf)r(   r)   r*   r   r2   r3   r6   r7   r=   r@   rA   Ú__classcell__r   r   r0   r   r,   M   s   r,   )r+   Úior   Ú	functoolsZ	fontToolsr   Z
matplotlibr4   Ú r   r   Z_afmr   Zbackend_basesr   Ú	lru_cacher   r   r   r,   r   r   r   r   Ú<module>   s   
!