
    Og1                    	   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     ^/var/www/html/public_html/myphp/venv/lib/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    xxBxx##B::b>Rtxx(())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3Htxx001H##DHH$6$6AA	D%	 ##DAqM74;L;L;N3O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%	 /0I0I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    $vv./xx	D%	 xx###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04883O3O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   jO$((.. '')	_
-113F3N3NOOT!"hh22TXX__DOON+j8N$G/777(88((<+@+@@tOG88((<+@+@@tOG 	4**,,--c>W^&nnWg>O  
D%	  txx))++,c>&nnS':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    r2~NFF s;'( 
	#	##'8'C'Ca,FV'VWG 
 $	BKM %#k**	:$$	$q=-898a!e#99	:##	#)45A8a<55  	://	/$+AJ1B1K1K$K!-=B	://	/$+AJ1B1M1M$M!-=B	:&&	& 	:$$	$ #4#E#EE  h'11K : 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    $xx HH00)-)<)<)>	+000##''
 

 [[S[9F !Fxxz  ((xx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3Ay*M r%   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:6LSXKO))$	:FK  &;;IzR/;i9J FGW T"H &q>*41ABOT"F 	F1I:q	z15
	
	 

fjj
)	*  &/s5'7/K%L *!!D&&&&vvq9<PP	Iz))*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
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 : '++-1R1M1R1R1T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%   