Ë
    £èhØ4  ã                  óD  — d dl mZ d dlmZmZmZmZ d dlZd dlZd dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ erd dlmZ dgZ G d„ dej>                  «      Z  G d„ de «      Z! G d„ de «      Z"ddd„Z#dd„Z$dd„Z%dd„Z& G d„ de«      Z'y)é    )Úannotations)ÚcastÚAnyÚOptionalÚTYPE_CHECKINGN)ÚMTextÚ
DXFGraphicÚ	Textstyle)ÚTextEntityAlignment)ÚDrawing)ÚMatrix44)Úfonts)Útext_layout)ÚMTextContext)ÚAbstractMTextRenderer)ÚGenericLayoutTypeÚMTextExplodec                  óX   — e Zd Zdd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zy)	ÚFrameRendererc                ó    — || _         || _        y ©N)Úline_attribsÚlayout)ÚselfÚattribsr   s      ú2lib/python3.12/site-packages/ezdxf/addons/mtxpl.pyÚ__init__zFrameRenderer.__init__   s   € Ø#ˆÔØˆ�ó    Nc                ó”   — | j                   j                  ||f||f||f||fgd| j                  ¬«      }|r|j                  |«       y y )NT)ÚcloseÚ
dxfattribs)r   Úadd_lwpolyliner   Ú	transform)r   ÚleftÚbottomÚrightÚtopÚmÚplines          r   ÚrenderzFrameRenderer.render   s[   € ð —‘×*Ñ*Ø�Cˆ[˜5 #˜,¨°¨¸$À¸ÐHØØ×(Ñ(ð +ó 
ˆñ
 Ø�O‰O˜AÕð r   c                ó„   — | j                   j                  ||f||f| j                  ¬«      }|r|j                  |«       y y ©N©r!   )r   Úadd_liner   r#   )r   Úx1Úy1Úx2Úy2r(   Úlines          r   r3   zFrameRenderer.line-   sA   € ð �{‰{×#Ñ# R¨ H¨r°2¨hÀ4×CTÑCTÐ#ÓUˆÙØ�N‰N˜1Õð r   )r   Údictr   r   r   )r$   Úfloatr%   r5   r&   r5   r'   r5   r(   r   ÚreturnÚNone)r/   r5   r0   r5   r1   r5   r2   r5   r(   r   r6   r7   )Ú__name__Ú
__module__Ú__qualname__r   r*   r3   © r   r   r   r      s‡   „ óð ðàðð ðð ð	ð
 ðð ðð 
óð" IMðØðØ"ðØ(-ðØ38ðØ=Eðà	ôr   r   c                  óf   ‡ — e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚColumnBackgroundRendererc                óÖ   •— t         ‰| �  ||«       d | _        |� t        |«      | _        || j                  d<   n!|�t        |«      | _        || j                  d<   || _        || _        y ©NÚcolorÚ
true_color)Úsuperr   Úsolid_attribsr4   ÚoffsetÚhas_text_frame)r   r   r   Úbg_aciÚbg_true_colorrD   Ú
text_frameÚ	__class__s          €r   r   z!ColumnBackgroundRenderer.__init__6   so   ø€ ô 	‰Ñ˜ &Ô)Ø!ˆÔØÐÜ!% g£ˆDÔØ*0ˆD×Ñ˜wÒ'ØÐ&Ü!% g£ˆDÔØ/<ˆD×Ñ˜|Ñ,ØˆŒØ(ˆÕr   c                ó*  •— | j                   }||z  }||z  }||z  }||z  }| j                  �F| j                  j                  ||f||f||f||fg| j                  ¬«      }|r|j	                  |«       | j
                  rt        ‰| �  |||||«       y y r,   )rD   rC   r   Ú	add_solidr#   rE   rB   r*   )	r   r$   r%   r&   r'   r(   rD   ÚsolidrI   s	           €r   r*   zColumnBackgroundRenderer.renderJ   s°   ø€ ð —‘ˆØ�‰ˆØ�‰ˆØˆv‰ˆØ�&ÑˆØ×ÑÐ)Ø—K‘K×)Ñ)à˜�˜u c˜l¨T°6¨N¸UÀF¸OÐLØ×-Ñ-ð *ó ˆEñ
 Ø—‘ Ô"Ø×ÒÜ‰G‰N˜4 ¨°°QÕ7ð r   )NNr   F)r   r4   r   r   rF   úOptional[int]rG   rM   rD   r5   rH   Úboolr   )r$   r5   r%   r5   r&   r5   r'   r5   r(   úOptional[Matrix44]r6   r7   )r8   r9   r:   r   r*   Ú__classcell__©rI   s   @r   r=   r=   5   s™   ø„ ð
 !%Ø'+ØØ ð)àð)ð "ð)ð ð	)ð
 %ð)ð ð)ð õ)ð4 !%ð8àð8ð ð8ð ð	8ð
 ð8ð ð8ð 
