
    'je"                    F   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gZ  ej!        d          Z" ed e
ddej#                   e
dd            e
dd ej$        e           e
dd	ej%        e           e
dd            e
dd            e
dd           e
dej&                   e
dd          d 	          Z' ee'          Z(e G d! de                      Z)dS )"    )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ezdxfAcDbTextStyleTableRecord   Standard)defaultr   F   )r   (   )r   r   fixer)   2   G   *   g      @       	nameflagsheightwidthobliquegeneration_flagslast_heightfontbigfontc                  h    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 )0r   zDXF STYLE entitySTYLEi   i   N	processorOptional[SubclassProcessor]returnr   c                    t                                          |          }|r|                    |t                     |S N)superload_dxf_attribssimple_dxfattribs_loaderacdb_style_group_codes)selfr5   dxf	__class__s      R/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/textstyle.pyr;   zTextstyle.load_dxf_attribs`   sA     gg&&y11 	L..s4JKKK
    	tagwriterr   Nonec                8   t                                          |           |j        t          k    rJ|                    t
          t          j                   |                    t
          t          j                   | j	        
                    |g d           d S )Nr)   )r:   export_entity
dxfversionr   
write_tag2r   r   r*   
acdb_styler?   export_dxf_attribs)r>   rC   r@   s     rA   rF   zTextstyle.export_entityh   s    i(((%''  2J2OPPP  */BBB##
 
 
	
 	
 	
 	
 	
rB   boolc                ,    |                      d          S )z2Returns ``True`` if extended font data is present.ACAD)	has_xdatar>   s    rA   has_extended_font_dataz Textstyle.has_extended_font_data}   s     ~~f%%%rB   tuple[str, bool, bool]c                :   d}d}d}	 |                      d          }t          |          dk    rR|d         \  }}|dk    r|}|d         \  }}|dk    r.t          | j        |z            }t          | j        |z            }n# t
          j        $ r Y nw xY w|||fS )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(   FrM   r   r     /  )	get_xdatalenrK   ITALICBOLDr   DXFValueError)r>   familyitalicboldxdata
group_codevalues          rA   get_extended_font_dataz Textstyle.get_extended_font_data   s     	3NN6**E 5zzA~~$)!H!
E%%"F$)!H!
E%%!$+"566F	E 122D " 	 	 	D	 vt##s   B BBr(   F)r[   r\   rZ   strc                   |                      d          r|                     d           d}|r
|| j        z  }|r
|| j        z  }|                     dd|fd|fg           dS )z}Set extended font data, the font-family name `family` is not
        validated by `ezdxf`. Overwrites existing data.
        rM   "   rS   rT   N)rN   discard_xdatarW   rX   	set_xdata)r>   rZ   r[   r\   r+   s        rA   set_extended_font_dataz Textstyle.set_extended_font_data   s     >>&!! 	'v&&& 	!T[ E 	TYEvvu>?????rB   c                0    |                      d           dS )zDiscard extended font data.rM   N)rd   rO   s    rA   discard_extended_font_dataz$Textstyle.discard_extended_font_data   s    6"""""rB   c                B    |                      t          j        d          S )z\Get/set text generation flag BACKWARDS, for mirrored text along the
        x-axis.
        r/   )get_flag_stater   BACKWARDrO   s    rA   is_backwardzTextstyle.is_backward   s    
 ""5>3EFFFrB   c                H    |                      t          j        |d           d S Nr/   )set_flag_stater   rk   r>   states     rA   rl   zTextstyle.is_backward   s#    ENE3EFFFFFrB   c                B    |                      t          j        d          S )z_Get/set text generation flag UPSIDE_DOWN, for mirrored text along
        the y-axis.

        r/   )rj   r   UPSIDE_DOWNrO   s    rA   is_upside_downzTextstyle.is_upside_down   s     ""5#46HIIIrB   c                H    |                      t          j        |d           d S rn   )ro   r   rs   rp   s     rA   rt   zTextstyle.is_upside_down   s$    E-u6HIIIIIrB   c                B    |                      t          j        d          S )z?Get/set style flag VERTICAL_STACKED, for vertical stacked text.r+   )rj   r   VERTICAL_STACKEDrO   s    rA   is_vertical_stackedzTextstyle.is_vertical_stacked   s     ""5#97CCCrB   c                H    |                      t          j        |d           d S )Nr+   )ro   r   rw   rp   s     rA   rx   zTextstyle.is_vertical_stacked   s#    E2E7CCCCCrB   c                Z    | j         j        dk    ot          | j         j        dz            S )z$``True`` if entry describes a shape.r(   r   )r?   r*   rK   r+   rO   s    rA   is_shape_filezTextstyle.is_shape_file   s)     x}"?tDHNQ,>'?'??rB   
cap_heightOptional[float]width_factorfonts.AbstractFontc                   ddl m} d}| j        rJ|                                 \  }}}|r/|rdnd}|rdnd}	 |j        |||	          }
 |j        |
          }n%| 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  )rZ   styleweightr1   Ng        g      ?)ezdxf.fontsr   rP   r`   FontFacefind_font_file_namer?   getr   DEFAULT_TTFr,   r-   	make_font)r>   r|   r~   r   ttfrZ   r[   r\   
text_styletext_weight	font_faces              rA   r   zTextstyle.make_font   s    	&%%%%%& 
	:#'#>#>#@#@ FFD ;)/>XXY
%)2ccs*EN!K  	 0e/	::(,,vu'899C"99#Cs!2!2JJ<3#6#68>LusJ===rB   r9   )r5   r6   r7   r   )rC   r   r7   rD   )r7   rK   )r7   rQ   )r(   )rZ   ra   r7   rD   )r7   rD   )NN)r|   r}   r~   r}   r7   r   )__name__
__module____qualname____doc__DXFTYPEr	   r   r   rI   
DXFATTRIBSrW   rX   r;   rF   propertyrP   r`   rf   rh   rl   setterrt   rx   r{   r   __classcell__)r@   s   @rA   r   r   W   s.       Gz+CZPPJ)F'D 8<      
 
 
 
 
 
* & & & X&$ $ $ $6 @*/e@ @ @ @ @ @ # # # G G G XG G G G G J J J XJ J J J J D D D XD D D D  D @ @ @ X@ '+(,#> #> #> #> #> #> #> #> #>rB   )*
__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_FONTrI   r=   r    rB   rA   <module>r      s   # " " " " " * * * * * * * *  ( ( ( ( ( ( ( (              5 4 4 4 4 4 4 4 M M M M M M M M M M 9 9 9 9 9 9 $ $ $ $ $ $ "++++++777777!!!!!!-		7	#	#[3
 
 
 Q''''8 	
 
 
 / 	
 
 
 72q))) $GB222wr3/// 5#:;;;71b)))S* *- -
\ ,+J77  `> `> `> `> `>	 `> `> `> `> `>rB   