
    ]Mh7                        d Z ddlmZ ddlmZmZmZ dZ ee          ZdZ	de	 dZ
de
 d	Zde d
Zde dZ ee
          Z ee          Z ee          Z ee          ZdZg dZg dZg dZdZdZdZdZdZdZdZdZdZdZdZ dZ! G d de"          Z# G d d          Z$e%dk    rddl&Z& e$e&j'        d                   Z( e)d*                    d de(j+         de(j,         de(j-         de(j.         de(j/         d e(j0         d!e(j1         d"e(j2         d#e(j3         d$e(j4         d%e(j5         d&e(j6         d'e(j7         d(e(j8         fD                                   e)e(           dS dS ))u1  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                        e Zd Z fdZ xZS )TFMExceptionc                 J    t                                          |           d S N)super__init__)selfmessage	__class__s     P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/tfmLib.pyr-   zTFMException.__init__   s!    !!!!!    )__name__
__module____qualname__r-   __classcell__)r0   s   @r1   r)   r)      s8        " " " " " " " " "r2   r)   c                        e Zd Zd Zd Zd ZdS )TFMc                 0    |                      |           d S r+   )_read)r.   files     r1   r-   zTFM.__init__   s    

4r2   c                 :    d| j          d| j         d| j        ddS )Nz	<TFM for z in z at gzpt>)familycodingscheme
designsize)r.   s    r1   __repr__zTFM.__repr__   sD    *K* *$* * ?)* * *	
r2   c                    !"#$%&'()*+,-./0 t          |d          r|                                !n<t          |d          5 }|                                !d d d            n# 1 swxY w Y   !| _        t	          !          t
          k     rt          d          t                      .t          t          !.           .j
        dk     rt          d          t	          !          .j
        dz  k     rt          d          t          .                                          D ]\  }}|dk     rt          d          .j        d	k     rt          d
.j         d          .j        .j        dz   k    s.j        dk    r t          d.j         d.j         d          .j        dk    s!.j        dk    s.j        dk    s.j        dk    rt          d          .j        dk    rt          dt(           d          .j
        d.j        z   .j        .j        z
  dz   z   .j        z   .j        z   .j        z   .j        z   .j        z   .j        z   .j        z   .j        z   k    rt          d          d.j        z   .j        z
  .j        z   dz   //.j        z   %%.j        z   "".j        z   ''.j        z   **.j        z   )).j        z   $$.j        z   +fd  !fd0.0fd} !fd& !fd# !fd( !fd} !fd-,/0fd}%&,fd }"#,fd!}	'(,fd"}
$-fd#}*fd$}!fd%}),fd&}+fd'}dF!fd(	,t1          t2          dgt4          z  |            d)}.j        dz  }i | _        |t4          k    rt          t2          !|d          |           d         }| j        d*k     r9| j        d	z  }| j        d	z  }d+|d,z           d-|         z   d.|d,z           z   | _        t;          .j        t4          dz  z
            D ]%}t          d/|d*z    d0|| j                  d         }&n}|t<          k    rt          t>          !|d          |            nS|t@          k    rt          tB          !|d          |            n)|tD          k    rt          tF          !|d          |            tH          | _%        | j&        '                                }|(                    d1          rtR          | _%        n!|(                    d2          rtT          | _%        i | _+        t;          .j                  D ]}d3|dz    }|dk    rtX          |         }nM| j%        tR          k    r|d4k    rtZ          |d5z
           }n&| j%        tT          k    r|d6k    rt\          |d5z
           } , ||          || j+                   i }d | _/        d | _0        .j        dk    ru | |d                    }|j1        dk    r|j2        | _/         | |.j        dz
                      }|j1        dk    r#d| _0        d|j3        z  |j4        z   }||| j0        <   i | _5        t;          .j        .j        dz             D ]E} 0|          dk    r2i x| j5        |<   } ||          |d7<    &|          dk    r ||          |d8<    #|          dk    r |	|          |d9<    (|          dk    r |