÷8ñ 8r   r=   c                  óR   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 dˆ fd„Z	 d	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚTextRendererzText content renderer.c                óB   •— t         ‰| �  ||«       || _        || _        y r   )rB   r   ÚtextÚtext_attribs)r   rU   rV   r   r   rI   s        €r   r   zTextRenderer.__init__h   s#   ø€ ô 	‰Ñ˜ vÔ.ØˆŒ	Ø(ˆÕr   c                óÔ   — | j                   j                  | j                  | j                  ¬«      }|j	                  ||ft
        j                  ¬«       |r|j                  |«       yy)zCreate/render the text contentr-   ©ÚalignN)r   Úadd_textrU   rV   Úset_placementr   ÚLEFTr#   )r   r$   r%   r&   r'   r(   rU   s          r   r*   zTextRenderer.renders   sY   € ð �{‰{×#Ñ# D§I¡I¸$×:KÑ:KÐ#ÓLˆØ×Ñ˜D &˜>Ô1D×1IÑ1IÐÔJÙØ�N‰N˜1Õð r   )rU   ÚstrrV   r4   r   r4   r   r   r   )
r$   r5   r%   r5   r&   r5   r'   r5   r(   rO   )r8   r9   r:   Ú__doc__r   r*   rP   rQ   s   @r   rS   rS   e   sk   ø„ Ù ð	)àð	)ð ð	)ð ð		)ð
 "õ	)ð" !%ðàðð ðð ð	ð
 ðð ÷r   rS   c                ó  — | j                   r|€| j                   }|€J d«       ‚d}| j                  j                  d«      r| j                  j                  }t	        j
                  «       }|r”|�’t        t        |j                  j                  |«      «      }|j                  «       \  }}}|r&|rdnd}|rdnd}	t	        j
                  |||	¬«      }|S |j                  j                  }
|
rt	        j                  |
«      }|S )	aª  Returns the :class:`~ezdxf.tools.fonts.FontFace` defined by the
    associated text style. Returns the default font face if the `entity` does
    not have or support the DXF attribute "style".

    Pass a DXF document as argument `doc` to resolve text styles for virtual
    entities which are not assigned to a DXF document. The argument `doc`
    always overrides the DXF document to which the `entity` is assigned to.

    zvalid DXF document requiredÚ ÚstyleÚItalicÚRegulari¼  i�  )Úfamilyra   Úweight)ÚdocÚdxfÚis_supportedra   r   ÚFontFacer   r
   ÚstylesÚgetÚget_extended_font_dataÚfontÚget_font_face)Úentityrf   Ú
