Ë
    £èhß2  ã                  ó	  — U d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
Z
d dlmZ d dlmc mZ d dlmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d d
l m!Z! d dl"m#Z#m$Z$ ddl%m&Z& 	 e
jN                   G d„ de
jP                  «      «       Z)e
jN                   G d„ de
jP                  «      «       Z*ee)e*f   Z+de,d<   eeeeef   Z-de,d<   dZ.ej^                  e)j^                  e*j`                  fejb                  e)jb                  e*j`                  fejd                  e)jd                  e*j`                  fejf                  e)jb                  e*j`                  fejh                  e)jb                  e*jj                  fejl                  e)jb                  e*j`                  fejn                  e)j^                  e*jp                  fejr                  e)jb                  e*jp                  fejt                  e)jd                  e*jp                  fejv                  e)j^                  e*jx                  fejz                  e)jb                  e*jx                  fej|                  e)jd                  e*jx                  fej~                  e)j^                  e*j€                  fej‚                  e)jb                  e*j€                  fej„                  e)jd                  e*j€                  fiZCde,d<   eCj‰                  «        ejˆ                  «       k(  sJ ‚ejŠ                  e)j^                  e*j€                  fejŒ                  e)jb                  e*j€                  fejŽ                  e)jd                  e*j€                  fej�                  e)j^                  e*jj                  fej’                  e)jb                  e*jj                  fej”                  e)jd                  e*jj                  fej–                  e)j^                  e*jp                  fej˜                  e)jb                  e*jp                  fejš                  e)jd                  e*jp                  fi	ZNde,d<    eOeN«       eOe«      k(  sJ ‚d%d„ZPd&d„ZQd'd„ZRd(d„ZSd)d„ZT	 	 	 	 	 	 	 	 d*d„ZUd+d „ZVd,d!„ZW	 	 	 	 	 	 	 	 	 	 	 	 d-d"„ZXd.d#„ZY	 	 	 	 	 	 	 	 d/d$„ZZy)0é    )Úannotations)ÚUnionÚTupleÚIterableÚOptionalÚCallable)Ú	TypeAliasN)Úradians)ÚTextEntityAlignmentÚMAP_TEXT_ENUM_TO_ALIGN_FLAGSÚMTextEntityAlignment)ÚMTextÚTextÚAttribÚAttDef)ÚMatrix44ÚVec3Úsign)Úfonts)ÚFontMeasurements)Ú
plain_textÚ	text_wrapé   )ÚTextRendererc                  ó   — e Zd ZdZdZdZy)Ú
HAlignmentr   r   é   N)Ú__name__Ú
__module__Ú__qualname__ÚLEFTÚCENTERÚRIGHT© ó    ú9lib/python3.12/site-packages/ezdxf/addons/drawing/text.pyr   r      s   „ à€DØ€FØ�Er%   r   c                  ó    — e Zd ZdZdZdZdZdZy)Ú
VAlignmentr   r   r   é   é   N)r   r   r    ÚTOPÚLOWER_CASE_CENTERÚBASELINEÚBOTTOMÚUPPER_CASE_CENTERr$   r%   r&   r(   r(   &   s   „ à
€CØÐØ€HØ€FØÑr%   r(   r	   Ú	AlignmentÚAnyTextg«ªªªªªú?z$dict[TextEntityAlignment, Alignment]ÚDXF_TEXT_ALIGNMENT_TO_ALIGNMENTzdict[int, Alignment]Ú DXF_MTEXT_ALIGNMENT_TO_ALIGNMENTc                óØ   — | j                   j                  }| j                   j                  }|j                  |«      s||z
  j                  S t        | j                   j                  «      S ©N)ÚdxfÚinsertÚalign_pointÚiscloseÚangler
   Úrotation)ÚtextÚp1Úp2s      r&   Ú_calc_aligned_rotationr?   l   sL   € Ø�x‰x�‰€BØ�x‰x×#Ñ#€BØ�:‰:�bŒ>Ø�R‘�‰Ðä�t—x‘x×(Ñ(Ó)Ð)r%   c                óä  — t        | t        «      r…| j                  «       t        j                  t        j
                  fv rt        | «      }nt        | j                  j                  «      }t        j                  | j                  j                  |«      S t        | t        «      r8t        j                  t        ddd«      t        | j                  «       «      «      S t!        t#        | «      «      ‚)Nr   r   )Ú
isinstancer   Úget_align_enumr   ÚFITÚALIGNEDr?   r
   r6   r;   r   Úaxis_rotateÚ	extrusionr   r   Úget_rotationÚ	TypeErrorÚtype)r<   r;   s     r&   Ú_get_rotationrJ   u   s³   € Ü�$œÔØ×ÑÓ Ü×#Ñ#Ü×'Ñ'ð%
ñ 
ô .¨dÓ3‰Hä˜tŸx™x×0Ñ0Ó1ˆHÜ×#Ñ# D§H¡H×$6Ñ$6¸ÓAÐAÜ	�Dœ%Ô	 Ü×#Ñ#¤D¨¨A¨q£M´7¸4×;LÑ;LÓ;NÓ3OÓPÐPäœ˜T›
Ó#Ð#r%   c                óÒ   — t        | t        «      rt        | j                  «          S t        | t        «      rt
        | j                  j                     S t        t        | «      «      ‚r5   )
rA   r   r2   rB   r   r3   r6   Úattachment_pointrH   rI   ©r<   s    r&   Ú_get_alignmentrN   …   sN   € Ü�$œÔÜ.¨t×/BÑ/BÓ/DÑEÐEÜ	�Dœ%Ô	 Ü/°·±×0IÑ0IÑJÐJäœ˜T›
Ó#Ð#r%   c                óØ   — t        | t        t        t        f«      r| j                  j
                  S t        | t        «      r| j                  j                  S t        t        | «      «      ‚r5   )
rA   r   r   r   r6   Úheightr   Úchar_heightrH   rI   rM   s    r&   Ú_get_cap_heightrR   Ž   sJ   € Ü�$œœv¤vÐ.Ô/Ø�x‰x�‰ÐÜ	�Dœ%Ô	 Ø�x‰x×#Ñ#Ð#äœ˜T›
Ó#Ð#r%   c                óÂ   — t        | t        t        t        f«      ryt        | t        «      r |t
        z  | j                  j                  z  S t        t        | «      «      ‚©Nç        )
rA   r   r   r   r   ÚDEFAULT_LINE_SPACINGr6   Úline_spacing_factorrH   rI   )r<   Ú
cap_heights     r&   Ú_get_line_spacingrY   —   sJ   € Ü�$œ¤¬Ð.Ô/ØÜ	�Dœ%Ô	 ØÔ0Ñ0°4·8±8×3OÑ3OÑOÐOäœ˜T›
Ó#Ð#r%   c                óä   — t        | t        «      r t        | j                  j                  «      }n| j                  «       }t        | t
        t        t        f«      r	d|vsJ ‚|gS t        |||«      S )NÚ
)rA   r   r   r6   Útagr   r   r   )ÚentityÚ	box_widthÚget_text_widthr<   s       r&   Ú_split_into_linesr`       sc   € ô
 �&œ&Ô!ä˜&Ÿ*™*Ÿ.™.Ó)‰à× Ñ Ó"ˆÜ�&œ4¤¬Ð0Ô1Ø˜4ÑÐÐØˆvˆä˜˜y¨.Ó9Ð9r%   c                óª   — t        | t        «      ry t        | t        «      r| j                  j                  }|dk(  rd S |S t        t        | «      «      ‚rT   )rA   r   r   r6   ÚwidthrH   rI   )r<   rb   s     r&   Ú_get_text_widthrc   ±   sF   € Ü�$œÔØÜ	�Dœ%Ô	 Ø—‘—‘ˆØ ’|ˆtÐ.¨Ð.äœ˜T›
