
    'jT3                    T   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'dS ))    )annotations)castAnyOptionalTYPE_CHECKINGN)MText
DXFGraphic	Textstyle)TextEntityAlignment)Drawing)Matrix44)fonts)text_layout)MTextContext)AbstractMTextRenderer)GenericLayoutTypeMTextExplodec                  .    e Zd ZddZ	 dddZ	 dddZdS )FrameRendererattribsdictlayoutr   c                "    || _         || _        d S N)line_attribsr   )selfr   r   s      L/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/mtxpl.py__init__zFrameRenderer.__init__   s    #    Nleftfloatbottomrighttopmr   returnNonec                    | j                             ||f||f||f||fgd| j                  }|r|                    |           d S d S )NT)close
dxfattribs)r   add_lwpolyliner   	transform)r   r    r"   r#   r$   r%   plines          r   renderzFrameRenderer.render   sq     **C[5#,$H( + 
 

  	OOA	 	r   x1y1x2y2c                    | j                             ||f||f| j                  }|r|                    |           d S d S Nr*   )r   add_liner   r,   )r   r/   r0   r1   r2   r%   lines          r   r7   zFrameRenderer.line-   sU     {##RHr2h4CT#UU 	NN1	 	r   )r   r   r   r   r   )r    r!   r"   r!   r#   r!   r$   r!   r%   r   r&   r'   )r/   r!   r0   r!   r1   r!   r2   r!   r%   r   r&   r'   )__name__
__module____qualname__r   r.   r7    r   r   r   r      sf                " IM      r   r   c                  :     e Zd Z	 	 	 	 dd fdZ	 dd fdZ xZS )ColumnBackgroundRendererNr   Fr   r   r   r   bg_aciOptional[int]bg_true_coloroffsetr!   
text_frameboolc                    t                                          ||           d | _        |t          |          | _        || j        d<   n |t          |          | _        || j        d<   || _        || _        d S Ncolor
true_color)superr   solid_attribsr   rA   has_text_frame)r   r   r   r>   r@   rA   rB   	__class__s          r   r   z!ColumnBackgroundRenderer.__init__6   s     	&)))!!%gD*0Dw''&!%gD/<D|,(r   r    r"   r#   r$   r%   Optional[Matrix44]r&   r'   c                0   | j         }||z  }||z  }||z  }||z  }| j        D| j                            ||f||f||f||fg| j                  }|r|                    |           | j        r't                                          |||||           d S d S r4   )rA   rI   r   	add_solidr,   rJ   rH   r.   )	r   r    r"   r#   r$   r%   rA   solidrK   s	           r   r.   zColumnBackgroundRenderer.renderJ   s     v&)K))uclT6NUFOL- *  E
  #""" 	8GGNN4Q77777	8 	8r   )NNr   F)r   r   r   r   r>   r?   r@   r?   rA   r!   rB   rC   r   )r    r!   r"   r!   r#   r!   r$   r!   r%   rL   r&   r'   )r8   r9   r:   r   r.   __classcell__rK   s   @r   r=   r=   5   sx        
 !%'+ ) ) ) ) ) ) )4 !%8 8 8 8 8 8 8 8 8 8 8r   r=   c                  0     e Zd ZdZd fd	Z	 dddZ xZS )TextRendererzText content renderer.textstrtext_attribsr   r   r   r   c                h    t                                          ||           || _        || _        d S r   )rH   r   rT   rV   )r   rT   rV   r   r   rK   s        r   r   zTextRenderer.__init__h   s4     	v...	(r   Nr    r!   r"   r#   r$   r%   rL   c                    | j                             | j        | j                  }|                    ||ft
          j                   |r|                    |           dS dS )zCreate/render the text contentr5   alignN)r   add_textrT   rV   set_placementr   LEFTr,   )r   r    r"   r#   r$   r%   rT   s          r   r.   zTextRenderer.renders   sn     {##DI$:K#LLD&>1D1IJJJ 	NN1	 	r   )rT   rU   rV   r   r   r   r   r   r   )
