o
    ¼Ùøi¾7  ã                   @   sÀ  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„ de"ƒZ#G dd„ dƒZ$e%dkrÞddl&Z&e$e&j'd ƒZ(e)d *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                       s   e Zd Z‡ fdd„Z‡  ZS )ÚTFMExceptionc                    s   t ƒ  |¡ d S ©N)ÚsuperÚ__init__)ÚselfÚmessage©Ú	__class__© ú]/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/fontTools/tfmLib.pyr*   š   ó   zTFMException.__init__)Ú__name__Ú
__module__Ú__qualname__r*   Ú__classcell__r/   r/   r-   r0   r'   ™   s    r'   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTFMc                 C   s   |   |¡ d S r(   )Ú_read)r+   Úfiler/   r/   r0   r*   Ÿ   s   zTFM.__init__c                 C   s    d| j › d| j› d| jd›d�S )Nz	<TFM for z in z at Úgzpt>)ÚfamilyÚcodingschemeÚ
designsize)r+   r/   r/   r0   Ú__repr__¢   s   ÿþýÿzTFM.__repr__c                    sl  t |dƒr
| ¡ ‰nt|dƒ�}| ¡ ‰W d   ƒ n1 sw   Y  ˆ| _tˆƒtk r0tdƒ‚tƒ ‰tt	ˆˆƒ ˆj
dk rBtdƒ‚tˆƒˆj
d k rOtdƒ‚tˆƒ ¡ D ]\}}|dk ratdƒ‚qUˆjd	k rptd
ˆj› d�ƒ‚ˆjˆjd 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 ˆjˆj d  ˆj ˆj ˆj ˆj ˆj ˆj ˆj ˆj krÛtdƒ‚dˆj ˆj ‰ ˆ ˆj d ‰ˆˆj ‰ˆˆj ‰ˆˆj ‰ˆˆj ‰ˆˆj ‰
ˆ
ˆj ‰ˆˆj ‰‡ fdd„‰‡‡fdd„‰‡‡fdd„}‡‡fdd„‰‡‡fdd „‰‡‡fd!d"„‰	‡‡fd#d$„}‡‡fd%d&„‰‡‡‡fd'd(„}‡‡‡fd)d*„}‡‡‡fd+d,„}	‡‡	‡fd-d.„}
‡‡fd/d0„}‡fd1d2„}‡fd3d4„}‡
‡fd5d6„}‡fd7d8„}dX‡fd9d:„	‰ttdgt | ƒ d;}ˆjd }i | _|tk�ríttˆ|d … | ƒd }| jd<k �rÐ| jd	 }| jd	 }d=|d>  d?|  d@|d>   | _tˆjtd  ƒD ]}tdA|d< › dB�|| jƒd }�qÙn/|tk�rýttˆ|d … | ƒ n|t k�rtt!ˆ|d … | ƒ n|t"k�rtt#ˆ|d … | ƒ t$| _%| j& '¡ }| (dC¡�r.t)| _%n	| (dD¡�r7t*| _%i | _+tˆjƒD ]@}dE|d › �}|dk�rRt,| }n#| j%t)k�rd|dFk�rdt-|dG  }n| j%t*k�ru|dHk�rut.|dG  }ˆ||ƒ|| j+ƒ �q?i }d | _/d | _0ˆjdk�r½||dƒƒ}|j1dk�rž|j2| _/||ˆjd ƒƒ}|j1dk�r½d| _0d|j3 |j4 }||| j0< i | _5tˆjˆjd ƒD ]°}ˆ|ƒdk�rxi  | j5|< }||ƒ|dI< ˆ|ƒdk�rì||ƒ|dJ< ˆ|ƒdk�rù|	|ƒ|dK< ˆ	|ƒdk�r|
|ƒ|dL< ||ƒ}|t6k�r�qÉ|t7k�rˆ|ƒ||< �qÉ|t8k�r+ˆ|ƒ|dM< �qÉ|t9k�rxi  |dN< }tdƒD ]=}ˆ||ƒ|  }|d>k�sN|dk�rvdO}|dk�rXdP}n|dk�r`dQ}n|d	k�rgdR}||ƒ�rr|||< �q:|||< �q:�qÉi | _:i | _;t<| ¡ ƒD ]­\}}|||ƒƒ}|j1t=k�ržd|j3 |j4 }|ˆjk �r2|||ƒƒ}|j1t=k�r±nm|j3t>k�rÎd|j3t>  |j4 }||ƒ| j; ?|i ¡|j2< nP|j3}|dk�sà|dGk�rã|dSk�rã|}n.dT}|d dk�rð|dU7 }|dV7 }|d	 dk�rÿ|dU7 }|d>k�r|dW7 }|d8 }|d>k�s||j4f| j: ?|i ¡|j2< |j1t=k�r%n||j1d 7 }|ˆjk �s¤�q†d S )YNÚ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ˆ |   S ©Nr@   r/   ©Úc)Ú	char_baser/   r0   Ú	char_infoô   ó   zTFM._read.<locals>.char_infoc                    s   ˆˆ | ƒ S r(   r/   rG   ©rJ   Údatar/   r0   Úwidth_index÷   rK   zTFM._read.<locals>.width_indexc                    s    | ˆ j k p| ˆ jkpˆ| ƒdkS )Nr   )ÚbcÚecrG   )ÚsizesrN   r/   r0   Únoneexistentú   s    zTFM._read.<locals>.noneexistentc                    ó   ˆˆ | ƒd  d S ©Nr#   é   r/   rG   rL   r/   r0   Úheight_indexý   ó   zTFM._read.<locals>.height_indexc                    ó   ˆˆ | ƒd  d S rT   r/   rG   rL   r/   r0   Údepth_index   rW   zTFM._read.<locals>.depth_indexc                    rS   ©Nr$   r@   r/   rG   rL   r/   r0   Úitalic_index  rW   zTFM._read.<locals>.italic_indexc                    rX   rZ   r/   rG   rL   r/   r0   Útag  rW   zTFM._read.<locals>.tagc                    s   ˆˆ | ƒd  S )Nr%   r/   rG   rL   r/   r0   Ú	remainder	  r1   zTFM._read.<locals>.remainderc                    s   dˆˆ| ƒ  }ˆ |dƒd S ©Nr@   Úvr/   ©rH   Úr)Ú
read_fixedÚ
width_baserN   r/   r0   Úwidth  ó   zTFM._read.<locals>.widthc                    ó   dˆ ˆ| ƒ  }ˆ|dƒd S r^   r/   r`   )Úheight_baserV   rb   r/   r0   Úheight  re   zTFM._read.<locals>.heightc                    rf   r^   r/   r`   )Ú
depth_baserY   rb   r/   r0   Údepth  re   zTFM._read.<locals>.depthc                    rf   r^   r/   r`   )Úitalic_baser[   rb   r/   r0   Úitalic  re   zTFM._read.<locals>.italicc                    s   dˆ ˆ| ƒ  S rF   r/   rG   )Ú
exten_baser]   r/   r0   Úexten  r1   zTFM._read.<locals>.extenc                    rE   rF   r/   ©Úi)Úlig_kern_baser/   r0   Úlig_step  rK   zTFM._read.<locals>.lig_stepc                    s   t ƒ }ttˆ | d … |ƒ |S r(   )r   r   ÚLIG_KERN_COMMAND)rp   Úcommand©rM   r/   r0   Úlig_kern_command"  s   z#TFM._read.<locals>.lig_kern_commandc                    s   dˆ |   }ˆ|dƒd S r^   r/   )rp   ra   )Ú	kern_baserb   r/   r0   Úkern'  s   zTFM._read.<locals>.kernc                    rE   rF   r/   ro   )Ú
param_baser/   r0   Úparam+  rK   zTFM._read.<locals>.paramc                    s(   t d|› dt› �ˆ | d … |ƒ}|d S )Nz>;ú:r   )r   ÚFIXED_FORMAT)ÚindexÚkeyÚobjÚretru   r/   r0   rb   .  s    zTFM._read.<locals>.read_fixedé   é   ÚMBLr%   ÚRIÚRCEz>;HEADERz:lzTEX MATH SYzTEX MATH EXÚ	PARAMETERé   é   é   rd   rh   rj   rl   Ú
nextlargerÚvarcharÚrepÚtopÚmidÚboté   Ú ú/ÚLIGú>r(   )@Úhasattrr>   ÚopenÚ_dataÚlenÚ
SIZES_SIZEr'   r   r   ÚSIZES_FORMATÚlfÚvarsÚitemsÚlhrO   rP   Ú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_byter]   ÚcharsÚNO_TAGÚLIG_TAGÚLIST_TAGÚEXT_TAGÚ	ligaturesÚkerningÚsortedÚ	STOP_FLAGÚ	KERN_FLAGÚ
setdefault)r+   r8   ÚfpÚnameÚlengthrR   r\   rd   rh   rj   rl   rn   rr   rv   rx   rz   ÚoffsetÚrestÚsÚbrp   ÚschemeÚlig_kern_mapÚcmdra   rH   ÚinfoÚchar_tagr‹   ÚpartÚligr/   )rI   rJ   rM   ri   rY   rm   rg   rV   rk   r[   rw   rq   ry   rb   r]   rQ   rc   rN   r0   r7   ª   s†  


ÿ
ÿ
ÿ(
ÿþýüûúùø	÷
öÿ










""ÿ














€

þþá€ûz	TFM._readN)r2   r3   r4   r*   r=   r7   r/   r/   r/   r0   r6   ž   s    r6   Ú__main__Nc                 c   s   � | ]}|V  qd S r(   r/   )Ú.0Úxr/   r/   r0   Ú	<genexpr>¸  s
   € ÿ
ÿrÝ   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¨   rs   r¹   rº   r»   r²   r¶   r·   ÚUNREACHABLEÚPASSTHROUGHÚ
ACCESSABLErÂ   rÃ   rÄ   rÅ   rÉ   rÊ   Ú	Exceptionr'   r6   r2   ÚsysÚargvÚtfmÚprintÚjoinÚchecksumr<   r;   r³   r:   Úseven_bit_safe_flagrª   r©   r¸   r¼   r½   rÇ   rÆ   rÁ   r/   r/   r/   r0   Ú<module>   s„    %ýÿÿÿ
	  














òþÿç