Ë
    £èh;  ã                  óD  — d dl mZ d dlmZmZ d dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZmZ ddlmZ erd d	lmZ ej&                  ej(                  ej*                  hZej.                  ej0                  ej2                  hZ G d
„ dej6                  «      Z G d„ de«      Zy)é    )Úannotations)ÚTYPE_CHECKINGÚAnyN)ÚMTextEntityAlignmentÚMAP_MTEXT_ALIGN_TO_FLAGS)Úconst)ÚUVecÚVec3é   )ÚSubscriptAttributes)ÚGenericLayoutTypec                  ó   — e Zd ZdZdZdZy)ÚMirrorr   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNONEÚMIRROR_XÚMIRROR_Y© ó    ú;lib/python3.12/site-packages/ezdxf/addons/mtextsurrogate.pyr   r       s   „ Ø€DØ€HØ�Hr   r   c            
      ó  — e Zd ZdZej
                  Zej                  Zej                  Zde	j                  dddddej
                  dej                  f
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zdd	„Zdd
„Zdd„Zdd„Zy)ÚMTextSurrogatea\  MTEXT surrogate for DXF R12 build up by TEXT Entities. This add-on was
    added to simplify the transition from :mod:`dxfwrite` to :mod:`ezdxf`.

    The rich-text formatting capabilities for the regular MTEXT entity are not
    supported, if these features are required use the regular MTEXT entity and
    the :class:`~ezdxf.addons.MTextExplode` add-on to explode the MTEXT entity
    into DXF primitives.

    .. important::

        The align-point is always the insert-point, there is no need for
        a second align-point because the horizontal alignments FIT, ALIGN,
        BASELINE_MIDDLE are not supported.

    Args:
        text: content as string
        insert: insert location in drawing units
        line_spacing: line spacing in percent of height, 1.5 = 150% = 1+1/2 lines
        align: text alignment as :class:`~ezdxf.enums.MTextEntityAlignment` enum
        char_height: text height in drawing units
        style: :class:`~ezdxf.entities.Textstyle` name as string
        oblique: oblique angle in degrees, where 0 is vertical
        rotation: text rotation angle in degrees
        width_factor: text width factor as float
        mirror: :attr:`MTextSurrogate.MIRROR_X` to mirror the text horizontal
            or :attr:`MTextSurrogate.MIRROR_Y` to mirror the text vertical
        layer: layer name as string
        color: :ref:`ACI`

    g      ø?g      ð?ÚSTANDARDç        Ú0c                ó¢  — |j                  d«      | _        t        |«      | _        t	        |«      | _        t        |t        «      sJ ‚|| _        t	        |«      | _	        t        |«      | _        t	        |«      | _        t	        |«      | _        t	        |	«      | _        t        |
«      | _        t        |«      | _        t        |«      | _        y )NÚ
)ÚsplitÚcontentr
   ÚinsertÚfloatÚline_spacingÚ
isinstancer   ÚalignÚchar_heightÚstrÚstyleÚobliqueÚrotationÚwidth_factorÚintÚmirrorÚlayerÚcolor)ÚselfÚtextr$   r&   r(   r)   r+   r,   r-   r.   r0   r1   r2   s                r   Ú__init__zMTextSurrogate.__init__J   s    € ð #'§*¡*¨TÓ"2ˆŒÜ˜6“lˆŒÜ! ,Ó/ˆÔÜ˜%Ô!5Ô6Ð6Ð6ØˆŒ
ä  Ó-ˆÔÜ˜“ZˆŒ
Ü˜W“~ˆŒÜ˜h›ˆŒÜ! ,Ó/ˆÔÜ˜&“kˆŒÜ˜“ZˆŒ
Ü˜“Zˆ�
r   c                ó4   — | j                   | j                  z  S )z'Absolute line spacing in drawing units.)r)   r&   )r3   s    r   Úline_heightzMTextSurrogate.line_heighth   s   € ð ×Ñ $×"3Ñ"3Ñ3Ð3r   c                óœ  — | j                   }t        |«      dkD  rt| j                  t        j                  z  r|j                  «        t        |«      D ]8  \  }}| j                  |«      }|j                  || j                  |«      ¬«       Œ: yt        |«      dk(  r0|j                  |d   | j                  | j                  «      ¬«       yy)zkRender the multi-line content as separated TEXT entities into the
        given `layout` instance.
        r   )Ú
dxfattribsr   N)r#   Úlenr0   r   r   ÚreverseÚ	enumerateÚ_get_align_pointÚadd_textÚ_dxfattribsr$   )r3   ÚlayoutÚ
text_linesÚline_numberr4   Úalign_points         r   ÚrenderzMTextSurrogate.renderm   s¸   € ð —\‘\ˆ
Üˆz‹?˜QÒØ�{‰{œUŸ^™^Ò+Ø×"Ñ"Ô$Ü%.¨zÖ%:Ñ!�˜TØ"×3Ñ3°KÓ@�Ø—‘ØØ#×/Ñ/°Ó<ð  õ ñ &;ô �‹_ Ò!Ø�O‰OØ˜1‘Ø×+Ñ+¨D¯K©KÓ8ð õ ð "r   c                ó&  — | j                   j                  }| j                   j                  }	 | j                   j                  }| j
                  t        v r||| j                  z  z  }n}| j
                  t        v r@|| j                  z  }t        | j                  «      dz
  | j                  z  }||dz  |z
  z  }n+|t        | j                  «      dz
  |z
  | j                  z  z  }| j                  t        |||«      «      S # t        $ r d}Y ŒËw xY w)z7Calculate the align-point depending on the line number.r   r   r   )r$   ÚxÚyÚzÚ