r    r!   r"   r!   r#   r!   r$   r!   r%   rL   )r8   r9   r:   __doc__r   r.   rP   rQ   s   @r   rS   rS   e   sa          	) 	) 	) 	) 	) 	)" !%        r   rS   entityr	   r&   fonts.FontFacec                   | j         r	|| j         }|
J d            d}| j                            d          r| j        j        }t	          j                    }|r|t          t          |j        	                    |                    }|
                                \  }}}|r$|rdnd}|rdnd}	t	          j        |||		          }n"|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.

    Nzvalid DXF document required styleItalicRegulari  i  )familyrc   weight)docdxfis_supportedrc   r   FontFacer   r
   stylesgetget_extended_font_datafontget_font_face)r_   rh   
style_name	font_facerc   rf   italicbold
text_styletext_weightttfs              r   rp   rp      s    z ckj??9???J zw'' &Z%
  I 5coY
z : :;;$;;== 		5%+:J!%.##3KZ  II ).C 5!/44	r   ctxr   r   c                ^    d| j         i}| j        t          j        | j                  |d<   |S rE   )acirgbezdxfrgb2int)rx   r   s     r   get_color_attribsr~      s1     G
w %cg 6 6Nr   mtextr   r   r   c                   t          |           }| j        }|                    dd          }d }d }d}d}|r|j        |                    dd          dz
  z  }|t          j        j        z  rG|                    d          r|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)r>   r@   rA   rB   )get_base_attribsri   rm   char_heightr|   constMTEXT_BG_COLORhasattrr   r   MTEXT_TEXT_FRAMEr=   )	r   r   r   ri   r   r>   r@   rJ   rA   s	            r   make_bg_rendererr      s   u%%G
)Cggi##GFMNF " CGG,<c$B$BQ$FGU[// 	%{{?++ +*{{/00 7 # 6!!!  $U[11 	"!N##!   r   c                2    | j         }|j        |j        d}|S )N)layerrF   )ri   r   rF   )r   ri   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d0dZ	d Z
d Zd1d Zd2d"Zd3d$Zd4d5d&Zd' Zd6d)Z xZS )7r   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.

    N      ?r   r   rh   Optional[Drawing]spacing_factorr!   c                    t                                                       || _        || _        t	          |          | _        i | _        t                      | _        d S r   )	rH   r   r   _docr!   _spacing_factor_required_text_stylesr   current_base_attribs)r   r   rh   r   rK   s       r   r   zMTextExplode.__init__   sS     	)/	$^44@B"48FF!!!r   r   r   r&   	tl.Layoutc                n    t          |          | _        t                                          |          S r   )r   r   rH   layout_engine)r   r   rK   s     r   r   zMTextExplode.layout_engine   s+    $4U$;$;!ww$$U+++r   rT   rU   rx   r   tl.ContentCellc                   t          | j        pi           }|                    t          |                     t          |          }|                    |                     |                     t          j        |                     |                              |          |j	        t          j
        |j                  |                     |          t          |||| j                            S )N)widthheightvalignstrokerenderer)r   r   updater~   get_text_attribstlTextget_font
text_width
cap_heightCellAlignmentrZ   
get_strokerS   r   )r   rT   rx   r   rV   s        r   wordzMTextExplode.word  s    D5;<<-c22333L))D11#66777w--$$//55>#CI..??3''!$lDKPP
 
 
 	
