
    h                       S SK Jr  S SKJrJrJrJrJrJrJ	r	  S SK
Jr  S SKrS SKrS SKrS SKJrJr  S SKJrJrJrJrJrJrJr  S SKJrJrJr  S SKJrJ r   S S	K!J"r"J#r#J$r$  S S
K%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-  S SK.J/r/  S SK0J1r1J2r2  S SK3J4r4J5r5J6r6J7r7J8r8  SSK9J:r:  SSK;J<r<J=r=  SSK>J?r?J@r@  SSKAJBrB  SSKCJDrD  \(       a&  S SKEJFrF  S SKGJHrH  S SKIJJrJJKrK  S SKLJMrM  S SKNJOrO  S SKPJQrQ  / SQrR\R                  " S5      rTSrU\" S0 S\" \\R                  SS S!9_S"\" S#\R                  \*S$9_S%\" S&S'\R                  \S(9_S)\" S*S+S,9_S-\" S.S/S09_S1\" S2S\R                  " SS#5      \S(9_S3\" S4SS+\R                  " 1 S5k5      \S69_S7\" S8S9S+\R                  S:9_S;\" S<\R                  \+S+\R                  \S=9_S>\" S?\R                  \,S+\R                  \S=9_S@\" SAS+S,9_SB\" SCS+S,9_SD\" SES S+SF9_SG\" SHSS+\R                  " SSI15      \S69_SJ\" SKSS+\R                  " SLSM5      \R                  " SLSM5      S69_SN\" SOS/S09_SP\" SQS/\R                  " \U5      \R                  " \U5      SR9_\" SSS/\R                  ST9\" SUS/S09\" SVS/S09\" SWS/S09SX.E5      rb\" \b5      rc " SY SZ\R                  5      re " S[ S\5      rf      SfS] jrgSgS^ jrhShS_ jriSiS` jrjSjSa jrkSkSb jrl\:R                   " Sc Sd\?5      5       rnSlSe jrog)m    )annotations)TYPE_CHECKINGUnionIterableIteratorOptionalCallablecast)SelfN)const	validator)DXFAttrDXFAttributesDefSubclassXTypeRETURN_DEFAULTgroup_code_mappingVIRTUAL_TAG)SUBCLASS_MARKERDXF2000DXF2018)DXFTagdxftag)Tags(find_begin_and_end_of_encoded_xdata_tagsNotFoundException)Vec3Matrix44OCSUCSNULLVECZ_AXISX_AXISUVec)transform_extrusion)rgb2intRGB)split_mtext_stringescape_dxf_line_endingsfast_plain_mtextplain_mtextscale_mtext_inline_commands   )factory)
base_classSubclassProcessor)
DXFGraphicacdb_entity)XData)default_copy)Auditor)Drawing)DXFNamespace	DXFEntity)AbstractTagWriter)EntityDB)xref)MTextMTextColumns
ColumnType
acdb_mtextacdb_mtext_group_codesexport_mtext_contentezdxf   	AcDbMTexttext	_get_text	_set_text)xtypegettersetterinsert
   )rH   defaultchar_height(   g      @)rM   r   fixerwidth)   T)optionaldefined_height.   AC1021)
dxfversionattachment_pointG   flow_directionH   >   r-         )rM   rS   r   rP   style   Standard)rM   rS   r   	extrusion   )rH   rM   rS   r   rP   text_direction   
rect_width*   rect_height+   rotation2   )rM   rS   line_spacing_styleI      line_spacing_factor,   g      ?g      @box_fill_scale-   bg_fillZ   )rW   r   rP   ?   )rW   r   i  i  i  )bg_fill_colorbg_fill_true_colorbg_fill_color_namebg_fill_transparencyc                       \ rS rSrSrSrSrSrg)r>      r   r-   rm    N)__name__
__module____qualname____firstlineno__NONESTATICDYNAMIC__static_attributes__r{       F/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/mtext.pyr>   r>      s    DFGr   r>   c                     \ rS rSrSrSS jrSS jrSS jr\          SS j5       r	\          SS j5       r
\        SS j5       rS	 rS
 r\SS j5       r\SS j5       rSS jrSSS jjrSS jrSS jrSS jrSS jrSrg)r=      a  The column count is not stored explicit in the columns definition for
DXF versions R2018+.

If column_type is DYNAMIC and auto_height is True the column
count is defined by the content. The exact calculation of the column count
requires an accurate rendering of the MTEXT content like AutoCAD does!

If the column count is not defined, ezdxf tries to calculate the column
count from total_width, width and gutter_width, if these attributes are set
properly.

c                    [         R                  U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        S U l        / U l        / U l        g )Nr-   F        )r>   r   column_typecountauto_heightreversed_column_flowrT   rQ   gutter_widthtotal_widthtotal_heightlinked_handleslinked_columnsheightsselfs    r   __init__MTextColumns.__init__   sg    '1'8'8
 
