
    ^j'                       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 d dlmZmZmZmZmZmZ dgZej<                  ej>                  j<                  ej@                  ej>                  j@                  ejB                  ej>                  jB                  ejD                  ej>                  jD                  ejF                  ej>                  jD                  ejH                  ej>                  j<                  iZ%ejL                  ej>                  j<                  ejN                  ej>                  j<                  ejP                  ej>                  j<                  ejR                  ej>                  jB                  ejT                  ej>                  jB                  ejV                  ej>                  jB                  ejX                  ej>                  j@                  ejZ                  ej>                  j@                  ej\                  ej>                  j@                  i	Z/ej`                  jb                  ej`                  jd                  ej`                  jf                  dZ4ddZ5	 	 	 	 	 	 ddZ6	 	 	 	 	 	 	 	 	 	 ddZ7ddZ8	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ9d Z:ddZ;ddZ< G d dejz                        Z>y)    )annotations)SequenceOptionalN)const)colors)MTextMTextColumns)get_textstyle)MTextParagraphAlignment)fonts)text_layout)MTextParserMTextContext	TokenTypeParagraphPropertiesestimate_mtext_extentsvalid_text_heightAbstractMTextRenderer)^/#c                    g }t        |       } d| z  }|}||k  rH|j                  t        j                  |t        j                  j
                               ||z  }||k  rH|S )Ng      @)r   appendtlTabStopTabStopTypeLEFT)