r   datatuplec           	        |\  }}}|rkt          j        |                     ||          |                     ||          |                     |          t	          | j        | j                            S |                     ||          S )N)r$   r"   stackingr   )r   Fractionr   get_stackingr   r   r   )r   r   rx   uprlwrtype_s         r   fractionzMTextExplode.fraction  s    S% 		';IIc3''yyc****511&t'@$+NN    99S#&&&r   r`   c                     t          |          S r   )rp   r   r   s     r   rp   zMTextExplode.get_font_face  s    U###r   tl.ContentRendererc                ,    t          || j                  S r   )r   r   r   s     r   r   zMTextExplode.make_bg_renderer  s    t{333r   c                    | S r   r;   )r   s    r   	__enter__zMTextExplode.__enter__#  s    r   c                .    |                                   d S r   )finalize)r   exc_typeexc_valexc_tbs       r   __exit__zMTextExplode.__exit__&  s    r   rr   c                    d}|j         r|dz  }|j        r|dz  }|dk    rt          |          nd}d|j         |z   }|| j        |<   |S )Nr   r      rb   MtXpl_)is_bold	is_italicrU   rf   r   )r   rr   rc   	style_strru   s        r   mtext_exploded_text_stylez&MTextExplode.mtext_exploded_text_style)  sn     	QJE 	QJE"'!))CJJJ	0i.009<
1:":.r   fonts.AbstractFontc                    t          j        |j                  }||j        |j        f}| j                            |          }|*t          j        ||j        |j                  }|| j        |<   |S r   )r   find_font_file_namerr   r   width_factor_font_cacherm   	make_font)r   rx   rw   keyro   s        r   r   zMTextExplode.get_font5  sj    '66CNC$45##C((<?38HIID$(DS!r   r   c                    |j         |                     |j                  d}t          j        |j        d          s
|j        |d<   t          |j                  dk    r
|j        |d<   |S )N)r   rc   r   r   gư>oblique)r   r   rr   mathiscloser   absr   )r   rx   r   s      r   r   zMTextExplode.get_text_attribs>  sr    n33CMBB
 
 |C,c22 	0"/GGs{d""!$GIr   Tc                    t          j        |j        j                  }|                     |          }|                    |           |                    |                                j                   |r|	                                 dS dS )zaExplode `mtext` and destroy the source entity if argument `destroy`
        is ``True``.
        rY   N)
r   LayoutAlignmentri   attachment_pointr   placer.   ucsmatrixdestroy)r   r   r   rZ   r   s        r   explodezMTextExplode.explodeI  s     "59#=>>**511%(((UYY[[/000 	MMOOOOO	 	r   c                    | j         }|| j        j        }|t          j        d          |j        }|                                 D ]-}	 |                    |           # t          j        $ r Y *w xY wdS )zCreate 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   rh   r|   DXFValueErrorrl   !make_required_style_table_entries	add_entryDXFTableEntryError)r   rh   text_stylesrc   s       r   r   zMTextExplode.finalizeT  s     i;+/C;%A   j;;== 	 	E%%e,,,,+   	 	s   
A  A21A2list[Textstyle]c                8   d
d}g }| j                                         D ]y\  }} ||          }t          j        ||d          }|                    d          s'|                    |j        |j        |j        	           |	                    |           z|S )Nrr   r`   r&   rU   c                r    | j         }|st          j        |           }nt          j        |          }|r|}|S r   )filenamer   r   map_ttf_to_shx)rr   rw   shxs      r   ttf_pathz@MTextExplode.make_required_style_table_entries.<locals>.ttf_pathj  sH    $C /	:: *3// CJr   )namero   r5   z.SHX)rs   rt   rr   r`   r&   rU   )
r   itemsr
   newendswithset_extended_font_datarf   r   r   append)r   r   r   r   rr   rw   rc   s          r   r   z.MTextExplode.make_required_style_table_entriesi  s    
	 
	 
	 
	 (*#9??AA 	& 	&OD)(9%%CM. .   E <<'' ,,$$."* -   
 u%%%%r   )Nr   )r   r   rh   r   r   r!   )r   r   r&   r   )rT   rU   rx   r   r&   r   )r   r   rx   r   r&   r   )r   r   r&   r`   )r   r   r&   r   r   )rx   r   r&   r   rx   r   r&   r   )T)r   r   )r&   r   )r8   r9   r:   r^   r   r   r   r   rp   r   r   r   r   r   r   r   r   r   rP   rQ   s   @r   r   r      sX       	 	 "& #	; ; ; ; ; ; ; , , , , , ,
 
 
 
' ' ' '$ $ $ $4 4 4 4
    
 
 
 
   	 	 	 		 	 	 	 	  *       r   r   )r_   r	   r&   r`   r   )r   r   r   r   )r   r   r&   r   )(
__future__r   typingr   r   r   r   r   r|   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   rp   r~   r   r   r   r;   r   r   <module>r      s'   # " " " " " 5 5 5 5 5 5 5 5 5 5 5 5   7 7 7 7 7 7 7 7 7 7 + + + + + + # " " " " "             ) ) ) ) ) ) ) ) ) ) ) ) F F F F F F 0//////
    B&   :-8 -8 -8 -8 -8} -8 -8 -8`    =   <" " " " "J   & & & &R   c c c c c( c c c c cr   