Ë
    £èho¼  ã                  ób  — d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlZd dlZd dlZd dlmZmZ d dlmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZm Z  d d	l!m"Z"m#Z#m$Z$ d d
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZB ddlCmDZD er&d dlEmFZF d dlGmHZH d dlImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ g d¢ZR ej¦                  d«      ZTdZU edi d eeej¬                  dd ¬!«      “d" ed#ej®                  e*¬$«      “d% ed&d'ej°                  e¬(«      “d) ed*d+¬,«      “d- ed.d/¬0«      “d1 ed2d ej²                  dd#«      e¬(«      “d3 ed4dd+ ej´                  h d5£«      e¬6«      “d7 ed8d9d+ej¶                  ¬:«      “d; ed<ej®                  e+d+ej¸                  e¬=«      “d> ed?ej®                  e,d+ej¸                  e¬=«      “d@ edAd+¬,«      “dB edCd+¬,«      “dD edEd d+¬F«      “dG edHdd+ ej´                  ddIh«      e¬6«      “dJ edKdd+ ejº                  dLdM«       ej¼                  dLdM«      ¬6«      “dN edOd/¬0«      “dP edQd/ ej¾                  eU«       ejÀ                  eU«      ¬R«      “ edSd/ejÂ                  ¬T«       edUd/¬0«       edVd/¬0«       edWd/¬0«      dXœ¥«      Zb eeb«      Zc G dY„ dZejÈ                  «      Ze G d[„ d\«      Zf	 	 	 	 	 	 dfd]„Zgdgd^„Zhdhd_„Zidid`„Zjdjda„Zkdkdb„Zle:jÚ                   G dc„ dde?«      «       Zndlde„Zoy)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_pointéG   Úflow_directionéH   >   r-   é   é   )rM   rS   r   rP   Ústyleé   ÚStandard)rM   rS   r   Ú	extrusionéÒ   )rH   rM   rS   r   rP   Útext_directioné   Ú
rect_widthé*   Úrect_heighté+   Úrotationé2   )rM   rS   Úline_spacing_styleéI   é   Úline_spacing_factoré,   g      Ð?g      @Úbox_fill_scaleé-   Úbg_filléZ   )rW   r   rP   é?   )rW   r   i¥  i¯  i¹  )Úbg_fill_colorÚbg_fill_true_colorÚbg_fill_color_nameÚbg_fill_transparencyc                  ó   — e Zd ZdZdZdZy)r>   r   r-   rm   N)Ú__name__Ú
__module__Ú__qualname__ÚNONEÚSTATICÚDYNAMIC© ó    ú4lib/python3.12/site-packages/ezdxf/entities/mtext.pyr>   r>   ß   s   „ Ø€DØ€FØ�Gr�   r>   c                  óø   — e Zd ZdZdd„Zdd„Zdd„Ze	 	 	 	 	 	 	 	 	 	 dd„«       Ze	 	 	 	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 	 	 dd„«       Z
d„ Zd	„ Zedd
„«       Zedd„«       Zdd„Zddd„Zdd„Zdd„Zdd„Zdd„Zy)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                óÈ   — t         j                  | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d | _        g | _        g | _        y )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__zMTextColumns.__init__ó   sg   € Ü'1×'8Ñ'8ˆÔð
 ˆŒ
Ø!&ˆÔØ*/ˆÔ!Ø%(ˆÔØˆŒ
Ø#&ˆÔØ"%ˆÔØ#&ˆÔà37ˆÔà+-ˆÔà$&ˆ�r�   c                óŠ   — | j                  «       }| j                  D �cg c]  }|j                  «       ‘Œ c}|_        |S c c}w ©N)Úshallow_copyrŽ   Úcopy)r‘   ÚcolumnsÚmtexts      r‚   Ú	deep_copyzMTextColumns.deep_copy  s@   € Ø×#Ñ#Ó%ˆØ<@×<OÒ<OÓ!PÑ<O°5 %§*¡*¥,Ð<OÑ!PˆÔØˆùò "Qs   ŸA c                ó´  — t        «       }| j                  |_        | j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        t        | j                  «      |_        t        | j                  «      |_        |S r”   )r=   r‡   r†   rˆ   r‰   rT   rQ   rŠ   r‹   rŒ   ÚlistrŽ   r�   )r‘   r—   s     r‚   r•   zMTextColumns.shallow_copy  s©   € Ü“.ˆØŸ
™
ˆŒØ"×.Ñ.ˆÔØ"×.Ñ.ˆÔØ'+×'@Ñ'@ˆÔ$Ø!%×!4Ñ!4ˆÔØŸ
™
ˆŒØ#×0Ñ0ˆÔØ"×.Ñ.ˆÔØ#×0Ñ0ˆÔÜ!% d×&9Ñ&9Ó!:ˆÔÜ˜tŸ|™|Ó,ˆŒØˆr�   c                óþ   —  | «       }t         j                  |_        t        |«      |_        t        |«      |_        t        |«      |_        t        |«      |_        |j                  «        |j                  «        |S r”   )r>   r~   r†   Úintr‡   ÚfloatrQ   rŠ   rT   Úupdate_total_widthÚupdate_total_height©Úclsr‡   rQ   rŠ   Úheightr—   s         r‚   Únew_static_columnszMTextColumns.new_static_columns  se   € ñ “%ˆÜ(×/Ñ/ˆÔÜ˜E›
ˆŒÜ˜e›ˆŒÜ$ \Ó2ˆÔÜ!& v£ˆÔØ×"Ñ"Ô$Ø×#Ñ#Ô%Øˆr�   c                ó  —  | «       }t         j                  |_        d|_        t	        |«      |_        t        |«      |_        t        |«      |_        t        |«      |_	        |j                  «        |j                  «        |S )NT)r>   r   r†   rˆ   r�   r‡   rž   rQ   rŠ   rT   rŸ   r    r¡   s         r‚   Únew_dynamic_auto_height_columnsz,MTextColumns.new_dynamic_auto_height_columns*  sm   € ñ “%ˆÜ(×0Ñ0ˆÔØ"ˆÔÜ˜E›
ˆŒÜ˜e›ˆŒÜ$ \Ó2ˆÔÜ!& v£ˆÔØ×"Ñ"Ô$Ø×#Ñ#Ô%Øˆr�   c                ó.  —  | «       }t         j                  |_        d|_        t	        |«      |_        t	        |«      |_        d|_        t        |«      |_	        t        |j                  «      |_        |j                  «        |j                  «        |S )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_columnsz.MTextColumns.new_dynamic_manual_height_columns9  sy   € ñ “%ˆÜ(×0Ñ0ˆÔØ#ˆÔÜ˜e›ˆŒÜ$ \Ó2ˆÔØ!$ˆÔÜ˜w›-ˆŒÜ˜GŸO™OÓ,ˆŒØ×"Ñ"Ô$Ø×#Ñ#Ô%Øˆr�   c                ó„   — | j                   }|dkD  r(|| j                  z  |dz
  | j                  z  z   | _        y d| _        y )Nr   r-   r…   )r‡   rQ   rŠ   r‹   )r‘   r‡   s     r‚   rŸ   zMTextColumns.update_total_widthI  s?   € Ø—