cap_heightwidth	tab_stopsstepposs        ]/opt/ringagent/.cad-venv/lib/python3.12/site-packages/ezdxf/render/abstract_mtext_renderer.pymake_default_tab_stopsr$   :   sd    I":.JD
C
+C)<)<=>t +     c                `    d| r| d   j                   | j                  fd|D               y )N        c              3  B   K   | ]  }|j                   kD  s|  y wN)r"   ).0stoplast_poss     r#   	<genexpr>z+append_default_tab_stops.<locals>.<genexpr>K   s     Kdtxx(7JTKs   )r"   extend)r    default_stopsr-   s     @r#   append_default_tab_stopsr1   E   s0     HR=$$KmKKr%   c                   t        |       } g }|D ]  }t        |t              rLt        |dd        }|d   dk(  rt        j
                  j                  }n@t        j
                  j                  }n%t        j
                  j                  }t        |      }|| z  }||k  s|j                  t	        j                  ||              t        ||       |S )N   r   c)r   
isinstancestrfloatr   r   CENTERRIGHTr   r   r   r1   )	r   r   r    r0   
_tab_stopsr,   valuekindr"   s	            r#   make_tab_stopsr=   N   s     #:.JJ 5dC $qr(OEAw#~~~,,~~++>>&&D$KEj ;bjjd345 Z7r%   c                R   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)ctxstrokes     r#   
get_strokerJ   h   s|    F
}}"))%%%
"))***
||"))$$$
"))$$$Mr%   c                    t        |      }| r|j                  }t        j                  |j                  t
        j                  j                        }|j                  |z  }|j                  |z  }	||j                  |z  z   }
|xs g }|}|j                  rt        |||j                  |      }t        j                  ||
||	f||      }|j                  |        |S t        j                  |j                   |      }|S )N)alignindentline_spacingr    )r   rN   )r   	paragraphALIGNgetrL   r   ParagraphAlignmentr   leftrightrM   r    r=   	Paragraphappend_contentEmptyParagraphr   )cellsrH   r   rN   r   r0   prL   rS   rT   first_default_stopsr    rO   s                 r#   new_paragraphr\   u   s     #:.JMM		!''2#8#8#=#=>vv
"*$qxx*,,/</B"	;;&z5!++~VILL4'%	
	 	  '
  %%~~L
	 r%   c                 2    t        j                  ddd      S )Nr   )r   	min_width	max_width)r   NonBreakingSpace r%   r#   
super_gluerb      s    Q!qAAr%   c                d    | j                   j                  dd      }|dk  rt        |       \  }}|S )Nr   r'   ư>)dxfrQ   r   )mtextr   heights      r#   defined_widthrh      s0    IIMM'3'Et|.u5vLr%   c                    | j                   rt        | j                         }d |d<   |S t        | j                        }|dk  rd gS |g| j                  z  S )Nr(   rd   )heightslistabsdefined_heightcount)columnsrj   rm   s      r#   column_heightsrp      sV    w'//0Nvgmm++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y)r   c                    i | _         y r*   )_font_cache)selfs    r#   __init__zAbstractMTextRenderer.__init__   s
    OQr%   c                     y r*   ra   )rt   testrH   s      r#   wordzAbstractMTextRenderer.word       DGr%   c                     y r*   ra   )rt   datarH   s      r#   fractionzAbstractMTextRenderer.fraction   s     r%   c                     y r*   ra   rt   rf   s     r#   get_font_facez#AbstractMTextRenderer.get_font_face   s    =@r%   c                     y r*   ra   r~   s     r#   make_bg_rendererz&AbstractMTextRenderer.make_bg_renderer   ry   r%   c                2   t               }t        t        j                  |j                  j
                  t        j                  j                              |_	        | j                  |      |_        t        |j                  j                        |_        |j                  j                  |_        t#        |      }|j                  j$                  |_        |j                  j(                  |_        |j*                  }|t-        j.                  | |_        |S )N)rL   )r   r   ATTACHMENT_POINT_TO_ALIGNrQ   re   attachment_pointr   rR   r   rO   r   	font_facer   char_heightr   coloracir
   r   width_factorobliquergbr   RGB)rt   rf   rH   	textstyler   s        r#   make_mtext_contextz(AbstractMTextRenderer.make_mtext_context   s    n++//		**B,A,A,F,F

 **51*599+@+@A))//!%(	$==..mm++ii?jj#&CG
r%   c                $   t        j                  |j                        }||j                  |j                  f}| j
                  j                  |      }|:t        j                  ||j                  |j                        }|| j
                  |<   |S r*   )r   find_font_file_namer   r   r   rs   rQ   	make_font)rt   rH   ttfkeyfonts        r#   get_fontzAbstractMTextRenderer.get_font   sx    ''6CNNC$4$45##C(<??38H8HID$(DS!r%   c                    t        |      S r*   )rJ   rt   rH   s     r#   rJ   z AbstractMTextRenderer.get_stroke   s    #r%   c                ^    t         j                  |t        j                  j                        S r*   )STACKINGrQ   r   StackingLINE)rt   type_s     r#   get_stackingz"AbstractMTextRenderer.get_stacking   s    ||E2;;#3#344r%   c                @    | j                  |      j                         S r*   )r   space_widthr   s     r#   r   z!AbstractMTextRenderer.space_width   s    }}S!--//r%   c                L    t        j                  | j                  |            S Nr   )r   Spacer   r   s     r#   spacezAbstractMTextRenderer.space   s    xxd..s344r%   c                L    t        j                  | j                  |            S r   )r   	Tabulatorr   r   s     r#   	tabulatorzAbstractMTextRenderer.tabulator   s    ||$"2"23"788r%   c                L    t        j                  | j                  |            S r   )r   r`   r   r   s     r#   non_breaking_spacez(AbstractMTextRenderer.non_breaking_space   s    "")9)9#)>??r%   c                  	
 t        |j                  j                        |j                  j                  	
