U
    \	a2                     @   s|   d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ed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.
    N)_api   )font_managerft2font)AFM)RendererBase2   c              
   C   s*   t | d}t|W  5 Q R  S Q R X d S )Nrb)openr   )fnamefh r   G/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/backends/_backend_pdf_ps.py_cached_get_afm_from_fname   s    r   c                   @   s>   e Zd ZdZdd Zede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__z3.3c                 C   s8   i }| j  D ]$\}}tj|\}}||f||< q|S r   )r   itemsmplZcbookZget_realpath_and_stat)r   dr   charsrealpathZstat_keyr   r   r   used_characters   s
    z CharacterTracker.used_charactersc                 C   s6   t |tr|}n|j}| j|t tt| dS )z:Record that string *s* is being typeset using font *font*.N)	
isinstancestrr   r   
setdefaultsetupdatemapord)r   fontsr   r   r   r   track(   s    
zCharacterTracker.trackc                 C   s,   |  D ]\}}| j|t | qdS )z5Update self with a font path to character codepoints.N)r   r   r   r   r    )r   otherr   charsetr   r   r   merge2   s    zCharacterTracker.mergeN)__name__
__module____qualname____doc__r   r   
deprecatedpropertyr   r%   r(   r   r   r   r   r      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   r1   r2   	__class__r   r   r   =   s    
zRendererPDFPSBase.__init__c                 C   s   dS )NFr   r   r   r   r   flipyB   s    zRendererPDFPSBase.flipyc                 C   s   dS )NTr   r   r   r   r   option_scale_imageF   s    z$RendererPDFPSBase.option_scale_imagec                 C   s   t jd  S )Nzimage.composite_image)r   rcParamsr   r   r   r   option_image_nocompositeJ   s    z*RendererPDFPSBase.option_image_nocompositec                 C   s   | j d | jd fS )Ng      R@)r1   r2   r   r   r   r   get_canvas_width_heightO   s    z)RendererPDFPSBase.get_canvas_width_heightc                 C   s0  |dkr8|   }| }|j||| d\}}}|||fS |r~ddlm}	 | jjj|d|t| |	oht	j
d 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 )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_psr:   Z
_text2pathZmathtext_parserparser   r   r7   r1   r2   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hr   r:   r?   r#   lbZscaler   r   r   r>   S   sH      
  



z/RendererPDFPSBase.get_text_width_height_descentc                 C   s   t j|d| jd}t|S )Nafm)Zfontext	directory)r   findfontZ_afm_font_dirr   )r   rC   r   r   r   r   rA   v   s      zRendererPDFPSBase._get_font_afmc                 C   s0   t |}t |}|  || d |S )Nr;   )r   rJ   Zget_fontclearZset_sizer=   )r   rC   r   r#   r   r   r   rB   {   s
    

zRendererPDFPSBase._get_font_ttf)r)   r*   r+   r   r5   r6   r8   r9   r>   rA   rB   __classcell__r   r   r3   r   r/   8   s   #r/   )r,   	functoolsZ
matplotlibr   r    r   r   rH   r   Zbackend_basesr   	lru_cacher   r   r/   r   r   r   r   <module>   s   
$