o
    a                     @   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   C/usr/lib/python3/dist-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 r'd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 ]}|t
 t }t	d| j ||t
  \}| j| qTt| jD ] }t| j | j| | j|d   |d}|| || j|j< qv| `| `| ` d S )Nr   ttLibz-Strike header too short: Expected %x, got %x.z>Lr   )r   gid)r   	fontToolsr   
TTLibErrorlensbixStrikeHeaderFormatSizer   unpacksbixStrikeHeaderFormatstructsbixGlyphDataOffsetFormatSizeZ	numGlyphsglyphDataOffsetsrangeappendr   	decompiler   	glyphName)r   ttFontr   ZfirstGlyphDataOffsetistartZcurrent_offsetcurrent_glyphr   r   r   r      s2   
&
zStrike.decompilec                 C   s   d| _ d| _| }ttt|d   }|D ]4}|| jv r#| 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   ZpacksbixGlyphDataOffsetFormatr   r   )r   r!   
glyphOrderZcurrentGlyphDataOffsetr    r$   Zdummyr   r   r   r'   A   s$   


zStrike.compilec                 C   s   | d |  |jd| jd |  |jd| jd |  | }tt|D ]}|| | jv r?| j||  	|| q+|
d |  d S )NZstriker	   )valuer
   )ZbegintagnewlineZ	simpletagr	   r
   r&   r   r   r   toXMLZendtag)r   Z	xmlWriterr!   r)   r"   r   r   r   r,   `   s   

zStrike.toXMLc                 C   sB  |dv rt | |t|d  d S |dkrd|v r#td|d  d }nd }d|v r4td|d  d }nd|v rCtd|d  d }ndd	lm} |d
d|v rYt|d }nd}d|v rft|d }	nd}	t||||	d}
|D ]}t|tr|\}}}|
|||| |
	| qr|
| j
|
j< d S dd	lm} |d| )N)r	   r
   r*   ZglyphgraphicTypez'''Z	glyphnamenamer   r   zGlyph must have a glyph name.originOffsetXoriginOffsetY)r    r-   r/   r0   zcan't handle '%s' element)setattrr   r   r   r   r   
isinstancetuplefromXMLr'   r   r    )r   r.   ZattrsZcontentr!   ZmyFormatZmyGlyphNamer   Z	myOffsetXZ	myOffsetYr$   elementr   r   r   r4   o   sB   



zStrike.fromXML)Nr   r   )__name__
__module____qualname__r   r   r'   r,   r4   r   r   r   r   r      s    
"r   )ZfontTools.miscr   ZfontTools.misc.textToolsr   Z	sbixGlyphr   r   r   r(   Zcalcsizer   r   objectr   r   r   r   r   <module>   s    