!&*/!%(
#&"%#&37+-$&r   c                    U R                  5       nU R                   Vs/ s H  o"R                  5       PM     snUl        U$ s  snf N)shallow_copyr   copy)r   columnsmtexts      r   	deep_copyMTextColumns.deep_copy  s>    ##%<@<O<O!P<O5**,<O!P "Qs   Ac                   [        5       nU R                  Ul        U R                  Ul        U R                  Ul        U R                  Ul        U R
                  Ul        U R                  Ul        U R                  Ul        U R                  Ul        U R                  Ul	        [        U R                  5      Ul        [        U R                  5      Ul        U$ r   )r=   r   r   r   r   rT   rQ   r   r   r   listr   r   )r   r   s     r   r   MTextColumns.shallow_copy  s    .

".."..'+'@'@$!%!4!4

#00"..#00!%d&9&9!:t||,r   c                    U " 5       n[         R                  Ul        [        U5      Ul        [        U5      Ul        [        U5      Ul        [        U5      Ul        UR                  5         UR                  5         U$ r   )r>   r   r   intr   floatrQ   r   rT   update_total_widthupdate_total_heightclsr   rQ   r   heightr   s         r   new_static_columnsMTextColumns.new_static_columns  se     %(//E
e$\2!&v""$##%r   c                   U " 5       n[         R                  Ul        SUl        [	        U5      Ul        [        U5      Ul        [        U5      Ul        [        U5      Ul	        UR                  5         UR                  5         U$ )NT)r>   r   r   r   r   r   r   rQ   r   rT   r   r   r   s         r   new_dynamic_auto_height_columns,MTextColumns.new_dynamic_auto_height_columns*  sm     %(00"E
e$\2!&v""$##%r   c                .   U " 5       n[         R                  Ul        SUl        [	        U5      Ul        [	        U5      Ul        SUl        [        U5      Ul	        [        UR                  5      Ul        UR                  5         UR                  5         U$ )NFr   )r>   r   r   r   r   rQ   r   rT   r   r   lenr   r   r   )r   rQ   r   r   r   s        r   !new_dynamic_manual_height_columns.MTextColumns.new_dynamic_manual_height_columns9  sy     %(00#e$\2!$w-GOO,""$##%r   c                    U R                   nUS:  a'  XR                  -  US-
  U R                  -  -   U l        g SU l        g )Nr   r-   r   )r   rQ   r   r   )r   r   s     r   r   MTextColumns.update_total_widthI  s=    

19$zz1UQY$BSBS4SSD"Dr   c                ~    U R                   (       a  [        U R                  5      U l        g U R                  U l        g r   )has_dynamic_manual_heightmaxr   r   rT   r   s    r   r    MTextColumns.update_total_heightP  s*    )) #DLL 1D $ 3 3Dr   c                b    U R                   [        R                  :H  =(       a    U R                  $ r   r   r>   r   r   r   s    r   has_dynamic_auto_height$MTextColumns.has_dynamic_auto_heightV  s$    :#5#55J$:J:JJr   c                l    U R                   [        R                  :H  =(       a    U R                  (       + $ r   r   r   s    r   r   &MTextColumns.has_dynamic_manual_heightZ  s'    :#5#55Nd>N>N:NNr   c                \   UR                   [        :  d  U R                  (       d  g UR                  nUc   S5       e/ nU R                   HQ  n[	        SUR                  U5      5      nU(       a  UR                  U5        M8  [        R                  SU S35        MS     S U l        X0l	        g )Nzentity database not initializedr<   zLinked MTEXT column #z does not exist.)
rW   r   r   entitydbr
   getappendloggerdebugr   )r   docdbr   handler   s         r   link_columnsMTextColumns.link_columns^  s    >>W$D,?,?\\~@@@~))F"&&.1E%%e,4VH<LMN * #,r   c                p   U =R                   U-  sl         U =R                  U-  sl        U =R                  U-  sl        U =R                  U-  sl        U =R                  U-  sl        U R
                   Vs/ s H  oDU-  PM	     snU l        U R                   H  nUR                  U5        M     g s  snf r   )rQ   r   r   r   rT   r   r   	transform)r   mhscalevscalehr   s         r   r   MTextColumns.transformn  s    