Ó#Ð#r%   c                óŠ  — t        «       }t        | t        «      �rS| j                  j                  }d}| j                  «       }t        |«      }|t        j                  t        j                  fv rX|dkD  rS| j                  j                  | j                  j                  z
  j                  }||z  }|}|t        j                  k(  r|}| j                  j                  t        j                  z  r|dz  }| j                  j                  t        j                   z  r|dz  }|t#        | j                  j$                  j&                  «      z  }|dk7  s|dk7  rt        j(                  ||«      }|S t        | t*        «      rDt#        | j                  j$                  j&                  «      }|dk7  rt        j(                  d|«      }|S )Nç      ð?g•Ö&è.>g      ð¿)r   rA   r   r6   rb   rB   Úabsr   rC   rD   r8   r7   Ú	magnitudeÚtext_generation_flagÚDXFConstantsÚMIRROR_XÚMIRROR_Yr   rF   ÚzÚscaler   )r<   Ú
line_widthÚextra_transformÚscale_xÚscale_yÚ	alignmentÚdefined_lengthÚstretch_factors           r&   Ú_get_extra_transformru   »   ss  € Ü“j€OÜ�$œÕà—(‘(—.‘.ˆØˆð ×'Ñ'Ó)ˆ	Ü˜“_ˆ
àÔ-×1Ñ1Ô3F×3NÑ3NÐOÑOØ˜TÒ!à"Ÿh™h×2Ñ2°T·X±X·_±_ÑD×OÑOˆNØ+¨jÑ8ˆNØ$ˆGØÔ/×7Ñ7Ò7Ø(�à�8‰8×(Ñ(¬<×+@Ñ+@Ò@Ø�t‰OˆGØ�8‰8×(Ñ(¬<×+@Ñ+@Ò@Ø�t‰OˆGð 	”4˜Ÿ™×*Ñ*×,Ñ,Ó-Ñ-ˆà�cŠ>˜W¨š^Ü&Ÿn™n¨W°gÓ>ˆOð Ðô 
�Dœ%Ô	 ô �t—x‘x×)Ñ)×+Ñ+Ó,ˆØ�cŠ>Ü&Ÿn™n¨S°'Ó:ˆOàÐr%   c                ó`  — |sdg g fS | \  }}t        t        |«      «      D �cg c]"  }|j                   |j                  ||z  z   z
  ‘Œ$ }}|€t	        |«      }|d   }	|t
        j                  k(  rd}
