
    OgT3                    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      W/var/www/html/public_html/myphp/venv/lib/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(( + 

 OOA 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Hr2h4CTCT#UNN1 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*0D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&)KK))uclT6NUFOL-- * E
 "GN4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     {{##DII$:K:K#LD&>1D1I1IJNN1 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     zzckjj?999?J zzw'ZZ%%
 IcoY

z :;$;;=%+J!%#3K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
ww %cgg 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ggi#GFMNF CGG,<c$BQ$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"48F!r   c                B    t        |      | _        t        |   |      S r   )r   r   rB   layout_engine)r   r   rI   s     r   r   zMTextExplode.layout_engine   s     $4U$;!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ww--$//5>>##CII.??3'!$lDKK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%;;IIc3'yyc***51&t'@'@$++N  99S#&&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    QJEQJE"'!)CJ	i../09<
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CNNC$4$45##C(<??38H8HID$(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    nn33CMMB
 ||C,,c2"//GGs{{d"!$GI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     ""599#=#=>**51%(UYY[//0MMO r   c                   | j                   }|| j                  j                  }|t        j                  d      |j
                  }| j                         D ]  }	 |j                  |        y# t        j                  $ r Y -w xY w)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   rf   rz   DXFValueErrorrj   !make_required_style_table_entries	add_entryDXFTableEntryError)r   rf   text_stylesra   s       r   r   zMTextExplode.finalizeT  s     ii;++//C;%%A  jj;;= 	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 	&OD)9%CMM. E <<',,$$$.."** - 
 u%	& 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   