style_nameÚ	font_facera   rd   ÚitalicÚboldÚ
text_styleÚtext_weightÚttfs              r   rn   rn   ƒ   së   € ð ‡z‚z�c�kØ�j‰jˆØˆ?Ð9Ð9Ó9ˆ?à€Jð ‡z�z×Ñ˜wÔ'Ø—Z‘Z×%Ñ%ˆ
ä—‘Ó €IÙ�c�oÜ”Y §
¡
§¡¨zÓ :Ó;ˆØ$×;Ñ;Ó=Ñˆ�˜ÙÙ%+™°ˆJÙ!%™#¨3ˆKÜŸ™Ø Z¸ôˆIð Ðð —)‘)—.‘.ˆCÙÜ!×/Ñ/°Ó4�	ØÐr   c                ó~   — d| j                   i}| j                  �"t        j                  | j                  «      |d<   |S r?   )ÚaciÚrgbÚezdxfÚrgb2int)Úctxr   s     r   Úget_color_attribsr}   ¨   s6   € Ø˜Ÿ™Ð €GØ
‡w�wÐÜ %§¡¨c¯g©gÓ 6ˆ�ÑØ€Nr   c                óÖ  — t        | «      }| j                  }|j                  dd«      }d }d }d}d}|r¦|j                  |j                  dd«      dz
  z  }|t        j
                  j                  z  rH|j                  d«      r|j                  }|j                  d«      rd }|j                  }|d	z  d	k(  rd }d }|t        j
                  j                  z  rd
}t        ||||||¬«      S )NÚbg_fillr   FÚbox_fill_scaleg      ø?é   Úbg_fill_colorÚbg_fill_true_coloré   T)rF   rG   rD   rH   )Úget_base_attribsrg   rk   Úchar_heightrz   ÚconstÚMTEXT_BG_COLORÚhasattrr‚   rƒ   ÚMTEXT_TEXT_FRAMEr=   )	Úmtextr   r   rg   r   rF   rG   rE   rD   s	            r   Úmake_bg_rendererrŒ   ¯   sñ   € Ü˜uÓ%€GØ
�)‰)€CØ�g‰g�i Ó#€Gà€FØ€MØ€NØ€FÙð —‘ C§G¡GÐ,<¸cÓ$BÀQÑ$FÑGˆØ”U—[‘[×/Ñ/Ò/Ø�{‰{˜?Ô+Ø×*Ñ*�à�{‰{Ð/Ô0Ø�Ø #× 6Ñ 6�à˜!‘ Ò!ð �Ø $�à”U—[‘[×1Ñ1Ò1Ø!ˆNä#ØØØØ#ØØ!ôð r   c                óP   — | j                   }|j                  |j                  dœ}|S )N)Úlayerr@   )rg   rŽ   r@   )r‹   rg   r   s      r   r…   r…   Ø   s'   € Ø
�)‰)€Cà—‘Ø—‘ñ€Gð €Nr   c                  óœ   ‡ — e Zd ZdZ	 	 d	 	 	 	 	 dˆ fd„Zdˆ fd„Zdd„Zdd„Zdd„Zdd„Z	d„ Z
d	„ Zdd
„Zdd„Zdd„Zddd„Zd„ Zdd„Zˆ xZS )r   aÙ  The :class:`MTextExplode` class is a tool to disassemble MTEXT entities
    into single line TEXT entities and additional LINE entities if required to
    emulate strokes.

    The `layout` argument defines the target layout  for "exploded" parts of the
    MTEXT entity. Use argument `doc` if the target layout has no DXF document assigned
    like virtual layouts.  The `spacing_factor` argument is an advanced tuning parameter
    to scale the size of space chars.

    c                óŠ   •— t         ‰| �  «        || _        || _        t	        |«      | _        i | _        t        «       | _        y r   )	rB   r   r   Ú_docr5   Ú_spacing_factorÚ_required_text_stylesr4   Úcurrent_base_attribs)r   r   rf   Úspacing_factorrI   s       €r   r   zMTextExplode.__init__í   s=   ø€ ô 	‰ÑÔØ)/ˆŒØˆŒ	ä$ ^Ó4ˆÔØ@BˆÔ"Ü48³FˆÕ!r   c                óB   •— t        |«      | _        t        ‰| �  |«      S r   )r…   r”   rB   Úlayout_engine)r   r‹   rI   s     €r   r—   zMTextExplode.layout_engineý   s    ø€ Ü$4°UÓ$;ˆÔ!Ü‰wÑ$ UÓ+Ð+r   c                óÆ  — t        | j                  xs i «      }|j                  t        |«      «       t        |«      }|j                  | j	                  |«      «       t        j                  | j                  |«      j                  |«      |j                  t        j                  |j                  «      | j                  |«      t        |||| j                  «      ¬«      S )N)ÚwidthÚheightÚvalignÚstrokeÚrenderer)r4   r”   Úupdater}   Úget_text_attribsÚtlÚTextÚget_fontÚ
