
    h1                    2	   % S SK Jr  S SKJrJrJrJrJr  S SKJ	r	  S SK
r
S SKJr  S SKJs  Jr  S SKJrJrJr  S SKJrJrJrJr  S SKJrJrJr  S S	KJr  S S
K J!r!  S SK"J#r#J$r$  SSK%J&r&   \
RN                   " S S\
RP                  5      5       r)\
RN                   " S S\
RP                  5      5       r*\\)\*4   r+S\,S'   \\\\\4   r-S\,S'   Sr.\R^                  \)R^                  \*R`                  4\Rb                  \)Rb                  \*R`                  4\Rd                  \)Rd                  \*R`                  4\Rf                  \)Rb                  \*R`                  4\Rh                  \)Rb                  \*Rj                  4\Rl                  \)Rb                  \*R`                  4\Rn                  \)R^                  \*Rp                  4\Rr                  \)Rb                  \*Rp                  4\Rt                  \)Rd                  \*Rp                  4\Rv                  \)R^                  \*Rx                  4\Rz                  \)Rb                  \*Rx                  4\R|                  \)Rd                  \*Rx                  4\R~                  \)R^                  \*R                  4\R                  \)Rb                  \*R                  4\R                  \)Rd                  \*R                  40rCS\,S'   \CR                  5       \R                  " 5       :X  d   e\R                  \)R^                  \*R                  4\R                  \)Rb                  \*R                  4\R                  \)Rd                  \*R                  4\R                  \)R^                  \*Rj                  4\R                  \)Rb                  \*Rj                  4\R                  \)Rd                  \*Rj                  4\R                  \)R^                  \*Rp                  4\R                  \)Rb                  \*Rp                  4\R                  \)Rd                  \*Rp                  40	rNS\,S'   \O" \N5      \O" \5      :X  d   eS%S jrPS&S jrQS'S jrRS(S jrSS)S jrT        S*S jrUS+S  jrVS,S! jrW            S-S" jrXS.S# jrY        S/S$ jrZg)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                       \ rS rSrSrSrSrSrg)
HAlignment   r   r       N)__name__
__module____qualname____firstlineno__LEFTCENTERRIGHT__static_attributes__r       K/var/www/html/env/lib/python3.13/site-packages/ezdxf/addons/drawing/text.pyr   r      s    DFEr(   r   c                  (    \ rS rSrSrSrSrSrSrSr	g)	
VAlignment&   r   r   r         r   N)
r    r!   r"   r#   TOPLOWER_CASE_CENTERBASELINEBOTTOMUPPER_CASE_CENTERr'   r   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                    U R                   R                  nU R                   R                  nUR                  U5      (       d  X!-
  R                  $ [        U R                   R                  5      $ N)dxfinsertalign_pointiscloseangler
   rotation)textp1p2s      r)   _calc_aligned_rotationrC   l   sL    xxBxx##B::b>>txx(())r(   c                    [        U [        5      (       a  U R                  5       [        R                  [        R
                  4;   a  [        U 5      nO[        U R                  R                  5      n[        R                  " U R                  R                  U5      $ [        U [        5      (       a9  [        R                  " [        SSS5      [        U R                  5       5      5      $ [!        [#        U 5      5      e)Nr   r   )
isinstancer   get_align_enumr   FITALIGNEDrC   r
   r:   r?   r   axis_rotate	extrusionr   r   get_rotation	TypeErrortype)r@   r?   s     r)   _get_rotationrN   u   s    $ ##''%
 
 .d3Htxx001H##DHH$6$6AA	D%	 	 ##DAqM74;L;L;N3OPPT
##r(   c                    [        U [        5      (       a  [        U R                  5          $ [        U [        5      (       a  [
        U R                  R                     $ [        [        U 5      5      er9   )
rE   r   r6   rF   r   r7   r:   attachment_pointrL   rM   r@   s    r)   _get_alignmentrR      sT    $.t/B/B/DEE	D%	 	 /0I0IJJT
##r(   c                    [        U [        [        [        45      (       a  U R                  R
                  $ [        U [        5      (       a  U R                  R                  $ [        [        U 5      5      er9   )
rE   r   r   r   r:   heightr   char_heightrL   rM   rQ   s    r)   _get_cap_heightrV      sP    $vv.//xx	D%	 	 xx###T
##r(   c                    [        U [        [        [        45      (       a  g[        U [        5      (       a   U[
        -  U R                  R                  -  $ [        [        U 5      5      eN        )
rE   r   r   r   r   DEFAULT_LINE_SPACINGr:   line_spacing_factorrL   rM   )r@   
cap_heights     r)   _get_line_spacingr]      sP    $.//	D%	 	 004883O3OOOT
##r(   c                    [        U [        5      (       a   [        U R                  R                  5      nOU R                  5       n[        U [
        [        [        45      (       a  SU;  d   eU/$ [        X1U5      $ )N
)rE   r   r   r:   tagr   r   r   )entity	box_widthget_text_widthr@   s       r)   _split_into_linesrd      sg    
 &&!!&**..)  "&40114v.99r(   c                    [        U [        5      (       a  g [        U [        5      (       a   U R                  R                  nUS:X  a  S $ U$ [        [        U 5      5      erX   )rE   r   r   r:   widthrL   rM   )r@   rf   s     r)   _get_text_widthrg      sL    $	D%	 	 |t..T
##r(   c                   [        5       n[        U [        5      (       Gab  U R                  R                  nSnU R                  5       n[        U5      nU[        R                  [        R                  4;   aY  US:  aS  U R                  R                  U R                  R                  -
  R                  nXa-  nUnU[        R                  :X  a  UnU R                  R                  [        R                  -  (       a  US-  nU R                  R                  [        R                   -  (       a  US-  nU[#        U R                  R$                  R&                  5      -  nUS:w  d  US:w  a  [         R(                  " X45      nU$ [        U [*        5      (       aF  [#        U R                  R$                  R&                  5      nUS:w  a  [         R(                  " SU5      nU$ )N      ?g&.>g      )r   rE   r   r:   rf   rF   absr   rG   rH   r<   r;   	magnitudetext_generation_flagDXFConstantsMIRROR_XMIRROR_Yr   rJ   zscaler   )r@   
line_widthextra_transformscale_xscale_y	alignmentdefined_lengthstretch_factors           r)   _get_extra_transformry      su   jO$((.. '')	_
-113F3N3NOOT!"hh22TXX__DOON+8N$G/777(88((<+@+@@tOG88((<+@+@@tOG 	4**,,--c>W^&nnW>O  
D%	 	  txx))++,c>&nnS':Or(   c                |   U(       d  S/ / 4$ U u  pV[        [        U5      5       Vs/ s H"  nUR                  * UR                  Xr-  -   -
  PM$     nnUc  [	        U5      nUS   n	U[
        R                  :X  a  Sn
S/[        U5      -  nOgU[
        R                  :X  a  US-  n
U Vs/ s H
  oUS-  -
  PM     nnO6U[
        R                  :X  a  Un
U Vs/ s H  oU-
  PM	     nnO[        U5      eU[        R                  :X  a  SnOU[        R                  :X  a  US   UR                  -   nX-   S-  nOsU[        R                  :X  a  US   UR                  -   nX-   S-  nOEU[        R                  :X  a  U	nO.U[        R                   :X  a  XR"                  -
  nO[        U5      eX4X4$ s  snf s  snf s  snf )N)r   r   rY   r   r   )rangelenbaseliner\   maxr   r$   r%   r&   
ValueErrorr+   r/   r0   x_heightr3   r1   r2   descender_height)rv   line_widthsline_spacingrb   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    r2~NF s;'((A 
	#	##'8'C'CaFV'VW(  
 $	BKM %#k**	:$$	$q=-89[a!e#[9	:##	#)45Aa<5  	://	/$+AJ1B1K1K$K!-=B	://	/$+AJ1B1M1M$M!-=B	:&&	& 	:$$	$ #E#EE  11K : 6s   )F/(F4F9c                   [        U [        5      (       a  U R                  R                  nU R                  R                  nU R                  5       nU[        R                  :X  a  O7U[        R                  [        R                  4;   a  UR                  USS9nOUnU R                  5       R                  U5      $ U R                  R                  $ )Ng      ?)factor)rE   r   r:   r;   r<   rF   r   r$   rG   rH   lerpocsto_wcs)r@   r;   r<   rv   s       r)   _get_wcs_insertr     s    $xx HH00)-)<)<)>	+000##''
 

 [[S[9F !Fxxz  ((xxr(   c             #    ^^^#    [        U 5      n[        U 5      n[        U 5      m[        U UUUU4S j5      n[	        U T5      nU Vs/ s H  nTR                  UTT5      PM     nnTR                  TT5      n	[        X8XdU	5      u  pn[        U 5      nU(       a  US   nOSn[        X5      n[        U 5      n[        R                  " U
S   * U
S   * S5      U-  U-  [        R                  " UR                  6 -  n[        [        X[U5      5       H,  u  nu  nnn[        R                  " UUS5      U-  nUUT4v   M.     gs  snf 7f)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                *   > TR                  U TT5      $ r9   )get_text_line_width)sr\   	font_facerender_engines    r)   <lambda>(simplified_text_chunks.<locals>.<lambda>B  s    -33Ay*Mr(   r   ri   r   N)rR   rg   rV   rd   r]   r   get_font_measurementsr   rN   ry   r   r   	translatexyz	enumeratezip)r@   r   r   rv   rb   linesr   liner   r   anchorr   r   r?   first_line_widthrs   r;   whole_text_transformr   line_xline_y	transformr\   s    ``                   @r)   simplified_text_chunksr   /  ss     t$I%I &JME
 %T:6LSXSX4))$	:FSX   &;;IzR/9J FW T"H &q>*4BOT"F 	F1I:q	z15
	
	 

fjj
)	*  &/s57/K%L!!D&&&&vvq9<PP	Iz)) &M1s   AE

E'C#E
)r@   r   returnfloat)r@   r5   r   r   )r@   r5   r   r4   )r@   r5   r   r   )r@   r5   r\   r   r   r   )ra   r5   rb   Optional[float]rc   zCallable[[str], float]r   z	list[str])r@   r5   r   r   )r@   r5   rr   r   r   r   )rv   r4   r   zlist[float]r   r   rb   r   r   r   r   z4tuple[tuple[float, float], list[float], list[float]])r@   r5   r   r   )r@   r5   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constrm   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+   r4   __annotations__r5   rZ   r$   r1   r%   r&   rH   MIDDLEr0   rG   BOTTOM_LEFTr2   BOTTOM_CENTERBOTTOM_RIGHTMIDDLE_LEFTr3   MIDDLE_CENTERMIDDLE_RIGHTTOP_LEFTr/   
TOP_CENTER	TOP_RIGHTr6   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_RIGHTr7   r}   rC   rN   rR   rV   r]   rd   rg   ry   r   r   r   r   r(   r)   <module>r      s   # = = '   ( ( 
 7 6 + +  : 2 '       Z34	9 4467 7   z
0C0CD!2!2J4G4G H
 0 0*2E2EF*"3"3Z5H5H!I$$! j//1D1DE##jooz7H7H%I%%
(9(9:;L;L'M$$z'7'79J9J&K##$$& %%$$( $$$$'   :??JNN"C""Z%6%6
$G!!J$4$4jnn#E7I !E : '++-1M1R1R1TT TT *//:>>!B!!J$5$5z~~#F  :#3#3Z^^"D""$$% $$$$' ##$$& ""Z__j6G6G$H$$z'8'8*:K:K&L##j&6&6
8I8I%J%:  "6 ( +,4H0II II*$ $$$::: +: 	:"$'T020202 02 	02
 (02 :02f.0*
0*0* 	0*
 +0*r(   