dgt        |«      z  }na|t
        j                  k(  r|dz  }
|D �cg c]
  }|
|dz  z
  ‘Œ }}n3|t
        j                  k(  r|}
|D �cg c]  }|
|z
  ‘Œ	 }}nt        |«      ‚|t        j                  k(  rd}n |t        j                  k(  r|d   |j                  z   }||	z   dz  }nr|t        j                  k(  r|d   |j                  z   }||	z   dz  }nD|t        j                  k(  r|	}n.|t        j                   k(  r|	|j"                  z
  }nt        |«      ‚|
|f||fS c c}w c c}w c c}w )N)r   r   éÿÿÿÿrU   r   r   )ÚrangeÚlenÚbaselinerX   Úmaxr   r!   r"   r#   Ú
ValueErrorr(   r+   r,   Úx_heightr/   r-   r.   Údescender_height)rr   Úline_widthsÚline_spacingr^   Úfont_measurementsÚhalignÚvalignÚiÚline_ysÚlast_baselineÚanchor_xÚline_xsÚwÚanchor_yÚfirst_line_lower_case_topÚfirst_line_upper_case_tops                   r&   Ú_apply_alignmentr�   å   sä  € ñ Ø�r˜2ˆ~Ðà�N€FˆFô ”s˜;Ó'Ô(óá(ˆAð 
×	#Ñ	#Ð#Ð'8×'CÑ'CÀaÈ,ÑFVÑ'VÓWØ(ð ð ð
 ÐÜ˜Ó$ˆ	à˜B‘K€Mà”—‘Ò ØˆØ�%œ#˜kÓ*Ñ*‰Ø	”:×$Ñ$Ò	$Ø˜q‘=ˆÙ-8Ó9©[¨�8˜a !™eÓ#¨[ˆÑ9Ø	”:×#Ñ#Ò	#ØˆÙ)4Ó5© A�8˜a“<¨ˆÑ5ä˜Ó Ð à”—‘ÒØ‰Ø	”:×/Ñ/Ò	/Ø$+¨A¡JÐ1B×1KÑ1KÑ$KÐ!Ø-°Ñ=ÀÑB‰Ø	”:×/Ñ/Ò	/Ø$+¨A¡JÐ1B×1MÑ1MÑ$MÐ!Ø-°Ñ=ÀÑB‰Ø	”:×&Ñ&Ò	&Ø ‰Ø	”:×$Ñ$Ò	$Ø Ð#4×#EÑ#EÑE‰ä˜Ó Ð à�hÐ ¨'Ð1Ð1ùòKùò :ùò 6s   £'F!ÂF&Ã