‘
ˆØ�1Š9Ø$ t§z¡zÑ1°U¸Q±YÀ$×BSÑBSÑ4SÑSˆDÕà"ˆDÕr�   c                ót   — | j                   rt        | j                  «      | _        y | j                  | _        y r”   )Úhas_dynamic_manual_heightÚmaxr�   rŒ   rT   r�   s    r‚   r    z MTextColumns.update_total_heightP  s*   € Ø×)Ò)Ü # D§L¡LÓ 1ˆDÕà $× 3Ñ 3ˆDÕr�   c                óX   — | j                   t        j                  k(  xr | j                  S r”   ©r†   r>   r   rˆ   r�   s    r‚   Úhas_dynamic_auto_heightz$MTextColumns.has_dynamic_auto_heightV  s$   € à×Ñ¤:×#5Ñ#5Ñ5ÒJ¸$×:JÑ:JÐJr�   c                óZ   — | j                   t        j                  k(  xr | j                   S r”   r¯   r�   s    r‚   r¬   z&MTextColumns.has_dynamic_manual_heightZ  s'   € à×Ñ¤:×#5Ñ#5Ñ5ÒN¸d×>NÑ>NÐ:NÐNr�   c                ó@  — |j                   t        k\  s| j                  sy |j                  }|€J d«       ‚g }| j                  D ]J  }t	        d|j                  |«      «      }|r|j                  |«       Œ2t        j                  d|› d�«       ŒL d | _        || _	        y )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_columnszMTextColumns.link_columns^  s•   € à�>‰>œWÒ$¨D×,?Ò,?ØØ�\‰\ˆØˆ~Ð@Ð@Ó@ˆ~ØˆØ×)Ô)ˆFÜ˜ "§&¡&¨£.Ó1ˆEÙØ×%Ñ% eÕ,ä—‘Ð4°V°HÐ<LÐMÕNð *ð #ˆÔØ,ˆÕr�   c                óh  — | xj                   |z  c_         | xj                  |z  c_        | xj                  |z  c_        | xj                  |z  c_        | xj                  |z  c_        | j
                  D �cg c]  }||z  ‘Œ	 c}| _        | j                  D ]  }|j                  |«       Œ y c c}w r”   )rQ   rŠ   r‹   rŒ   rT   r�   rŽ   Ú	transform)r‘   ÚmÚhscaleÚvscaleÚhr˜   s         r‚   r½   zMTextColumns.transformn  s“   € Ø�
Š
�fÑ�
Ø×Ò˜VÑ#ÕØ×Ò˜FÑ"ÕØ×Ò˜VÑ#ÕØ×Ò˜vÑ%ÕØ,0¯LªLÓ9©L q˜˜F›
¨LÑ9ˆŒØ×(Ô(ˆEØ�O‰O˜AÕñ )ùò :s   Á8B/c                óî  — t        t        dd«      t        dd«      t        dt        | j                  «      «      t        dd«      t        dt        | j                  «      «      t        dd«      t        d| j
                  «      t        dd«      t        dt        | j                  «      «      t        dd«      t        d	| j                  «      t        dd
«      t        d	| j                  «      g«      }| j                  r\|j                  t        dd«      t        dt        | j                  «      «      g«       |j                  d„ | j                  D «       «       |j                  t        dd«      «       |S )Néè  ÚACAD_MTEXT_COLUMN_INFO_BEGINé.  éK   éO   éL   éN   é0   é  é1   rj   c              3  ó4   K  — | ]  }t        d |«      –— Œ y­w)rË   N©r   )Ú.0r£   s     r‚   Ú	<genexpr>z<MTextColumns.acad_mtext_column_info_xdata.<locals>.<genexpr>Œ  s   è ø€ ÐH¹<°œ˜t V×,¹<ùó   ‚Ú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_xdataz)MTextColumns.acad_mtext_column_info_xdatax  s%  € Üä�tÐ;Ó<Ü�t˜RÓ Ü�tœS ×!1Ñ!1Ó2Ó3Ü�t˜RÓ Ü�tœS ×!1Ñ!1Ó2Ó3Ü�t˜RÓ Ü�t˜TŸZ™ZÓ(Ü�t˜RÓ Ü�tœS ×!:Ñ!:Ó;Ó<Ü�t˜RÓ Ü�t˜TŸZ™ZÓ(Ü�t˜RÓ Ü�t˜T×.Ñ.Ó/ðó
ˆð" ×)Ò)Ø�K‰Kœ  bÓ)¬6°$¼¸D¿L¹LÓ8IÓ+JÐKÔLØ�K‰KÑH¸4¿<º<ÓHÔHØ�‰”F˜4Ð!=Ó>Ô?Øˆr�   c                óô   — t        t        dd«      t        dd«      t        d| j                  «      g«      }|j                  d„ | j	                  «       D «       «       |j                  t        dd«      «       |S )NrÃ   ÚACAD_MTEXT_COLUMNS_BEGINrÅ   é/   c              3  ó4   K  — | ]  }t        d |«      –— Œ y­w)éí  NrÎ   )rÏ   rº   s     r‚   rÐ   z8MTextColumns.acad_mtext_columns_xdata.<locals>.<genexpr>˜  s   è ø€ ð 
Ù/C VŒF�4˜× Ñ/CùrÑ   ÚACAD_MTEXT_COLUMNS_END)r   r   r‡   rÓ   Úmtext_handlesrµ   rÔ   s     r‚   Úacad_mtext_columns_xdataz%MTextColumns.acad_mtext_columns_xdata�  ss   € Üä�tÐ7Ó8Ü�t˜RÓ Ü�t˜TŸZ™ZÓ(ðó
ˆð 	�‰ñ 
Ø/3×/AÑ/AÔ/Có
ô 	
ð 	�‰”F˜4Ð!9Ó:Ô;Øˆr�   c                ó  — | j                   r| j                   S g }| j                  D ]a  }|j                  r?|j                  j                  }|€t        j                  d«      ‚|j                  |«       ŒNt        j                  d«      ‚ |S )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Ý   zMTextColumns.mtext_handlesž  s~   € à×ÒØ×&Ñ&Ð&ØˆØ×)Ô)ˆFØ�ŠØŸ™×*Ñ*�Ø�>Ü×1Ñ1Ð2VÓWÐWØ—‘˜vÕ&ä×-Ñ-Ð.LÓMÐMð *ð ˆr�   c           	     ó„   — t        t        dd«      t        dd«      t        d| j                  «      t        dd«      g«      S )NrÃ   ÚACAD_MTEXT_DEFINED_HEIGHT_BEGINrÅ   rU   rË   ÚACAD_MTEXT_DEFINED_HEIGHT_END)r   r   rT   r�   s    r‚   Úacad_mtext_defined_height_xdataz,MTextColumns.acad_mtext_defined_height_xdata­  sD   € Üä�tÐ>Ó?Ü�t˜RÓ Ü�t˜T×0Ñ0Ó1Ü�tÐ<Ó=ð	ó
ð 	
r�   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])rz   r{   r|   Ú__doc__r’   r™   r•   Úclassmethodr¤   r¦   r©   rŸ   r    Úpropertyr°   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                óØ  — t        «       }| j                  d«      }| j                  d«      }| j                  d«      }|D �]  \  }}|dk(  r$|€"t        |«      | _        | j	                  d«       Œ0|dk(  r|€t        |«      | _        ŒH|dk(  r
|€|| _        ŒW|dk(  r||_        || _        Œk|d	k(  r||_        Œx|d
k(  r||_	        Œ…|dk(  r||_        Œ’|dk(  r||_
        ŒŸ|dk(  rt        |«      |_        Œµ|dk(  r||_        ŒÂ|dk(  rt        |«      |_        ŒØ|dk(  rt        |«      |_        Œî|dk(  sŒô|j"                  j%                  |«       �Œ |j                  dk(  r‰|j"                  rt'        |j"                  «      |_        |S |j                  dkD  rR|j                  }t)        |j                  |z   «      }	|	dkD  r)t+        t-        |j                  |z   |	z  «      «      |_        |S )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Ñ  € ô ‹n€GØ�W‰W�XÓ€FØ—W‘WÐ-Ó.€NØ ŸW™W WÓ-ÐÜ#‰ˆˆeà�2Š:˜.Ð0Ü!% e£ˆCÔà�K‰K˜
Õ#Ø�RŠZ˜F˜NÜ˜e›ˆC�JØ�RŠZÐ2Ð:ØˆC�IØ�RŠZà%*ˆGÔ"à!&ˆCÕØ�RŠZØ"'ˆGÕØ�RŠZØ#(ˆGÕ Ø�RŠZà!ˆG�MØ�RŠZà#(ˆGÕ Ø�RŠZÜ",¨UÓ"3ˆGÕØ�RŠZð "ˆG�MØ�RŠZÜ"& u£+ˆGÕØ�RŠZÜ+/°«;ˆGÕ(Ø�R‹Zà�O‰O×"Ñ" 5Ö)ðK $ðP ‡}�}˜ÒØ�?Š?Ü §¡Ó0ˆGŒMð €Nð × Ñ  1Ò$à×$Ñ$ˆAÜ�W—]‘] QÑ&Ó'ˆBØ�DŠyÜ #¤E¨7×+>Ñ+>ÀÑ+BÀbÑ*HÓ$IÓ J�”Ø€Nr�   c                ó  — 	 t        d| «      \  }}t        «       }d}d }| |dz   | D ]Í  \  }}|r=|dk(  r!|j                  j	                  |«       |dz  }Œ.t
        j                  d«       d}|€|}ŒJ|dk(  rt        |«      |_        nl|dk(  rt        |«      |_
        nV|dk(  rt        |«      |_        n@|d	k(  rt        |«      |_        n*|d
k(  r||_        n|dk(  r||_        n|dk(  rt        |«      }d }ŒÏ |S # t        $ r Y y w xY w)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  ó  s0  € ðÜ=Ø$ dó
‰
ˆˆsô
 ‹n€GØ€LØ€JØ˜E A™I¨Ó,‰ˆˆeÙØ�tŠ|Ø—‘×&Ñ& uÔ-Ø Ñ!�Øä—‘ÐEÔFØ �àÐØˆJØà˜ÒÜ",¨UÓ"3ˆGÕØ˜2ÒÜ"& u£+ˆGÕØ˜2Òä ›JˆG�MØ˜2ÒÜ+/°«;ˆGÕ(Ø˜2ÒØ!ˆG�MØ˜2ÒØ#(ˆGÕ Ø˜2ÒÜ˜u›:ˆLØ‰
ð; -ð< €NøôG ò Ùðús   ‚C9 Ã9	DÄDc                ó”   — g }	 t        d| «      \  }}| || D ]  \  }}|dk(  sŒ|j                  |«       Œ |S # t        $ r |cY S w xY w)NÚACAD_MTEXT_COLUMNSrÛ   )r   r   rµ   )rÕ   rä   r  r  rû   rü   s         r‚   Ú load_mtext_linked_column_handlesr
    se   € Ø€GðÜ=Ø  $ó
‰
ˆˆsð
 ˜E #“‰ˆˆeØ�4‹<Ø�N‰N˜5Õ!ð 'ð €Nøô ò ØŠðús   „9 ¹AÁAc                óv   — d}	 t        d| «      \  }}| || D ]  \  }}|dk(  sŒ|}Œ |S # t        $ r |cY S w xY w)Nr…   ÚACAD_MTEXT_DEFINED_HEIGHTrË   )r   r   )rÕ   r£   r  r  rû   rü   s         r‚   Úload_mtext_defined_heightr  ,  s`   € ð €FðÜ=Ø'¨ó
‰
ˆˆsð ˜E #“‰ˆˆeØ�4‹<Ø‰Fð 'ð €Møô ò ØŠðús   „* ª8·8c                óx  — d|v r|j                  d«      }ny d| j                  d«      › d�}	 t        |«      }|€y 	 t        |«      |_        |j                  «        |j                  rt        |j                  «      |_        |S 	 t        |«      |_        |j                  |_        |S # t        j                  $ r t        j                  d|› �«       Y y w xY w# t        j                  $ r t        j                  d|› �«       Y Œºw xY w# t        j                  $ r t        j                  d|› �«       Y Œ¢w xY w)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:  € ð ��Ø�y‰y˜Ó ‰àà�S—W‘W˜XÓ&Ð' qÐ)€DðÜ(¨Ó.ˆð
 €Øð>Ü!AÀ$Ó!GˆÔð ×ÑÔ Ø‡‚ô  # 7§?¡?Ó3ˆÔð €Nð	IÜ%>¸tÓ%DˆGÔ"ð  '×5Ñ5ˆÔà€Nøô1 ×"Ñ"ò Ü�‰Ð9¸$¸Ð@ÔAÙðûô ×"Ñ"ò >Ü�‰Ð5°d°VÐ<Ö=ð>ûô ×&Ñ&ò 	IÜ�L‰LÐ@ÀÀÐGÖHð	Iús4   ®B) ½C ÂD Â)+CÃCÃ+DÄDÄ+D9Ä8D9c                ó  — g }d| v r| j                  d«      }n|S 	 t        d|«      \  }}||| D ]  \  }}|dk(  sŒ|j                  |«       Œ |||…= t	        |«      dk  r| j                  d«       |S # t        $ r |cY S w xY w)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Ø��Ø�y‰y˜Ó ‰àˆðÜ=Ø% tó
‰
ˆˆsð ˜E #“‰ˆˆeà�4‹<Ø�N‰N˜5Õ!ð 'ð 	ˆU�3ˆYˆÜ
ˆ4ƒy�1‚}Ø�‰�fÔØ€Nøô ò ØŠðús   œA5 Á5BÂBc                  óÖ  ‡ — e Zd ZdZdZ eeee«      Z	e
Zd*ˆ fd„Zd„ Zd„ Zed+d„«       Zed,d„«       Zefd-d„Z	 d.	 	 	 d/ˆ fd	„Zd0ˆ fd
„Zd1d„Zd2ˆ fd„Zd2ˆ fd„Zd3d„Zd4d„Zd4d„Zd„ Zd„ Zd„ Zd5d„Zd6d„Z 	 	 d7	 	 	 	 	 	 	 d8d„Z!	 	 d9	 	 	 d:d„Z"d;d„Z#e#Z$d<d„Z%d„ Z&d=d„Z'd>d„Z(d?d@d„Z)dAd@d„Z*dBd„Z+dCˆ fd „Z,d*ˆ fd!„Z-dDd"„Z.dEd#„Z/dAdFd$„Z0d*d%„Z1d.dGˆ fd&„Z2dHd'„Z3dIˆ fd(„Z4dJˆ fd)„Z5ˆ xZ6S )Kr<   zDXF MTEXT entityÚMTEXTc                ó>   •— t         ‰| �  «        d| _        d | _        y )NÚ )Úsuperr’   rE   Ú_columns)r‘   Ú	__class__s    €r‚   r’   zMText.__init__�  s   ø€ Ü‰ÑÔØˆŒ	à04ˆ�r�   c                ó   — | j                   S )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   zMText._get_text–  s   € ð �y‰yÐr�   c                ó$   — t        |«      | _        y)z,Setter for virtual Mtext.dxf.text attribute.N)ÚstrrE   )r‘   rü   s     r‚   rG   zMText._set_text   s   € ä˜“Jˆ�	r�   c                óR   — | j                   r| j                   j                  «       S dS )z+Returns a copy of the column configuration.N)r  r•   r�   s    r‚   r—   zMText.columns¤  s"   € ð
 04¯}ª}ˆt�}‰}×)Ñ)Ó+ÐFÀ$ÐFr�   c                ó   — | j                   d uS r”   )r  r�   s    r‚   Úhas_columnszMText.has_columns«  s   € à�}‰} DÐ(Ð(r�   c                ó¢   — t        |t        «      sJ ‚| j                  |_        | j                  r | j                  j                  «       |_        y y r”   )Ú
isinstancer<   rE   r%  r  r™   )r‘   ÚentityÚcopy_strategys      r‚   Ú	copy_datazMText.copy_data¯  s?   € Ü˜&¤%Ô(Ð(Ð(Ø—i‘iˆŒØ×Òà"Ÿm™m×5Ñ5Ó7ˆF�Oð r�   c                óª  •— t         ‰| �  |«      }|rÀ|j                  d«      }|rŠt        | j	                  |«      «      }|j                  |t        |d¬«       |j                  r"|j                  d   }t        ||«      | _	        |S | j                  rt        || j                  «      | _	        |S t        j                  d|j                  › d�«      ‚|S )Nrm   T)ÚsubclassÚrecoverr   z'missing 'AcDbMText' subclass in MTEXT(#r  )r  Úload_dxf_attribsÚsubclass_by_indexr   Úload_mtext_contentÚfast_load_dxfattribsr@   Úembedded_objectsrÿ   r  r  r  r   rã   rº   )r‘   Ú	processorrâ   rÕ   Úobjr  s        €r‚   r.  zMText.load_dxf_attribs¶  sÚ   ø€ ô ‰gÑ& yÓ1ˆÙØ×.Ñ.¨qÓ1ˆDÙÜ˜D×3Ñ3°DÓ9Ó:�Ø×.Ñ.ØÔ/¸$Èð /ô ð ×-Ò-Ø#×4Ñ4°QÑ7�CÜ$EÀcÈ3Ó$O�D”Mð ˆ
ð —Z’ZÜ$;¸CÀÇÁÓ$L�D”Mð
 ˆ
