
    h7                     <   S r SSKJr  SSKJrJrJr  Sr\" \5      rSr	S\	 S3r
S\
 S	3rS\ S
3rS\ S3r\" \
5      r\" \5      r\" \5      r\" \5      rSr/ SQr/ SQr/ SQrSrSrSrSrSrSrSrSrSrSrSr Sr! " S S\"5      r# " S S5      r$\%S:X  Ga  SSK&r&\$" \&RN                  S   5      r(\)" SRU                  S S\(RV                   3S\(RX                   3S\(RZ                   3S\(R\                   3S\(R^                   3S \(R`                   3S!\(Rb                   3S"\(Rd                   3S#\(Rf                   3S$\(Rh                   3S%\(Rj                   3S&\(Rl                   3S'\(Rn                   3S(\(Rp                   34 5       5      5        \)" \(5        gg))u  Module for reading TFM (TeX Font Metrics) files.

The TFM format is described in the TFtoPL WEB source code, whose typeset form
can be found on `CTAN <http://mirrors.ctan.org/info/knuth-pdf/texware/tftopl.pdf>`_.

        >>> from fontTools.tfmLib import TFM
        >>> tfm = TFM("Tests/tfmLib/data/cmr10.tfm")
        >>>
        >>> # Accessing an attribute gets you metadata.
        >>> tfm.checksum
        1274110073
        >>> tfm.designsize
        10.0
        >>> tfm.codingscheme
        'TeX text'
        >>> tfm.family
        'CMR'
        >>> tfm.seven_bit_safe_flag
        False
        >>> tfm.face
        234
        >>> tfm.extraheader
        {}
        >>> tfm.fontdimens
        {'SLANT': 0.0, 'SPACE': 0.33333396911621094, 'STRETCH': 0.16666698455810547, 'SHRINK': 0.11111164093017578, 'XHEIGHT': 0.4305553436279297, 'QUAD': 1.0000028610229492, 'EXTRASPACE': 0.11111164093017578}
        >>> # Accessing a character gets you its metrics.
        >>> # “width” is always available, other metrics are available only when
        >>> # applicable. All values are relative to “designsize”.
        >>> tfm.chars[ord("g")]
        {'width': 0.5000019073486328, 'height': 0.4305553436279297, 'depth': 0.1944446563720703, 'italic': 0.013888359069824219}
        >>> # Kerning and ligature can be accessed as well.
        >>> tfm.kerning[ord("c")]
        {104: -0.02777862548828125, 107: -0.02777862548828125}
        >>> tfm.ligatures[ord("f")]
        {105: ('LIG', 12), 102: ('LIG', 11), 108: ('LIG', 13)}
    )SimpleNamespace)calcsizeunpackunpack2a  
    >
    lf: h    # length of the entire file, in words
    lh: h    # length of the header data, in words
    bc: h    # smallest character code in the font
    ec: h    # largest character code in the font
    nw: h    # number of words in the width table
    nh: h    # number of words in the height table
    nd: h    # number of words in the depth table
    ni: h    # number of words in the italic correction table
    nl: h    # number of words in the ligature/kern table
    nk: h    # number of words in the kern table
    ne: h    # number of words in the extensible character table
    np: h    # number of font parameter words
z12.20Fz;
    >
    checksum:            L
    designsize:          
z
    z
    codingscheme:        40p
z
    family:              20p
zm
    seven_bit_safe_flag: ?
    ignored:             x
    ignored:             x
    face:                B
zI
    >
    skip_byte: B
    next_char: B
    op_byte: B
    remainder: B
)SLANTSPACESTRETCHSHRINKXHEIGHTQUAD
EXTRASPACE)NUM1NUM2NUM3DENOM1DENOM2SUP1SUP2SUP3SUB1SUB2SUPDROPSUBDROPDELIM1DELIM2
AXISHEIGHT)DEFAULTRULETHICKNESSBIGOPSPACING1BIGOPSPACING2BIGOPSPACING3BIGOPSPACING4BIGOPSPACING5            c                   (   ^  \ rS rSrU 4S jrSrU =r$ )TFMException   c                 $   > [         TU ]  U5        g N)super__init__)selfmessage	__class__s     B/var/www/html/env/lib/python3.13/site-packages/fontTools/tfmLib.pyr.   TFMException.__init__   s    !     )__name__
__module____qualname____firstlineno__r.   __static_attributes____classcell__)r1   s   @r2   r)   r)      s    " "r4   r)   c                   &    \ rS rSrS rS rS rSrg)TFM   c                 &    U R                  U5        g r,   )_read)r/   files     r2   r.   TFM.__init__   s    