text_widthÚ
cap_heightÚCellAlignmentrY   Ú
get_strokerS   r   )r   rU   r|   r   rV   s        r   ÚwordzMTextExplode.word  s­   € Ü˜D×5Ñ5Ò;¸Ó<ˆØ×ÑÔ-¨cÓ2Ô3Ü˜LÓ)ˆØ×Ñ˜D×1Ñ1°#Ó6Ô7Ü�w‰wØ—-‘- Ó$×/Ñ/°Ó5Ø—>‘>Ü×#Ñ# C§I¡IÓ.Ø—?‘? 3Ó'Ü! $¨°lÀDÇKÁKÓPô
ð 	
r   c           	     ó  — |\  }}}|rft        j                  | j                  ||«      | j                  ||«      | j                  |«      t	        | j
                  | j                  «      ¬«      S | j                  ||«      S )N)r'   r%   Ústackingr�   )r    ÚFractionr§   Úget_stackingr   r”   r   )r   Údatar|   ÚuprÚlwrÚtype_s         r   ÚfractionzMTextExplode.fraction  sr   € Ø‰ˆˆS�%ÙÜ—;‘;Ø—I‘I˜c 3Ó'Ø—y‘y  cÓ*Ø×*Ñ*¨5Ó1ä& t×'@Ñ'@À$Ç+Á+ÓNôð ð —9‘9˜S #Ó&Ð&r   c                ó   — t        |«      S r   )rn   ©r   r‹   s     r   rn   zMTextExplode.get_font_face  s   € Ü˜UÓ#Ð#r   c                ó.   — t        || j                  «      S r   )rŒ   r   r²   s     r   rŒ   zMTextExplode.make_bg_renderer  s   € Ü  t§{¡{Ó3Ð3r   c                ó   — | S r   r;   )r   s    r   Ú	__enter__zMTextExplode.__enter__#  s   € Øˆr   c                ó$   — | j                  «        y r   )Úfinalize)r   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zMTextExplode.__exit__&  s   € Ø�‰�r   c                ó´   — d}|j                   r|dz  }|j                  r|dz  }|dkD  rt        |«      nd}d|j                  › �|z   }|| j                  |<   |S )Nr   r�   é   r`   ÚMtXpl_)Úis_boldÚ	is_italicr]   rd   r“   )r   rq   ra   Ú	style_strrt   s        r   Úmtext_exploded_text_stylez&MTextExplode.mtext_exploded_text_style)  sj   € ØˆØ×ÒØ�Q‰JˆEØ×ÒØ�Q‰JˆEØ"'¨!¢)”C˜”J°ˆ	à˜i×.Ñ.Ð/Ð0°9Ñ<ˆ
Ø1:ˆ×"Ñ" :Ñ.ØÐr   c                ó$  — t        j                  |j                  «      }||j                  |j                  f}| j
                  j                  |«      }|€:t        j                  ||j                  |j                  «      }|| j
                  |<   |S r   )r   Úfind_font_file_namerq   r¤   Úwidth_factorÚ_font_cacherk   Ú	make_font)r   r|   rv   Úkeyrm   s        r   r¢   zMTextExplode.get_font5  sx   € Ü×'Ñ'¨¯©Ó6ˆØ�C—N‘N C×$4Ñ$4Ð5ˆØ×Ñ×#Ñ# CÓ(ˆØˆ<Ü—?‘? 3¨¯©¸×8HÑ8HÓIˆDØ$(ˆD×Ñ˜SÑ!Øˆr   c                ó  — |j                   | j                  |j                  «      dœ}t        j                  |j
                  d«      s|j
                  |d<   t        |j                  «      dkD  r|j                  |d<   |S )N)rš   ra   ç      ð?r™   g�íµ ÷Æ°>Úoblique)r¤   rÂ   rq   ÚmathÚiscloserÅ   ÚabsrË   )r   r|   r   s      r   rŸ   zMTextExplode.get_text_attribs>  sl   € à—n‘nØ×3Ñ3°C·M±MÓBñ
ˆô �|‰|˜C×,Ñ,¨cÔ2Ø"×/Ñ/ˆG�GÑÜˆs�{‰{Ó˜dÒ"Ø!$§¡ˆG�IÑØˆr   c                ó  — t        j                  |j                  j                  «      }| j	                  |«      }|j                  |¬«       |j                  |j                  «       j                  «       |r|j                  «        yy)zaExplode `mtext` and destroy the source entity if argument `destroy`
        is ``True``.
        rX   N)