f
V#F"V#v%,0LL9LqF
L9((EOOA ) :s   8B3c                   [        [        SS5      [        SS5      [        S[        U R                  5      5      [        SS5      [        S[        U R                  5      5      [        SS5      [        SU R
                  5      [        SS5      [        S[        U R                  5      5      [        SS5      [        S	U R                  5      [        SS
5      [        S	U R                  5      /5      nU R                  (       a\  UR                  [        SS5      [        S[        U R                  5      5      /5        UR                  S U R                   5       5        UR                  [        SS5      5        U$ )N  ACAD_MTEXT_COLUMN_INFO_BEGIN.  K   O   L   N   0     1   rj   c              3  :   #    U  H  n[        S U5      v   M     g7f)r   Nr   ).0r   s     r   	<genexpr><MTextColumns.acad_mtext_column_info_xdata.<locals>.<genexpr>  s     H<tV,,<   ACAD_MTEXT_COLUMN_INFO_END)r   r   r   r   r   r   r   rQ   r   r   extendr   r   r   r   tagss     r   acad_mtext_column_info_xdata)MTextColumns.acad_mtext_column_info_xdatax  s%   t;<tR tS!1!123tR tS!1!123tR tTZZ(tR tS!:!:;<tR tTZZ(tR tT../
" ))KKb)6$DLL8I+JKLKKH4<<HHF4!=>?r   c                    [        [        SS5      [        SS5      [        SU R                  5      /5      nUR                  S U R	                  5        5       5        UR                  [        SS5      5        U$ )Nr   ACAD_MTEXT_COLUMNS_BEGINr   /   c              3  :   #    U  H  n[        S U5      v   M     g7f)  Nr   )r   r   s     r   r   8MTextColumns.acad_mtext_columns_xdata.<locals>.<genexpr>  s      
/CVF4  /Cr   ACAD_MTEXT_COLUMNS_END)r   r   r   r   mtext_handlesr   r   s     r   acad_mtext_columns_xdata%MTextColumns.acad_mtext_columns_xdata  ss    t78tR tTZZ(
 	 
/3/A/A/C
 	
 	F4!9:;r   c                8   U R                   (       a  U R                   $ / nU R                   Hj  nUR                  (       aB  UR                  R                  nUc  [
        R                  " S5      eUR                  U5        MV  [
        R                  " S5      e   U$ )z+Returns a list of all linked MTEXT handles."Linked MTEXT column has no handle.zLinked MTEXT column deleted!)r   r   is_alivedxfr   r   DXFStructureErrorr   )r   handlescolumnr   s       r   r   MTextColumns.mtext_handles  s~    &&&))F**>112VWWv&--.LMM * r   c           	         [        [        SS5      [        SS5      [        SU R                  5      [        SS5      /5      $ )Nr   ACAD_MTEXT_DEFINED_HEIGHT_BEGINr   rU   r   ACAD_MTEXT_DEFINED_HEIGHT_END)r   r   rT   r   s    r   acad_mtext_defined_height_xdata,MTextColumns.acad_mtext_defined_height_xdata  sD    t>?tR tT001t<=	
 	
r   )r   r   r   rT   r   r   r   r   r   r   r   rQ   NreturnNone)r  r=   )
r   r   rQ   r   r   r   r   r   r  r=   )rQ   r   r   r   r   zIterable[float]r  r=   r  bool)r   r6   )r-   r-   )r   r   r   r   r   r   )r  r   )r  	list[str])r|   r}   r~   r   __doc__r   r   r   classmethodr   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r{   r   r   r=   r=      s   '*
  %5:DI	   %5:DI	  ).9H	 #4 K K O O- 0
r   r=   c                   [        5       nU R                  S5      nU R                  S5      nU R                  S5      nU GH%  u  pgUS:X  a&  Uc#  [        U5      U l        U R	                  S5        M2  US:X  a  Uc  [        U5      U l        MM  US:X  a  Uc  Xpl        M^  US:X  a  Xrl        Xpl        Mr  US	:X  a  Xrl        M  US
:X  a  Xrl	        M  US:X  a  Xrl        M  US:X  a  Xrl
        M  US:X  a  [        U5      Ul        M  US:X  a  Xrl        M  US:X  a  [        U5      Ul        M  US:X  a  [        U5      Ul        GM  US:X  d  GM
  UR"                  R%                  U5        GM(     UR                  S:X  a  UR"                  (       a  ['        UR"                  5      Ul        U$ UR                  S:  aS  UR                  n[)        UR                  U-   5      n	U	S:  a)  [+        [-        UR                  U-   U	-  5      5      Ul        U$ )NrK   rc   rQ   rL   ri   rd   rO   rR   rf   rh   ro   rq   rY   r[   rl   J   rU   r   ư>)r=   r   r   rc   discardrK   rQ   rT   r   r   r   r>   r   r   r  r   r   r   r   r   absr   round)
r   embedded_objr   rK   rc   reference_column_widthcodevaluegwgs
             r   !load_columns_from_embedded_objectr    s    nGWWXFWW-.N WWW-#2:.0!%eCKK
#RZFNeCJRZ2:IRZ%*"!&RZ"'RZ#( RZ!MRZ#( RZ",U"3GRZ "MRZ"&u+GRZ+/;G(RZOO""5)K $P }}??0GM N   1$$$AW]]Q&'BDy #E7+>+>+Bb*H$I JNr   c                ,    [        SU 5      u  p[        5       nSnS nXS-   U  H  u  pgU(       a?  US:X  a"  UR                  R	                  U5        US-  nM4  [
        R                  S5        SnUc  UnMR  US:X  a  [        U5      Ul        OpUS:X  a  [        U5      Ul
        OYUS:X  a  [        U5      Ul        OBUS	:X  a  [        U5      Ul        O+US
:X  a  Xsl        OUS:X  a  Xsl        OUS:X  a  [        U5      nS nM     U$ ! [         a     g f = f)NACAD_MTEXT_COLUMN_INFOr   r-   r   z&missing column heights in MTEXT entityr   r   r   r   r   r   rj   )r   r   r=   r   r   r   errorr>   r   r  r   r   r   r   rQ   r   )r   startendr   height_count
group_coder  r  s           r   load_mtext_column_infor    s&   =$d


 nGLJAI,t|&&u-!EF J",U"3G2"&u+G2JGM2+/;G(2!M2#( 2u:L
; -< NG  s   D 
DDc                    / n [        SU 5      u  p#XU  H  u  pEUS:X  d  M  UR                  U5        M      U$ ! [         a    Us $ f = f)NACAD_MTEXT_COLUMNSr   )r   r   r   )r   r   r  r  r  r  s         r    load_mtext_linked_column_handlesr     s_    G= $


 #4<NN5! ' N  s   : A	A	c                z    Sn [        SU 5      u  p#XU  H  u  pEUS:X  d  M  UnM     U$ ! [         a    Us $ f = f)Nr   ACAD_MTEXT_DEFINED_HEIGHTr   )r   r   )r   r   r  r  r  r  s         r   load_mtext_defined_heightr#  ,  sZ     F='

 #4<F ' M  s   + ::c                   SU;   a  UR                  S5      nOg SU R                  S5       S3n [        U5      nUc  g  [        U5      Ul        UR                  5         UR                  (       a  [        UR                  5      Ul        U$  [        U5      Ul        UR                  Ul        U$ ! [        R                   a    [        R                  SU 35         g f = f! [        R                   a    [        R                  SU 35         Nf = f! [        R                   a    [        R                  SU 35         Nf = f)NACADzMTEXT(#r   )z"Invalid ACAD_MTEXT_COLUMN_INFO in zInvalid ACAD_MTEXT_COLUMNS in z%Invalid ACAD_MTEXT_DEFINED_HEIGHT in )r   r  r   r   r   r  r   r   r   r   r   r   r#  rT   )r   xdataacadnamer   s        r   load_columns_from_xdatar*  E  s:    yy SWWX&'q)D(.
 >!A$!G    #7??3 N	I%>t%DG"  '55N1 "" 9$@A "" >5dV<=> && 	ILL@GH	Is5   B1  C# D 1,C C #,DD,EEc                   / nSU ;   a  U R                  S5      nOU$  [        SU5      u  p4X#U  H  u  pVUS:X  d  M  UR                  U5        M      X#U2	 [	        U5      S:  a  U R                  S5        U$ ! [         a    Us $ f = f)Nr%  ACAD_MTEXT_TEXT_BORDERSr   rm   )r   r   r   r   r   r  )r'  r   r(  r  r  r  r  s          r    extract_mtext_text_frame_handlesr-  k  s     Gyy =%t

 #4<NN5! ' 	3Y
4y1}fN  s   A8 8BBc                  D  ^  \ rS rSrSrSr\" \\\	5      r
\rS,U 4S jjrS rS r\S-S j5       r\S.S j5       r\4S/S	 jjr S0   S1U 4S
 jjjrS2U 4S jjrS3S jrS4U 4S jjrS4U 4S jjrS5S jrS6S jrS6S jrS rS rS rS7S jr S8S jr!  S9       S:S jjr"  S;   S<S jjr#S=S jr$\$r%S>S jr&S r'S?S jr(S@S jr)SASBS jjr*SCSBS jjr+SDS  jr,SEU 4S! jjr-S,U 4S" jjr.SFS# jr/SGS$ jr0SCSHS% jjr1S,S& jr2S0SIU 4S' jjjr3SJS( jr4SKU 4S) jjr5SLU 4S* jjr6S+r7U =r8$ )Mr<   i  zDXF MTEXT entityMTEXTc                >   > [         TU ]  5         SU l        S U l        g )N )superr   rE   _columns)r   	__class__s    r   r   MText.__init__  s    	04r   c                    U R                   $ )a  Getter for virtual Mtext.dxf.text attribute.

The MText content is stored in multiple tags (1, 3, 3, ...) and cannot
be supported as a simple DXF tag. The virtual MText.dxf.text attribute
adds compatibility to other text based entities: TEXT, ATTRIB, ATTDEF

rE   r   s    r   rF   MText._get_text  s     yyr   c                $    [        U5      U l        g)z,Setter for virtual Mtext.dxf.text attribute.N)strrE   )r   r  s     r   rG   MText._set_text  s    J	r   c                \    U R                   (       a  U R                   R                  5       $ S$ )z+Returns a copy of the column configuration.N)r3  r   r   s    r   r   MText.columns  s"    
 04}}t}}))+F$Fr   c                    U R                   S L$ r   )r3  r   s    r   has_columnsMText.has_columns  s    }}D((r   c                    [        U[        5      (       d   eU R                  Ul        U R                  (       a   U R                  R                  5       Ul        g g r   )
isinstancer<   rE   r?  r3  r   )r   entitycopy_strategys      r   	copy_dataMText.copy_data  sB    &%((((ii"mm557FO r   c                  > [         TU ]  U5      nU(       a  UR                  S5      nU(       a  [        U R	                  U5      5      nUR                  U[        USS9  UR                  (       a!  UR                  S   n[        X$5      U l	        U$ U R                  (       a  [        X R                  5      U l	        U$ [        R                  " SUR                   S35      eU$ )Nrm   T)subclassrecoverr   z'missing 'AcDbMText' subclass in MTEXT(#r&  )r2  load_dxf_attribssubclass_by_indexr   load_mtext_contentfast_load_dxfattribsr@   embedded_objectsr  r3  r'  r*  r   r   r   )r   	processorr   r   objr4  s        r   rJ  MText.load_dxf_attribs  s     g&y1..q1DD33D9:../$ /  --#44Q7C$Ec$ODM 
 ZZ$;C$LDM
 
 --=cjj\K  
r   c                   >^ ^ UU 4S jnU 4S jn[         TT ]  T5        T R                  (       a  U" 5         T R                  (       a  T R                  R                  T5        U$ g )Nc                    > TR                   n U (       aG  [        TR                  5       H-  nU R                  U5      nU(       d  M  UR	                  5         M/     g g r   )r   r-  r'  r   destroy)r   r   
text_framer   r   s      r   destroy_text_frame_entity7MText.post_load_hook.<locals>.destroy_text_frame_entity  sG    ||H>tzzJF!)f!5J!z"**, K r   c                    > TR                  5       n U b/  TR                  R                   H  nU R                  U5        M     gTR                  R                   H  nSUR                  l        M     g)z1Unlinked MTEXT entities from layout entity space.N)
get_layoutr3  r   unlink_entityr   owner)layoutr   r   s     r    unlink_mtext_columns_from_layout>MText.post_load_hook.<locals>.unlink_mtext_columns_from_layout  sX    __&F!!]]99E((/ : "]]99E&*EIIO :r   )r2  post_load_hookr'  r?  r3  r   )r   r   rV  r]  r4  s   ``  r   r_  MText.post_load_hook  sO    	-	+ 	s#::%' MM&&s+33r   c                   U R                   nU(       a  UR                  [        R                  :  a  UR                  [        UR                  5      S-   :w  a!  [        R                  [        U 5       S35        [        S UR                   5       5      (       d"  [        R                  [        U 5       S35        gU R                  5         g)z|Pre requirement check and pre-processing for export.

Returns False if MTEXT should not be exported at all.

(internal API)
r-   z,: column count does not match linked columnsc              3  8   #    U  H  oR                   v   M     g 7fr   )r   )r   r   s     r   r   *MText.preprocess_export.<locals>.<genexpr>  s     L5K65Ks   z#: contains destroyed linked columnsFT)r3  rW   r   r   r   r   r   r   r   r:  all%sync_common_attribs_of_linked_columns)r   	tagwriterr   s      r   preprocess_exportMText.preprocess_export  s     --y++emm;}}G$:$: ;a ??D	{*VWXLW5K5KLLLD	{*MNO668r   c                   > [         TU ]  U5        U R                  (       a1  UR                  [        R
                  :  a  U R                  U5        g g g r   )r2  
export_dxfr?  rW   r   r   export_linked_entities)r   rf  r4  s     r   rj  MText.export_dxf  sA    9%	 4 4u}} D''	2 !Er   c                  > [         TU ]  U5        UR                  [        [        R
                  5        U R                  R                  U/ SQ5        [        U R                  U5        U R                  R                  U/ SQ5        U R                  nUb  UR                  [        R                  :X  a  gUR                  [        :  a  U R!                  U5        gU R#                  5         U R%                  5         g)z(Export entity specific data as DXF tags.)rK   rN   rQ   rT   rX   rZ   )r^   ra   rc   re   rg   ri   rk   rn   rp   rr   ru   rv   rw   rx   N)r2  export_entity
write_tag2r   r?   r)  r   export_dxf_attribsrA   rE   r3  r   r>   r   rW   r   export_embedded_objectset_column_xdataset_linked_columns_xdata)r   rf  r   r4  s      r   rn  MText.export_entity  s    i(_joo>##
	
 	TYY	2##	
& --?g11Z__D7*''	2!!#))+r   c              #  $  #    Sn/ nU HR  nUR                   S:X  a  UR                  nM!  UR                   S:X  a  UR                  UR                  5        MN  Uv   MT     UR                  U5        [        SR	                  U5      5      U l        g 7f)Nr1  r-   r\   )r  r  r   r)   joinrE   )r   r   tailpartstags        r   rL  MText.load_mtext_content/  so     Cxx1}yyQSYY'	  	T+BGGEN;	s   BBc                   U R                   nU R                  nUc   eUR                  SS5        UR                  SS5        UR                  [	        SUR
                  5      5        UR                  [	        SUR                  5      5        UR                  SUR                  5        UR                  SUR                  5        UR                  S	UR                  5        UR                  S
UR                  5        UR                  S[        UR                  5      5        UR                  (       a  SnOUR                  nUR                  SU5        UR                  SUR                  5        UR                  SUR                  5        UR                  S[        UR                   5      5        UR                  S[        UR"                  5      5        UR$                   H  nUR                  SU5        M     g )Ne   zEmbedded ObjectF   r-   rL   rd   rO   rR   rf   rh   rY   r   r[   ro   rq   rl   r
  rU   )r   r3  ro  	write_tagr   rc   rK   rQ   rT   r   r   r   r   r   r   r   r   r   r   )r   rf  r   colsr   r   s         r   rq  MText.export_embedded_object<  s   hh}}S"34R#F2s'9'9:;F2szz23R+R!4!45R!1!12R!2!23RT%5%5!67''EJJER'R,R!2!23RT%5%5!67RT%>%>!?@llF  V, #r   c                    U R                   R                   HA  nUR                  R                  c  [        R
                  " S5      eUR                  U5        MC     g )Nr   )r3  r   r   r   r   r   rj  )r   rf  r   s      r   rk  MText.export_linked_entitiesX  sF    ]]11Eyy'--.RSSY'	 2r   c                    U R                  1 SkS9nU R                  R                   H  nUR                  U5        M     g )N>   r   rK   re   rg   drop)
dxfattribsr3  r   update_dxf_attribs)r   common_attribsr   s      r   re  +MText.sync_common_attribs_of_linked_columns_  s<    B ) 
 ]]11E$$^4 2r   c                p   U R                   c  [        5       U l         U R                  nUR                  5       nUR	                  UR                  5       5        UR                  (       d  UR	                  UR                  5       5        U R                   nUR                  S5        UR                  SU5        g Nr%  )
r'  r3   r3  r   r   r   r   r   r  add)r   r  r(  r'  s       r   rr  MText.set_column_xdataf  s    ::DJ}}002D1134--KK<<>?

 	f		&$r   c                    U R                   nUR                   H  nUR                  S5        M     UR                  (       d6  UR	                  5       nUR                   H  nUR                  SU5        M     g g r  )r3  r   discard_xdatar   r   	set_xdata)r   r  r   r   s       r   rs  MText.set_linked_columns_xdatau  se    }}))F  ( *--779D--  . . .r   c                   U R                   R                  S5      (       aK  U R                   R                  n[        R                  " US   US   5      n[        R
                  " U5      nU$ U R                   R                  SS5      nU$ )z%Returns the text rotation in degrees.rc   r-   r   ri   )r   hasattrrc   mathatan2degreesr   )r   vectorradiansri   s       r   get_rotationMText.get_rotation~  so    88,--XX,,FjjF1I6G||G,H  xx||J2Hr   c                \    U R                   R                  S5        XR                   l        U $ )zoSets the attribute :attr:`rotation` to `angle` (in degrees) and deletes
:attr:`dxf.text_direction` if present.
rc   )r   r  ri   )r   angles     r   set_rotationMText.set_rotation  s&    
 	)*!r   c                    [        U5      U R                  l        Ub  U R                  U5        Ub  X0R                  l        U $ )zSets the attributes :attr:`dxf.insert`, :attr:`dxf.rotation` and
:attr:`dxf.attachment_point`, ``None`` for :attr:`dxf.rotation` or
:attr:`dxf.attachment_point` preserves the existing value.

)r   r   rK   r  rX   )r   rK   ri   rX   s       r   set_locationMText.set_location  s<     v,h''(8HH%r   c                   SUs=::  a  S::  a  O  OX R                   l        O[        S5      eU(       a  [        R                  OSnUc  U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                   R                  S	5        U(       a  S
U R                   l        U $ US:X  a5  [        R                  U-  U R                   l        SU R                   l        U $ [        R                  U-  U R                   l        [        U[        5      (       a  XR                   l        U $ [        U[        5      (       a#  SU R                   l        XR                   l        U $ [        U[        5      (       a+  SU R                   l        [        U5      U R                   l        U $ )aK  Sets the background color as :ref:`ACI` value, as name string or as
(r, g, b) tuple.

Use the special color name ``canvas``, to set the background color to the canvas
background color.  Remove the background filling by setting argument `color` to
``None``.

Args:
    color: color as :ref:`ACI`, string, (r, g, b) tuple or ``None``
    scale: determines how much border there is around the text, the
        value is based on the text height, and should be in the range
        of [1, 5], where 1 fits exact the MText entity.
    text_frame: draw a text frame in text color if ``True``

r-   r]   z.argument scale has to be in range from 1 to 5.r   rr   rp   ru   rv   rw      canvas)r   rp   
ValueErrorr   MTEXT_TEXT_FRAMEr  rr   MTEXT_BG_CANVAS_COLORru   MTEXT_BG_COLORrB  r   r:  rw   tupler&   rv   )r   colorscalerU  s       r   set_bg_colorMText.set_bg_color  ss   * ??&+HH#MNN/9U++q
=HHY'HH-.HH_-HH12HH12#%   h$::ZGDHH%&DHH"   %33j@DHH%%%).&  E3'')*&.3+  E5)))*&.5en+r   c                0    U =R                   U-  sl         U $ )z;Append `text` to existing content (:attr:`text` attribute).r7  )r   rE   s     r   __iadd__MText.__iadd__  s    		T	r   c                   U R                   nUR                  S5      (       a  UR                  $ UR                  S5      (       aB  [        UR                  5      R                  [        R                  " UR                  5      5      $ [        $ )zwReturns the horizontal text direction as :class:`~ezdxf.math.Vec3`
object, even if only the text rotation is defined.

rc   ri   )
r   r  rc   r   ra   to_wcsr   from_deg_angleri   r#   r   r   s     r   get_text_directionMText.get_text_direction  sh    
 hh;;'((%%%;;z"" s}}%,,T-@-@-NOOr   c                    U R                   nUR                  S5      (       a=  UR                  S5      (       d  U R                  5       Ul        UR	                  S5        gg)zDConvert text rotation into text direction and discard text rotation.ri   rc   N)r   r  r  rc   r  r  s     r   "convert_rotation_to_text_direction(MText.convert_rotation_to_text_direction  sL    hh;;z"";;/00%)%<%<%>"KK
# #r   c                t    U R                   n[        UR                  U R                  5       UR                  S9$ )zReturns the :class:`~ezdxf.math.UCS` of the :class:`MText` entity,
defined by the insert location (origin), the text direction or rotation
(x-axis) and the extrusion vector (z-axis).

)originuxuz)r   r    rK   r  ra   r  s     r   ucs	MText.ucs  s4     hh::&&(}}
 	
r   c                   U R                   n[        UR                  5      n[        X15      u  pEU R	                  5         [        UR
                  5      nUR                  U5      nUR                  U5      n[        UR                  5      n	UR                  U	5      n
UR                  U
5      nUR                  U5      nUR                  [        R                  " U5      -  nXl	        [        R                  " X5      (       d.  [!        U	5      S:  a  X-  n[#        U R$                  U5      U l        UR'                  S5      (       a;  UR                  UR(                  5      nUR                  U5      R                  Ul        UR+                  UR,                  5      Ul        Xrl        XBl        U R.                  (       ao  UR                  UR                  5       5      R                  nUR                  UR                  5       5      R                  nU R0                  R+                  UUU5        U R3                  U5        U $ )z@Transform the MTEXT entity by transformation matrix `m` inplace.g-q=rQ   )r   r   ra   r%   r  rc   transform_directioncrossr   rN   	normalizeangle_between	magnituder  siniscloser  r,   rE   r  rQ   r   rK   r?  r3  post_transform)r   r   r   old_extrusionnew_extrusion_old_text_directionnew_text_directionold_vertical_directionold_char_heightold_char_height_vecnew_char_height_vecobliquenew_char_heightfactor	width_vecr   r   s                     r   r   MText.transform  s   hhS]]+.}@//1!#"4"45223EF!.!4!45G!H04>>O334GH$223FG-77$((7:KK)_>>O$u,$6F3DIIvFDI;;w*44SYY?I--i8BBCI[[,
/%**+=+G+G+IJTTF**+A+K+K+MNXXFMM##Avv6Ar   c                `    U(       a  [        U R                  US9$ [        U R                  US9$ )aK  Returns the text content without inline formatting codes.

The "fast" mode is accurate if the DXF content was created by
reliable (and newer) CAD applications like AutoCAD or BricsCAD.
The "accurate" mode is for some rare cases where the content was
created by older CAD applications or unreliable DXF libraries and CAD
applications.

Args:
    split: split content text at line breaks if ``True`` and
        returns a list of strings without line endings
    fast: uses the "fast" mode to extract the plain MTEXT content if
        ``True`` or the "accurate" mode if set to ``False``

split)r*   rE   r+   )r   r  fasts      r   
plain_textMText.plain_text)  s)      #DIIU;;tyy66r   c                F   ^  U 4S jnU 4S jnU(       a  U" 5       $ U" 5       $ )zReturns the text content of all columns without inline formatting
codes.

Args:
    split: split content text at line breaks if ``True`` and
        returns a list of strings without line endings

c                    > [        TR                  SS9/n TR                  (       a;  TR                  R                   H!  nU R                  UR                  SS95        M#     SR                  U 5      $ )NFr  r1  )r*   rE   r?  r3  r   r   r  rv  contentcr   s     r   merged_content4MText.all_columns_plain_text.<locals>.merged_contentH  sY    '		?@G55ANN1<<e<#<= 6777##r   c                 P  > [        TR                  SS9n TR                  (       a  U (       a  U S   S:X  a  U R                  5         TR                  R
                   HE  nU R                  UR                  SS95        U (       d  M*  U S   S:X  d  M5  U R                  5         MG     U $ )NTr  r1  )r*   rE   r?  popr3  r   r   r  r  s     r   split_content3MText.all_columns_plain_text.<locals>.split_contentO  s~    &tyy=Gwr{b0KKM55ANN1<<d<#;<w72;"#4 6 Nr   r{   )r   r  r  r  s   `   r   all_columns_plain_textMText.all_columns_plain_text>  s#    	$		  ?"!##r   c                    U R                   /nU R                  (       a8  U R                  R                   H  nUR	                  UR                   5        M      SR                  U5      $ )zcReturns the text content of all columns as a single string
including the inline formatting codes.

r1  )rE   r?  r3  r   r   rv  )r   r  r   s      r   all_columns_raw_contentMText.all_columns_raw_content_  sK    
 99+--66v{{+ 7wwwr   c                   > U R                   (       d  gU R                  R                  b  [        TU ]  U5        O UR                  U 5        g)zValidity check.N)r   r   r[  r2  auditcheck_text_style)r   auditorr4  s     r   r  MText.auditj  s:    }}88>>%GM'"   &r   c                   > U R                   (       d  g U R                  (       a-  U R                  R                   H  nUR	                  5         M     U ?[
        TU ]  5         g r   )r   r?  r3  r   rT  r2  )r   r   r4  s     r   rT  MText.destroyw  sE    }}--66  7 Mr   c                   U R                   (       ay  U R                  (       ag  U R                  nU R                  R                   H@  nUR                   (       d  M  UR                  (       d  M)  X#l        UR                  U5        MB     ggg)zcAdd linked columns (MTEXT) entities to entity database `db`,
called from EntityDB. (internal API)

N)r   r3  r   r   
is_virtualr  )r   r   r   r   s       r   add_sub_entities_to_entitydb"MText.add_sub_entities_to_entitydb  sY    
 ==T]]((C--66???v'8'8'8!$JFF6N 7 +=r   c                    U R                   (       aK  U R                  (       a9  U R                  R                   H  nUR                   (       d  M  U" U5        M      ggg)z.Call `func` for linked columns. (internal API)N)r   r3  r   )r   funcrC  s      r   process_sub_entitiesMText.process_sub_entities  s:    ==T]]--66???L 7 +=r   c                F   UR                   [        R                  :w  d   eUR                  S:  d   S5       eUR                  S:  d   S5       eUR
                  S:  d   S5       eU R                  (       a  [        R                  " S5      eXl	        UR                  U R                  l        UR                  U R                  l        UR                  S:  a  UR                  Ul        UR                  S:  a  UR                  5         U(       a  U R                  5         g g )Nr   zone or more columns requiredzcolumn width has to be > 0zgutter width has to be >= 0zColumn setup already exist.r  )r   r>   r   r   rQ   r   r?  r   r   r3  r   rT   r   r   r   _create_linked_columns)r   r   linkeds      r   setup_columnsMText.setup_columns  s    ""joo555}}q @"@@ }}q >">> ##q(G*GG())*GHH ")"8"8$&#*#9#9G %&&('') r   c                D   U R                   nU R                  SS1S9nU R                  nU R                  nUc   eUR	                  S[        5       5      n[
        R                  " UR	                  SS5      5      n[        UR	                  SU5      5      nUR                  UR                  UR                  -   5      nUR                  n	[        UR                  S	-
  5       H;  n
XX-  n[        R                  X#S
9nX[R                   l        U	R!                  U5        M=     g)z:Create linked MTEXT columns for DXF versions before R2018.r   r[  r  NrK   ri   r   rc   r-   )r  r   )r   r  r   r3  r   r   r  r  rQ   r   r   ranger   r<   newrK   r   )r   r   attribsr   r  rK   default_directionrc   offsetr   r  r   s               r   r  MText._create_linked_columns  s     hh//'':/;hh}}46* //
A0FGcgg&68IJK))$**t7H7H*HI,,tzzA~&AFYY'Y;F &JJ!!&)	 'r   c                `  > U R                   (       d  g [        TU ]	  5         [        U5      =(       a#    U R                  R
                  UR                  ;   nU(       d  SU R                  l        U R                  (       a/  U R                  R                   H  nUR                  U5        M     g g )Nr`   )
r   r2  remove_dependenciesr  r   r^   stylesr?  r3  r   )r   otherstyle_existr   r4  s       r   r
  MText.remove_dependencies  su    }}#%5kDdhhnn&D'DHHN--66**51 7 r   c                    [        5       $ r   )r   r   s    r   ocs	MText.ocs  s     ur   c                .  > [         TU ]  U5        U R                  R                  S5      (       a%  UR	                  U R                  R
                  5        U R                  (       a/  U R                  R                   H  nUR                  U5        M     gg)z5Register required resources to the resource registry.r^   N)r2  register_resourcesr   r  add_text_styler^   r3  r   )r   registryr   r4  s      r   r  MText.register_resources  si    "8,88G$$##DHHNN3==55((2 6 r   c                  > [        U[        5      (       d   e[        TU ]  X5        UR                  R                  S5      (       a4  UR                  UR                  R                  5      UR                  l        U R                  (       aa  UR                  (       aO  [        U R                  R                  UR                  R                  5       H  u  p4UR                  XB5        M     ggg)z3Translate resources from self to the copied entity.r^   N)rB  r<   r2  map_resourcesr   r  get_text_styler^   r3  zipr   )r   clonemappingcol_self	col_cloner4  s        r   r  MText.map_resources  s    %''''e-99W%%%44UYY__EEIIO==U^^'*,,enn.K.K(# &&y:( ,=r   )r3  rE   r'  r   )r  Optional[MTextColumns]r  )rC  r   r  r  r   )rO  zOptional[SubclassProcessor]r  r7   )r   r6   r  zOptional[Callable])rf  r9   r  r  rf  r9   r  r  )r   r   r  zIterator[DXFTag])rf  r9   )r  r   )r  r   r  r<   )NN)rK   r$   ri   zOptional[float]rX   zOptional[int]r  r<   )g      ?F)r  zUnion[int, str, RGB, None]r  r   )rE   r:  r  r<   )r  r   )r  r    )r   r   r  r<   )FT)r  zUnion[list[str], str])F)r  r:  )r  r5   )r   r:   r  r  )r  zCallable[[DXFEntity], None])r   r=   r  r  r  r  )r  zOptional[Drawing]r  r  )r  r   )r  zxref.Registryr  r  )r  r   r  zxref.ResourceMapperr  r  )9r|   r}   r~   r   r  DXFTYPEr   r/   r2   r?   
