
    h~                        S SK Jr  S SKJrJr  S SKJr  S SKJr  S SK	J
r
JrJr  S SKJr  SSKJrJr  SS	KJr  SS
KJrJr  SrSr\" 5       r " S S\5      r " S S5      r " S S\5      rSS jr " S S\5      rg)    )annotations)Anyno_type_check)BasePen)TTFont)Matrix44UVecBoundingBox2d)Path   )FontManagerUnsupportedFont)FontMeasurements)	GlyphPathGlyphsi%  i  c                  r   ^  \ rS rSrS
U 4S jjr\SS j5       rSS jrSS jrSS jr	SS jr
S
S jrS	rU =r$ )PathPen   c                B   > [         TU ]  U5        [        5       U l        g N)super__init__r   _path)self	glyph_set	__class__s     E/var/www/html/env/lib/python3.13/site-packages/ezdxf/fonts/ttfonts.pyr   PathPen.__init__   s    #V
    c                ,    [        U R                  5      $ r   )r   r   r   s    r   pathPathPen.path   s    $$r   c                :    U R                   R                  U5        g r   )r   move_tor   pts     r   _moveToPathPen._moveTo       

2r   c                :    U R                   R                  U5        g r   )r   line_tor&   s     r   _lineToPathPen._lineTo    r*   r   c                <    U R                   R                  X1U5        g r   )r   	curve4_to)r   pt1pt2pt3s       r   _curveToOnePathPen._curveToOne#   s    

Ss+r   c                :    U R                   R                  X!5        g r   )r   	curve3_to)r   r1   r2   s      r   _qCurveToOnePathPen._qCurveToOne&   s    

S&r   c                8    U R                   R                  5         g r   )r   close_sub_pathr!   s    r   
_closePathPathPen._closePath)   s    

