U
    b<(                     @   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-BoldObliqueZSymbolZZapfDingbatsr	   normal   c                   @   sd   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   I/home/ubuntu/graampay/app_env/lib/python3.8/site-packages/svglib/fonts.py__init__   s    	zFontMap.__init__r   c                 C   sh   | }|dks|dkr|d7 }|dkrLt |tkr<|| 7 }n||  7 }|dkrd||  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styleZ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|r8|r8d}n|sD|rDd}|  | 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italicZbdZbii.)r   )basenamer!   r"   	extensionprefixZis_boldZ	is_italicfilenamer   r   r   guess_font_filename?   s    zFontMap.guess_font_filenamec              	   C   s   d}z6t jddd|gt jt jd}| d t }W n tk
rR   | Y S X |d}|D ]8}zt	t
|| W n tk
r   Y qbY qbX |}	 qqb|S | tj|	 k}
t|||}|||||
d| j|< ||
fS )	NNFzfc-matchz-sz--format=%{file}\n)stdoutstderrr   
Z
svg_familyZ
svg_weightZ	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outputZ
font_paths	font_pathZsuccess_font_pathr5   internal_namer   r   r   use_fontconfigR   s8    



   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!   rH   r'   r   )r"   rH   r   )r!   r"   rH   r	   r   r
   r   zCourier Newr   r   r   r   z
sans-serifZseriftimesZ	monospaceregister_fontr   r   r   r   r   r   sx                      zFontMap.register_default_fontsNc                 C   sZ   |  || |d k	r$| j ||dd |d k	r<| j ||dd |d k	rV| j ||ddd d S )Nr&   )r!   r'   )r"   )r!   r"   rJ   r   r    r   r&   r'   Z
bolditalicr   r   r   register_font_family   s    zFontMap.register_font_familyc                 C   s   d}t |||}|dkr|}|tkrD||||dd| j|< |dfS |tkr|dk	rz.tt|| ||||dd| j|< |dfW S  tk
r   | Y S X 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.
        r/   NTr3   )r   r#   STANDARD_FONT_NAMESr   r   r   r   )r   Zfont_familyrE   r!   r"   rH   rB   rF   r   r   r   rK      s0          
zFontMap.register_fontc                 C   s   t |||}|tkr|dfS || jkrD| j| d | j| d fS t |||}| ||\}}|dk	rr||fS | |||S )?Return the font and a Boolean indicating if the match is exact.Tr4   r5   N)r   r#   rN   r   r.   rK   rG   )r   rA   r!   r"   rF   Zguessed_filenameZreg_namer5   r   r   r   	find_font   s    
zFontMap.find_font)r   r   )r   r   r$   )r   r   )NNN)Nr   r   N)r   r   )__name__
__module____qualname____doc__r   staticmethodr#   r.   rG   r   rM   rK   rP   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_maprK   )rA   rE   r!   r"   rH   r   r   r   rK      s    rK   c                 C   s   t | ||S )rO   )rV   rP   )rA   r!   r"   r   r   r   rP      s    rP   c                 C   s   t ||||| d S N)rV   rM   rL   r   r   r   rM      s    rM   c                   C   s   t S rW   )rV   r   r   r   r   get_global_font_map   s    rX   )Nr   r   N)r   r   )NNN)rT   r?   r6   r;   Zreportlab.pdfbase.pdfmetricsr   Zreportlab.pdfbase.ttfontsr   r   rN   ZDEFAULT_FONT_NAMEZDEFAULT_FONT_WEIGHTZDEFAULT_FONT_STYLEZDEFAULT_FONT_SIZEr   rV   rK   rP   rM   rX   r   r   r   r   <module>   s"    J


