
    'j1                    "   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
j'         G d de
j(                              Z)e
j'         G d de
j(                              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*j0        fej1        e)j1        e*j0        fej2        e)j2        e*j0        fej3        e)j1        e*j0        fej4        e)j1        e*j5        fej6        e)j1        e*j0        fej7        e)j/        e*j8        fej9        e)j1        e*j8        fej:        e)j2        e*j8        fej;        e)j/        e*j<        fej=        e)j1        e*j<        fej>        e)j2        e*j<        fej?        e)j/        e*j@        fejA        e)j1        e*j@        fejB        e)j2        e*j@        fiZCde,d<   eCD                                 ejD                    k    sJ ejE        e)j/        e*j@        fejF        e)j1        e*j@        fejG        e)j2        e*j@        fejH        e)j/        e*j5        fejI        e)j1        e*j5        fejJ        e)j2        e*j5        fejK        e)j/        e*j8        fejL        e)j1        e*j8        fejM        e)j2        e*j8        fi	ZNde,d<    eOeN           eOe          k    sJ d?dZPd@d ZQdAd!ZRdBd"ZSdCd$ZTdDd+ZUdEd,ZVdFd.ZWdGd6ZXdHd8ZYdId>ZZdS )J    )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dS )
HAlignmentr   r      N)__name__
__module____qualname__LEFTCENTERRIGHT     S/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/drawing/text.pyr   r      s        DFEEEr%   r   c                  "    e Zd ZdZdZdZdZdZdS )
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_ALIGNMENTtextr   returnfloatc                    | j         j        }| j         j        }|                    |          s
||z
  j        S t          | j         j                  S N)dxfinsertalign_pointiscloseangler
   rotation)r4   p1p2s      r&   _calc_aligned_rotationrA   l   sF    xBx#B::b>> *Rtx()))r%   r   c                   t          | t                    rt|                                 t          j        t          j        fv rt          |           }nt          | j        j	                  }t          j        | j        j        |          S t          | t                    rCt          j        t          ddd          t          |                                                     S t!          t#          |                     )Nr   r   )
isinstancer   get_align_enumr   FITALIGNEDrA   r
   r9   r>   r   axis_rotate	extrusionr   r   get_rotation	TypeErrortype)r4   r>   s     r&   _get_rotationrL   u   s    $ $  #'%
 
 
 .d33HHtx011H#DH$6AAA	D%	 	  $#DAqMM74;L;L;N;N3O3OPPPT

###r%   c                    t          | t                    rt          |                                          S t          | t                    rt
          | j        j                 S t          t          |                     r8   )
rC   r   r2   rD   r   r3   r9   attachment_pointrJ   rK   r4   s    r&   _get_alignmentrP      sa    $ $.t/B/B/D/DEE	D%	 	  $/0IJJT

###r%   c                    t          | t          t          t          f          r| j        j        S t          | t                    r| j        j        S t          t          |                     r8   )
rC   r   r   r   r9   heightr   char_heightrJ   rK   rO   s    r&   _get_cap_heightrT      sV    $vv.// $x	D%	 	  $x##T

###r%   
cap_heightc                    t          | t          t          t          f          rdS t          | t                    r|t
          z  | j        j        z  S t          t          |                     N        )
rC   r   r   r   r   DEFAULT_LINE_SPACINGr9   line_spacing_factorrJ   rK   )r4   rU   s     r&   _get_line_spacingr[      s\    $.// $s	D%	 	  $00483OOOT

###r%   entity	box_widthOptional[float]get_text_widthCallable[[str], float]	list[str]c                    t          | t                    rt          | j        j                  }n|                                 }t          | t
          t          t          f          r	d|vsJ |gS t          |||          S )N
)rC   r   r   r9   tagr   r   r   )r\   r]   r_   r4   s       r&   _split_into_linesre      s}    
 &&!! #&*.))  ""&4011 :4vy.999r%   c                    t          | t                    rd S t          | t                    r| j        j        }|dk    rd n|S t          t          |                     rW   )rC   r   r   r9   widthrJ   rK   )r4   rg   s     r&   _get_text_widthrh      sZ    $ $t	D%	 	  $||tt.T

###r%   
line_widthc                   t                      }t          | t                    r| j        j        }d}|                                 }t          |          }|t          j        t          j	        fv r=|dk    r7| 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k    s|dk    rt          j        ||          }nNt          | t*                    r9t#          | j        j        j                  }|dk    rt          j        d|          }|S )N      ?g&.>g      )r   rC   r   r9   rg   rD   absr   rE   rF   r;   r:   	magnitudetext_generation_flagDXFConstantsMIRROR_XMIRROR_Yr   rH   zscaler   )r4   ri   extra_transformscale_xscale_y	alignmentdefined_lengthstretch_factors           r&   _get_extra_transformrz      si   jjO$ #;(. ''))	__
-13F3NOOOT!!"h2TX_DON+j8N$G/777(8(<+@@ 	tOG8(<+@@ 	tOG 	4*,---c>>W^^&nWg>>O	D%	 	  ; tx)+,,c>>&nS'::Or%   rw   line_widthslist[float]line_spacingfont_measurementsr   4tuple[tuple[float, float], list[float], list[float]]c                   |sdg g fS | \  }}fdt          t          |                    D             }|t          |          }|d         }|t          j        k    rddgt          |          z  }	nT|t          j        k    r|dz  fd|D             }	n0|t          j        k    r|fd|D             }	nt          |          |t          j	        k    rd}
n|t          j
        k    r|d         j        z   }||z   dz  }
