o
    _h;                     @   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__1ppgmcvtreservedfpgm)i  i  i  i  TSI0c                 C   sp  t |}|| j }t|j|jfdD ]\}}i }t|D ]\}\}	}
}|r+| j|	 }n||	}||kr=| j	d|  q|
dk rBnM|
dkr|t |d k}|r]|rU|}n|jd d }n||d  d }||ksmJ d||kr{| j	d|  |}|| }
ndd	l
m} |d
||
f ||||
  }t ||
ksJ t|dd}|r|||< q|r|| _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extrasgetGlyphNamelogwarning	fontToolsr   
TTLibErrorr   extraProgramsglyphPrograms)selfdatattFonttotalLengthr   r   isExtraprogramsiglyphID
textLength
textOffsetnameisLastnextTextOffsetr   text r0   S/var/www/html/myenv/lib/python3.10/site-packages/fontTools/ttLib/tables/T_S_I__1.py	decompile   sV   



ztable_T_S_I__1.decompilec                 C   s:  t | dsi | _i | _d}|| j }| }g }t|D ]7\}}t|d r*|d }|| jv r9t| j| dd}nd}t|}	|	dkrEd}	|||	t|f || }qg }
t	| j
 D ]7\}}t|d rk|d }|| jv rzt| j| dd}nd}t|}	|	dkrd}	|
||	t|f || }q]|||
 |S )Nr!       r      r   r   r   )hasattrr!   r    r   getGlyphOrderr   r   r   appendsortedr   itemsset)r"   r$   r#   r   
glyphNamesr   r(   r,   r/   r*   r   coder0   r0   r1   compileU   sD   





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| }|sPqF|jd|d |  ||dd |  |d |  |  qFd S )NglyphProgram)r,   
extraProgram)	r8   r!   keysnewlinebegintagwrite_noindentreplaceendtagr    )r"   writerr$   namesr,   r/   extra_namesr0   r0   r1   toXML   s4   





ztable_T_S_I__1.toXMLc                 C   sv   t | dsi | _i | _t|ddd}d|dd }|dkr,|| j|d < d S |dkr9|| j|d < d S d S )	Nr!   r?   r@   r   r>   r,   rA   )r5   r!   r    r   rF   splitjoin)r"   r,   attrscontentr$   linesr/   r0   r0   r1   fromXML   s   
ztable_T_S_I__1.fromXMLN)	__name__
__module____qualname__r   r   r2   r=   rK   rR   r0   r0   r0   r1   r      s    A*r   N)
__doc__ r   fontTools.misc.loggingToolsr   fontTools.misc.textToolsr   r   r   r   r0   r0   r0   r1   <module>   s
    	