|          |d:<    ||          }|tl          k    r|tn          k    r -|          ||<   |tp          k    r -|          |d;<   |tr          k    rki x|d<<   }t;          d          D ]T}! ||          |z            }|d,k    s|dk    r2d=}|dk    rd>}n|dk    rd?}n|d	k    rd@} ||          r|||<   O|||<   UGi | _:        i | _;        ty          |                                          D ]m\  }} | ||                    }|j1        tz          k    rd|j3        z  |j4        z   }|.j        k     r% | ||                    }|j1        tz          k    rn|j3        t|          k    rGd|j3        t|          z
  z  |j4        z   } ||          | j;        ?                    |i           |j2        <   n|j3        }|dk    s|d5k    r	|dAk    r|}n9dB}|dz  dk    r|dCz  }|dDz  }|d	z  dk    r|dCz  }|d,k    r|dEz  }|dz  }|d,k    ||j4        f| j:        ?                    |i           |j2        <   |j1        tz          k    rn||j1        dz   z  }|.j        k     %od S )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                     d| z   z  S NrE    )c	char_bases    r1   	char_infozTFM._read.<locals>.char_info   s    	A&&r2   c                 &     |                    S r+   rL   rM   rO   datas    r1   width_indexzTFM._read.<locals>.width_index   s    		!%%r2   c                 N    | j         k     p| j        k    p |           dk    S )Nr   )bcec)rM   sizesrS   s    r1   noneexistentzTFM._read.<locals>.noneexistent   s,    ux<F1ux<F;;q>>Q3FFr2   c                 2     |           dz            dz  S Nr$      rL   rQ   s    r1   height_indexzTFM._read.<locals>.height_index   s     		!q()R//r2   c                 2     |           dz            dz  S rZ   rL   rQ   s    r1   depth_indexzTFM._read.<locals>.depth_index   s     		!q()B..r2   c                 2     |           dz            dz  S Nr%   rE   rL   rQ   s    r1   italic_indexzTFM._read.<locals>.italic_index  s     		!q()Q..r2   c                 2     |           dz            dz  S r`   rL   rQ   s    r1   tagzTFM._read.<locals>.tag  s     		!q()A--r2   c                 ,     |           dz            S )Nr&   rL   rQ   s    r1   	remainderzTFM._read.<locals>.remainder	  s    		!q())r2   c                 J    d |           z   z  } |d          d         S NrE   vrL   )rM   r