F+c                óœ  — t        | t        «      r§| j                  j                  }| j                  j                  }| j                  «       }|t        j                  k(  rn8|t        j                  t        j                  fv r|j                  |d¬«      }n|}| j                  «       j                  |«      S | j                  j                  S )Ng      à?)Úfactor)rA   r   r6   r7   r8   rB   r   r!   rC   rD   ÚlerpÚocsÚto_wcs)r<   r7   r8   rr   s       r&   Ú_get_wcs_insertr“     s§   € Ü�$œÔØ—x‘x—‘ˆØ ŸH™H×0Ñ0ˆØ)-×)<Ñ)<Ó)>ˆ	ØÔ+×0Ñ0Ò0àØÜ×#Ñ#Ü×'Ñ'ð
ñ 
ð
 —[‘[ °S�[Ó9‰Fð !ˆFØ�x‰x‹z× Ñ  Ó(Ð(à�x‰x�‰Ðr%   c             #  ó†  ‡‡‡K  — t        | «      }t        | «      }t        | «      Št        | |ˆˆˆfd„«      }t	        | ‰«      }|D �cg c]  }‰j                  |‰‰«      ‘Œ }}‰j                  ‰‰«      }	t        |||||	«      \  }
}}t        | «      }|r|d   }nd}t        | |«      }t        | «      }t        j                  |
d    |
d    d«      |z  |z  t        j                  |j                  Ž z  }t        t        |||«      «      D ]*  \  }\  }}}t        j                  ||d«      |z  }||‰f–— Œ, yc c}w ­w)a%  Splits a complex text entity into simple chunks of text which can all be
    rendered the same way:
    render the string (which will not contain any newlines) with the given
    cap_height with (left, baseline) at (0, 0) then transform it with the given
    matrix to move it into place.
    c                ó*   •— ‰j                  | ‰‰«      S r5   )Úget_text_line_width)ÚsrX   Ú	font_faceÚrender_engines    €€€r&   Ú<lambda>z(simplified_text_chunks.<locals>.<lambda>B  s   ø€ �-×3Ñ3°A°yÀ*ÔMr%   r   re   r   N)rN   rc   rR   r`   rY   r–   Úget_font_measurementsr�   rJ   ru   r“   r   Ú	translateÚxyzÚ	enumerateÚzip)r<   r™   r˜   rr   r^   Úlinesr€   Úliner   r�   Úanchorrˆ   r…   r;   Úfirst_line_widthro   r7   Úwhole_text_transformr„   Úline_xÚline_yÚ	transformrX   s    ``                   @r&   Úsimplified_text_chunksr¨   /  s  úè ø€ ô ˜tÓ$€IÜ Ó%€Iä  Ó&€JÜØØÝMó€Eô
 % T¨:Ó6€LáSXóÙSXÈ4ˆ×)Ñ)¨$°	¸:ÕFÐSXð ð ð &×;Ñ;¸IÀzÓRÐÜ/Ø�; ¨iÐ9Jó Ñ€FˆG�Wô ˜TÓ"€Hñ Ø& q™>ÑàÐä*¨4Ð1AÓB€OÜ˜TÓ"€Fô 	×Ñ˜F 1™I˜:¨¨q©	 z°1Ó5Ø
ñ	à
ñ	ô ×
Ñ
˜fŸj™jÐ
)ñ	*ð ô &/¬s°5¸'À7Ó/KÖ%LÑ!ˆÑ!ˆD�&˜&Ü×&Ñ& v¨v°qÓ9Ð<PÑPˆ	Ø�I˜zÐ)Ó)ñ &Mùò1ùs   …AEÁ	D<Á#CE)r<   r   ÚreturnÚfloat)r<   r1   r©   r   )r<   r1   r©   r0   )r<   r1   r©   rª   )r<   r1   rX   rª   r©   rª   )r]   r1   r^   úOptional[float]r_   zCallable[[str], float]r©   z	list[str])r<   r1   r©   r«   )r<   r1   rn   rª   r©   r   )rr   r0   r   zlist[float]r€   rª   r^   r«   r�   r   r©   z4tuple[tuple[float, float], list[float], list[float]])r<   r1   r©   r   )r<   r1   r™   r   r˜   zfonts.FontFacer©   z%Iterable[tuple[str, Matrix44, float]])[Ú
__future__r   Útypingr   r   r   r   r   Útyping_extensionsr	   ÚenumÚmathr
   Úezdxf.lldxf.constÚlldxfÚconstri   Úezdxf.enumsr   r   r   Úezdxf.entitiesr   r   r   r   Ú
ezdxf.mathr   r   r   Úezdxf.fontsr   Úezdxf.fonts.font_measurementsr   Úezdxf.tools.textr   r   Útext_rendererr   ÚuniqueÚEnumr   r(   r0   Ú__annotations__r1   rV   r!   r-   r"   r#   rD   ÚMIDDLEr,   rC   ÚBOTTOM_LEFTr.   ÚBOTTOM_CENTERÚBOTTOM_RIGHTÚMIDDLE_LEFTr/   ÚMIDDLE_CENTERÚMIDDLE_RIGHTÚTOP_LEFTr+   Ú
TOP_CENTERÚ	TOP_RIGHTr2   ÚkeysÚMTEXT_TOP_LEFTÚMTEXT_TOP_CENTERÚMTEXT_TOP_RIGHTÚMTEXT_MIDDLE_LEFTÚMTEXT_MIDDLE_CENTERÚMTEXT_MIDDLE_RIGHTÚMTEXT_BOTTOM_LEFTÚMTEXT_BOTTOM_CENTERÚMTEXT_BOTTOM_RIGHTr3   ry   r?   rJ   rN   rR   rY   r`   rc   ru   r�   r“   r¨   r$   r%   r&   Ú<module>rÒ      s”  ðö #ß =Õ =Ý 'Û Ý ç (Ð (÷ñ ÷
 7Ó 6ß +Ñ +Ý Ý :ß 2Ý 'ðð ‡�ô�—‘ó ó ðð ‡�ô�—‘ó ó ðð ˜Z¨Ð3Ñ4€	ˆ9Ó 4Ø˜4 ¨°Ð6Ñ7€ˆÓ 7ð Ð ð ×Ñ˜zŸ™°