ô ×-Ñ-Ø=¸c¿j¹j¸\ÈÐKóð ð ˆ
r�   c                ó¶   •‡ ‡— ˆˆ fd„}ˆ fd„}t         ‰‰ �  ‰«       ‰ j                  r |«        ‰ j                  r‰ j                  j                  ‰«       |S y )Nc                 ó    •— ‰j                   } | r?t        ‰j                  «      D ]&  }| j                  |«      }|sŒ|j	                  «        Œ( y y r”   )r³   r  r  r´   Údestroy)r³   rº   Ú
text_framer¸   r‘   s      €€r‚   Údestroy_text_frame_entityz7MText.post_load_hook.<locals>.destroy_text_frame_entityÍ  sE   ø€ Ø—|‘|ˆHÙÜ>¸t¿z¹zÖJ�FØ!)§¡¨fÓ!5�JÚ!Ø"×*Ñ*Õ,ñ Kð r�   c                 óÜ   •— ‰j                  «       } | �-‰j                  j                  D ]  }| j                  |«       Œ y‰j                  j                  D ]  }d|j                  _        Œ y)z1Unlinked MTEXT entities from layout entity space.N)Ú
get_layoutr  rŽ   Úunlink_entityrâ   Úowner)Úlayoutr˜   r‘   s     €r‚   Ú unlink_mtext_columns_from_layoutz>MText.post_load_hook.<locals>.unlink_mtext_columns_from_layoutÕ  sX   ø€ à—_‘_Ó&ˆFØÐ!Ø!Ÿ]™]×9Ô9�EØ×(Ñ(¨Õ/ñ :ð "Ÿ]™]×9Ô9�EØ&*�E—I‘I•Oñ :r�   )r  Úpost_load_hookr  r%  r  r»   )r‘   r¸   r9  r?  r  s   ``  €r‚   r@  zMText.post_load_hookÌ  sO   ú€ õ	-ô	+ô 	‰Ñ˜sÔ#Ø�:Š:Ù%Ô'à×Òð �M‰M×&Ñ& sÔ+Ø3Ð3Ør�   c                ó‚  — | j                   }|r±|j                  t        j                  k  r”|j                  t        |j                  «      dz   k7  r!t        j                  t        | «      › d�«       t        d„ |j                  D «       «      s"t        j                  t        | «      › d�«       y| j                  «        y)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  ó4   K  — | ]  }|j                   –— Œ y ­wr”   )rá   )rÏ   rå   s     r‚   rÐ   z*MText.preprocess_export.<locals>.<genexpr>ö  s   è ø€ ÐLÑ5K¨6�v—•Ñ5KùrÑ   z#: contains destroyed linked columnsFT)r  rW   r   r   r‡   r¨   rŽ   r¶   r·   r"  ÚallÚ%sync_common_attribs_of_linked_columns)r‘   Ú	tagwriterr—   s      r‚   Úpreprocess_exportzMText.preprocess_exportê  s“   € ð —-‘-ˆÙ�y×+Ñ+¬e¯m©mÒ;Ø�}‰}¤ G×$:Ñ$:Ó ;¸aÑ ?Ò?Ü—‘¤ D£	˜{Ð*VÐWÔXäÑL°W×5KÒ5KÓLÔLÜ—‘¤ D£	˜{Ð*MÐNÔOØØ×6Ñ6Ô8Ør�   c                óœ   •— t         ‰| �  |«       | j                  r0|j                  t        j
                  k  r| j                  |«       y y y r”   )r  Ú
