
    Og~                        d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ ddlmZmZ dd	lmZ dd
lmZmZ dZdZ e       Z G d de      Z G d d      Z G d de      ZddZ G d de      Zy)    )annotations)Anyno_type_check)BasePen)TTFont)Matrix44UVecBoundingBox2d)Path   )FontManagerUnsupportedFont)FontMeasurements)	GlyphPathGlyphsi%  i  c                  Z     e Zd Zd fdZed	d       Zd
dZd
dZddZddZ	ddZ
 xZS )PathPenc                B    t         |   |       t               | _        y N)super__init__r   _path)self	glyph_set	__class__s     X/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/fonts/ttfonts.pyr   zPathPen.__init__   s    #V
    c                ,    t        | j                        S r   )r   r   r   s    r   pathzPathPen.path   s    $$r   c                :    | j                   j                  |       y r   )r   move_tor   pts     r   _moveTozPathPen._moveTo       

2r   c                :    | j                   j                  |       y r   )r   line_tor#   s     r   _lineTozPathPen._lineTo    r&   r   c                >    | j                   j                  |||       y r   )r   	curve4_to)r   pt1pt2pt3s       r   _curveToOnezPathPen._curveToOne#   s    

S#s+r   c                <    | j                   j                  ||       y r   )r   	curve3_to)r   r,   r-   s      r   _qCurveToOnezPathPen._qCurveToOne&   s    

S#&r   c                8    | j                   j                          y r   )r   close_sub_pathr   s    r   
_closePathzPathPen._closePath)   s    

!!#r   )returnNone)r6   r   )r$   r	   r6   r7   )r,   r	   r-   r	   r.   r	   r6   r7   )r,   r	   r-   r	   r6   r7   )__name__
__module____qualname__r   propertyr    r%   r)   r/   r2   r5   __classcell__)r   s   @r   r   r      s5     % %,'$r   r   c                      e Zd ZddZy)	NoKerningc                     yN         r   c0c1s      r   getzNoKerning.get.   s    r   NrD   strrE   rH   r6   float)r8   r9   r:   rF   rB   r   r   r>   r>   -   s    r   r>   c                  "    e Zd ZdZdddZddZy)KerningTable)_cmap_kern_tablec                D    || _         |d   j                  |      | _        y )Nkern)rL   getkernrM   )r   fontcmapfmts       r   r   zKerningTable.__init__5   s     
<//4r   c                    	 | j                   | j                  t        |         | j                  t        |         f   S # t        t        f$ r Y yw xY wr@   )rM   rL   ordKeyError	TypeErrorrC   s      r   rF   zKerningTable.get9   sN    	##TZZB%8$**SW:M$NOO)$ 		s   <? AAN)r   )rQ   r   rS   intrG   )r8   r9   r:   	__slots__r   rF   rB   r   r   rK   rK   2   s    (I5r   rK   c                    | d   j                   }|D ]<  }|j                  dk(  s|j                  j                  |j	                               c S  y)Nnamer   unknown)namesnameIDstringdecodegetEncoding)rQ   r]   records      r   get_fontnamerc   @   sO    LE >==A==''(:(:(<==> r   c                      e Zd ZdddZedd       Zedd       ZddZddZ	ddZ
ddZ	 d	 	 	 	 	 	 	 ddZdd	Zddd
Z	 d	 	 	 	 	 	 	 ddZy)TTFontRendererc                :   t               | _        t               | _        t               | _        || _        | j                  j                         | _        | j                  t        d| j                   d      | j                  j                         | _
        t               | _        |r&	 t        | j                  | j                        | _        | j                  d   | _        | j!                         | _        | j%                         | _        y # t        $ r Y Jw xY w)Nzfont 'z' has no character map.z.notdef)dict_glyph_path_cache_generic_glyph_cache_glyph_width_cacherQ   getBestCmaprR   r   	font_namegetGlyphSetr   r>   kerningrK   rV   undefined_generic_glyph_get_font_measurementsfont_measurementsdetect_space_widthspace_width)r   rQ   rn   s      r   r   z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                ,    t        | j                        S r   )rc   rQ   r   s    r   rl   zTTFontRenderer.font_name\   s    DII&&r   c                   t        | j                  d      j                               }|j                  j                  }|j
                  j                  |z
  }t        | j                  d      j                               }|j
                  j                  |z
  }t        | j                  d      j                               }||j                  j                  z
  }t        ||||      S )NxAp)baseline
