
    Og(                       U d dl mZ d dlmZmZmZmZmZ d dlm	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mZ g d	ZddZ G d d
      Zeee      Zded<    G 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# G d de      Z$y)%    )annotations)SequenceIteratorIterableOptionalno_type_check)	TypeAlias)Vec2BoundingBox2dMatrix44)path   )FontMeasurements)	GlyphPathGlyphs)loadsLCFontGlyph
GlyphCacher   c                    | j                  d      }t        |      \  }}}t        |||      }t        |      D ]  \  }}|j	                  ||        |S )N
)splitparse_propertiesr   parse_glyphsadd)slinesnameletter_spacingword_spacinglcfglyphparent_codes           T/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/fonts/lff.pyr   r      sZ    GGDME)9%)@&D.,
~|
4C*51 ${{#$J    c                  L    e Zd ZdZ	 d	 	 	 	 	 	 	 d	dZd
dZddZdddZddZy)r   z+Low level representation of LibreCAD fonts.c                L    || _         || _        || _        t               | _        y N)r   r   r    dict_glyphs)selfr   r   r    s       r$   __init__zLCFont.__init__   s$     	%3#/)-r%   c                ,    t        | j                        S r(   )lenr*   )r+   s    r$   __len__zLCFont.__len__$   s    4<<  r%   c                     | j                   |   S r(   )r*   )r+   items     r$   __getitem__zLCFont.__getitem__'   s    ||D!!r%   c                    |r!	 | j                   |   }|j                  |      }|| j                   |j                  <   y # t        $ r Y y w xY wr(   )r*   KeyErrorextendcode)r+   r"   r#   parent_glyphs       r$   r   z
LCFont.add*   sP    #||K8 !''.E#(UZZ   s   > 	A
	A
c                :    | j                   j                  |d       S r(   )r*   get)r+   r6   s     r$   r9   z
LCFont.get3   s    ||d++r%   N)         r;   )r   strr   floatr    r=   returnNone)r>   int)r1   r@   r>   r   )r   )r"   r   r#   r@   r>   r?   )r6   r@   r>   zOptional[Glyph])	__name__
__module____qualname____doc__r,   r/   r2   r   r9    r%   r$   r   r      sA    5QT00.30IN0	0!"),r%   r	   Polylinec                  ,    e Zd ZdZdZddZddZd	dZy)
r   z-Low level representation of a LibreCAD glyph.)r6   	polylinesc                2    || _         t        |      | _        y r(   )r6   tuplerH   )r+   r6   rH   s      r$   r,   zGlyph.__init__>   s    	-29-=r%   c                    t        | j                        }|j                  |j                         t        |j                  |      S r(   )listrH   r5   r   r6   )r+   r"   rH   s      r$   r5   zGlyph.extendB   s3    (	)UZZ++r%   c                   ddl m} t        j                         } |       }| j                  D ]J  }t        j                         }t        j
                  |t        |      dd|       |j                  |       L t        |      S )Nr   )OCSF)close	elevationocs)	
ezdxf.mathrN   r   PathrH   add_2d_polylineconvert_bulge_valuesextend_multi_pathr   )r+   rN   
final_pathrQ   polylineps         r$   to_pathzGlyph.to_pathG   sr    "YY[
e 	,H		A  '1!QT ((+	, $$r%   N)r6   r@   rH   zSequence[Polyline])r"   r   r>   r   r>   r   )rA   rB   rC   rD   	__slots__r,   r5   rZ   rE   r%   r$   r   r   :   s    7%I>,
%r%   r   c              #     K   t        |       dz
  }t        |       D ]'  \  }}d}||k  r| |dz      }	 |d   }|d   |d   |f ) y # t        $ r Y w xY ww)Nr   r;      r   )r.   	enumerate
