o
    
&zh<(                     @   s   d Z ddlZddlZddlZddlmZ ddlmZmZ dZ	dZ
dZdZdZG d	d
 d
Ze ZdddZdddZdddZdd ZdS )zO
This is a collection for all the font-related code used by ``svglib`` module.
    N)registerFont)TTFErrorTTFont)Times-RomanTimes-Italic
Times-BoldTimes-BoldItalic	HelveticaHelvetica-ObliqueHelvetica-BoldHelvetica-BoldObliqueCourierCourier-ObliqueCourier-BoldCourier-BoldObliqueSymbolZapfDingbatsr	   normal   c                   @   sf   e Zd ZdZdd ZedddZeddd	Zdd
dZdd Z	dddZ
	dddZdddZdS )FontMapzj
    Managing the mapping of svg font names to reportlab fonts and registering
    them in reportlab.
    c                 C   s   i | _ |   dS )a   
        The map has the form:
        'internal_name': {
           'svg_family': 'family_name', 'svg_weight': 'font-weight', 'svg_style': 'font-style',
           'rlgFont': 'rlgFontName'
        }
        for faster searching we use internal keys for finding the matching font
        N)_mapregister_default_fontsself r   G/var/www/html/kangema/venv/lib/python3.10/site-packages/svglib/fonts.py__init__   s   	zFontMap.__init__r   c                 C   sh   | }|dks
|dkr|d7 }|dkr&t |tu r|| 7 }n||  7 }|dkr2||  7 }|S )a  
        If the weight or style is given, append the capitalized weight and style
        to the font name. E.g. family="Arial", weight="bold" and style="italic"
        then the internal name would be "Arial-BoldItalic", this mimics the
        default fonts naming schema.
        r   -)typeintlower
capitalize)familyweightstyleresult_namer   r   r   build_internal_name+   s   zFontMap.build_internal_namettfc                 C   sZ   d}|  dk}|  dk}|r|sd}n|r|rd}n|s"|r"d}|  | d| }|S )z
        Try to guess the actual font filename depending on family, weight and style,
        this works at least for windows on the "default" fonts like, Arial,
        courier, Times New Roman etc.
         bolditalicbdbii.)r    )basenamer#   r$   	extensionprefixis_bold	is_italicfilenamer   r   r   guess_font_filename?   s   zFontMap.guess_font_filenamec              	   C   s   d}zt jddd|gt jt jd}| d t }W n ty(   | Y S w |d}|D ]}z	t	t
|| W n	 tyD   Y q0w |}	 n|S | tj|	 v }
t|||}|||||
d| j|< ||
fS )	NNFzfc-matchz-sz--format=%{file}\n)stdoutstderrr   

svg_family
svg_weight	svg_stylerlgFontexact)
subprocessPopenPIPEcommunicatedecodesysgetfilesystemencodingOSErrorsplitr   r   r   r    ospathr/   r   r&   r   )r   	font_namer#   r$   	NOT_FOUNDpipeoutput
font_paths	font_pathsuccess_font_pathr?   internal_namer   r   r   use_fontconfigR   s6   

zFontMap.use_fontconfigc                 C   s  | j ddd | j dddd | j dddd	 | j dddd
d | j ddd | j dddd | j dddd	 | j ddddd | j ddd | j dddd | j dddd	 | j ddddd | j dddd	 | j ddddd | j ddd | j dddd | j dddd	 | j ddddd | j ddd | j dddd | j dddd	 | j dddd
d | j ddd | j dddd | j dddd	 | j dddd
d | j ddd | j dddd | j dddd	 | j ddddd d S )NzTimes New Romanr   )rlgFontNamer)   r   )r#   rT   r*   r   )r$   rT   r   )r#   r$   rT   r	   r   r
   r   zCourier Newr   r   r   r   z
sans-serifseriftimes	monospaceregister_fontr   r   r   r   r   r   sT   
zFontMap.register_default_fontsNc                 C   s^   |  || |d ur| j ||dd |d ur| j ||dd |d ur-| j ||ddd d S d S )Nr)   )r#   r*   )r$   )r#   r$   rX   r   r"   r   r)   r*   
bolditalicr   r   r   register_font_family   s   zFontMap.register_font_familyc                 C   s   d}t |||}|du r|}|tv r"||||dd| j|< |dfS |tvrM|durOztt|| ||||dd| j|< |dfW S  tyL   | Y S w dS dS )z
        Register a font identified by its family, weight and style linked to an
        actual fontfile. Or map an svg font family, weight and style combination
        to a reportlab fontname.
        r6   NTr:   )r   r&   STANDARD_FONT_NAMESr   r   r   r   )r   font_familyrP   r#   r$   rT   rL   rR   r   r   r   rY      s(   
zFontMap.register_fontc                 C   s   t |||}|tv r|dfS || jv r"| j| d | j| d fS t |||}| ||\}}|dur9||fS | |||S )?Return the font and a Boolean indicating if the match is exact.Tr>   r?   N)r   r&   r]   r   r5   rY   rS   )r   rK   r#   r$   rR   guessed_filenamereg_namer?   r   r   r   	find_font   s   
zFontMap.find_fontr   r   )r   r   r'   NNNNr   r   N)__name__
__module____qualname____doc__r   staticmethodr&   r5   rS   r   r\   rY   rb   r   r   r   r   r      s    
 
2

"r   c                 C   s   t | ||||S )zU
    Register a font by name or alias and path to font including file extension.
    )	_font_maprY   )rK   rP   r#   r$   rT   r   r   r   rY      s   rY   c                 C   s   t | ||S )r_   )rk   rb   )rK   r#   r$   r   r   r   rb      s   rb   c                 C   s   t ||||| d S N)rk   r\   rZ   r   r   r   r\      s   r\   c                   C   s   t S rl   )rk   r   r   r   r   get_global_font_map   s   rm   re   rc   rd   )ri   rI   r@   rE   reportlab.pdfbase.pdfmetricsr   reportlab.pdfbase.ttfontsr   r   r]   DEFAULT_FONT_NAMEDEFAULT_FONT_WEIGHTDEFAULT_FONT_STYLEDEFAULT_FONT_SIZEr   rk   rY   rb   r\   rm   r   r   r   r   <module>   s$     J