export_dxfr%  rW   r   r   Úexport_linked_entities)r‘   rE  r  s     €r‚   rH  zMText.export_dxfü  sA   ø€ Ü‰Ñ˜9Ô%à×Ò 	× 4Ñ 4´u·}±}Ò DØ×'Ñ'¨	Õ2ð !EÐr�   c                óò  •— t         ‰| �  |«       |j                  t        t        j
                  «       | j                  j                  |g d¢«       t        | j                  |«       | j                  j                  |g d¢«       | j                  }|�|j                  t        j                  k(  ry|j                  t        k\  r| j!                  |«       y| j#                  «        | j%                  «        y)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)r  Úexport_entityÚ
write_tag2r   r?   r  râ   Úexport_dxf_attribsrA   rE   r  r†   r>   r}   rW   r   Úexport_embedded_objectÚset_column_xdataÚset_linked_columns_xdata)r‘   rE  r—   r  s      €r‚   rK  zMText.export_entity  sÀ   ø€ ä‰Ñ˜iÔ(Ø×Ñœ_¬j¯o©oÔ>Ø�‰×#Ñ#Øòô
	
ô 	˜TŸY™Y¨	Ô2Ø�‰×#Ñ#Øòô	
ð& —-‘-ˆØˆ?˜g×1Ñ1´Z·_±_ÒDØà×Ñ¤7Ò*Ø×'Ñ'¨	Õ2à×!Ñ!Ô#Ø×)Ñ)Õ+r�   c              #  ó  K  — d}g }|D ]M  }|j                   dk(  r|j                  }Œ|j                   dk(  r|j                  |j                  «       ŒJ|–— ŒO |j                  |«       t        dj	                  |«      «      | _        y ­w)Nr  r-   r\   )rû   rü   rµ   r)   ÚjoinrE   )r‘   rÕ   ÚtailÚpartsÚtags        r‚   r0  zMText.load_mtext_content/  sp   è ø€ ØˆØˆÛˆCØ�x‰x˜1Š}Ø—y‘y‘Ø—‘˜Q’Ø—‘˜SŸY™YÕ'à“	ð ð 	�‰�TÔÜ+¨B¯G©G°E«NÓ;ˆ�	ùs   ‚BB
c                óæ  — | j                   }| j                  }|€J ‚|j                  dd«       |j                  dd«       |j                  t	        d|j
                  «      «       |j                  t	        d|j                  «      «       |j                  d|j                  «       |j                  d|j                  «       |j                  d	|j                  «       |j                  d
|j                  «       |j                  dt        |j                  «      «       |j                  rd}n|j                  }|j                  d|«       |j                  d|j                  «       |j                  d|j                  «       |j                  dt        |j                   «      «       |j                  dt        |j"                  «      «       |j$                  D ]  }|j                  d|«       Œ y )Née   zEmbedded ObjectéF   r-   rL   rd   rO   rR   rf   rh   rY   r   r[   ro   rq   rl   rô   rU   )râ   r  rL  Ú	write_tagr   rc   rK   rQ   rT   r‹   rŒ   r�   r†   r°   r‡   rŠ   rˆ   r‰   r�   )r‘   rE  râ   Úcolsr‡   r£   s         r‚   rN  zMText.export_embedded_object<  s‹  € Ø�h‰hˆØ�}‰}ˆØÐÐÐà×Ñ˜SÐ"3Ô4Ø×Ñ˜R Ô#Ø×ÑœF 2 s×'9Ñ'9Ó:Ô;Ø×ÑœF 2 s§z¡zÓ2Ô3Ø×Ñ˜R §¡Ô+Ø×Ñ˜R ×!4Ñ!4Ô5Ø×Ñ˜R ×!1Ñ!1Ô2Ø×Ñ˜R ×!2Ñ!2Ô3Ø×Ñ˜R¤ T×%5Ñ%5Ó!6Ô7à×'Ò'Ø‰Eà—J‘JˆEØ×Ñ˜R Ô'à×Ñ˜R §¡Ô,Ø×Ñ˜R ×!2Ñ!2Ô3Ø×Ñ˜R¤ T×%5Ñ%5Ó!6Ô7Ø×Ñ˜R¤ T×%>Ñ%>Ó!?Ô@Ø—l”lˆFØ× Ñ   VÕ,ñ #r�   c                ó²   — | j                   j                  D ]>  }|j                  j                  €t	        j
                  d«      ‚|j                  |«       Œ@ y )Nrà   )r  rŽ   râ   rº   r   rã   rH  )r‘   rE  r˜   s      r‚   rI  zMText.export_linked_entitiesX  sF   € Ø—]‘]×1Ô1ˆEØ�y‰y×ÑÐ'Ü×-Ñ-Ð.RÓSÐSà×Ñ˜YÕ'ñ	 2r�   c                ó„   — | j                  h d£¬«      }| j                  j                  D ]  }|j                  |«       Œ y )N>   rº   rK   re   rg   ©Údrop)Ú
dxfattribsr  rŽ   Úupdate_dxf_attribs)r‘   Úcommon_attribsr˜   s      r‚   rD  z+MText.sync_common_attribs_of_linked_columns_  s<   € ØŸ™ÚBð )ó 
ˆð —]‘]×1Ô1ˆEØ×$Ñ$ ^Õ4ñ 2r�   c                ód  — | j                   €t        «       | _         | j                  }|j                  «       }|j	                  |j                  «       «       |j                  s|j	                  |j                  «       «       | j                   }|j                  d«       |j                  d|«       y ©Nr  )
r  r3   r  rÖ   rÓ   rÞ   r¬   ré   rö   Úadd)r‘   rZ  r  r  s       r‚   rO  zMText.set_column_xdataf  s„   € Ø�:‰:ÐÜ›ˆDŒJØ�}‰}ˆØ×0Ñ0Ó2ˆØ�‰�D×1Ñ1Ó3Ô4Ø×-Ò-Ø�K‰K˜×<Ñ<Ó>Ô?à—
‘
ˆð 	�‰�fÔØ�	‰	�&˜$Õr�   c                óà   — | j                   }|j                  D ]  }|j                  d«       Œ |j                  s4|j	                  «       }|j                  D ]  }|j                  d|«       Œ y y rc  )r  rŽ   Údiscard_xdatar¬   ré   Ú	set_xdata)r‘   rZ  rå   rÕ   s       r‚   rP  zMText.set_linked_columns_xdatau  se   € Ø�}‰}ˆØ×)Ô)ˆFØ× Ñ  Õ(ð *à×-Ò-Ø×7Ñ7Ó9ˆDØ×-Ô-�Ø× Ñ  ¨Õ.ñ .ð .r�   c                ó  — | j                   j                  d«      rI| j                   j                  }t        j                  |d   |d   «      }t        j
                  |«      }|S | j                   j                  dd«      }|S )z%Returns the text rotation in degrees.rc   r-   r   ri   )râ   Úhasattrrc   ÚmathÚatan2Údegreesr´   )r‘   ÚvectorÚradiansri   s       r‚   Úget_rotationzMText.get_rotation~  sl   € à�8‰8×ÑÐ,Ô-Ø—X‘X×,Ñ,ˆFÜ—j‘j ¨¡¨F°1©IÓ6ˆGÜ—|‘| GÓ,ˆHð ˆð —x‘x—|‘| J°Ó2ˆHØˆr�   c                ó^   — | j                   j                  d«       || j                   _        | S )zSets the attribute :attr:`rotation` to `angle` (in degrees) and deletes
        :attr:`dxf.text_direction` if present.
        rc   )râ   rö   ri   )r‘   Úangles     r‚   Úset_rotationzMText.set_rotationˆ  s(   € ð
 	�‰×ÑÐ)Ô*Ø!ˆ�‰ÔØˆr�   c                ó†   — t        |«      | j                  _        |�| j                  |«       |�|| j                  _        | S )zØSets 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   rr  rX   )r‘   rK   ri   rX   s       r‚   Úset_locationzMText.set_location‘  s>   € ô ˜v›,ˆ�‰ŒØÐØ×Ñ˜hÔ'ØÐ'Ø(8ˆD�H‰HÔ%Øˆr�   c                ó°  — d|cxk  rdk  rn t        d«      ‚|| j                   _        nt        d«      ‚|rt        j                  nd}|€œ| j                   j                  d«       | j                   j                  d«       | j                   j                  d«       | j                   j                  d«       | j                   j                  d	«       |rd
