
    ^j$                    ,   d dl mZ d dlmZmZ d dlZd dlmZmZ d dl	m
Z
mZmZmZmZ d dlmZmZ d dlmZmZmZ d dlmZ d	d
lmZ erd dlmZ d dlmZ d dlmZ ddgZ  ejB                  d      Z" ed e
ddejF                         e
dd        e
dd ejH                  e       e
dd	ejJ                  e       e
dd        e
dd        e
dd       e
dejL                         e
dd       d!	      Z' ee'      Z(e G d" de             Z)d$d#Z*y)%    )annotations)TYPE_CHECKINGOptionalN)	validatorconst)DXFAttrDXFAttributesDefSubclassRETURN_DEFAULTgroup_code_mapping)DXF12SUBCLASS_MARKER)
base_classSubclassProcessor	DXFEntity)acdb_symbol_table_record   )register_entity)DXFNamespace)AbstractTagWriterfonts	Textstyleget_textstyleezdxfAcDbTextStyleTableRecord   Standard)defaultr   F   )r   (   )r   r   fixer)   2   G   *   g      @       	nameflagsheightwidthobliquegeneration_flagslast_heightfontbigfontc                  f    e Zd ZdZdZ eeee      Z	dZ
dZ	 d	 	 	 d fdZd fdZedd       ZddZ	 dd	d	d
	 	 	 ddZd Zedd       Zej(                  dd       Zedd       Zej(                  dd       Zedd       Zej(                  dd       Zedd       Z	 	 d	 	 	 	 	 ddZ xZS )r   zDXF STYLE entitySTYLEi   i   c                V    t         |   |      }|r|j                  |t               |S N)superload_dxf_attribssimple_dxfattribs_loaderacdb_style_group_codes)self	processordxf	__class__s      Q/opt/ringagent/.cad-venv/lib/python3.12/site-packages/ezdxf/entities/textstyle.pyr9   zTextstyle.load_dxf_attribs`   s-     g&y1..s4JK
    c                   t         |   |       |j                  t        kD  rH|j	                  t
        t        j                         |j	                  t
        t        j                         | j                  j                  |g d       y )Nr*   )r8   export_entity
dxfversionr   
write_tag2r   r   r+   
acdb_styler>   export_dxf_attribs)r<   	tagwriterr?   s     r@   rC   zTextstyle.export_entityh   sc    i(%'  2J2O2OP  *//B##
	
rA   c                $    | j                  d      S )z2Returns ``True`` if extended font data is present.ACAD)	has_xdatar<   s    r@   has_extended_font_dataz Textstyle.has_extended_font_data}   s     ~~f%%rA   c                $   d}d}d}	 | j                  d      }t        |      dkD  rM|d   \  }}|dk(  r|}|d   \  }}|dk(  r1t        | j                  |z        }t        | j                  |z        }	 |||fS # t
        j                  $ r Y w xY w)zReturns extended font data as tuple (font-family, italic-flag,
        bold-flag).

        The extended font data is optional and not reliable! Returns
        ("", ``False``, ``False``) if extended font data is not present.

        r)   FrJ   r   r     /  )	get_xdatalenboolITALICBOLDr   DXFValueError)r<   familyitalicboldxdata
group_codevalues          r@   get_extended_font_dataz Textstyle.get_extended_font_data   s     	3NN6*E 5zA~$)!H!
E%"F$)!H!
E%!$++"56F		E 12Dvt## "" 		s   A9 9BBF)rX   rY   c                   | j                  d      r| j                  d       d}|r|| j                  z  }|r|| j                  z  }| j	                  dd|fd|fg       y)z}Set extended font data, the font-family name `family` is not
        validated by `ezdxf`. Overwrites existing data.
        rJ   "   rO   rP   N)rK   discard_xdatarT   rU   	set_xdata)r<   rW   rX   rY   r,   s        r@   set_extended_font_dataz Textstyle.set_extended_font_data   s`     >>&!v&T[[ ETYYEvvu>?rA   c                &    | j                  d       y)zDiscard extended font data.rJ   N)r`   rL   s    r@   discard_extended_font_dataz$Textstyle.discard_extended_font_data   s    6"rA   c                B    | j                  t        j                  d      S )z\Get/set text generation flag BACKWARDS, for mirrored text along the
        x-axis.
        r0   )get_flag_stater   BACKWARDrL   s    r@   is_backwardzTextstyle.is_backward   s    
 ""5>>3EFFrA   c                F    | j                  t        j                  |d       y Nr0   )set_flag_stater   rg   r<   states     r@   rh   zTextstyle.is_backward   s    ENNE3EFrA   c                B    | j                  t        j                  d      S )z_Get/set text generation flag UPSIDE_DOWN, for mirrored text along
        the y-axis.

        r0   )rf   r   UPSIDE_DOWNrL   s    r@   is_upside_downzTextstyle.is_upside_down   s     ""5#4#46HIIrA   c                F    | j                  t        j                  |d       y rj   )rk   r   ro   rl   s     r@   rp   zTextstyle.is_upside_down   s    E--u6HIrA   c                B    | j                  t        j                  d      S )z?Get/set style flag VERTICAL_STACKED, for vertical stacked text.r,   )rf   r   VERTICAL_STACKEDrL   s    r@   is_vertical_stackedzTextstyle.is_vertical_stacked   s     ""5#9#97CCrA   c                F    | j                  t        j                  |d       y )Nr,   )rk   r   rs   rl   s     r@   rt   zTextstyle.is_vertical_stacked   s    E22E7CrA   c                |    | j                   j                  dk(  xr" t        | j                   j                  dz        S )z$``True`` if entry describes a shape.r)   r   )r>   r+   rS   r,   rL   s    r@   is_shape_filezTextstyle.is_shape_file   s.     xx}}"?tDHHNNQ,>'??rA   c                   ddl m} d}| j                  rJ| j                         \  }}}|r^|rdnd}|rdnd}	 |j                  |||	      }
 |j
                  |
      }n*| j                  j                  d	t        j                        }|dk(  rt        j                  }||d
k(  r| j                  j                  }|d
k(  rd}||d
k(  r| j                  j                  } |j                  |||      S )a  Returns a font abstraction :class:`~ezdxf.tools.fonts.AbstractFont`
        for this text style. Returns a font for a cap height of 1, if the
        text style has auto height (:attr:`Textstyle.dxf.height` is 0) and
        the given `cap_height` is ``None`` or 0.
        Uses the :attr:`Textstyle.dxf.width` attribute if the given `width_factor`
        is ``None`` or 0, the default value is 1.
        The attribute :attr:`Textstyle.dxf.big_font` is ignored.
        r   r   r)   ItalicRegulari  i  )rW   styleweightr2   g        g      ?)ezdxf.fontsr   rM   r]   FontFacefind_font_file_namer>   getr   DEFAULT_TTFr-   r.   	make_font)r<   
cap_heightwidth_factorr   ttfrW   rX   rY   
text_styletext_weight	font_faces              r@   r   zTextstyle.make_font   s     	&&&#'#>#>#@ FFD)/XY
%)cs*ENN!K	 0e//	:((,,vu'8'89C"9##Cs!2JJ<3#688>>LusJ==rA   r7   )r=   zOptional[SubclassProcessor]returnr   )rH   r   r   None)r   rS   )r   ztuple[str, bool, bool])r)   )rW   strr   r   )r   r   )NN)r   Optional[float]r   r   r   zfonts.AbstractFont)__name__
__module____qualname____doc__DXFTYPEr	   r   r   rF   
DXFATTRIBSrT   rU   r9   rC   propertyrM   r]   rb   rd   rh   setterrp   rt   rw   r   __classcell__)r?   s   @r@   r   r   W   s^   Gz+CZPJ)F'D 8<4	
* & &$6 @*/e@@	@ # G G G G J J J J D D D  D @ @ '+(,#>##> &#> 
	#>rA   c                (   | j                   
t               S 	 | j                  j                  }	 | j                   j                  j                  |      }|S # t        j
                  $ r d}Y ?w xY w# t        j                  $ r t               cY S w xY w)z8Returns the :class:`Textstyle` for the given DXF entity.r   )	docr   r>   r{   r   DXFAttributeErrorstylesr   DXFTableEntryError)entityr+   r{   s      r@   r   r      s    zz{zz

!!%%d+ L "" 
 ## {s"   A %A1 A.-A.1BB)r   r   r   r   )+
__future__r   typingr   r   loggingezdxf.lldxfr   r   ezdxf.lldxf.attributesr   r	   r
   r   r   ezdxf.lldxf.constr   r   ezdxf.entities.dxfentityr   r   r   ezdxf.entities.layerr   factoryr   ezdxf.entitiesr   ezdxf.lldxf.tagwriterr   r}   r   __all__	getLoggerloggeris_valid_table_nameis_greater_or_equal_zerois_greater_zeroDEFAULT_TEXT_FONTrF   r;   r   r    rA   r@   <module>r      s2   # *  (  5 M M 9 $+7!
(			7	#33
 Q'88 	
 // 	
 2q) $B2r3/ 5#:#:;1b)S*-
\ ,J7  `>	 `> `>FrA   