
    'j&                    R   d dl mZ d dlmZmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZ dgZej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej         ej        j        ej!        ej        j        iZ"ej#        ej        j        ej$        ej        j        ej%        ej        j        ej&        ej        j        ej'        ej        j        ej(        ej        j        ej)        ej        j        ej*        ej        j        ej+        ej        j        i	Z,ej-        j.        ej-        j/        ej-        j0        dZ1d-dZ2d.dZ3d/dZ4d0dZ5	 	 	 d1d2d#Z6d$ Z7d3d'Z8d4d+Z9 G d, dej:                  Z;dS )5    )annotations)SequenceOptionalN)const)colors)MTextMTextColumns)MTextParagraphAlignment)fonts)text_layout)MTextParserMTextContext	TokenTypeParagraphPropertiesestimate_mtext_extentsAbstractMTextRenderer)^/#
cap_heightfloatwidthreturnlist[tl.TabStop]c                    g }d| z  }|}||k     rB|                     t          j        |t          j        j                             ||z  }||k     B|S )Ng      @)appendtlTabStopTabStopTypeLEFT)r   r   	tab_stopsstepposs        ^/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/render/abstract_mtext_renderer.pymake_default_tab_stopsr%   8   s`    ID
C
++C)<==>>>t ++     r!   default_stopsSequence[tl.TabStop]Nonec                l    d| r| d         j         |                     fd|D                        d S )N        c              3  2   K   | ]}|j         k    |V  d S N)r#   ).0stoplast_poss     r$   	<genexpr>z+append_default_tab_stops.<locals>.<genexpr>H   s/      KKdtx(7J7JT7J7J7J7JKKr&   )r#   extend)r!   r'   r1   s     @r$   append_default_tab_stopsr4   B   sM     H %R=$KKKKmKKKKKKKKr&   r   c                   g }|D ]}t          |t                    rGt          |dd                    }|d         dk    rt          j        j        }n2t          j        j        }n t          j        j        }t          |          }|| z  }||k     r(|                    t          j	        ||                     t          ||           |S )N   r   c)
isinstancestrr   r   r   CENTERRIGHTr    r   r   r4   )	r   r   r!   r'   
_tab_stopsr0   valuekindr#   s	            r$   make_tab_stopsr?   K   s     J 5 5dC   	 $qrr(OOEAw#~~~,~+>&D$KKEj ;;bjd33444Z777r&   ctxr   intc                    d}| j         r|t          j        j        z  }| j        r|t          j        j        z  }| j        r|t          j        j        z  }| j        r|t          j        j	        z  }|S )Nr   )
	underliner   Stroke	UNDERLINEstrike_throughSTRIKE_THROUGHoverlineOVERLINEcontinue_strokeCONTINUE)r@   strokes     r$   
get_strokerM   d   sr    F
} &")%%
 +")**
| %")$$
 %")$$Mr&   r6   cellslistline_spacingOptional[Sequence[tl.TabStop]]c                   | r|j         }t                              |j        t          j        j                  }|j        |z  }|j        |z  }	||j	        |z  z   }
|pg }|}|j
        rt          |||j
        |          }t	          j        ||
||	f||          }|                    |            nt	          j        |j        |          }|S )N)alignindentrP   r!   )r   rP   )	paragraphALIGNgetrS   r   ParagraphAlignmentr    leftrightrT   r!   r?   	Paragraphappend_contentEmptyParagraphr   )rN   r@   r   rP   r   r'   prS   rY   rZ   first_default_stopsr!   rU   s                 r$   new_paragraphra   q   s      
M		!'2#8#=>>v
"*$qx*,,/</B"	; 	W&z5!+~VVIL4'%	
 
 
	 	  ''''%~L
 
 
	 r&   c                 0    t          j        ddd          S )Nr   )r   	min_width	max_width)r   NonBreakingSpace r&   r$   
super_gluerg      s    Q!qAAAAr&   mtextr   c                l    | j                             dd          }|dk     rt          |           \  }}|S )Nr   r+   ư>)dxfrW   r   )rh   r   heights      r$   defined_widthrm      s6    IMM'3''Et||.u55vLr&   columnsr	   list[Optional[float]]c                    | j         rt          | j                   }d |d<   |S t          | j                  }|dk     rd gS |g| j        z  S )Nr,   rj   )heightsrO   absdefined_heightcount)rn   rq   rs   s      r$   column_heightsru      s[     w''/00Nvgm++r&   c                      e Zd Zd#dZej        d$d	            Zej        d%d            Zej        d&d            Zej        d'd            Z	d(dZ
d)dZd*dZd+dZd,dZd-dZd-dZd-dZd.d!Zd"S )/r   r   r)   c                    i | _         d S r.   )_font_cache)selfs    r$   __init__zAbstractMTextRenderer.__init__   s    OQr&   testr9   r@   r   tl.ContentCellc                    d S r.   rf   )ry   r{   r@   s      r$   wordzAbstractMTextRenderer.word       r&   datatuple[str, str, str]c                    d S r.   rf   )ry   r   r@   s      r$   fractionzAbstractMTextRenderer.fraction   r   r&   rh   r   fonts.FontFacec                    d S r.   rf   ry   rh   s     r$   get_font_facez#AbstractMTextRenderer.get_font_face   r   r&   tl.ContentRendererc                    d S r.   rf   r   s     r$   make_bg_rendererz&AbstractMTextRenderer.make_bg_renderer   r   r&   c                `   t                      }t          t                              |j        j        t          j        j                            |_	        | 
                    |          |_        |j        j        |_        |j        j        |_        |j        }|t#          j        | |_        |S )N)rS   )r   r   ATTACHMENT_POINT_TO_ALIGNrW   rk   attachment_pointr   rX   r    rU   r   	font_facechar_heightr   coloracirgbr   RGB)ry   rh   r@   r   s       r$   make_mtext_contextz(AbstractMTextRenderer.make_mtext_context   s    nn++//	*B,A,F 
 
 

 **511.)/i?j#&CG