4r4   c                 X    SU R                    SU R                   SU R                  S S3$ )Nz	<TFM for z in z at gzpt>)familycodingscheme
designsize)r/   s    r2   __repr__TFM.__repr__   s8    KK=4$$%4??1%S*	
r4   c                   ^^ ^!^"^#^$^%^&^'^(^)^*^+^,^-^.^/^0 [        US5      (       a  UR                  5       m!O%[        US5       nUR                  5       m!S S S 5        T!U l        [	        T!5      [
        :  a  [        S5      e[        5       m.[        [        T!T.5        T.R                  S:  a  [        S5      e[	        T!5      T.R                  S-  :  a  [        S5      e[        T.5      R                  5        H  u  p4US:  d  M  [        S5      e   T.R                  S	:  a  [        S
T.R                   S35      eT.R                  T.R                  S-   :  d  T.R                  S:  a&  [        ST.R                   ST.R                   S35      eT.R                   S:X  d0  T.R"                  S:X  d   T.R$                  S:X  d  T.R&                  S:X  a  [        S5      eT.R(                  S:  a  [        S[(         S35      eT.R                  ST.R                  -   T.R                  T.R                  -
  S-   -   T.R                   -   T.R"                  -   T.R$                  -   T.R&                  -   T.R*                  -   T.R,                  -   T.R(                  -   T.R.                  -   :w  a  [        S5      eST.R                  -   T.R                  -
  mTT.R                  -   S-   m/T/T.R                   -   m%T%T.R"                  -   m"T"T.R$                  -   m'T'T.R&                  -   m*T*T.R*                  -   m)T)T.R,                  -   m$T$T.R(                  -   m+U4S jm U U!4S jm0U.U04S jnU U!4S jm&U U!4S jm#U U!4S jm(U U!4S jnU U!4S jm-U,U/U04S jnU%U&U,4S  jnU"U#U,4S! jn	U'U(U,4S" jn
U$U-4S# jnU*4S$ jnU!4S% jnU)U,4S& jnU+4S' jnSFU!4S( jjm,[1        [2        S/[4        -  U 5        S)nT.R                  S-  n0 U l        U[4        :  a  [        [2        T!US  U 5      S   nU R8                  S*:  a:  U R8                  S	-  nU R8                  S	-  nS+US,-     S-U   -   S.US,-     -   U l        [;        T.R                  [4        S-  -
  5       H$  n[        S/US*-    S03UU R6                  5      S   nM&     O\U[<        :  a  [        [>        T!US  U 5        O=U[@        :  a  [        [B        T!US  U 5        OU[D        :  a  [        [F        T!US  U 5        [H        U l%        U RL                  RO                  5       nURQ                  S15      (       a  [R        U l%        O!URQ                  S25      (       a  [T        U l%        0 U l+        [;        T.R.                  5       H  nS3US-    3nUS::  a
  [X        U   nOMU RJ                  [R        :X  a  US4::  a  [Z        US5-
     nO&U RJ                  [T        :X  a  US6::  a  [\        US5-
     nT," U" U5      X0RV                  5        M     0 nS U l/        S U l0        T.R*                  S:  a  U" U" S5      5      nURb                  S:X  a  URd                  U l/        U" U" T.R*                  S-
  5      5      nURb                  S:X  a2  SU l0        SURf                  -  URh                  -   nUUU R`                  '   0 U l5        [;        T.R                  T.R                  S-   5       GH+  nT0" U5      S:  d  M  0 =U Rj                  U'   nU" U5      US7'   T&" U5      S:  a  U" U5      US8'   T#" U5      S:  a  U	" U5      US9'   T(" U5      S:  a  U
" U5      US:'   U" U5      nU[l        :X  a  M  U[n        :X  a  T-" U5      UU'   M  U[p        :X  a  T-" U5      US;'   M  U[r        :X  d  M  0 =US<'   n[;        S5       HT  nT!U" U5      U-      nUS,:X  d  US:  d  M  S=nUS:X  a  S>nOUS:X  a  S?nOUS	:X  a  S@nU" U5      (       a  UUU'   MO  UUU'   MV     GM.     0 U l:        0 U l;        [y        UR                  5       5       GH  u  nnU" U" U5      5      nURb                  [z        :  a  SURf                  -  URh                  -   nUT.R*                  :  d  MW  U" U" U5      5      nURb                  [z        :  a  OURf                  [|        :  aS  SURf                  [|        -
  -  URh                  -   nU" U5      U Rv                  R                  U0 5      URd                  '   OURf                  nUS:X  d  US5:  a	  USA:w  a  UnO;SBnUS-  S:  a  USC-  nUSD-  nUS	-  S:w  a  USC-  nUS,:  a  USE-  nUS-  nUS,:  a  M  UURh                  4U Rt                  R                  U0 5      URd                  '   URb                  [z        :  a  GM  UURb                  S-   -  nUT.R*                  :  a  GMW  GM     g ! , (       d  f       G	N= f)GNreadrbzToo short input filer   z0The file claims to have negative or zero length!   z(The file has fewer bytes than it claims!z'The subfile size: '{name}' is negative!r%   zThe header length is only !r$      zThe character code range z..z is illegal!z-Incomplete subfiles for character dimensions!   z
There are z extensible recipes!   u0   Subfile sizes don’t add up to the stated totalc                    > STU -   -  $ NrM   r5   )c	char_bases    r2   	char_infoTFM._read.<locals>.char_info   s    	A&&r4   c                    > TT" U 5         $ r,   r5   rT   rV   datas    r2   width_indexTFM._read.<locals>.width_index   s    	!%%r4   c                 r   > U TR                   :  =(       d!    U TR                  :  =(       d    T" U 5      S:H  $ )Nr   )bcec)rT   sizesr[   s    r2   noneexistentTFM._read.<locals>.noneexistent   s,    uxx<F1uxx<F;q>Q3FFr4   c                 &   > TT" U 5      S-      S-  $ Nr$      r5   rY   s    r2   height_indexTFM._read.<locals>.height_index   s    	!q()R//r4   c                 &   > TT" U 5      S-      S-  $ rd   r5   rY   s    r2   depth_indexTFM._read.<locals>.depth_index   s    	!q()B..r4   c                 &   > TT" U 5      S-      S-  $ Nr%   rM   r5   rY   s    r2   italic_indexTFM._read.<locals>.italic_index  s    	!q()Q..r4   c                 &   > TT" U 5      S-      S-  $ rl   r5   rY   s    r2   tagTFM._read.<locals>.tag  s    	!q()A--r4   c                     > TT" U 5      S-      $ )Nr&   r5   rY   s    r2   	remainderTFM._read.<locals>.remainder	  s    	!q())r4   c                 8   > STT" U 5      -   -  nT" US5      S   $ NrM   vr5   )rT   r
read_fixed
width_baser[   s     r2   widthTFM._read.<locals>.width  (    Z+a.01Aa%c**r4   c                 8   > STT" U 5      -   -  nT" US5      S   $ rv   r5   )rT   rx   height_baserf   ry   s     r2   heightTFM._read.<locals>.height  (    [<?23Aa%c**r4   c                 8   > STT" U 5      -   -  nT" US5      S   $ rv   r5   )rT   rx   
depth_baseri   ry   s     r2   depthTFM._read.<locals>.depth  r}   r4   c                 8   > STT" U 5      -   -  nT" US5      S   $ rv   r5   )rT   rx   italic_baserm   ry   s     r2   italicTFM._read.<locals>.italic  r   r4   c                     > STT" U 5      -   -  $ rS   r5   )rT   
exten_basers   s    r2   extenTFM._read.<locals>.exten  s    
Yq\122r4   c                    > STU -   -  $ rS   r5   )ilig_kern_bases    r2   lig_stepTFM._read.<locals>.lig_step  s    )**r4   c                 D   > [        5       n[        [        TU S  U5        U$ r,   )r   r   LIG_KERN_COMMAND)r   commandrZ   s     r2   lig_kern_command#TFM._read.<locals>.lig_kern_command"  s#    %'G$d12h8Nr4   c                 ,   > STU -   -  nT" US5      S   $ rv   r5   )r   rx   	kern_basery   s     r2   kernTFM._read.<locals>.kern'  s#    Y]#Aa%c**r4   c                    > STU -   -  $ rS   r5   )r   
param_bases    r2   paramTFM._read.<locals>.param+  s    
Q''r4   c                 B   > [        SU S[         3TU S  U5      nUS   $ )Nz>;:r   )r   FIXED_FORMAT)indexkeyobjretrZ   s       r2   ry   TFM._read.<locals>.read_fixed.  s-    Bse1\N3T%&\3GCq6Mr4         MBLr&   RIRCEz>;HEADERz:lzTEX MATH SYzTEX MATH EX	PARAMETER         r{   r   r   r   
nextlargervarcharreptopmidbot    /LIG>r,   )@hasattrrK   open_datalen
SIZES_SIZEr)   r   r   SIZES_FORMATlfvarsitemslhr^   r_   nwnhndninenlnknpr   HEADER_FORMAT4HEADER_SIZE4extraheaderfacerangeHEADER_SIZE3HEADER_FORMAT3HEADER_SIZE2HEADER_FORMAT2HEADER_SIZE1HEADER_FORMAT1VANILLAfonttyperF   upper
startswithMATHSYMATHEX
fontdimensBASE_PARAMSMATHSY_PARAMSMATHEX_PARAMSright_boundary_charleft_boundary_char	skip_byte	next_charop_byters   charsNO_TAGLIG_TAGLIST_TAGEXT_TAG	ligatureskerningsorted	STOP_FLAG	KERN_FLAG
setdefault)1r/   rA   fpnamelengthra   rp   r{   r   r   r   r   r   r   r   r   offsetrestsbr   schemelig_kern_mapcmdrx   rT   infochar_tagr   partligrU   rV   rZ   r   ri   r   r   rf   r   rm   r   r   r   ry   rs   r`   rz   r[   s1                                  @@@@@@@@@@@@@@@@@@r2   r@   	TFM._read   s   4  99;DdD!Rwwy " 
t9z!566!dE* 88a<QRRt9uxx!|#IJJ K--/LDz"#LMM 0 88a<!;EHH:QGHH88ehhl"ehhn+EHH:RzN  88q=EHHMUXX]ehh!mNOO88c>B4/CDEE88hhxx%(("Q&( hh hh	
 hh hh hh hh hh	 hh

 QRR L588+	)A-
 588+ 588+
 588+#ehh.!EHH,	)
%((*

	'	&	G	0	/	/	.	*	+	+	+	+	3	+	
	+	(	
 	~s\148A\!>4=$?BDyy2~IIMIIN!!a%L472U16]B	588la&778!b&4dD<L<LMaP 9|#NDM48|#NDM48|#NDM48""((*]++"DM}--"DMuxxAqse$DAv"1~&(Q"W$QU+&(Q"W$QU+uQx7 ! #' "&88a<"8A;/C}}#+.==("8UXX\#;<C}}#*-'#++%589T445
uxxA.A1~!'))

1 %aW?Q&%+AYDNq>A%$)!HDM?Q&%+AYDNq6v%(&/lLO))21D&(022DOg"1X#E!HqL16TAX#(D Av',!"a',!"a',+D110104 &' /D <--/0DAq"8A;/C}}y(#++%5ehh,&x{3==9,{{i/3;;#:;cmmKHLQ//26s}}EKK6a!eR #$C"$C 1uqy #s
5LC 1uz #s
"#a% #s
 !Q #$a%  MMK11!R8G
 ==I-S]]Q&&? ehh,, 1} "!s   g&&
g5)
r   r   r   r   r   r   r   r   r   r   N)r6   r7   r8   r9   r.   rH   r@   r:   r5   r4   r2   r=   r=      s    
F'r4   r=   __main__Nc              #   &   #    U  H  nUv   M	     g 7fr,   r5   ).0xs     r2   	<genexpr>r    s      
 s   ztfm.checksum=ztfm.designsize=ztfm.codingscheme=ztfm.fonttype=ztfm.family=ztfm.seven_bit_safe_flag=z	tfm.face=ztfm.extraheader=ztfm.fontdimens=ztfm.right_boundary_char=ztfm.left_boundary_char=ztfm.kerning=ztfm.ligatures=z
tfm.chars=)9__doc__typesr   fontTools.misc.sstructr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   UNREACHABLEPASSTHROUGH
ACCESSABLEr   r   r   r   r   r   	Exceptionr)   r=   r6   sysargvtfmprintjoinchecksumrG   rF   r   rE   seven_bit_safe_flagr   r   r   r   r   r   r   r   r5   r4   r2   <module>r     sN  #J " < <  l#
 ' ( 
 
  '''' $ 	
	

	


		"9 "
R' R'j z
chhqk
C			 
  ~.!#..!12#C$4$4#56~.cjj\**3+B+B*CDCHH:&"3??"34!#..!12*3+B+B*CD)#*@*@)ABs{{m, 0SYYK(
 	
* 
#J3 r4   