| j                   _        | S |dk(  r5t        j                  |z  | j                   _        d| j                   _        | S t        j                  |z  | j                   _        t        |t        «      r|| j                   _        | S t        |t        «      r$d| j                   _        || j                   _        | S t        |t        «      r+d| j                   _        t        |«      | j                   _        | S )a£  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_COLORr'  r�   r"  rw   Útupler&   rv   )r‘   ÚcolorÚscaler8  s       r‚   Úset_bg_colorzMText.set_bg_color£  s€  € ð* �Œ?˜Œ?ô ÐMÓNÐNð ',ˆD�H‰HÕ#äÐMÓNÐNá/9”U×+Ò+¸qˆ
Øˆ=Ø�H‰H×Ñ˜YÔ'Ø�H‰H×ÑÐ-Ô.Ø�H‰H×Ñ˜_Ô-Ø�H‰H×ÑÐ1Ô2Ø�H‰H×ÑÐ1Ô2Ùà#%�—‘Ô ð ˆð �hÒÜ$×:Ñ:¸ZÑGˆD�H‰HÔØ%&ˆD�H‰HÔ"ð ˆô  %×3Ñ3°jÑ@ˆD�H‰HÔÜ˜%¤Ô%Ø).�—‘Ô&ð ˆô ˜E¤3Ô'Ø)*�—‘Ô&Ø.3�—‘Ô+ð ˆô ˜E¤5Ô)Ø)*�—‘Ô&Ü.5°e«n�—‘Ô+Øˆr�   c                ó0   — | xj                   |z  c_         | S )z;Append `text` to existing content (:attr:`text` attribute).r   )r‘   rE   s     r‚   Ú__iadd__zMText.__iadd__Ö  s   € à�	Š	�TÑ�	Øˆr�   c                ó  — | j                   }|j                  d«      r|j                  S |j                  d«      rAt        |j                  «      j                  t        j                  |j                  «      «      S t        S )z‡Returns the horizontal text direction as :class:`~ezdxf.math.Vec3`
        object, even if only the text rotation is defined.

        rc   ri   )
râ   ri  rc   r   ra   Úto_wcsr   Úfrom_deg_angleri   r#   ©r‘   râ   s     r‚   Úget_text_directionzMText.get_text_directionÝ  sb   € ð
 �h‰hˆà�;‰;Ð'Ô(Ø×%Ñ%Ð%Ø�;‰;�zÔ"ô �s—}‘}Ó%×,Ñ,¬T×-@Ñ-@ÀÇÁÓ-NÓOÐOÜˆr�   c                ó®   — | j                   }|j                  d«      r8|j                  d«      s| j                  «       |_        |j	                  d«       yy)zDConvert text rotation into text direction and discard text rotation.ri   rc   N)râ   ri  r†  rc   rö   r…  s     r‚   Ú"convert_rotation_to_text_directionz(MText.convert_rotation_to_text_directioní  sF   € à�h‰hˆØ�;‰;�zÔ"Ø—;‘;Ð/Ô0Ø%)×%<Ñ%<Ó%>�Ô"Ø�K‰K˜
Õ#ð #r�   c                óz   — | j                   }t        |j                  | j                  «       |j                  ¬«      S )zÐReturns 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‚   Úucsz	MText.ucsõ  s4   € ð �h‰hˆÜØ—:‘:Ø×&Ñ&Ó(Ø�}‰}ô
ð 	
r�   c                ój  — | j                   }t        |j                  «      }t        ||«      \  }}| j	                  «        t        |j
                  «      }|j                  |«      }|j                  |«      }t        |j                  «      }	|j                  |	«      }
