o
    jP                     @   s   d Z ddlmZ ddl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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   d/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/matplotlib/backends/_backend_pdf_ps.py_cached_get_afm_from_fname   s   $r   c                 C   sb   t jddd}| jg d7  _| drd|_t | |}t j|d}|j|d | | |S )a  
    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)Zglyph_namesZrecommended_glyphs)ZFFTMZPfEdZBDFmetaZMERGZTSIVZZapfZbdatZblocZcidgZfdscZfeatZfmtxZfondZjustZkerxZltagZmorxZtrakZxrefz.ttcr   )options)text)r   OptionsZdrop_tablesendswithZfont_numberZ	load_fontZ	SubsetterZpopulate)Zfontfile
charactersr   fontZ	subsetterr   r   r   get_glyphs_subset   s   

r   c                 C   s   t  }| j|dd |S )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)ZreorderTables)r   save)r   r   r   r   r   font_as_fileO   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__j   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   trackm   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_glyphs   s   zCharacterTracker.track_glyphN)__name__
__module____qualname____doc__r    r(   r)   r   r   r   r   r   b   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   r0   r1   	__class__r   r   r    }   s   

zRendererPDFPSBase.__init__c                 C      dS )NFr   r   r   r   r   flipy      zRendererPDFPSBase.flipyc                 C   r4   )NTr   r   r   r   r   option_scale_image   r6   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@)r0   r1   r   r   r   r   get_canvas_width_height   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jd | \}}	| }
d}||9 }|	|9 }	|
|9 }
||	|
fS )NTeXH   i  g        )flagsg      ?)r/   get_text_width_height_descentZ
_text2pathZmathtext_parserparser0   r1   depthr8   r9   Z_use_afm_rc_name_get_font_afmZget_str_bbox_and_descentget_size_in_points_get_font_ttfZset_textr   Z	LoadFlagsZ
NO_HINTINGZget_width_heightZget_descent)r   r&   propZismathr@   r   lbwhdscaler2   r   r   r?      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   rE   r   r   r   r   rB      s   zRendererPDFPSBase._get_font_afmc                 C   sX   t j|}zt |}|  || d |W S  ty+   t	t
d|  w )Nr=   zMThe PostScript/PDF backend does not currently support the selected font (%s).)r   ZfontManagerZ_find_fonts_by_propsZget_fontclearZset_sizerC   RuntimeErrorlogging	getLoggerr*   warning)r   rE   fnamesr   r   r   r   rD      s   

zRendererPDFPSBase._get_font_ttf)r*   r+   r,   r    r5   r7   r:   r;   r?   rB   rD   __classcell__r   r   r2   r   r.   x   s    r.   )r-   ior   	functoolsrO   Z	fontToolsr   Z
matplotlibr8    r   r   Z_afmr   Zbackend_basesr   	lru_cacher   r   r   r   r.   r   r   r   r   <module>   s    
8