Ë
    £èhL  ã                  óø   — 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     €ú3lib/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   € ð	Ø×#Ñ# T§Z¡Z´°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   @   sJ   € Ø�‰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ˆÔÜ48³FˆÔ!Ü48³FˆÔØˆŒ	Ø—I‘I×)Ñ)Ó+ˆŒ	Ø�9‰9ÐÜ! F¨4¯>©>Ð*:Ð:QÐ"RÓSÐSØŸ™×.Ñ.Ó0ˆŒÜ “{ˆŒÙðÜ+¨D¯I©I°t·y±yÓ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   € ä˜DŸI™IÓ&Ð&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ˆØ# d§k¡k§m¡mÑ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Ø ŸN™N¨4¯9©9´S¸³YÑ+?Ñ@‰MøÜò 	9Ø ×8Ñ8ŠMð	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øÜò 	Ùð	úä�d—n‘nÓ%ˆØ×Ñ˜tÓ$×)Ñ)¨#Ô.Ø—X‘Xˆ
Ø'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Ñ6‰EøÜò 	Ùð	úà(-ˆ×Ñ Ñ%Øˆ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  € ð (*ˆØˆÜ% d§l¡l´LÓAÐØ×/Ñ/°
Ó;ˆØ ˆØ  <Ñ/ˆä�N‰N˜8 X¨sÓ3ˆà×)Ñ)×2Ñ2Ð2°XÑ=ˆˆ$‰Øˆ	ãˆDÙØ˜DŸL™L×,Ñ,¨Y¸Ó=ÀÑHÑH�àˆAˆd‰GØ×,Ñ,¨TÓ2ˆJØ×(Ñ(¨Ô+Ü�:ŒØ×"Ñ" :Ô.Ø˜×,Ñ,¨TÓ2°XÑ=Ñ=ˆ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º   sf   € ØˆØˆØ�|‰|×ÑˆØ×$Ñ$ˆÛˆBØ‘d˜2˜r“l¡U¨2£YÑ.Ñ.ˆ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   ø€ ô �d—l‘l¤LÔ1Ø×5Ñ5°a¸Ó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   