×0CÑ0CÐDØ×Ñ ×!2Ñ!2°J×4GÑ4GÐ HØ×Ñ 
× 0Ñ 0°*×2EÑ2EÐFØ×Ñ *×"3Ñ"3°Z×5HÑ5HÐ!IØ×ÑØ×ÑØ×$Ñ$ð!ð ×Ñ˜j×/Ñ/°×1DÑ1DÐEØ×#Ñ# j§o¡o°z×7HÑ7HÐ%IØ×%Ñ%¨
×(9Ñ(9¸:×;LÑ;LÐ'MØ×$Ñ$ z×'7Ñ'7¸×9JÑ9JÐ&KØ×#Ñ#Ø�‰Ø×$Ñ$ð&ð ×%Ñ%Ø×ÑØ×$Ñ$ð(ð ×$Ñ$Ø×ÑØ×$Ñ$ð'ð × Ñ  :§?¡?°J·N±NÐ"CØ×"Ñ" Z×%6Ñ%6¸
¿¹Ð$GØ×!Ñ! J×$4Ñ$4°j·n±nÐ#Eð7IÐ Ð!Eó ð: '×+Ñ+Ó-Ð1RÐ1M×1RÑ1RÓ1TÒTÐ TÐTð ×Ñ *§/¡/°:·>±>Ð!BØ×!Ñ! J×$5Ñ$5°z·~±~Ð#FØ× Ñ  :×#3Ñ#3°Z·^±^Ð"DØ×"Ñ"Ø�‰Ø×$Ñ$ð%ð ×$Ñ$Ø×ÑØ×$Ñ$ð'ð ×#Ñ#Ø×ÑØ×$Ñ$ð&ð ×"Ñ" Z§_¡_°j×6GÑ6GÐ$HØ×$Ñ$ z×'8Ñ'8¸*×:KÑ:KÐ&LØ×#Ñ# j×&6Ñ&6¸
×8IÑ8IÐ%Jð%:Ð  Ð"6ó ñ( Ð+Ó,±Ð4HÓ0IÒIÐ IÐIó*ó$ó $ó$ó$ð:Øð:àð:ð +ð:ð ó	:ó"$ó'ðT02Øð02àð02ð ð02ð ð	02ð
 (ð02ð :ó02ófð.0*Ø
ð0*àð0*ð ð	0*ð
 +ô0*r%   