DXFATTRIBSr   MIN_DXF_VERSION_FOR_EXPORTr   rF   rG   r  r   r?  r4   rE  rJ  r_  rg  rj  rn  rL  rq  rk  re  rr  rs  r  r  r  r  r  r   r  r  r  r   r  r  r  r  rT  r  r  r   r  r
  r  r  r  r   __classcell__)r4  s   @r   r<   r<     s   Gz;
CJ!(5 G G ) ) 5A 8 8<4	 ,<$3+,Z<-8(5 / %)*.	 " (	
 
* 	1)1 1f
 F $
%N7*$B	 
'	
#!*$*(2 2
3; ;r   r<   c                   [        U 5      n[        USS9n[        U5      S:X  a  UR                  S5        [        U5      S:  a2  UR	                  SUR                  S5      5        [        U5      S:  a  M2  UR	                  SUS   5        g )N   )sizer   r1  r-   r\   )r)   r(   r   r   ro  r  )rE   rf  txt
str_chunkss       r   rA   rA     sy    
!$
'C#Cc2J
:!"
j/A
Q
q 12 j/A
JqM*r   )r   r7   r  r   r  r=   )r   r   r  r   )r   r   r  r  )r   r   r  r   )r   r7   r'  r3   r  r   )r'  r3   r  r  r!  )p
__future__r   typingr   r   r   r   r   r	   r
   typing_extensionsr   enumr  loggingezdxf.lldxfr   r   ezdxf.lldxf.attributesr   r   r   r   r   r   r   ezdxf.lldxf.constr   r   r   ezdxf.lldxf.typesr   r   ezdxf.lldxf.tagsr   r   r   
