
    h(                    0   % S SK Jr  S SKJrJrJrJrJr  S SKJ	r	  S SK
JrJrJr  S SKJr  SSKJr  SSKJrJr  / S	QrSS jr " S S
5      r\\\      rS\S'    " S S5      rSS jrSS jrSS jrS S jrS!S jr S"S jr!S#S jr"S$S jr# " S S\5      r$g)%    )annotations)SequenceIteratorIterableOptionalno_type_check)	TypeAlias)Vec2BoundingBox2dMatrix44)path   )FontMeasurements)	GlyphPathGlyphs)loadsLCFontGlyph
GlyphCacher   c                    U R                  S5      n[        U5      u  p#n[        X#U5      n[        U5       H  u  pgUR	                  Xg5        M     U$ )N
)splitparse_propertiesr   parse_glyphsadd)slinesnameletter_spacingword_spacinglcfglyphparent_codes           A/var/www/html/env/lib/python3.13/site-packages/ezdxf/fonts/lff.pyr   r      sM    GGDME)9%)@&D,
|
4C*51# 2J    c                  b    \ rS rSrSr S
       SS jjrSS jrSS jrSSS jjrSS jr	Sr
g	)r      z+Low level representation of LibreCAD fonts.c                F    Xl         X l        X0l        [        5       U l        g N)r   r   r    dict_glyphs)selfr   r   r    s       r$   __init__LCFont.__init__   s     	%3#/)-r%   c                ,    [        U R                  5      $ r)   )lenr+   )r,   s    r$   __len__LCFont.__len__$   s    4<<  r%   c                     U R                   U   $ r)   )r+   )r,   items     r$   __getitem__LCFont.__getitem__'   s    ||D!!r%   c                    U(       a!   U R                   U   nUR                  U5      nXR                   UR                  '   g ! [         a     g f = fr)   )r+   KeyErrorextendcode)r,   r"   r#   parent_glyphs       r$   r   
LCFont.add*   sN    #||K8 !''.E#(UZZ   s   A 
AAc                :    U R                   R                  US 5      $ r)   )r+   get)r,   r:   s     r$   r>   
LCFont.get3   s    ||d++r%   )r+   r   r   r    N)         rA   )r   strr   floatr    rC   returnNone)rD   int)r4   rF   rD   r   )r   )r"   r   r#   rF   rD   rE   )r:   rF   rD   zOptional[Glyph])__name__
__module____qualname____firstlineno____doc__r-   r1   r5   r   r>   __static_attributes__ r%   r$   r   r      sA    5QT00.30IN0	0!"),r%   r	   Polylinec                  :    \ rS rSrSrSrSS jrS	S jrS
S jrSr	g)r   :   z-Low level representation of a LibreCAD glyph.)r:   	polylinesc                0    Xl         [        U5      U l        g r)   )r:   tuplerQ   )r,   r:   rQ   s      r$   r-   Glyph.__init__>   s    	-29-=r%   c                    [        U R                  5      nUR                  UR                  5        [        UR                  U5      $ r)   )listrQ   r9   r   r:   )r,   r"   rQ   s      r$   r9   Glyph.extendB   s3    (	)UZZ++r%   c           	        SSK Jn  [        R                  " 5       nU" 5       nU R                   HJ  n[        R                  " 5       n[        R
                  " U[        U5      SSUS9  UR                  U5        ML     [        U5      $ )Nr   )OCSF)close	elevationocs)	
ezdxf.mathrY   r   PathrQ   add_2d_polylineconvert_bulge_valuesextend_multi_pathr   )r,   rY   
final_pathr\   polylineps         r$   to_pathGlyph.to_pathG   sm    "YY[
eH		A  '1!QT ((+ ' $$r%   N)r:   rF   rQ   zSequence[Polyline])r"   r   rD   r   rD   r   )
rG   rH   rI   rJ   rK   	__slots__r-   r9   re   rL   rM   r%   r$   r   r   :   s    7%I>,
%r%   r   c              #     #    [        U 5      S-
  n[        U 5       H&  u  p#SnX!:  a  XS-      n US   nUS   US   U4v   M(     g ! [         a     Nf = f7f)Nr   rA      r   )r0   	enumerate
IndexError)rc   
last_indexindexvertexbulgenext_vertexs         r$   r`   r`   U   ss     X"J"8,"19-K#A QiE)) -  s'   -AAA
AAAAc                   SnSnSnU  H  nUR                  5       nUR                  S5      (       d  M+   UR                  S5      u  pVUSS  R                  5       nUS:X  a  UR                  5       nMj  US:X  a   [	        U5      nM~  US:X  d  M   [	        U5      nM     XU4$ ! [         a     M  f = f! [         a     M  f = f! [         a     M  f = f)	Nr@   rA   #:r   NameLetterSpacingWordSpacing)strip
startswithr   
ValueErrorrC   )r   	font_namer   r    liner   values          r$   r   r   c   s    INLzz|s##	**S/KD ABx~~6>I_$!&u ]"$U|' , l22!  		  
  s5   B#:B4C#
B10B14
CC
CCc              #     #    / nU  HN  nUR                  S5      (       a  U(       a  Uv   UR                  5         U(       d  M=  UR                  U5        MP     U(       a  Uv   g g 7f)N[)ry   clearappend)r   r"   r|   s      r$   scan_glyphsr      sT     E??3KKM4LL   s   >A&"A&c              #  v   #    U  H/  nUR                  5       nUR                  S5      (       a  M+  Uv   M1     g 7f)Nrs   )rx   ry   )r   r|   s     r$   strip_clutterr      s.     zz|s##J s   *9	9c                   ^ SSK Jm  [        U 5      S:X  a  g U R                  S5      nU SU R                  5       n SR                  U4S jU  5       5      n  [        U S5      $ ! [         a    [        U 5      n NRf = f! [         a     gf = f)Nr   )	hexdigits]r   r@   c              3  6   >#    U  H  oT;   d  M
  Uv   M     g 7fr)   rM   ).0cr   s     r$   	<genexpr>scan_int_ex.<locals>.<genexpr>   s     /1aY1s   		   )stringr   r0   rn   rz   lowerjoinrF   )r   endr   s     @r$   scan_int_exr      s     