read_fixed
width_baserS   s     r1   widthzTFM._read.<locals>.width  1    Z++a..01A:a%%c**r2   c                 J    d |           z   z  } |d          d         S rg   rL   )rM   ri   height_baser\   rj   s     r1   heightzTFM._read.<locals>.height  1    [<<??23A:a%%c**r2   c                 J    d |           z   z  } |d          d         S rg   rL   )rM   ri   
depth_baser^   rj   s     r1   depthzTFM._read.<locals>.depth  rm   r2   c                 J    d |           z   z  } |d          d         S rg   rL   )rM   ri   italic_basera   rj   s     r1   italiczTFM._read.<locals>.italic  rq   r2   c                 &    d |           z   z  S rK   rL   )rM   
exten_basere   s    r1   extenzTFM._read.<locals>.exten  s    
YYq\\122r2   c                     d| z   z  S rK   rL   )ilig_kern_bases    r1   lig_stepzTFM._read.<locals>.lig_step  s    )**r2   c                 `    t                      }t          t          | d          |           |S r+   )r   r   LIG_KERN_COMMAND)r|   commandrR   s     r1   lig_kern_commandz#TFM._read.<locals>.lig_kern_command"  s.    %''G$d122h888Nr2   c                 8    d| z   z  } |d          d         S rg   rL   )r|   ri   	kern_baserj   s     r1   kernzTFM._read.<locals>.kern'  s(    Y]#A:a%%c**r2   c                     d| z   z  S rK   rL   )r|   
param_bases    r1   paramzTFM._read.<locals>.param+  s    
Q''r2   c                 \    t          d| dt           | d          |          }|d         S )Nz>;:r   )r   FIXED_FORMAT)indexkeyobjretrR   s       r1   rj   zTFM._read.<locals>.read_fixed.  s6    3s33\33T%&&\3GGCq6Mr2         MBLr&   RIRCEz>;HEADERz:lzTEX MATH SYzTEX MATH EX	PARAMETER         rl   rp   rt   rw   
nextlargervarcharreptopmidbot    /LIG>r+   )@hasattrrC   open_datalen
SIZES_SIZEr)   r   r   SIZES_FORMATlfvarsitemslhrU   rV   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fonttyper?   upper
startswithMATHSYMATHEX
fontdimensBASE_PARAMSMATHSY_PARAMSMATHEX_PARAMSright_boundary_charleft_boundary_char	skip_byte	next_charop_bytere   charsNO_TAGLIG_TAGLIST_TAGEXT_TAG	ligatureskerningsorted	STOP_FLAG	KERN_FLAG
setdefault)1r.   r;   fpnamelengthrX   rc   rl   rp   rt   rw   rz   r~   r   r   r   offsetrestsbr|   schemelig_kern_mapcmdri   rM   infochar_tagr   partligrN   rO   rR   rs   r^   ry   ro   r\   rv   ra   r   r}   r   rj   re   rW   rk   rS   s1                                  @@@@@@@@@@@@@@@@@@r1   r:   z	TFM._read   sA   4   	!99;;DDdD!! !Rwwyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
t99z!!5666!!dE*** 8a<<QRRRt99ux!|##IJJJ KK--// 	N 	NLD&zz"#LMMM  8a<<GEHGGGHHH8ehl""ehnnNEHNNNNN   8q==EHMMUX]]eh!mmNOOO8c>>DBDDDEEE8hx%("Q&( h h	
 h h h h h	 h

 
 QRRR L58+	)A-
 58+ 58+
 58+#eh.!EH,	)
%(*

	' 	' 	' 	' 	'	& 	& 	& 	& 	& 	&	G 	G 	G 	G 	G 	G	0 	0 	0 	0 	0 	0	/ 	/ 	/ 	/ 	/ 	/	/ 	/ 	/ 	/ 	/ 	/	. 	. 	. 	. 	. 	.	* 	* 	* 	* 	* 	*	+ 	+ 	+ 	+ 	+ 	+ 	+	+ 	+ 	+ 	+ 	+ 	+ 	+	+ 	+ 	+ 	+ 	+ 	+ 	+	+ 	+ 	+ 	+ 	+ 	+ 	+	3 	3 	3 	3 	3 	3	+ 	+ 	+ 	+ 	+	 	 	 	 	
	+ 	+ 	+ 	+ 	+ 	+	( 	( 	( 	( 	(	 	 	 	 	 	
 	~s\14888A\!!>4=$??BDy2~~IMIN!!a%L472U16]B	58la&7788 Q Q4!b&444dD<LMMaPQ|##NDM48888|##NDM48888|##NDM4888"((**]++ 	#"DMM}-- 	#"DMux 	8 	8A$qs$$DAvv"1~&((Q"WW$QU+&((Q"WW$QU+JuuQxxt7777#' "&8a<<""88A;;//C}##+.=(""88UX\#;#;<<C}##*-'#+%589T45
uxA..  	5  	5A{1~~!!'))
1 %aW<??Q&&%+VAYYDN;q>>A%%$)E!HHDM<??Q&&%+VAYYDN3q66v%%((&/illLOO)))21D&&((022DOg"1XX 5 5#EE!HHqL166TAXX#(D Avv',!"a',!"a',+|D11 50104<--//00 $	' $	'DAq""88A;;//C}y((#+%5eh,,&&xx{{33=9,,{i//3;#:;cmKHLQ//266s}EEK66a!eeR #$CC"$C 1uqyy #s
5LC 1uzz #s
"#a%% #s
 !Q #$a%%  MK11!R88G
 =I--S]Q&&? eh,,$	' $	's   A))A-0A-N)r3   r4   r5   r-   rA   r:   rL   r2   r1   r8   r8      sF          
 
 
F' F' F' F' F'r2   r8   __main__Nc              #      K   | ]}|V  d S r+   rL   ).0xs     r1   	<genexpr>r     s6       
 
 
 
 
 
 
 
r2   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)   r8   r3   sysargvtfmprintjoinchecksumr@   r?   r   r>   seven_bit_safe_flagr   r   r   r   r   r   r   r   rL   r2   r1   <module>r      s  # #J " ! ! ! ! ! < < < < < < < < < <  Xl##
 '    
  
   x''x''x''x''     $   	
	

	


		" " " " "9 " " "
R' R' R' R' R' R' R' R'j zJJJ
#chqk

C	E		 
 
 /..2#.226C$466...*cj**D3+BDD&CH&&43?442#.22D3+BDDB#*@BB,s{,,000(SY((
 
 
 	
 	
  * 
E#JJJJJ3 r2   