a
    ¥Q•h  ã                   @   s\   d dl mZ d dlmZ ddlmZ d dlZdZdZe 	e¡Z
e 	e¡ZG dd	„ d	eƒZdS )
é    )Ússtruct)ÚsafeEvalé   )ÚGlyphNzÇ
	>
	ppem:          H	# The PPEM for which this strike was designed (e.g., 9,
						# 12, 24)
	resolution:    H	# The screen resolution (in dpi) for which this strike
						# was designed (e.g., 72)
zz
	>
	glyphDataOffset:   L	# Offset from the beginning of the strike data record
							# to data for the individual glyph
c                   @   s6   e Zd Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚStrikeNr   éH   c                 C   s   || _ || _|| _i | _d S )N)ÚdataÚppemÚ
resolutionÚglyphs)ÚselfÚrawdatar	   r
   © r   úZ/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/sbixStrike.pyÚ__init__   s    zStrike.__init__c                 C   s>  | j d u rddlm} |j‚t| j ƒtk rNddlm} |jdftt| j ƒf ‚t t| j d t… | ¡ t	 d| j ttt
 … ¡\}|t t
 d | _g | _t| jd ƒD ]8}|t
 t }t	 d| j ||t
 … ¡\}| j |¡ q¨t| jƒD ]@}t| j | j| | j|d  … |d�}| |¡ || j|j< qì| `| `| ` d S )Nr   ©ÚttLibz-Strike header too short: Expected %x, got %x.z>Lr   )r   Úgid)r   Ú	fontToolsr   Ú
TTLibErrorÚlenÚsbixStrikeHeaderFormatSizer   ÚunpackÚsbixStrikeHeaderFormatÚstructÚsbixGlyphDataOffsetFormatSizeÚ	numGlyphsÚglyphDataOffsetsÚrangeÚappendr   Ú	decompiler   Ú	glyphName)r   ÚttFontr   ZfirstGlyphDataOffsetÚiÚstartÚcurrent_offsetÚcurrent_glyphr   r   r   r       s^    
þýÿÿÿþþþÿÿÿü
zStrike.decompilec                 C   sà   d| _ d| _| ¡ }ttt|ƒd   }|D ]h}|| jv rF| j| }n
t|d�}| |¡ ||_	|  j|j
7  _|t|j
ƒ7 }|  j t t|¡7  _ q,tƒ }||_	|  j t t|¡7  _ t t| ¡| _|  j| j | j 7  _d S )Nó    r   )r!   )r   Z
bitmapDataÚgetGlyphOrderr   r   r   r   r   ÚcompileZglyphDataOffsetr   r   ÚpackÚsbixGlyphDataOffsetFormatr   r   )r   r"   Ú
glyphOrderZcurrentGlyphDataOffsetr!   r&   Údummyr   r   r   r)   W   s.    ÿÿ



ÿ
zStrike.compilec                 C   s–   |  d¡ | ¡  |jd| jd� | ¡  |jd| jd� | ¡  | ¡ }tt|ƒƒD ](}|| | jv rV| j||   	||¡ qV| 
d¡ | ¡  d S )NÚstriker	   )Úvaluer
   )ÚbegintagÚnewlineÚ	simpletagr	   r
   r(   r   r   r   ÚtoXMLÚendtag)r   Ú	xmlWriterr"   r,   r#   r   r   r   r3   {   s    

zStrike.toXMLc                 C   sF  |dv r t | |t|d ƒƒ �n"|dk�r(d|v rHtd|d  d ƒ}nd }d|v rjtd|d  d ƒ}n4d|v rˆtd|d  d ƒ}ndd	lm} | d
¡‚d|v r´t|d ƒ}nd}d|v rÎt|d ƒ}	nd}	t||||	d�}
|D ]2}t|tƒræ|\}}}|
 ||||¡ |
 	|¡ qæ|
| j
|
j< ndd	lm} | d| ¡‚d S )N)r	   r
   r/   ÚglyphÚgraphicTypez'''Ú	glyphnameÚnamer   r   zGlyph must have a glyph name.ÚoriginOffsetXÚoriginOffsetY)r!   r7   r:   r;   zcan't handle '%s' element)Úsetattrr   r   r   r   r   Ú
isinstanceÚtupleÚfromXMLr)   r   r!   )r   r9   ÚattrsÚcontentr"   ZmyFormatZmyGlyphNamer   Z	myOffsetXZ	myOffsetYr&   Úelementr   r   r   r?   Š   s@    

ü

zStrike.fromXML)Nr   r   )Ú__name__Ú
__module__Ú__qualname__r   r    r)   r3   r?   r   r   r   r   r      s
   
8$r   )ÚfontTools.miscr   ÚfontTools.misc.textToolsr   Z	sbixGlyphr   r   r   r+   Úcalcsizer   r   Úobjectr   r   r   r   r   Ú<module>   s   