r    ÚLayoutAlignmentrg   Úattachment_pointr—   Úplacer*   ÚucsÚmatrixÚdestroy)r   r‹   rÕ   rY   r—   s        r   ÚexplodezMTextExplode.explodeI  sj   € ô ×"Ñ" 5§9¡9×#=Ñ#=Ó>ˆØ×*Ñ*¨5Ó1ˆØ×Ñ %ÐÔ(Ø×Ñ˜UŸY™Y›[×/Ñ/Ô0ÙØ�M‰M�Oð r   c                ó  — | j                   }|€| j                  j                  }|€t        j                  d«      ‚|j
                  }| j                  «       D ]  }	 |j                  |«       Œ y# t        j                  $ r Y Œ-w xY w)zàCreate required text styles. This method is called automatically if
        the class is used as context manager. This method does not work with virtual
        layouts if no document was assigned at initialization!
        NzsDXF document required, finalize() does not work with virtual layouts if no document was assigned at initialization.)	r‘   r   rf   rz   ÚDXFValueErrorrj   Ú!make_required_style_table_entriesÚ	add_entryÚDXFTableEntryError)r   rf   Útext_stylesra   s       r   r·   zMTextExplode.finalizeT  sˆ   € ð �i‰iˆØˆ;Ø—+‘+—/‘/ˆCØˆ;Ü×%Ñ%ðAóð ð —j‘jˆØ×;Ñ;Ö=ˆEðØ×%Ñ% eÕ,ñ >øô ×+Ñ+ò Ùðús   ÁA0Á0BÂBc                ó@  — dd„}g }| j                   j                  «       D ]z  \  }} ||«      }t        j                  ||dœ¬«      }|j	                  d«      s2|j                  |j                  |j                  |j                  ¬«       |j                  |«       Œ| |S )Nc                ó‚   — | j                   }|st        j                  | «      }|S t        j                  |«      }|r|}|S r   )Úfilenamer   rÄ   Úmap_ttf_to_shx)rq   rv   Úshxs      r   Úttf_pathz@MTextExplode.make_required_style_table_entries.<locals>.ttf_pathj  sF   € Ø×$Ñ$ˆCÙÜ×/Ñ/°	Ó:�ð ˆJô ×*Ñ*¨3Ó/�ÙØ�CØˆJr   )Únamerm   r-   z.SHX)rr   rs   ©rq   úfonts.FontFacer6   r]   )
r“   Úitemsr
   ÚnewÚendswithÚset_extended_font_datard   rÀ   r¿   Úappend)r   râ   rÜ   rã   rq   rv   ra   s          r   rÙ   z.MTextExplode.make_required_style_table_entriesi  s£   € ó
	ð (*ˆØ#×9Ñ9×?Ñ?ÖA‰OˆD�)Ù˜9Ó%ˆCÜ—M‘MØØñ.ô ˆEð —<‘< Ô'Ø×,Ñ,Ø×$Ñ$Ø$×.Ñ.Ø"×*Ñ*ð -ô ð
 ×Ñ˜uÕ%ð  Bð Ðr   )NrÊ   )r   r   rf   zOptional[Drawing]r•   r5   )r‹   r   r6   z	tl.Layout)rU   r]   r|   r   r6   útl.ContentCell)r¬   Útupler|   r   r6   rë   )r‹   r   r6   rå   )r‹   r   r6   ztl.ContentRendererrä   )r|   r   r6   zfonts.AbstractFont©r|   r   r6   r4   )T)r‹   r   )r6   zlist[Textstyle])r8   r9   r:   r^   r   r—   r§   r°   rn   rŒ   rµ   r»   rÂ   r¢   rŸ   rÖ   r·   rÙ   rP   rQ   s   @r   r   r   á   sr   ø„ ñ	ð "&Ø #ð	;à!ð;ð ð;ð õ	;õ ,ó
ó'ó$ó4ò
òó
óó	ô	ò÷*r   r   )ro   r	   r6   rå   rí   )r‹   r   r   r   )r‹   r   r6   r4   )(Ú
__future__r   Útypingr   r   r   r   rÌ   rz   Úezdxf.entitiesr   r	   r
   Úezdxf.enumsr   Úezdxf.documentr   Ú
ezdxf.mathr   Úezdxf.fontsr   Úezdxf.toolsr   r    Úezdxf.tools.textr   Ú$ezdxf.render.abstract_mtext_rendererr   Úezdxf.eztypesr   Ú__all__ÚContentRendererr   r=   rS   rn   r}   rŒ   r…   r   r;   r   r   Ú<module>rû      s‘   ðõ #ß 5Ó 5Û Û ß 7Ñ 7Ý +õ #Ý Ý Ý )Ý )Ý FáÝ/àÐ
€ô�B×&Ñ&ô ô:-8˜}ô -8ô`�=ô ô<"óJó&óRôcÐ(õ cr   