|j                  |
«      }|j                  |«      }|j                  t        j                  |«      z  }||_	        t        j                  |	|«      s.t!        |	«      dkD  r ||	z  }t#        | j$                  |«      | _        |j'                  d«      r;|j                  |j(                  «      }|j                  |«      j                  |_        |j+                  |j,                  «      |_        ||_        ||_        | j.                  ro|j                  |j                  «       «      j                  }|j                  |j                  «       «      j                  }| j0                  j+                  |||«       | j3                  |«       | S )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Ú	magnituderj  ÚsinÚiscloser÷   r,   rE   ri  rQ   r½   rK   r%  r  Ú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½   zMText.transform  sÑ  € à�h‰hˆÜ˜SŸ]™]Ó+ˆÜ.¨}¸aÓ@Ñˆ�qØ×/Ñ/Ô1ä! #×"4Ñ"4Ó5ÐØ×2Ñ2Ð3EÓFÐà!.×!4Ñ!4Ð5GÓ!HÐÜ §¡Ó0ˆØ4×>Ñ>¸ÓOÐØ×3Ñ3Ð4GÓHÐØ$×2Ñ2Ð3FÓGˆØ-×7Ñ7¼$¿(¹(À7Ó:KÑKˆØ)ˆŒä—‘˜_¨oÔ>Ü�OÓ$ uÒ,à$ Ñ6ˆFä3°D·I±I¸vÓFˆDŒIà�;‰;�wÔØ*×4Ñ4°S·Y±YÓ?ˆIØ×-Ñ-¨iÓ8×BÑBˆCŒIà—[‘[ §¡Ó,ˆŒ
Ø/ˆÔØ%ˆŒØ×ÒØ×*Ñ*Ð+=×+GÑ+GÓ+IÓJ×TÑTˆFØ×*Ñ*Ð+A×+KÑ+KÓ+MÓN×XÑXˆFØ�M‰M×#Ñ# A v¨vÔ6Ø×Ñ˜AÔØˆr�   c                ób   — |rt        | j                  |¬«      S t        | j                  |¬«      S )a£  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_textzMText.plain_text)  s)   € ñ  Ü# D§I¡I°UÔ;Ð;ä˜tŸy™y°Ô6Ð6r�   c                ó8   ‡ — ˆ fd„}ˆ fd„}|r |«       S  |«       S )zíReturns 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        ‰j                  d¬«      g} ‰j                  r<‰j                  j                  D ]#  }| j                  |j                  d¬«      «       Œ% dj                  | «      S )NFr¥  r  )r*   rE   r%  r  rŽ   rµ   r¨  rR  ©ÚcontentÚcr‘   s     €r‚   Úmerged_contentz4MText.all_columns_plain_text.<locals>.merged_contentH  sY   ø€ Ü'¨¯	©	¸Ô?Ð@ˆGØ×ÒØŸ™×5Ô5�AØ—N‘N 1§<¡<°e <Ó#<Õ=ð 6à—7‘7˜7Ó#Ð#r�   c                 ó2  •— t        ‰j                  d¬«      } ‰j                  rr| r| d   dk(  r| j                  «        ‰j                  j
                  D ]?  }| j                  |j                  d¬«      «       | sŒ'| d   dk(  sŒ0| j                  «        ŒA | S )NTr¥  éÿÿÿÿr  )r*   rE   r%  Úpopr  rŽ   rÓ   r¨  r«  s     €r‚   Úsplit_contentz3MText.all_columns_plain_text.<locals>.split_contentO  s|   ø€ Ü& t§y¡y¸Ô=ˆGØ×ÒÙ˜w r™{¨bÒ0Ø—K‘K”MØŸ™×5Ô5�AØ—N‘N 1§<¡<°d <Ó#;Ô<Ú 7¨2¡;°"Ó#4ØŸ™�ð 6ð ˆNr�   r€   )r‘   r¦  r®  r²  s   `   r‚   Úall_columns_plain_textzMText.all_columns_plain_text>  s#   ø€ ô	$ô		ñ Ù “?Ð"á!Ó#Ð#r�   c                óÂ   — | j                   g}| j                  r6| j                  j                  D ]  }|j	                  |j                   «       Œ dj                  |«      S )zsReturns the text content of all columns as a single string
        including the inline formatting codes.

        r  )rE   r%  r  rŽ   rµ   rR  )r‘   r¬  rå   s      r‚   Úall_columns_raw_contentzMText.all_columns_raw_content_  sK   € ð
 —9‘9�+ˆØ×ÒØŸ-™-×6Ô6�Ø—‘˜vŸ{™{Õ+ð 7à�w‰w�wÓÐr�   c                ó�   •— | j                   sy| j                  j                  �t        ‰| �  |«       n	 |j                  | «       y)zValidity check.N)rá   râ   r=  r  ÚauditÚcheck_text_style)r‘   Úauditorr  s     €r‚   r·  zMText.auditj  s:   ø€ à�}Š}ØØ�8‰8�>‰>Ð%ä‰G‰M˜'Õ"ð Ø× Ñ  Õ&r�   c                ó®   •— | j                   sy | j                  r+| j                  j                  D ]  }|j	                  «        Œ | `t
        ‰| �  «        y r”   )rá   r%  r  rŽ   r7  r  )r‘   rå   r  s     €r‚   r7  zMText.destroyw  sE   ø€ Ø�}Š}Øà×ÒØŸ-™-×6Ô6�Ø—‘Õ ð 7ð ˆMÜ‰‰Õr�   c                óê   — | j                   rg| j                  rZ| j                  }| j                  j                  D ]4  }|j                   sŒ|j                  sŒ||_        |j                  |«       Œ6 yyy)zsAdd linked columns (MTEXT) entities to entity database `db`,
        called from EntityDB. (internal API)

        N)rá   r  r¸   rŽ   Ú
is_virtualrd  )r‘   r¹   r¸   rå   s       r‚   Úadd_sub_entities_to_entitydbz"MText.add_sub_entities_to_entitydb„  sV   € ð
 �=Š=˜TŸ]š]Ø—(‘(ˆCØŸ-™-×6Ô6�Ø—?“? v×'8Ó'8Ø!$�F”JØ—F‘F˜6•Nñ 7ð +ˆ=r�   c                ó˜   — | j                   r>| j                  r1| j                  j                  D ]  }|j                   sŒ ||«       Œ yyy)z.Call `func` for linked columns. (internal API)N)rá   r  rŽ   )r‘   Úfuncr(  s      r‚   Úprocess_sub_entitieszMText.process_sub_entities�  s8   € à�=Š=˜TŸ]š]ØŸ-™-×6Ô6�Ø—?“?Ù˜•Lñ 7ð +ˆ=r�   c                ó&  — |j                   t        j                  k7  sJ ‚|j                  dkD  sJ d«       ‚|j                  dkD  sJ d«       ‚|j
                  dk\  sJ d«       ‚| j                  rt        j                  d«      ‚|| _	        |j                  | j                  _        |j                  | j                  _        |j                  dk  r|j                  |_        |j                  dk  r|j                  «        |r| j                  «        y y )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ã   r  râ   rT   rŒ   r‹   rŸ   Ú_create_linked_columns)r‘   r—   Úlinkeds      r‚   Úsetup_columnszMText.setup_columns—  sñ   € Ø×"Ñ"¤j§o¡oÒ5Ð5Ð5Ø�}‰}˜qÒ Ð@Ð"@Ó@Ð Ø�}‰}˜qÒ Ð>Ð">Ó>Ð Ø×#Ñ# qÒ(ÐGÐ*GÓGÐ(à×ÒÜ×)Ñ)Ð*GÓHÐHØˆŒØ Ÿ™ˆ�‰ŒØ")×"8Ñ"8ˆ�‰ÔØ×Ñ $Ò&Ø#*×#9Ñ#9ˆGÔ Ø×Ñ Ò%Ø×&Ñ&Ô(ÙØ×'Ñ'Õ)ð r�   c                óN  — | j                   }| j                  ddh¬«      }| j                  }| j                  }|€J ‚|j	                  dt        «       «      }t        j                  |j	                  dd«      «      }t        |j	                  d|«      «      }|j                  |j                  |j                  z   «      }|j                  }	t        |j                  d	z
  «      D ]@  }
