
     h<(                         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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                   p    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d	S )FontMapzj
    Managing the mapping of svg font names to reportlab fonts and registering
    them in reportlab.
    c                 <    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selfs    H/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/svglib/fonts.py__init__zFontMap.__init__   s#     	##%%%%%    r   c                 "   | }|dk    s|dk    r|dz  }|dk    rFt          |          t          u r|| z  }n)||                                                                z  }|dk    r)||                                                                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!23KXF||s""&{*v||~~88:::H5;;==33555Kr   ttfc                     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filenames           r   guess_font_filenamezFontMap.guess_font_filename?   s     <<>>V+[[]]h.	 	9 	FF 	 	FF 	Y 	F44444r   c                    d}	 t          j        ddd|gt           j        t           j                  }|                                d                             t          j                              }n# t          $ r |cY S w xY w|                    d          }|D ]3}	 t          t          ||                     |}	 n# t          $ r Y 0w xY w|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pathr4   r   r*   r   )r   	font_namer'   r(   	NOT_FOUNDpipeoutput
font_paths	font_pathsuccess_font_pathrE   internal_names               r   use_fontconfigzFontMap.use_fontconfigR   sz   !		#T#8)D!!  D
 %%''*11#2K2M2MNNFF 	 	 		\\$''
# 		 		IVIy99::: %.!	     !!RW%5%56G%H%H%N%N%P%PP33IvuMM#69u$
 $
	-  %s$   A-A2 2B BB??
CCc                    |                      dd           |                      ddd           |                      ddd	           |                      dddd
           |                      dd           |                      ddd           |                      ddd	           |                      dddd           |                      dd           |                      ddd           |                      ddd	           |                      dddd           |                      ddd	           |                      dddd           |                      dd           |                      ddd           |                      ddd	           |                      dddd           |                      dd           |                      ddd           |                      ddd	           |                      dddd
           |                      dd           |                      ddd           |                      ddd	           |                      dddd
           |                      dd           |                      ddd           |                      ddd	           |                      dddd           d S )NzTimes New Romanr   )rlgFontNamer.   r   )r'   r[   r/   r   )r(   r[   r	   )r'   r(   r[   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HH,VVVV,H.YYYfHJ\ 	 	
 	
 	
 	;K@@@;vCSTTT;hDWXXXhD[ 	 	
 	
 	
 	=i@@@=^TTT=FWXXX&F[ 	 	
 	
 	
 	9HBSTTTfHBW 	 	
 	
 	
 	<[AAA<DTUUU<xEXYYYxE\ 	 	
 	
 	
 	7>>>76|LLL7(OOO76Oabbb7>>>76|LLL7(OOO76Oabbb;I>>>;v>RRR;hDUVVVhDY 	 	
 	
 	
 	
 	
r   Nc                     |                      ||           ||                      ||d           ||                      ||d           ||                      ||dd           d S d S )Nr.   )r'   r/   )r(   )r'   r(   r_   r   r&   r   r.   r/   
bolditalics         r   register_font_familyzFontMap.register_font_family   s    66***vtF;;;vvX>>>!vz&QQQQQ "!r   c                 &   d}t                               |||          }||}|t          v r||||dd| j        |<   |dfS |t          vrF|F	 t	          t          ||                     ||||dd| j        |<   |dfS # t          $ r |cY S w xY 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.
        r<   NTr@   )r   r*   STANDARD_FONT_NAMESr   r   r   r   )r   font_familyrV   r'   r(   r[   rR   rX   s           r   r`   zFontMap.register_font   s     "	33KOO (K--- *"{T( (DIm$ !$&& 333	8M!VK;;<<<"-V!&;, ,	-( %d** ! ! !    ! 438M8Ms   0A= =BBc                 V   t                               |||          }|t          v r|dfS || j        v r&| j        |         d         | j        |         d         fS t                               |||          }|                     ||          \  }}|||fS |                     |||          S )?Return the font and a Boolean indicating if the match is exact.TrD   rE   )r   r*   rf   r   r:   r`   rY   )r   rQ   r'   r(   rX   guessed_filenamereg_namerE   s           r   	find_fontzFontMap.find_font   s    33IvuMM/// $&&DI%%9]+I6	-8PQX8YYY #66y&%PP,,Y8HII%U?"""9fe<<<r   r   r   )r   r   r+   NNNNr   r   N)__name__
__module____qualname____doc__r   staticmethodr*   r:   rY   r   rd   r`   rl    r   r   r   r      s         
& & &    \&    \$       @0
 0
 0
dR R R R Y] !  !  !  !D= = = = = =r   r   c                 >    t                               | ||||          S )zU
    Register a font by name or alias and path to font including file extension.
    )	_font_mapr`   )rQ   rV   r'   r(   r[   s        r   r`   r`      s      ""9iTTTr   c                 :    t                               | ||          S )ri   )rw   rl   )rQ   r'   r(   s      r   rl   rl      s    y&%888r   c                 B    t                               |||||           d S N)rw   rd   rb   s         r   rd   rd      s$    ""664LLLLLr   c                      t           S rz   )rw   ru   r   r   get_global_font_mapr|      s    r   ro   rm   rn   )rs   rO   rF   rK   reportlab.pdfbase.pdfmetricsr   reportlab.pdfbase.ttfontsr   r   rf   DEFAULT_FONT_NAMEDEFAULT_FONT_WEIGHTDEFAULT_FONT_STYLEDEFAULT_FONT_SIZEr   rw   r`   rl   rd   r|   ru   r   r   <module>r      s    
			     



 5 5 5 5 5 5 6 6 6 6 6 6 6 6       F= F= F= F= F= F= F= F=R GII	U U U U9 9 9 9
M M M M    r   