IndexErrorr(   Ú	TOP_ALIGNr7   ÚMIDDLE_ALIGNr:   r#   Ú_rotater
   )r3   rB   rF   rG   rH   Úy0Úfull_heights          r   r=   zMTextSurrogate._get_align_point�   só   € à�K‰K�M‰MˆØ�K‰K�M‰Mˆð	Ø—‘—‘ˆAð
 �:‰:œÑ"Ø�˜t×/Ñ/Ñ/Ñ/‰AØ�Z‰Zœ<Ñ'Ø˜t×/Ñ/Ñ/ˆBÜ˜tŸ|™|Ó,¨qÑ0°D×4DÑ4DÑDˆKØ�+ ‘/ RÑ'Ñ'‰Aà”#�d—l‘lÓ# aÑ'¨+Ñ5¸×9IÑ9IÑIÑIˆAØ�|‰|œD  A q›MÓ*Ð*øô ò 	ØŠAð	ús   ®D ÄDÄDc                óB  — |j                   | j                  j                   z
  }|j                  | j                  j                  z
  }t        j                  | j
                  «      }| j                  j                   |t        j                  |«      z  z   |t        j                  |«      z  z
  }| j                  j                  |t        j                  |«      z  z   |t        j                  |«      z  z   }t        t        |d«      t        |d«      |j                  «      S )z?Rotate `alignpoint` around insert-point about rotation degrees.é   )rF   r$   rG   ÚmathÚradiansr-   ÚcosÚsinr
   ÚroundrH   )r3   Ú
alignpointÚdxÚdyÚbetarF   rG   s          r   rL   zMTextSurrogate._rotate•   sÁ   € à�\‰\˜DŸK™KŸM™MÑ)ˆØ�\‰\˜DŸK™KŸM™MÑ)ˆÜ�|‰|˜DŸM™MÓ*ˆØ�K‰K�M‰M˜B¤§¡¨$£Ñ/Ñ/°"´t·x±xÀ³~Ñ2EÑEˆØ�K‰K�M‰M˜B¤§¡¨$£Ñ/Ñ/°"´t·x±xÀ³~Ñ2EÑEˆÜ”E˜!˜Q“K¤ q¨!£¨j¯l©lÓ;Ð;r   c                óì   — t         | j                     \  }}||| j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  ||dœS )z1Build keyword arguments for TEXT entity creation.)r$   rC   r1   r2   r+   ÚheightÚwidthÚtext_generation_flagr-   r,   ÚhalignÚvalign)
r   r(   r1   r2   r+   r)   r.   r0   r-   r,   )r3   rC   r^   r_   s       r   r?   zMTextSurrogate._dxfattribsž   sf   € ä1°$·*±*Ñ=‰ˆ�à!Ø&Ø—Z‘ZØ—Z‘ZØ—Z‘ZØ×&Ñ&Ø×&Ñ&Ø$(§K¡KØŸ™Ø—|‘|ØØñ
ð 	
r   N)r4   r*   r$   r	   r&   r%   r)   r%   r,   r%   r-   r%   r.   r%   r2   r/   )Úreturnr%   )r@   r   r`   ÚNone)rB   r/   r`   r
   )rV   r
   r`   r
   )rC   r
   r`   zdict[str, Any])r   r   r   Ú__doc__r   r   ÚMIRROR_NONEr   r   r   ÚTOP_LEFTr   ÚBYLAYERr5   Úpropertyr7   rD   r=   rL   r?   r   r   r   r   r   &   sÍ   „ ñð> —+‘+€KØ�‰€HØ�‰€Hð "Ø"×+Ñ+Ø ØØØØ!Ø�{‰{ØØ—]‘]ð àð ð ð ð ð	 ð ð ð ð ð ð ð ð ð ó ð< ò4ó ð4óó(+ó(<ô
r   r   )Ú
__future__r   Útypingr   r   rQ   ÚenumÚezdxf.enumsr   r   Úezdxf.lldxfr   Ú
ezdxf.mathr	   r
   Úmixinsr   Úezdxf.eztypesr   rd   Ú	TOP_RIGHTÚ
TOP_CENTERrJ   ÚMIDDLE_LEFTÚMIDDLE_CENTERÚMIDDLE_RIGHTrK   ÚIntEnumr   r   r   r   r   Ú<module>ru      s�   ðõ #ß %Û Û ÷õ ß !Ý 'áÝ/ð ×!Ñ!Ø×"Ñ"Ø×#Ñ#ð€	ð ×$Ñ$Ø×&Ñ&Ø×%Ñ%ð€ôˆT�\‰\ô ôH
Ð(õ H
r   