
    3fX                        d dl Z d dlZdZg dZdZdZdZdZddZ G d	 d
      Z	ddZ
ddZedk(  r ej                         Z e	dde      Z eej#                                 eej#                  d              eej#                  d              eej%                                 eej'                  d              eej'                  d              e e               eej)                  d      ej+                  d              eej+                  e              e	d      Z eej)                  d      ej+                  de              ej,                  ede      Zej1                           ej2                  edej4                        Zej1                           e	ed         j7                         Zej%                  e       ej%                  e        ej:                          yy)     Nz0.9)NORMALROMANBOLDITALIC
nametofontFontfamiliesnamesnormalromanbolditalicc                     t        | d|      S )zFGiven the name of a tk named font, returns a Font representation.
    T)nameexistsroot)r   )r   r   s     #/usr/lib/python3.12/tkinter/font.pyr   r      s     T$T22    c                       e Zd ZdZ ej
                  d      Zd Zd Zd Z	ddZ
d Zd	 Zd
 Zd Zd Zd Zd ZddZd Zd ZeZddZd Zy)r   a  Represents a named font.

    Constructor options are:

    font -- font specifier (name, system font, or (family, size, style)-tuple)
    name -- name to use for this font configuration (defaults to a unique name)
    exists -- does a named font by this name already exist?
       Creates a new named font if False, points to the existing font if True.
       Raises _tkinter.TclError if the assertion is false.

       the following are ignored if font is specified:

    family -- font 'family', e.g. Courier, Times, Helvetica
    size -- font size in points
    weight -- font thickness: NORMAL, BOLD
    slant -- font slant: ROMAN, ITALIC
    underline -- font underlining: false (0), true (1)
    overstrike -- font strikeout: false (0), true (1)

       c                     g }|j                         D ]3  \  }}|j                  d|z          |j                  t        |             5 t        |      S N-)itemsappendstrtuple)selfkwoptionskvs        r   _setz	Font._set2   sL    HHJ 	#DAqNN3q5!NN3q6"	# W~r   c                 R    g }|D ]  }|j                  d|z           t        |      S r   )r   r   )r   argsr    r!   s       r   _getz	Font._get9   s0     	"ANN3q5!	"W~r   c                 b    i }t        dt        |      d      D ]  }||dz      |||   dd  <    |S )Nr      r   )rangelen)r   r%   r    is       r   _mkdictzFont._mkdict?   sD    q#d)Q' 	-A#'!9GDGABK 	-r   Nc                    |t        j                  d      }t        |d|      }|r#|j                  |j	                  dd|            }n| j                  |      }|s!dt        t        | j                              z   }|| _	        |rd| _
        | j                  |j                  |j	                  dd            vr-t         j                  j                  d| j                  d      |rF |j                  dd	| j                  g|  n& |j                  dd
| j                  g|  d| _
        || _        |j                  | _        |j                  | _        y )Nzuse fonttkfontactualFr
   znamed font z does not already exist	configurecreateT)tkinter_get_default_rootgetattr	splitlistcallr#   r   nextcounterr   delete_font_tkinterTclError_tk_split_call)r   r   r/   r   r   r    r.   s          r   __init__zFont.__init__E   s%   <,,Z8DT4&<<$ ?@D99W%DCT\\ 233D	$DyyRWWVW-E FF&&//>BiiIK K TYY>> BGGFHdii7$7#Dllgg
r   c                     | j                   S N)r   r   s    r   __str__zFont.__str__d   s    yyr   c                 ~    d| j                   j                   d| j                   j                   d| j                  dS )N<.z object >)	__class__
__module____qualname__r   rC   s    r   __repr__zFont.__repr__g   s<    4>>,,-Qt~~/J/J.K$))a) 	)r   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S rB   )
isinstancer   NotImplementedr   r=   )r   others     r   __eq__zFont.__eq__k   s7    %&!!yyEJJ&@488uyy+@@r   c                 $    | j                  |      S rB   )cget)r   keys     r   __getitem__zFont.__getitem__p   s    yy~r   c                 ,     | j                   di ||i y )N )r1   )r   rT   values      r   __setitem__zFont.__setitem__s   s    &#u&r   c                 x    	 | j                   r| j                  dd| j                         y y # t        $ r Y y w xY w)Nr/   delete)r:   r?   r   	ExceptionrC   s    r   __del__zFont.__del__v   s;    	