ezdxf.mathr   r   r   r    r!   r"   r#   r$   ezdxf.math.transformtoolsr%   ezdxf.colorsr&   r'   ezdxf.tools.textr(   r)   r*   r+   r,   r1  r.   	dxfentityr/   r0   dxfgfxr1   r2   r'  r3   r   r4   ezdxf.auditr5   ezdxf.documentr6   ezdxf.entitiesr7   r8   ezdxf.lldxf.tagwriterr9   ezdxf.entitydbr:   rB   r;   __all__	getLoggerr   BG_FILL_MASKcallbackpoint3dis_greater_zerois_in_integer_range	is_one_ofis_valid_table_nameis_not_null_vectoris_in_float_rangefit_into_float_rangeis_valid_bitmaskfix_bitmaskis_valid_aci_colorr?   r@   IntEnumr>   r=   r  r  r   r#  r*  r-  register_entityr<   rA   r{   r   r   <module>rQ     s   #   #    (   @ ? ,  O N N 9 %   4 +  #&67' 
		7	#G 	..	
G 	'"EMM7CG 	w// 	
G$ 	d+%G( 	'":)G> 	G33Ar: 	
?GT 	')))4 
UGj 	33	
kGv 	W--22 
wGJ 	'--22 
KG` 	gb40aGd 	wrD1eGh 	GBD9iGp 	g))1a&1 
qGB 	w11$=00t< 
CGT 	'":UGf 	700>''5	
gGt !22
 &ch? &ch? ' AMGJ
V ,J7  P
 P
f8	8%)88v(V2#L: 	Z	;J Z	; Z	;z+r   