IndexError)rX   
last_indexindexvertexbulgenext_vertexs         r$   rU   rU   U   s     X"J"8, *v:"519-K#A QiE))*  s'   /AAA	AAAAc                   d}d}d}| D ]  }|j                         }|j                  d      s%	 |j                  d      \  }}|dd  j                         }|dk(  r|j                         }c|dk(  r	 t	        |      }u|dk(  s{	 t	        |      } |||fS # t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w)	Nr:   r;   #:r   NameLetterSpacingWordSpacing)strip
startswithr   
ValueErrorr=   )r   	font_namer   r    liner   values          r$   r   r   c   s    INL zz|s#	**S/KD% ABx~~6>I_$!&u ]"$U|', nl22!  		  
  s5   B2B&B5	B#"B#&	B21B25	C Cc              #     K   g }| D ]=  }|j                  d      r|r| |j                          |s-|j                  |       ? |r| y y w)N[)rm   clearappend)r   r"   rp   s      r$   scan_glyphsrv      sU     E ??3KKMLL  s
   1AAc              #  f   K   | D ](  }|j                         }|j                  d      r%| * y w)Nrg   )rl   rm   )r   rp   s     r$   strip_clutterrx      s1      zz|s#Js   '11c                   ddl m t        |       dk(  ry	 | j                  d      }| d| j                         } dj                  fd| D              } 	 t        | d      S # t        $ r t        |       }Y Pw xY w# t        $ r Y yw xY w)Nr   )	hexdigits]r   r:   c              3  ,   K   | ]  }|v s|  y wr(   rE   ).0crz   s     r$   	<genexpr>zscan_int_ex.<locals>.<genexpr>   s     /aY/s   	   )stringrz   r.   rb   rn   lowerjoinr@   )r   endrz   s     @r$   scan_int_exr      s     
1v{ggcl 	
!CA
/1//A1bz  !f  s#   A# A= #A:9A:=	B	B	c              #    K   g }t        t        |             D ]  }d}|j                          |j                  d      }|d   dk7  r/	 t	        |d|j                  d       d      }|dk(  rT|d   }|j                  d      r!|j                  d       	 t	        |dd  d      }t        t        |            }t        ||      |f  y # t        $ r t        |      }Y zw xY w# t        $ r Y w xY ww)Nr   rs   r   r{   r   C)rv   rx   rt   popr@   rb   rn   r   rm   rL   parse_polylinesr   )r   rH   r"   r#   rp   r6   s         r$   r   r      s     "I]512 2yy|7c>	%tA

30"5D 19Qx??3IIaL!$qr(B/ /0	D)$k11)2  	%t$D	%  sN   AC4	C'-C4C%$'C4C"C4!C""C4%	C1.C40C11C4c              #     K   g }| D ]r  }|j                          |j                  d      D ]?  }t        |j                  d            }t        |      dkD  s,|j	                  |d d        A t        |       t y w)N;,r      )rt   r   	to_floatsr.   ru   rJ   )r   rX   rp   rc   valuess        r$   r   r      sw     &(H jjo 	,Fv||C01F6{Qr
+	, Hos   AA=&A=c                4    ddt        fd| D              S )Nc                d    | j                  d      r| dd  } 	 t        |       S # t        $ r Y yw xY w)NAr   r;   )rm   r=   rn   )rq   s    r$   rl   zto_floats.<locals>.strip   s<    C !"IE	< 		s   
# 	//c              3  .   K   | ]  } |        y wr(   rE   )r}   rq   rl   s     r$   r   zto_floats.<locals>.<genexpr>   s     2%u2s   )rq   r<   r>   r=   )rJ   )r   rl   s    @r$   r   r      s     26222r%   c                      e Zd ZdZddZddZddZddZddZddZ	e
dd       Z	 d	 	 	 	 	 	 	 dd	Z	 d	 	 	 	 	 	 	 dd
Zy)r   zDText render engine for LibreCAD fonts with integrated glyph caching.c                    || _         t               | _        t               | _        | j                   j                  | _        | j                         | _        | j                         | _	        y r(   )
fontr)   _glyph_cache_advance_width_cacher    space_widthget_empty_box	empty_box_get_font_measurementsfont_measurements)r+   r   s     r$   r,   zGlyphCache.__init__   sP     	26&6:f!"&))"8"8$($6$6$8373N3N3Pr%   c                T    	 || j                   j                  z  S # t        $ r Y yw xY w)N      ?)r   
cap_heightZeroDivisionError)r+   r   s     r$   get_scaling_factorzGlyphCache.get_scaling_factor   s0    	 6 6 A AAA  		s    	''c                   | j                  d      }t        |j                               }|j                  j                  }|j                  j
                  }|j                  }t        j                  |      }|j                  |t        |d      z          |j                  |t        ||      z          |j                  |t        d|      z          |j                          |j                  |j                         t        |      S )NA   r   )	get_shaper   control_verticessizeyxstartr   rS   line_tor
   rO   move_tor   r   )r+   glyph_Aboxheightwidthr   rY   s          r$   r   zGlyphCache.get_empty_box   s    ..$G4467