nf|t          j        k    r|d         j        z   }||z   dz  }
n=|t          j        k    r|}
n*|t          j        k    r|j        z
  }
nt          |          |
f|	|fS )	N)r   r   c                <    g | ]}j          j        |z  z   z
  S r$   )baselinerU   ).0ir~   r}   s     r&   
<listcomp>z$_apply_alignment.<locals>.<listcomp>   sB        
	##'8'Ca,FV'VW  r%   rX   r   c                     g | ]
}|d z  z
  S )r   r$   r   wanchor_xs     r&   r   z$_apply_alignment.<locals>.<listcomp>   s"    9998a!e#999r%   c                    g | ]}|z
  S r$   r$   r   s     r&   r   z$_apply_alignment.<locals>.<listcomp>  s    555A8a<555r%   r   )rangelenmaxr   r!   r"   r#   
ValueErrorr(   r+   r,   x_heightr/   rU   r-   r.   descender_height)rw   r{   r}   r]   r~   halignvalignline_yslast_baselineline_xsanchor_yfirst_line_lower_case_topfirst_line_upper_case_topr   s     ` `        @r&   _apply_alignmentr      s     r2~NFF    s;''((  G
 $$	BKM  %#k***	:$	$	$q=9999[999	:#	#	#5555555   	:/	/	/$+AJ1B1K$K!-=B	:/	/	/$+AJ1B1M$M!-=B	:&	&	& 	:$	$	$ #4#EE   h'11r%   r   c                t   t          | t                    r| j        j        }| j        j        }|                                 }|t          j        k    rn4|t          j        t          j	        fv r|
                    |d          }n|}|                                                     |          S | j        j        S )Ng      ?)factor)rC   r   r9   r:   r;   rD   r   r!   rE   rF   lerpocsto_wcs)r4   r:   r;   rw   s       r&   _get_wcs_insertr     s    $ x H0)-)<)<)>)>	+000#'
 
 

 [[S[99FF !Fxxzz  (((xr%   render_enginer   	font_facefonts.FontFace%Iterable[tuple[str, Matrix44, float]]c             #    K   t          |           }t          |           }t          |           t          | |fd          }t	          |           }fd|D             }                              }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V  *dS )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                2                         |           S r8   get_text_line_width)srU   r   r   s    r&   <lambda>z(simplified_text_chunks.<locals>.<lambda>B  s    -33Ay*MM r%   c                >    g | ]}                     |          S r$   r   )r   linerU   r   r   s     r&   r   z*simplified_text_chunks.<locals>.<listcomp>E  s8       KO))$	:FF  r%   r   rk   r   N)rP   rh   rT   re   r[   get_font_measurementsr   rL   rz   r   r   	translatexyz	enumeratezip)r4   r   r   rw   r]   linesr}   r{   r~   anchorr   r   r>   first_line_widthrt   r:   whole_text_transformr   r   line_xline_y	transformrU   s    ``                   @r&   simplified_text_chunksr   /  s      t$$I%%I &&JMMMMMM E
 %T:66L     SX  K &;;IzRR/;i9J   FGW T""H  &q>*41ABBOT""F 	F1I:q	z155
	
	 
fj
)	*  &/s5'7/K/K%L%L * *!!D&&&vvq99<PP	Iz)))))* *r%   )r4   r   r5   r6   )r4   r1   r5   r   )r4   r1   r5   r0   )r4   r1   r5   r6   )r4   r1   rU   r6   r5   r6   )r\   r1   r]   r^   r_   r`   r5   ra   )r4   r1   r5   r^   )r4   r1   ri   r6   r5   r   )rw   r0   r{   r|   r}   r6   r]   r^   r~   r   r5   r   )r4   r1   r5   r   )r4   r1   r   r   r   r   r5   r   )[
__future__r   typingr   r   r   r   r   typing_extensionsr	   enummathr
   ezdxf.lldxf.constlldxfconstro   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   rY   r!   r-   r"   r#   rF   MIDDLEr,   rE   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   r   rA   rL   rP   rT   r[   re   rh   rz   r   r   r   r$   r%   r&   <module>r      sn   # " " " " " " = = = = = = = = = = = = = = ' ' ' ' ' '        ( ( ( ( ( ( ( ( (         
 7 6 6 6 6 6 6 6 6 6 6 6 + + + + + + + + + +       : : : : : : 2 2 2 2 2 2 2 2 ' ' ' ' ' '                 Z34	 4 4 4 4467 7 7 7 7   z
0CD!2J4G H
 0*2EF*"3Z5H!I$! j/1DE#joz7H%I%
(9:;L'M$z'79J&K#$& %$( $$'  :?JN"C"Z%6
$G!J$4jn#E7I     : '++--1R1M1R1T1TTTTT */:>!B!J$5z~#F :#3Z^"D"$% $$' #$& "Z_j6G$H$z'8*:K&L#j&6
8I%J%:      ( s+,,4H0I0IIIII* * * *$ $ $ $ $ $ $ $$ $ $ $$ $ $ $: : : :"$ $ $ $' ' ' 'T02 02 02 02f   .0* 0* 0* 0* 0* 0*r%   