r&   fonts.AbstractFontc                    t          j        |j                  }||j        |j        f}| j                            |          }|*t          j        ||j        |j                  }|| j        |<   |S r.   )r   find_font_file_namer   r   width_factorrx   rW   	make_font)ry   r@   ttfkeyfonts        r$   get_fontzAbstractMTextRenderer.get_font   sj    '66CNC$45##C((<?38HIID$(DS!r&   rA   c                     t          |          S r.   )rM   ry   r@   s     r$   rM   z AbstractMTextRenderer.get_stroke   s    #r&   type_tl.Stackingc                V    t                               |t          j        j                  S r.   )STACKINGrW   r   StackingLINE)ry   r   s     r$   get_stackingz"AbstractMTextRenderer.get_stacking   s    ||E2;#3444r&   r   c                P    |                      |                                          S r.   )r   space_widthr   s     r$   r   z!AbstractMTextRenderer.space_width   s     }}S!!--///r&   c                R    t          j        |                     |                    S Nr   )r   Spacer   r   s     r$   spacezAbstractMTextRenderer.space   s#    xd..s334444r&   c                R    t          j        |                     |                    S r   )r   	Tabulatorr   r   s     r$   	tabulatorzAbstractMTextRenderer.tabulator   s#    |$"2"23"7"78888r&   c                R    t          j        |                     |                    S r   )r   re   r   r   s     r$   non_breaking_spacez(AbstractMTextRenderer.non_breaking_space   s$    ")9)9#)>)>????r&   	tl.Layoutc                  	
 |j         j        |j         j        	