IIe			%$ua.()			%$uf--.			%$q&/)*					'++|r%   c                    	 | j                   |   }|j	                         S # t        $ r |dkD  r| j                  cY S t        d      w xY w)N    1space and non-printable characters are not glyphs)r   r4   r   rn   rZ   )r+   shape_numberr"   s      r$   _render_shapezGlyphCache._render_shape   sU    	RIIl+E
 }}	  	Rb ~~%PQQ	Rs   ! A	A	c                   |dk  rt        d      	 | j                  |   j                         S # t        $ r Y nw xY w| j	                  |      }|| j                  |<   d}t        |      rK|j                         }|j                  J |j                  j                  | j                  j                  z   }|| j                  |<   |j                         S )Nr   r   r;   )rn   r   cloner4   r   r.   bboxextmaxr   r   r   r   )r+   r   r"   advance_widthr   s        r$   r   zGlyphCache.get_shape   s    2PQQ	$$\288:: 		""<0*/,'u:**,C::)))JJLL499+C+CCM2?!!,/{{}s   / 	;;c                    |dk  ry|dk(  r| j                   S 	 | j                  |   S # t        $ r Y nw xY w| j                  |      }| j                  |   S )Nr   r;   )r   r   r4   r   )r+   r   _s      r$   get_advance_widthzGlyphCache.get_advance_width  sh    "2###	,,\:: 		NN<(((66s   ( 	44c                   t        | j                  t        d            j                               }|j                  j
                  }|j                  j
                  |z
  }t        | j                  t        d            j                               }|j                  j
                  |z
  }t        | j                  t        d            j                               }||j                  j
                  z
  }t        ||||      S )Nr   r   rY   )baseliner   x_heightdescender_height)r   r   ordr   extminr   r   r   )r+   r   r   r   r   r   s         r$   r   z!GlyphCache._get_font_measurements  s     T^^CH5FFHI;;==;;==8+T^^CH5FFHI[[]]X-
T^^CH5FFHI#dkkmm3!-	
 	
r%   c                Z      j                  |      |z  }t         fd|D              |z  S )Nc              3  R   K   | ]  }j                  t        |               y wr(   )r   r   )r}   r~   r+   s     r$   r   z-GlyphCache.get_text_length.<locals>.<genexpr>2  s      @a4))#a&1@s   $')r   sum)r+   textr   width_factorscaling_factors   `    r$   get_text_lengthzGlyphCache.get_text_length.  s0     00<|K@4@@>QQr%   c                4   g }| j                  |      }||z  }t        j                  ||d      }d}|D ]a  }	t        |	      }
|
dkD  r8| j	                  |
      }||d<   |j                  |       |j                  |       || j                  |
      |z  z  }c |S )Nr   r;   r   )r   r   )r   r   scaler   r   transform_inplaceru   r   )r+   r   r   r   glyph_pathssysxmcurrent_locationr~   r   r"   s               r$   get_text_glyph_pathszGlyphCache.get_text_glyph_paths4  s     (*$$Z0,NN2r1% 	JAq6Lb |4*$''*""5) 6 6| Dr II	J r%   N)r   r   r>   r?   )r   r=   r>   r=   r[   )r   r@   r>   r   )r   r@   r>   r=   )r>   r   )r   )r   r<   r   r=   r   r=   r>   r=   )r   r<   r   r=   r   r=   r>   zlist[GlyphPath])rA   rB   rC   rD   r,   r   r   r   r   r   r   r   r   r   rE   r%   r$   r   r      s    NQ"
7 
 
& CFRR%*R:?R	R CF%*:?	r%   r   N)r   r<   r>   r   )rX   rF   r>   zIterator[Sequence[float]])r   	list[str]r>   ztuple[str, float, float])r   Iterable[str]r>   zIterator[list[str]])r   r   r>   zIterator[str])r   r<   r>   r@   )r   r   r>   zIterator[tuple[Glyph, int]])r   r   r>   zIterator[Polyline])r   r   r>   zSequence[float])%
__future__r   typingr   r   r   r   r   typing_extensionsr	   rR   r
   r   r   ezdxfr   r   r   glyphsr   r   __all__r   r   r=   rF   __annotations__r   rU   r   rv   rx   r   r   r   r   r   rE   r%   r$   <module>r      s    # H H ' 4 4  / %
4, ,: x/) /% %6*3:
"24	3n nr%   