1v{ggcl 	
!CA
/1//A1bz  !f  s#   A% B  %A=<A= 
BBc              #    #    / n[        [        U 5      5       H  nSnUR                  5         UR                  S5      nUS   S:w  a  M1   [	        USUR                  S5       S5      nUS:X  a  MX  US   nUR                  S5      (       a!  UR                  S5         [	        USS  S5      n[        [        U5      5      n[        XQ5      U4v   M     g ! [         a    [        U5      n Nf = f! [         a     M  f = f7f)Nr   r   r   r   r   C)r   r   r   poprF   rn   rz   r   ry   rV   parse_polylinesr   )r   rQ   r"   r#   r|   r:   s         r$   r   r      s      "I]512yy|7c>	%tA

30"5D 19Qx??3IIaL!$qr(B/ /0	D$k11) 3  	%t$D	%  sN   ADC)4DC0-(DC-*D,C--D0
C>:D=C>>Dc              #  
  #    / nU  Hw  nUR                  5         UR                  S5       HB  n[        UR                  S5      5      n[        U5      S:  d  M.  UR	                  US S 5        MD     [        U5      v   My     g 7f)N;,r      )r   r   	to_floatsr0   r   rS   )r   rc   r|   ro   valuess        r$   r   r      sl     &(HjjoFv||C01F6{Qr
+ & Ho s   AB*Bc                8   ^ SS jm[        U4S jU  5       5      $ )Nc                p    U R                  S5      (       a  U SS  n  [        U 5      $ ! [         a     gf = f)NAr   rA   )ry   rC   rz   )r}   s    r$   rx   to_floats.<locals>.strip   s?    C  !"IE	< 		s   
( 
55c              3  4   >#    U  H  nT" U5      v   M     g 7fr)   rM   )r   r}   rx   s     r$   r   to_floats.<locals>.<genexpr>   s     26%u6s   )r}   rB   rD   rC   )rS   )r   rx   s    @r$   r   r      s     26222r%   c                      \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
\SS	 j5       r S       SS
 jjr S       SS jjrSrg)r      zDText render engine for LibreCAD fonts with integrated glyph caching.c                    Xl         [        5       U l        [        5       U l        U R                   R                  U l        U R                  5       U l        U R                  5       U l	        g r)   )