||z  }t        j                  ||¬
«      }||j                   _        |	j!                  |«       ŒB y)z:Create linked MTEXT columns for DXF versions before R2018.rº   r=  r]  NrK   ri   r   rc   r-   )r_  r¸   )râ   r_  r¸   r  r´   r   r„  r‘  rQ   rŠ   rŽ   Úranger‡   r<   ÚnewrK   rµ   )r‘   râ   Úattribsr¸   rZ  rK   Údefault_directionrc   ÚoffsetrŽ   r™  rå   s               r‚   rÂ  zMText._create_linked_columns©  sü   € ð �h‰hˆØ—/‘/¨°'Ð':�/Ó;ˆØ�h‰hˆØ�}‰}ˆØÐÐÐà—‘˜¤4£6Ó*ˆÜ ×/Ñ/°·±¸
ÀAÓ0FÓGÐÜ˜cŸg™gÐ&6Ð8IÓJÓKˆØ×)Ñ)¨$¯*©*°t×7HÑ7HÑ*HÓIˆØ×,Ñ,ˆÜ�t—z‘z A‘~Ö&ˆAØ�fÑˆFÜ—Y‘Y¨'°s�YÓ;ˆFØ &ˆF�J‰JÔØ×!Ñ! &Õ)ñ	 'r�   c                ó2  •— | j                   sy t        ‰| �	  «        t        |«      xr" | j                  j
                  |j                  v }|sd| j                  _        | j                  r-| j                  j                  D ]  }|j                  |«       Œ y y )Nr`   )
rá   r  Úremove_dependenciesrî   râ   r^   Ústylesr%  r  rŽ   )r‘   ÚotherÚstyle_existrå   r  s       €r‚   rÌ  zMText.remove_dependencies½  su   ø€ Ø�}Š}Øä‰Ñ#Ô%Ü˜5“kÒD d§h¡h§n¡n¸¿¹Ð&DˆÙØ'ˆD�H‰HŒNà×ÒØŸ-™-×6Ô6�Ø×*Ñ*¨5Õ1ñ 7ð r�   c                ó   — t        «       S r”   )r   r�   s    r‚   Úocsz	MText.ocsÊ  s   € ô ‹uˆr�   c                ó  •— t         ‰| �  |«       | j                  j                  d«      r%|j	                  | j                  j
                  «       | j                  r-| j                  j                  D ]  }|j                  |«       Œ yy)z5Register required resources to the resource registry.r^   N)r  Úregister_resourcesrâ   ri  Úadd_text_styler^   r  rŽ   )r‘   Úregistryr˜   r  s      €r‚   rÓ  zMText.register_resourcesÏ  sf   ø€ ä‰Ñ" 8Ô,Ø�8‰8×Ñ˜GÔ$Ø×#Ñ# D§H¡H§N¡NÔ3Ø�=Š=ØŸ™×5Ô5�Ø×(Ñ(¨Õ2ñ 6ð r�   c                ó¸  •— t        |t        «      sJ ‚t        ‰| �  ||«       |j                  j                  d«      r4|j                  |j                  j                  «      |j                  _        | j                  r\|j                  rOt        | j                  j                  |j                  j                  «      D ]  \  }}|j                  ||«       Œ yyy)z3Translate resources from self to the copied entity.r^   N)r'  r<   r  Úmap_resourcesrâ   ri  Úget_text_styler^   r  ÚziprŽ   )r‘   ÚcloneÚmappingÚcol_selfÚ	col_cloner  s        €r‚   r×  zMText.map_resourcesØ  s¥   ø€ ä˜%¤Ô'Ð'Ð'Ü‰Ñ˜e WÔ-à�9‰9×Ñ˜WÔ%Ø%×4Ñ4°U·Y±Y·_±_ÓEˆE�I‰IŒOØ�=Š=˜UŸ^š^Ü'*Ø—‘×,Ñ,¨e¯n©n×.KÑ.Kö(Ñ#�˜)ð ×&Ñ& y°'Õ:ñ(ð ,ˆ=r�   rê   )rë   úOptional[MTextColumns]rí   )r(  r   rë   rì   r”   )r3  zOptional[SubclassProcessor]rë   r7   )r¸   r6   rë   zOptional[Callable])rE  r9   rë   rî   ©rE  r9   rë   rì   )rÕ   r   rë   zIterator[DXFTag])rE  r9   )rë   rž   )rq  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ì   )7rz   r{   r|   rð   ÚDXFTYPEr   r/   r2   r?   Ú
DXFATTRIBSr   ÚMIN_DXF_VERSION_FOR_EXPORTr’   rF   rG   rò   r—   r%  r4   r*  r.  r@  rF  rH  rK  r0  rN  rI  rD  rO  rP  ro  rr  rt  r  r�  rµ   r†  rˆ  r�  r½   r¨  r³  rµ  r·  r7  r½  rÀ  rÄ  rÂ  rÌ  rÑ  rÓ  r×  Ú__classcell__)r  s   @r‚   r<   r<   ˆ  su  ø„ áà€GÙ˜z¨;¸
ÓC€JØ!(Ðõ5òòð òGó ðGð ò)ó ð)ð 5Aô 8ð 8<ðØ4ðà	õõ,ó<õ$3õ+,óZ<ó-ó8(ò5ò ò/óóð %)Ø*.ð	àðð "ðð (ð	ð
 
óð* Øð	1à)ð1ð ó1ófð
 €Fóò $ó
ó%ôN7ô*$óB	 õ
'õ	ó
#ó!ô*ó$*ö(2óõ
3÷;ñ ;r�   r<   c                ó  — t        | «      }t        |d¬«      }t        |«      dk(  r|j                  d«       t        |«      dkD  r0|j	                  d|j                  d«      «       t        |«      dkD  rŒ0|j	                  d|d   «       y )Néú   )Úsizer   r  r-   r\   )r)   r(   r¨   rµ   rL  r±  )rE   rE  ÚtxtÚ
str_chunkss       r‚   rA   rA   æ  sy   € Ü
! $Ó
'€CÜ# C¨cÔ2€JÜ
ˆ:ƒ˜!ÒØ×Ñ˜"ÔÜ
ˆj‹/˜AÒ
Ø×Ñ˜Q 
§¡¨qÓ 1Ô2ô ˆj‹/˜AÓ
à×Ñ˜˜J q™MÕ*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   Úenumrj  Ú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,   r  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>r     s
  ðõ #÷÷ ñ õ #Û Û Û ç (÷÷ ñ ÷ @Ñ ?ß ,÷ñ ÷ O× NÓ NÝ 9ß %÷õ õ ß 4ß +Ý Ý áÝ#Ý&ß6Ý7Ý'Ýò€ð 
ˆ×	Ñ	˜7Ó	#€à€áØðGð 	‘ØØ—.‘.ØØô	
ðGð 	‘'˜" E§M¡M¸7ÔCðGð 	‘wØØØ×/Ñ/Ø ô	
ðGð$ 	‘˜ dÔ+ð%Gð( 	™' "°Ô:ð)Gð> 	™GØØØ3�i×3Ñ3°A°rÓ:Ø ô	
ð?GðT 	™'ØØØØ)�i×)Ñ)ª)Ó4Ø ô
ðUGðj 	‘ØØØØ×3Ñ3ô	
ðkGðv 	‘WØØ—-‘-ØØØ×2Ñ2Ø ô
ðwGðJ 	™'ØØ—-‘-ØØØ×2Ñ2Ø ô
ðKGð` 	‘g˜b¨4Ô0ðaGðd 	‘w˜r¨DÔ1ðeGðh 	‘G˜B¨°DÔ9ðiGðp 	™gØØØØ)�i×)Ñ)¨1¨a¨&Ó1Ø ô
ðqGðB 	™wØØØØ1�i×1Ñ1°$¸Ó=Ø0�)×0Ñ0°°tÓ<ô 
ðCGðT 	™' "°Ô:ðUGðf 	‘7ØØØ0�i×0Ñ0°Ó>Ø'�)×'Ñ'¨Ó5ô	
ðgGñt !ØØØ×2Ñ2ô
ñ & c°hÔ?ñ & c°hÔ?á '¨¸Ô AòMGóJ€
ñV ,¨JÓ7Ð ô�—‘ô ÷P
ñ P
ðf8Ø	ð8Ø%)ð8àó8óv(óVóó2#óLð: 	×ÑôZ	;ˆJó Z	;ó ðZ	;ôz+r�   