
    Owg<(                         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
      Z e       ZddZddZddZd Zy)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                   b    e Zd ZdZd Zedd       Zedd       ZddZd Z	ddZ
	 dd	Zdd
Zy)FontMapzj
    Managing the mapping of svg font names to reportlab fonts and registering
    them in reportlab.
    c                 2    i | _         | j                          y)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selfs    C/var/www/horilla/myenv/lib/python3.12/site-packages/svglib/fonts.py__init__zFontMap.__init__   s     	##%    c                     | }|dk7  s|dk7  r|dz  }|dk7  r9t        |      t        u r|| z  }n!||j                         j                         z  }|dk7  r!||j                         j                         z  }|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_names       r   build_internal_namezFontMap.build_internal_name+   s     X(!23KXF|s"&*v||~88::H5;;=3355Kr   c                     d}|j                         dk(  }|j                         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filenames           r   guess_font_filenamezFontMap.guess_font_filename?   s`     <<>V+[[]h.	9FFYFZxq4r   c                 `   d}	 t        j                  ddd|gt         j                  t         j                        }|j                         d   j	                  t        j                               }|j                  d      }|D ]  }	 t        t        ||             |}	 n |S |j                         t        j                  j                  |	      j                         v }
t         j#                  |||      }|||||
d| j$                  |<   ||
fS # t        $ r |cY S w xY w# t        $ r Y w xY w)	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pathr3   r   r*   r   )r   	font_namer'   r(   	NOT_FOUNDpipeoutput
font_paths	font_pathsuccess_font_pathrD   internal_names               r   use_fontconfigzFontMap.use_fontconfigR   s7   !		##T#8)D!!D
 %%'*11#2K2K2MNF \\$'
# 		IVIy9: %.!		 !RWW%5%56G%H%N%N%PP33IvuM#69u$
		-  %)  		  s$   A,D D!DD!	D-,D-c                    | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd
       | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd       | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd       | j                  ddd	       | j                  dddd       | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd       | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd
       | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd
       | j                  dd       | j                  ddd       | j                  ddd	       | j                  dddd       y )NzTimes New Romanr   )rlgFontNamer-   r   )r'   rZ   r.   r   )r(   rZ   r	   )r'   r(   rZ   r
   r   r   r   zCourier Newr   r   r   r   z
sans-serifseriftimes	monospaceregister_fontr   s    r   r   zFontMap.register_default_fontsr   s   ,-H,VV,H.YfHJ\ 	 	
 	;K@;vCST;hDWXhD[ 	 	
 	=i@=^T=FWX&F[ 	 	
 	9HBSTfHBW 	 	
 	<[A<DTU<xEXYxE\ 	 	
 	7>76|L7(O76Oab7>76|L7(O76Oab;I>;v>R;hDUVhDY 	 	
r   Nc                     | j                  ||       || j                  ||d       || j                  ||d       || j                  ||dd       y y )Nr-   )r'   r.   )r(   )r'   r(   r^   r   r&   r   r-   r.   
bolditalics         r   register_font_familyzFontMap.register_font_family   sj    66*vtF;vvX>!vz&Q "r   c                    d}t         j                  |||      }||}|t        v r||||dd| j                  |<   |dfS |t        vr2|/	 t	        t        ||             ||||dd| j                  |<   |dfS yy# t        $ r |cY S w xY w)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;   NTr?   )r   r*   STANDARD_FONT_NAMESr   r   r   r   )r   font_familyrU   r'   r(   rZ   rQ   rW   s           r   r_   zFontMap.register_font   s     "	33KO (K-- *"{T(DIIm$ !$&& 33	8M!VK;<"-V!&;,		-( %d** 9N3  !  !s   
-A: :BBc                 6   t         j                  |||      }|t        v r|dfS || j                  v r$| j                  |   d   | j                  |   d   fS t         j	                  |||      }| j                  ||      \  }}|||fS | j                  |||      S )?Return the font and a Boolean indicating if the match is exact.TrC   rD   )r   r*   re   r   r9   r_   rX   )r   rP   r'   r(   rW   guessed_filenamereg_namerD   s           r   	find_fontzFontMap.find_font   s    33IvuM// $&&DII%99]+I6		-8PQX8YYY #66y&%P,,Y8HI%U?"""9fe<<r   r   r   )r   r   ttfNNNNr   r   N)__name__
__module____qualname____doc__r   staticmethodr*   r9   rX   r   rc   r_   rk    r   r   r   r      sX    
&  &  $ @0
dR Y] !D=r   r   c                 4    t         j                  | ||||      S )zU
    Register a font by name or alias and path to font including file extension.
    )	_font_mapr_   )rP   rU   r'   r(   rZ   s        r   r_   r_      s     ""9iTTr   c                 0    t         j                  | ||      S )rh   )rw   rk   )rP   r'   r(   s      r   rk   rk      s    y&%88r   c                 6    t         j                  |||||       y N)rw   rc   ra   s         r   rc   rc      s    ""664Lr   c                      t         S rz   )rw   ru   r   r   get_global_font_mapr|      s    r   ro   rl   rn   )rs   rN   rE   rJ   reportlab.pdfbase.pdfmetricsr   reportlab.pdfbase.ttfontsr   r   re   DEFAULT_FONT_NAMEDEFAULT_FONT_WEIGHTDEFAULT_FONT_STYLEDEFAULT_FONT_SIZEr   rw   r_   rk   rc   r|   ru   r   r   <module>r      si    
  
 5 6       F= F=R I	U9
Mr   