fontr*   _glyph_cache_advance_width_cacher    space_widthget_empty_box	empty_box_get_font_measurementsfont_measurements)r,   r   s     r$   r-   GlyphCache.__init__   sN     	26&6:f!"&))"8"8$($6$6$8373N3N3Pr%   c                T     XR                   R                  -  $ ! [         a     gf = f)N      ?)r   
cap_heightZeroDivisionError)r,   r   s     r$   get_scaling_factorGlyphCache.get_scaling_factor   s.    	 6 6 A AAA  		s    
''c                   U R                  S5      n[        UR                  5       5      nUR                  R                  nUR                  R
                  nUR                  n[        R                  " U5      nUR                  U[        US5      -   5        UR                  U[        XC5      -   5        UR                  U[        SU5      -   5        UR                  5         UR                  UR                  5        [        U5      $ )NA   r   )	get_shaper   control_verticessizeyxstartr   r^   line_tor
   rZ   move_tor   r   )r,   glyph_Aboxheightwidthr   rd   s          r$   r   GlyphCache.get_empty_box   s    ..$G4467

IIe			%$ua.()			%$u--.			%$q&/)*					'++|r%   c                     U R                   U   nUR	                  5       $ ! [         a     US:  a  U R                  s $ [        S5      ef = f)N    1space and non-printable characters are not glyphs)r   r8   r   rz   re   )r,   shape_numberr"   s      r$   _render_shapeGlyphCache._render_shape   sU    	RIIl+E
 }}	  	Rb ~~%PQQ	Rs   ! AAc                   US::  a  [        S5      e U R                  U   R                  5       $ ! [         a     Of = fU R	                  U5      nX R                  U'   Sn[        U5      (       aL  UR                  5       nUR                  c   eUR                  R                  U R                  R                  -   nX0R                  U'   UR                  5       $ )Nr   r   rA   )rz   r   cloner8   r   r0   bboxextmaxr   r   r   r   )r,   r   r"   advance_widthr   s        r$   r   GlyphCache.get_shape   s    2PQQ	$$\288:: 		""<0*/,'u::**,C::)))JJLL499+C+CCM2?!!,/{{}s   0 
==c                    US:  a  gUS:X  a  U R                   $  U R                  U   $ ! [         a     Of = fU R                  U5      nU R                  U   $ )Nr   rA   )r   r   r8   r   )r,   r   _s      r$   get_advance_widthGlyphCache.get_advance_width  sh    "2###	,,\:: 		NN<(((66s   * 
77c                    [        U R                  [        S5      5      R                  5       5      nUR                  R
                  nUR                  R
                  U-
  n[        U R                  [        S5      5      R                  5       5      nUR                  R
                  U-
  n[        U R                  [        S5      5      R                  5       5      nX!R                  R
                  -
  n[        UUUUS9$ )Nr   r   rd   )baseliner   x_heightdescender_height)r   r   ordr   extminr   r   r   )r,   r   r   r   r   r   s         r$   r   !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#kkmm3!-	
 	
r%   c                \   ^  T R                  U5      U-  n[        U 4S jU 5       5      U-  $ )Nc              3  X   >#    U  H  nTR                  [        U5      5      v   M!     g 7fr)   )r   r   )r   r   r,   s     r$   r   -GlyphCache.get_text_length.<locals>.<genexpr>2  s#     @4a4))#a&114s   '*)r   sum)r,   textr   width_factorscaling_factors   `    r$   get_text_lengthGlyphCache.get_text_length.  s0     00<|K@4@@>QQr%   c                4   / nU R                  U5      nXS-  n[        R                  " XeS5      nSnU Ha  n	[        U	5      n
U
S:  a7  U R	                  U
5      nXS'   UR                  U5        UR                  U5        XR                  U
5      U-  -  nMc     U$ )Nr   rA   r   )r   r   )r   r   scaler   r   transform_inplacer   r   )r,   r   r   r   glyph_pathssysxmcurrent_locationr   r   r"   s               r$   get_text_glyph_pathsGlyphCache.get_text_glyph_paths4  s     (*$$Z0NN21%Aq6Lb |4*$''*""5) 6 6| Dr II  r%   )r   r   r   r   r   r   N)r   r   rD   rE   )r   rC   rD   rC   rg   )r   rF   rD   r   )r   rF   rD   rC   )rD   r   )r   )r   rB   r   rC   r   rC   rD   rC   )r   rB   r   rC   r   rC   rD   zlist[GlyphPath])rG   rH   rI   rJ   rK   r-   r   r   r   r   r   r   r   r   r   rL   rM   r%   r$   r   r      s    NQ"
7 
 
& CFRR%*R:?R	R CF%*:?	 r%   r   N)r   rB   rD   r   )rc   rN   rD   zIterator[Sequence[float]])r   	list[str]rD   ztuple[str, float, float])r   Iterable[str]rD   zIterator[list[str]])r   r   rD   zIterator[str])r   rB   rD   rF   )r   r   rD   zIterator[tuple[Glyph, int]])r   r   rD   zIterator[Polyline])r   r   rD   zSequence[float])%
__future__r   typingr   r   r   r   r   typing_extensionsr	   r]   r
   r   r   ezdxfr   r   r   glyphsr   r   __all__r   r   rC   rN   __annotations__r   r`   r   r   r   r   r   r   r   r   rM   r%   r$   <module>r      s    # H H ' 4 4  / %
4, ,: x/) /% %6*3:
"24	3n nr%   