!!#r   )r   )returnNone)r>   r   )r'   r	   r>   r?   )r1   r	   r2   r	   r3   r	   r>   r?   )r1   r	   r2   r	   r>   r?   )__name__
__module____qualname____firstlineno__r   propertyr"   r(   r-   r4   r8   r<   __static_attributes____classcell__)r   s   @r   r   r      s:     % %,'$ $r   r   c                      \ rS rSrSS jrSrg)	NoKerning-   c                    gN         r   c0c1s      r   getNoKerning.get.   s    r   rM   NrO   strrP   rT   r>   float)r@   rA   rB   rC   rQ   rE   rM   r   r   rH   rH   -   s    r   rH   c                  0    \ rS rSrSrSSS jjrSS jrSrg)	KerningTable2   )_cmap_kern_tablec                B    X l         US   R                  U5      U l        g )Nkern)rY   getkernrZ   )r   fontcmapfmts       r   r   KerningTable.__init__5   s    
<//4r   c                     U R                   U R                  [        U5         U R                  [        U5         4   $ ! [        [        4 a     gf = frK   )rZ   rY   ordKeyError	TypeErrorrN   s      r   rQ   KerningTable.get9   sN    	##TZZB%8$**SW:M$NOO)$ 		s   <? AAN)r   )r^   r   r`   intrS   )r@   rA   rB   rC   	__slots__r   rQ   rE   rM   r   r   rW   rW   2   s    (I5r   rW   c                    U S   R                   nU H>  nUR                  S:X  d  M  UR                  R                  UR	                  5       5      s  $    g)Nnamer   unknown)namesnameIDstringdecodegetEncoding)r^   rl   records      r   get_fontnamerr   @   sJ    LE==A==''(:(:(<==  r   c                      \ rS rSrSSS jjr\SS j5       r\SS j5       rSS jr	SS jr
SS jrSS jr S       SS	 jjrSS
 jrSSS jjr S       SS jjrSrg)TTFontRendererH   c                F   [        5       U l        [        5       U l        [        5       U l        Xl        U R                  R                  5       U l        U R                  c  [        SU R                   S35      eU R                  R                  5       U l
        [        5       U l        U(       a&   [        U R                  U R                  5      U l        U R                  S   U l        U R!                  5       U l        U R%                  5       U l        g ! [         a     NKf = f)Nzfont 'z' has no character map.z.notdef)dict_glyph_path_cache_generic_glyph_cache_glyph_width_cacher^   getBestCmapr_   r   	font_namegetGlyphSetr   rH   kerningrW   rd   undefined_generic_glyph_get_font_measurementsfont_measurementsdetect_space_widthspace_width)r   r^   r~   s      r   r   TTFontRenderer.__init__I   s    7;v48F!48F	II))+	99!F4>>*::Q"RSS..0 {+DIItyyA (,~~i'@$!%!<!<!>224	  s   /%D 
D D c                ,    [        U R                  5      $ r   )rr   r^   r!   s    r   r|   TTFontRenderer.font_name\   s    DII&&r   c                   [        U R                  S5      R                  5       5      nUR                  R                  nUR
                  R                  U-
  n[        U R                  S5      R                  5       5      nUR
                  R                  U-
  n[        U R                  S5      R                  5       5      nX!R                  R                  -
  n[        UUUUS9$ )NxAp)baseline
cap_heightx_heightdescender_height)r
   get_glyph_pathcontrol_verticesextminyextmaxr   )r   bboxr   r   r   r   s         r   r   %TTFontRenderer._get_font_measurements`   s    T005FFHI;;==;;==8+T005FFHI[[]]X-
T005FFHI#kkmm3!-	
 	
r   c                :    SU R                   R                  -  U-  $ )N      ?)r   r   )r   r   s     r   get_scaling_factor!TTFontRenderer.get_scaling_factorp   s    T++666CCr   c                     U R                   U   $ ! [         a     Of = f U R                  U R                  [	        U5            nO! [         a    U R
                  n Of = fX R                   U'   U$ r   )ry   rd   r   r_   rc   r   )r   chargeneric_glyphs      r   get_generic_glyph TTFontRenderer.get_generic_glyphs   sx    	,,T22 			9 NN499SY+?@M 	9 88M	9*7!!$'s    
%A A! A!c                    U R                   U   R                  5       $ ! [         a     Of = f[        U R                  5      nU R                  U5      R                  U5        UR                  nX0R                   U'   UR                  5       $ )z8Returns the raw glyph path, without any scaling applied.)rx   clonerd   r   r   r   drawr"   )r   r   pen
glyph_paths       r   r   TTFontRenderer.get_glyph_path   s    	))$/5577 		dnn%t$))#.XX
'1t$!!s    
,,c                     U R                   U   $ ! [         a     Of = fSn U R                  U5      R                  nO! [         a     Of = fX R                   U'   U$ )z9Returns the raw glyph width, without any scaling applied.rL   )rz   rd   r   width)r   r   r   s      r   get_glyph_widthTTFontRenderer.get_glyph_width   so    	**400 			**4066E 		(-%s    
A   
AAc                   / nSn[        U R                  [        5      nU R                  U5      nUnXs-  n	[        R
                  " XS5      n
U R                  R                  * U-  U
S'   SnU H  nU(       a   XPR                  R                  X5      U	-  -  nXZS'   U R                  U5      nUR                  U
5        [        U5      (       a  UR                  U5        XPR                  U5      U	-  -  nUnM     U$ )zFReturns the glyph paths of string `s` as a list, scaled to cap height.r   r   )   r    )r   r   )
isinstancer~   rW   r   r   scaler   r   rQ   r   transform_inplacelenappendr   )r   sr   width_factorglyph_pathsx_offsetrequires_kerningresize_factory_factorx_factorm	prev_charr   r   s                 r   get_text_glyph_paths#TTFontRenderer.get_text_glyph_paths   s     (*%dllLA//
;  /NN8s3))222X=$	DLL,,Y=HHdG,,T2J((+:"":.,,T2X==HI  r   c                $    U R                  S5      $ )z4Returns the space width for the raw (unscaled) font. )r   r!   s    r   r   !TTFontRenderer.detect_space_width   s    ##C((r   c                    SnSnU R                   R                  nU R                  nU H  nX5" XG5      U" U5      -   -  nUnM     X0R                  U5      -  $ )NrL   r   )r~   rQ   r   r   )r   r   r   lengthrO   r\   r   rP   s           r   _get_text_length_with_kerning,TTFontRenderer._get_text_length_with_kerning   sb    ||$$Bd2lU2Y..FB  //
;;;r   c                   ^ [        U R                  [        5      (       a  U R                  X5      U-  $ U R                  m[        U4S jU 5       5      U R                  U5      -  U-  $ )Nc              3  4   >#    U  H  nT" U5      v   M     g 7fr   rM   ).0cr   s     r   	<genexpr>1TTFontRenderer.get_text_length.<locals>.<genexpr>   s     $!Qa!s   )r   r~   rW   r   r   sumr   )r   r   r   r   r   s       @r   get_text_lengthTTFontRenderer.get_text_length   se     dllL1155aD|SS$$$!$$%%j12	
r   )
ry   rx   rz   r_   r^   r   r   r~   r   r   N)F)r^   r   )r>   rT   )r>   r   )r   rU   r>   rU   )r   rT   )r   rT   r>   r   )r   rT   r>   rU   )r   r   )r   rT   r   rU   r   rU   r>   zlist[GlyphPath])r>   rU   )r   )r   rT   r   rU   r>   rU   )r   rT   r   rU   r   rU   r>   rU   )r@   rA   rB   rC   r   rD   r|   r   r   r   r   r   r   r   r   r   r   rE   rM   r   r   rt   rt   H   s    5& ' ' 
 
D

" FI"'=B	:)< FI



"'

=B

	

 

r   rt   N)r^   r   r>   rT   )
__future__r   typingr   r   fontTools.pens.basePenr   fontTools.ttLibr   
ezdxf.mathr   r	   r
   
ezdxf.pathr   font_managerr   r   r   r   glyphsr   r   UNICODE_WHITE_SQUAREUNICODE_REPLACEMENT_CHARr   rH   rW   rr   rt   rM   r   r   <module>r      sm    # % * " 4 4  6 / %   }$g $2 
9 F
V F
r   