§
    ‡Ûg±  ã                   óÈ   — 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j        d	¦  «        d
„ ¦   «         Zd„ Z G d„ d¦  «        Z G d„ de¦  «        ZdS )z7
Common functionality between the PDF and PS backends.
é    )ÚBytesION)Úsubseté   )Úfont_managerÚft2font)ÚAFM)ÚRendererBaseé2   c                 ót   — t          | d¦  «        5 }t          |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NÚrb)Úopenr   )ÚfnameÚfhs     úY/granary/edev/quantum/lib/python3.11/site-packages/matplotlib/backends/_backend_pdf_ps.pyÚ_cached_get_afm_from_fnamer      s|   € å	ˆe�TÑ	Ô	ð ˜bÝ�2‰wŒwðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘-­1´1c                 ó¶  — t          j        dd¬¦  «        }|xj        g d¢z  c_        |                      d¦  «        rd|_        t          j        | |¦  «        5 }t          j        |¬¦  «        }|                     |¬¦  «         |                      |¦  «         t          ¦   «         }| 	                    |d¬	¦  «         |cd
d
d
¦  «         S # 1 swxY 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)Úglyph_namesÚrecommended_glyphs)ÚFFTMÚPfEdÚBDFz.ttcr   )Úoptions)ÚtextF)ÚreorderTablesN)
r   ÚOptionsÚdrop_tablesÚendswithÚfont_numberÚ	load_fontÚ	SubsetterÚpopulater   Úsave)ÚfontfileÚ
charactersr   ÚfontÚ	subsetterr   s         r   Úget_glyphs_subsetr'      s)  € õ Œn¨À$ÐGÑGÔG€Gð ÐÔÐ2Ð2Ð2Ñ2ÐÔð ×Ò˜Ñ Ô ð  ØˆÔå	Ô	˜( GÑ	,Ô	,ð °ÝÔ$¨WÐ5Ñ5Ô5ˆ	Ø×Ò 
ÐÑ+Ô+Ð+Ø×Ò˜ÑÔÐÝ‰YŒYˆØ�	Š	�" Eˆ	Ñ*Ô*Ð*Øðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA'CÃCÃCc                   ó$   — e Zd ZdZd„ Zd„ Z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                 ó   — i | _         d S ©N)Úused©Úselfs    r   Ú__init__zCharacterTracker.__init__?   s   € ØˆŒ	ˆ	ˆ	ó    c                 óü   — |                      |¦  «        }|                     ¦   «         D ]Q\  }}| j                             |j        t          ¦   «         ¦  «                             t          |¦  «        ¦  «         ŒRd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Ú_fs         r   ÚtrackzCharacterTracker.trackB   ss   € à×(Ò(¨Ñ+Ô+ˆØ"×(Ò(Ñ*Ô*ð 	?ð 	?‰FˆB�ØŒI× Ò  ¤­3©5¬5Ñ1Ô1×5Ò5µc¸"±g´gÑ>Ô>Ð>Ð>ð	?ð 	?r0   c                 ó„   — | j                              |j        t          ¦   «         ¦  «                             |¦  «         dS )zARecord that codepoint *glyph* is being typeset using font *font*.N)r,   r4   r   r5   r6   )r.   r%   Úglyphs      r   Útrack_glyphzCharacterTracker.track_glyphH   s4   € àŒ	×Ò˜TœZ­©¬Ñ/Ô/×3Ò3°EÑ:Ô:Ð:Ð:Ð:r0   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r<   r?   © r0   r   r)   r)   7   sK   € € € € € ðð ðð ð ð?ð ?ð ?ð;ð ;ð ;ð ;ð ;r0   r)   c                   óL   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ fd„Zd„ Z	d„ Z
ˆ xZS )	ÚRendererPDFPSBasec                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S r+   )Úsuperr/   ÚwidthÚheight)r.   rI   rJ   Ú	__class__s      €r   r/   zRendererPDFPSBase.__init__R   s+   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ØˆŒˆˆr0   c                 ó   — dS )NFrD   r-   s    r   ÚflipyzRendererPDFPSBase.flipyW   s   € àˆur0   c                 ó   — dS )NTrD   r-   s    r   Úoption_scale_imagez$RendererPDFPSBase.option_scale_image[   s   € àˆtr0   c                 ó(   — t           j        d          S )Nzimage.composite_image)ÚmplÚrcParamsr-   s    r   Úoption_image_nocompositez*RendererPDFPSBase.option_image_nocomposite_   s   € õ ”<Ð 7Ô8Ð8Ð8r0   c                 ó*   — | j         dz  | j        dz  fS )Ng      R@)rI   rJ   r-   s    r   Úget_canvas_width_heightz)RendererPDFPSBase.get_canvas_width_heightd   s   € àŒz˜DÑ  $¤+°Ñ"4Ð4Ð4r0   c                 ó˜  •— |dk    r#t          ¦   «                              |||¦  «        S |r5| j        j                             |d|¦  «        }|j        |j        |j        fS t          j	        | j
                 r[|                      |¦  «        }|                     |¦  «        \  }}}}	}