fd}|                     |          }t	          |          t                    
t          j                  |j        rA|j	        }|J t          |          D ]%}                    |j        ||j        |           &n                    |           |                                }|                     |          	g t!          |	          D ]?}|j        	|j        t&          j        k    r |             *|j        t&          j        k    r |                                              ^|j        t&          j        k    r)                    |                     	                     |j        t&          j        k    r)                    |                     	                     |j        t&          j        k    r*                    |                     	                     |j        t&          j        k    rrMt?          d         t          j         t          j!        f          r!                    tE                                                     | #                    |j$        	                     |j        t&          j%        k    r}rMt?          d         t          j         t          j!        f          r!                    tE                                                     | &                    |j$        	                     Ar
 |             S )Nc                     t                    }                     | g                                            d S r.   )ra   append_paragraphsclear)rU   rN   r@   r'   initial_cap_heightlayoutrP   r   s    r$   append_paragraphz=AbstractMTextRenderer.layout_engine.<locals>.append_paragraph   sM    %" I $$i[111KKMMMMMr&   r   )r   rl   gutterrenderer)r   r,   )'rk   r   line_spacing_factorr   rm   r%   r   Layouthas_columnsrn   ru   append_columnr   gutter_widthall_columns_raw_contentr   r   r@   typer   NEW_PARAGRAPH
NEW_COLUMNnext_columnSPACEr   r   NBSPr   	TABULATORr   WORDr8   TextFractionrg   r~   r   STACKr   )ry   rh   r   bg_rendererrn   rl   contenttokenrN   r@   r'   r   r   rP   r   s           @@@@@@@r$   layout_enginez#AbstractMTextRenderer.layout_engine   sI   "Y2y4
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 ++E22e$$./A5II''' 	7mG&&&(11  $$!-!"/(	 %       + 666//11%%e,,! #.. 	= 	=E)CzY444  """"y333  """""$$$$y..TZZ__----y~--T44S99::::y222T^^C001111y~-- /Zb	BGR[3IJJ /LL...TYYuz3778888y.. /Zb	BGR[3IJJ /LL...T]]5:s;;<<< 	r&   N)r   r)   )r{   r9   r@   r   r   r|   )r   r   r@   r   r   r|   )rh   r   r   r   )rh   r   r   r   )rh   r   r   r   )r@   r   r   r   r@   r   r   rA   )r   r9   r   r   )r@   r   r   r   )r@   r   )rh   r   r   r   )__name__
__module____qualname__rz   abcabstractmethodr~   r   r   r   r   r   rM   r   r   r   r   r   r   rf   r&   r$   r   r      sz       R R R R 	    	    	    	            5 5 5 50 0 0 05 5 5 59 9 9 9@ @ @ @@ @ @ @ @ @r&   )r   r   r   r   r   r   )r!   r   r'   r(   r   r)   )
r   r   r   r   r!   r   r'   r(   r   r   r   )r6   r   N)rN   rO   r@   r   r   r   rP   r   r   r   r'   rQ   )rh   r   r   r   )rn   r	   r   ro   )<
__future__r   typingr   r   r   ezdxf.lldxfr   ezdxfr   ezdxf.entities.mtextr   r	   ezdxf.enumsr
   ezdxf.fontsr   ezdxf.toolsr   r   ezdxf.tools.textr   r   r   r   r   __all__r    rX   r;   r:   	JUSTIFIEDDISTRIBUTEDDEFAULTrV   MTEXT_TOP_LEFTMTEXT_MIDDLE_LEFTMTEXT_BOTTOM_LEFTMTEXT_TOP_CENTERMTEXT_MIDDLE_CENTERMTEXT_BOTTOM_CENTERMTEXT_TOP_RIGHTMTEXT_MIDDLE_RIGHTMTEXT_BOTTOM_RIGHTr   r   OVERr   SLANTEDr   r%   r4   r?   rM   ra   rg   rm   ru   ABCr   rf   r&   r$   <module>r      s   # " " " " " % % % % % % % % 



             4 4 4 4 4 4 4 4            ) ) ) ) ) )              #
#  ""7"<!2#8#>"B$9$@%r'<'F')>)H#R%:%?	 
"/4	R27	R27	B18	r4;	r4;	206	b39	b39
  
					    L L L L   2
 
 
 
" 48    @B B B   , , , ,~ ~ ~ ~ ~CG ~ ~ ~ ~ ~r&   