68TYY7   		s   )- 	99c                 J    t        | j                  fi | j                         S )z*Return a distinct copy of the current font)r   r=   r0   rC   s    r   copyz	Font.copy}   s    DHH...r   c           	          d}|rd|f}|r(|d|z   fz   } | j                   dd| j                  g| S | j                  | j                   | j                   dd| j                  g|             S )zReturn actual font attributesrW   
-displayofr   r/   r0   )r?   r   r,   r>   )r   option	displayofr%   s       r   r0   zFont.actual   s}     ),D3<**D4::fh		ADAA<<JDJJvxJTJKM Mr   c                 D    | j                  dd| j                  d|z         S )zGet font attributer/   configr   )r?   r   )r   rb   s     r   rS   z	Font.cget   s    zz&(DIIs6zBBr   c           	          |r/ | j                   dd| j                  g| j                  |        y| j                  | j	                  | j                  dd| j                                    S )zModify font attributesr/   re   N)r?   r   r#   r,   r>   )r   r    s     r   re   zFont.config   s`    DJJvx '99W%' <<DJJvxCDF Fr   c                     |f}|rd||f}| j                   j                   | j                  dd| j                  g|       S )zReturn text widthra   r/   measure)r=   getintr?   r   )r   textrc   r%   s       r   rh   zFont.measure   sC    w )T2Dxxztzz&)TYYNNOOr   c                    d}|j                  dd      }|rd|f}|rL|| j                  |      z   }| j                  j                   | j                  dd| j
                  g|       S | j                   | j                  dd| j
                  g|       }i }t        dt        |      d      D ],  }| j                  j                  ||d	z            |||   d	d <   . |S )
z}Return font metrics.

        For best performance, create a dummy widget
        using this font before calling this method.rW   rc   Nra   r/   metricsr   r(   r   )	popr&   r=   ri   r?   r   r>   r)   r*   )r   r    r   r%   rc   resr+   s          r   rl   zFont.metrics   s    
 FF;-	 ),D$))G,,D88??

69dii?$?A A ++jdjjDIIMMNCG1c#h* @&*hhooc!A#h&?Aqr
#@Nr   )NNNFNNrB   )__name__rJ   rK   __doc__	itertoolscountr9   r#   r&   r,   r@   rD   rL   rQ   rU   rY   r]   r_   r0   rS   re   r1   rh   rl   rW   r   r   r   r      su    * iooa G>)A
'/
MCF IPr   r   c                     | t        j                  d      } d}|rd|f}| j                  j                   | j                  j                  ddg|       S )zGet font families (as a tuple)zuse font.families()rW   ra   r/   r	   r3   r4   r.   r6   r7   )r   rc   r%   s      r   r	   r	      sU    |(()>?Di(77\TWW\\&*DtDEEr   c                     | t        j                  d      } | j                  j                  | j                  j	                  dd            S )z'Get names of defined fonts (as a tuple)zuse font.names()r/   r
   ru   )r   s    r   r
   r
      s<    |(();<77TWW\\&':;;r   __main__times   )familysizeweightrz   r|   hello	linespace)rc   )Courier   r   )r/   zHello, world)rj   r/   zQuit!)rj   commandr/   )r|   rB   ro   )rr   r3   __version____all__r   r   r   r   r   r   r	   r
   rp   Tkr   fprintr0   re   rS   rh   rl   LabelwpackButtondestroyr_   fbmainlooprW   r   r   <module>r      s    6 
		3[ [|F< z7::<D 	G"V4A	!((*	!((8
	!((8
	!((*	!&&
	!&&
	%'N	!))G
aii45	!))d)
#$)*A	!))G
aiitiDEda8AFFHt'4<<@AFFH	1V9		"	"	$BIITIHH"HGG r   