fd}| j	                  |      }t        |      t              
t        j                        |j                  rJ|j                  }|J t        |      D ]+  }j                  |j                  ||j                  |       - nj                  |       |j                         }| j!                  |      	g t#        |	      D ]H  }|j$                  	|j&                  t(        j*                  k(  r |        5|j&                  t(        j,                  k(  r |        j/                          j|j&                  t(        j0                  k(  r!j3                  | j5                  	             |j&                  t(        j6                  k(  r!j3                  | j9                  	             |j&                  t(        j:                  k(  r"j3                  | j=                  	             %|j&                  t(        j>                  k(  rurFtA        d   t        jB                  t        jD                  f      rj3                  tG                      j3                  | jI                  |jJ                  	             |j&                  t(        jL                  k(  s։rFtA        d   t        jB                  t        jD                  f      rj3                  tG                      j3                  | jO                  |jJ                  	             K r |        S )Nc                 j    t              } j                  | g       j                          y r*   )r\   append_paragraphsclear)rO   rX   rH   r0   initial_cap_heightlayoutrN   r   s    r#   append_paragraphz=AbstractMTextRenderer.layout_engine.<locals>.append_paragraph   s:    %"I $$i[1KKMr%   r   )r   rg   gutterrenderer)r   r(   )(r   re   r   line_spacing_factorr   rh   r$   r   Layouthas_columnsro   rp   append_columnr   gutter_widthall_columns_raw_contentr   r   rH   typer   NEW_PARAGRAPH
NEW_COLUMNnext_columnSPACEr   r   NBSPr   	TABULATORr   WORDr5   TextFractionrb   rx   r{   STACKr|   )rt   rf   r   bg_rendererro   rg   contenttokenrX   rH   r0   r   r   rN   r   s           @@@@@@@r#   layout_enginez#AbstractMTextRenderer.layout_engine   s   .uyy/D/DEyy44
	 
	 ++E2e$./A5I'mmG&&&(1 $$!--!"//(	 %    + 6//1%%e,! #. 	=E))CzzY444 "y333 """$y.TZZ_-y~~-T44S9:y222T^^C01y~~-Zb	BGGR[[3IJLL.TYYuzz378y.Zb	BGGR[[3IJLL.T]]5::s;<-	=0 r%   N)returnNone)rw   r6   rH   r   r   tl.ContentCell)r{   ztuple[str, str, str]rH   r   r   r   )rf   r   r   zfonts.FontFace)rf   r   r   ztl.ContentRenderer)rf   r   r   r   )rH   r   r   zfonts.AbstractFontrH   r   r   int)r   r6   r   ztl.Stacking)rH   r   r   r7   )rH   r   )rf   r   r   z	tl.Layout)__name__
__module____qualname__ru   abcabstractmethodrx   r|   r   r   r   r   rJ   r   r   r   r   r   r   ra   r%   r#   r   r      s    R 	G G(/;	  	@ @G G$5059@@r%   )r   r7   r   r7   r   list[tl.TabStop])r    r   r0   Sequence[tl.TabStop]r   r   )
r   r7   r   r7   r    r   r0   r   r   r   r   )r3   r   N)rX   rk   rH   r   r   r7   rN   r7   r   r7   r0   zOptional[Sequence[tl.TabStop]])rf   r   r   r7   )ro   r	   r   zlist[Optional[float]])?
__future__r   typingr   r   r   ezdxf.lldxfr   ezdxfr   ezdxf.entities.mtextr   r	   ezdxf.entities.textstyler
   ezdxf.enumsr   ezdxf.fontsr   ezdxf.toolsr   r   ezdxf.tools.textr   r   r   r   r   r   __all__r   rR   r9   r8   	JUSTIFIEDDISTRIBUTEDDEFAULTrP   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$   r1   r=   rJ   r\   rb   rh   rp   ABCr   ra   r%   r#   <module>r      s   # % 
   4 2  )  #
#   ""7"7"<"<!!2#8#8#>#>""B$9$9$@$@%%r'<'<'F'F'')>)>)H)H##R%:%:%?%?	 
"//44	R2277	R2277	B1188	r44;;	r44;;	20066	b3399	b3399
  
								LL0DL	L  (	
 4
" 48	  	
  2BB,CGG r%   