a
    —Æàg’  ã                   @   sH   d Z ddlmZ ddlmZ ddlmZmZmZ G dd„ deejƒZ	dS )	a]   TSI{0,1,2,3,5} are private tables used by Microsoft Visual TrueType (VTT)
tool to store its hinting source data.

TSI1 contains the text of the glyph programs in the form of low-level assembly
code, as well as the 'extra' programs 'fpgm', 'ppgm' (i.e. 'prep'), and 'cvt'.

See also https://learn.microsoft.com/en-us/typography/tools/vtt/tsi-tables
é   )ÚDefaultTableé    )ÚLogMixin)ÚstrjoinÚtobytesÚtostrc                   @   s>   e Zd ZdddddœZdZdd„ Zd	d
„ Zdd„ Zdd„ ZdS )Útable_T_S_I__1ZppgmÚcvtÚreservedZfpgm)iúÿ  iûÿ  iüÿ  iýÿ  ZTSI0c                 C   sz  t |ƒ}|| j }t|j|jfdƒD �]N\}}i }t|ƒD �]"\}\}	}
}|rZ| j|	 }n
| |	¡}||kr~| j 	d| ¡ q:|
dk rˆnœ|
dk�r|t |ƒd k}|rÀ|r°|}qÐ|jd d }n||d  d }||ksàJ dƒ‚||krü| j 	d| ¡ |}|| }
ndd	l
m} | d
||
f ¡‚||||
 … }t |ƒ|
k�sFJ ‚t|dd�}|r:|||< q:|�rn|| _q$|| _q$d S )N)FTz$textOffset > totalLength; %r skippedé €  r   r   é   zentries not sorted by offsetz*nextTextOffset > totalLength; %r truncated)ÚttLibz&%r textLength (%d) must not be > 32768úutf-8©Úencoding)ÚlenÚ
indextableÚzipÚindicesÚextra_indicesÚ	enumerateÚextrasZgetGlyphNameÚlogÚwarningZ	fontToolsr   Z
TTLibErrorr   ÚextraProgramsÚglyphPrograms)ÚselfÚdataÚttFontZtotalLengthr   r   ZisExtraZprogramsÚiZglyphIDÚ
textLengthZ
textOffsetÚnameZisLastZnextTextOffsetr   Útext© r#   úX/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I__1.pyÚ	decompile   sR    
ÿ

ÿ

ÿ
ztable_T_S_I__1.decompilec                 C   sZ  t | dƒsi | _i | _d}|| j }| ¡ }g }tt|ƒƒD ]r}t|ƒd rT|d }|| }|| jv rzt| j| dd�}nd}t|ƒ}	|	dkr’d}	| ||	t|ƒf¡ || }q<g }
t	| j
 ¡ ƒ}tt|ƒƒD ]z}t|ƒd ræ|d }|| \}}|| jv �rt| j| dd�}nd}t|ƒ}	|	dk�r,d}	|
 ||	t|ƒf¡ || }qÎ| ||
¡ |S )Nr   ó    r   ó   r   r   r   )Úhasattrr   r   r   ZgetGlyphOrderÚranger   r   ÚappendÚsortedr   ÚitemsÚset)r   r   r   r   Z
glyphNamesr   r   r!   r"   r    r   ÚcodesÚcoder#   r#   r$   ÚcompileU   sJ    

ÿ

ÿ

ztable_T_S_I__1.compilec                 C   sð   t | j ¡ ƒ}| ¡  |D ]^}| j| }|s.q|jd|d� | ¡  | | dd¡¡ | ¡  | d¡ | ¡  | ¡  qt | j ¡ ƒ}|D ]^}| j| }|s qŒ|jd|d� | ¡  | | dd¡¡ | ¡  | d¡ | ¡  | ¡  qŒd S )NÚglyphProgram)r!   úÚ
ÚextraProgram)	r+   r   ÚkeysÚnewlineZbegintagZwrite_noindentÚreplaceZendtagr   )r   Úwriterr   Únamesr!   r"   Zextra_namesr#   r#   r$   ÚtoXML‚   s2    




ztable_T_S_I__1.toXMLc                 C   sp   t | dƒsi | _i | _t|ƒ dd¡ d¡}d |dd… ¡}|dkrV|| j|d < n|dkrl|| j|d < d S )	Nr   r2   r3   r   éÿÿÿÿr1   r!   r4   )r(   r   r   r   r7   ÚsplitÚjoin)r   r!   ÚattrsÚcontentr   Úlinesr"   r#   r#   r$   ÚfromXML�   s    
ztable_T_S_I__1.fromXMLN)	Ú__name__Ú
__module__Ú__qualname__r   r   r%   r0   r:   rA   r#   r#   r#   r$   r      s   A-r   N)
Ú__doc__Ú r   ZfontTools.misc.loggingToolsr   ZfontTools.misc.textToolsr   r   r   r   r#   r#   r#   r$   Ú<module>   s   	