|                     ¦   «         dz  }||z  }|	|z  }	|
|z  }
||	|
fS |                      |¦  «        }|                     |dt           j        ¬¦  «         |                     ¦   «         \  }}	|                     ¦   «         }
d}||z  }|	|z  }	|
|z  }
||	|
fS )NÚTeXéH   iè  g        )Úflagsg      �?)rH   Úget_text_width_height_descentÚ
_text2pathÚmathtext_parserÚparserI   rJ   ÚdepthrQ   rR   Ú_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.   r8   ÚpropÚismathr]   r%   ÚlÚbÚwÚhÚdÚscalerK   s               €r   rZ   z/RendererPDFPSBase.get_text_width_height_descenth   s\  ø€ à�UŠ?ˆ?Ý‘7”7×8Ò8¸¸DÀ&ÑIÔIÐIØð 	Ø”OÔ3×9Ò9¸!¸RÀÑFÔFˆEØ”; ¤¨e¬kÐ9Ð9ÝŒ\˜$Ô/Ô0ð 	Ø×%Ò% dÑ+Ô+ˆDØ ×9Ò9¸!Ñ<Ô<‰MˆAˆq�!�Q˜Ø×+Ò+Ñ-Ô-°Ñ4ˆEØ�‰JˆAØ�‰JˆAØ�‰JˆAØ�a˜�7ˆNà×%Ò% dÑ+Ô+ˆDØ�MŠM˜!˜S­Ô(?ˆMÑ@Ô@Ð@Ø×(Ò(Ñ*Ô*‰DˆAˆqØ× Ò Ñ"Ô"ˆAØˆEØ�‰JˆAØ�‰JˆAØ�‰JˆAØ�a˜�7ˆNr0   c                 óX   — t          j        |d| j        ¬¦  «        }t          |¦  «        S )NÚafm)ÚfontextÚ	directory)r   ÚfindfontÚ_afm_font_dirr   )r.   rh   r   s      r   r`   zRendererPDFPSBase._get_font_afm‚   s1   € ÝÔ%Ø˜%¨4Ô+=ð?ñ ?ô ?ˆå)¨%Ñ0Ô0Ð0r0   c                 óä   — t           j                             |¦  «        }t          j        |¦  «        }|                     ¦   «          |                     |                     ¦   «         d¦  «         |S )NrX   )r   ÚfontManagerÚ_find_fonts_by_propsÚget_fontÚclearÚset_sizerb   )r.   rh   Úfnamesr%   s       r   rc   zRendererPDFPSBase._get_font_ttf‡   sZ   € ÝÔ)×>Ò>¸tÑDÔDˆÝÔ$ VÑ,Ô,ˆØ�
Š
‰ŒˆØ�Š�d×-Ò-Ñ/Ô/°Ñ4Ô4Ð4Øˆr0   )r@   rA   rB   r/   rM   rO   rS   rU   rZ   r`   rc   Ú__classcell__)rK   s   @r   rF   rF   M   s«   ø€ € € € € ð
ð ð ð ð ð
ð ð ðð ð ð9ð 9ð 9ð
5ð 5ð 5ðð ð ð ð ð41ð 1ð 1ð
ð ð ð ð ð ð r0   rF   )rC   Úior   Ú	functoolsÚ	fontToolsr   Ú
matplotlibrQ   Ú r   r   Ú_afmr   Úbackend_basesr	   Ú	lru_cacher   r'   r)   rF   rD   r0   r   ú<module>r†      s  ððð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð à Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (ð €Ô�RÑÔðð ñ Ôðð
ð ð ðB;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð,?ð ?ð ?ð ?ð ?˜ñ ?ô ?ð ?ð ?ð ?r0   