cap_heightx_heightdescender_height)r
   get_glyph_pathcontrol_verticesextminyextmaxr   )r   bboxry   r{   rz   r|   s         r   rp   z%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#dkkmm3!-	
 	
r   c                :    d| j                   j                  z  |z  S )N      ?)rq   rz   )r   rz   s     r   get_scaling_factorz!TTFontRenderer.get_scaling_factorp   s    T++666CCr   c                    	 | j                   |   S # t        $ r Y nw xY w	 | j                  | j                  t	        |            }n# t        $ r | j
                  }Y nw xY w|| j                   |<   |S r   )ri   rV   r   rR   rU   ro   )r   chargeneric_glyphs      r   get_generic_glyphz TTFontRenderer.get_generic_glyphs   sz    	,,T22 			9 NN499SY+?@M 	9 88M	9*7!!$'s    	%A AAc                   	 | j                   |   j                         S # t        $ r Y nw xY wt        | j                        }| j                  |      j                  |       |j                  }|| j                   |<   |j                         S )z8Returns the raw glyph path, without any scaling applied.)rh   clonerV   r   r   r   drawr    )r   r   pen
glyph_paths       r   r}   zTTFontRenderer.get_glyph_path   s    	))$/5577 		dnn%t$))#.XX
'1t$!!s    	++c                    	 | j                   |   S # t        $ r Y nw xY wd}	 | j                  |      j                  }n# t        $ r Y nw xY w|| j                   |<   |S )z9Returns the raw glyph width, without any scaling applied.rA   )rj   rV   r   width)r   r   r   s      r   get_glyph_widthzTTFontRenderer.get_glyph_width   sq    	**400 			**4066E 		(-%s    	? 	A
Ac                   g }d}t        | j                  t              }| j                  |      }|}||z  }	t	        j
                  |	|d      }
| j                  j                   |z  |
d<   d}|D ]  }|r"|| j                  j                  ||      |	z  z  }||
d<   | j                  |      }|j                  |
       t        |      r|j                  |       || j                  |      |	z  z  }|} |S )zFReturns the glyph paths of string `s` as a list, scaled to cap height.r   r   )   r    )r   r   )
isinstancern   rK   r   r   scalerq   ry   rF   r}   transform_inplacelenappendr   )r   srz   width_factorglyph_pathsx_offsetrequires_kerningresize_factory_factorx_factorm	prev_charr   r   s                 r   get_text_glyph_pathsz#TTFontRenderer.get_text_glyph_paths   s    (*%dllLA//
;  </NN8Xs3))222X=$	 
	DDLL,,Y=HHAdG,,T2J((+:"":.,,T2X==HI
	 r   c                $    | j                  d      S )z4Returns the space width for the raw (unscaled) font. )r   r   s    r   rr   z!TTFontRenderer.detect_space_width   s    ##C((r   c                    d}d}| j                   j                  }| j                  }|D ]  }| |||       ||      z   z  }|} || j                  |      z  S )NrA   r   )rn   rF   r   r   )r   r   rz   lengthrD   rO   r   rE   s           r   _get_text_length_with_kerningz,TTFontRenderer._get_text_length_with_kerning   sk    ||$$ 	Bd2rlU2Y..FB	 //
;;;r   c                    t        | j                  t              r| j                  ||      |z  S | j                  t        fd|D              | j                  |      z  |z  S )Nc              3  .   K   | ]  } |        y wr   rB   ).0cr   s     r   	<genexpr>z1TTFontRenderer.get_text_length.<locals>.<genexpr>   s     $Qa$s   )r   rn   rK   r   r   sumr   )r   r   rz   r   r   s       @r   get_text_lengthzTTFontRenderer.get_text_length   sd     dllL155aD|SS$$$!$$%%j12	
r   N)F)rQ   r   )r6   rH   )r6   r   )rz   rI   r6   rI   )r   rH   )r   rH   r6   r   )r   rH   r6   rI   )r   r   )r   rH   rz   rI   r   rI   r6   zlist[GlyphPath])r6   rI   )r   )r   rH   rz   rI   r6   rI   )r   rH   rz   rI   r   rI   r6   rI   )r8   r9   r:   r   r;   rl   r   rp   r   r   r}   r   r   rr   r   r   rB   r   r   re   re   H   s    5& ' ' 
 
D

" FI"'=B	:)< FI



"'

=B

	

r   re   N)rQ   r   r6   rH   )
__future__r   typingr   r   fontTools.pens.basePenr   fontTools.ttLibr   
ezdxf.mathr   r	   r
   
ezdxf.pathr   font_managerr   r   rq   r   glyphsr   r   UNICODE_WHITE_SQUAREUNICODE_REPLACEMENT_CHARr   r>   rK   rc   re   rB   r   r   <module>r      sm    # % * " 4 4  6 / %   }$g $2 
9 F
V F
r   