B
    Jd                 @   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   S/var/www/html/venv/lib/python3.7/site-packages/fontTools/ttLib/tables/sbixStrike.py__init__   s    zStrike.__init__c             C   sF  | j d k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 | _xJt| jd D ]8}|t
 t }t	d| j ||t
  \}| j| qW xNt| jD ]@}t| j | j| | j|d   |d}|| || j|j< qW | `| `| ` 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startcurrent_offsetcurrent_glyphr   r   r   r      s.    
&
zStrike.decompilec             C   s   d| _ d| _| }ttt|d   }xp|D ]h}|| jkrH| j| }n
t|d}|| ||_	|  j|j
7  _|t|j
7 }|  j tt|7  _ q.W 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'   A   s$    



zStrike.compilec             C   s   | d |  |jd| jd |  |jd| jd |  | }x8tt|D ](}|| | jkrX| j||  	|| qXW |
d |  d S )N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   sJ  |dkr t | |t|d  n&|dkr,d|krHtd|d  d }nd }d|krjtd|d  d }n4d|krtd|d  d }ndd	lm} |d
d|krt|d }nd}d|krt|d }	nd}	t||||	d}
x:|D ]2}t|tr|\}}}|
|||| |
	| qW |
| j
|
j< ndd	lm} |d| d S )N)r	   r
   r-   ZglyphgraphicTypez'''Z	glyphnamenamer   )r   zGlyph must have a glyph name.originOffsetXoriginOffsetY)r   r0   r2   r3   zcan't handle '%s' element)setattrr   r   r   r   r   
isinstancetuplefromXMLr'   r   r   )r   r1   attrscontentr    ZmyFormatZmyGlyphNamer   Z	myOffsetXZ	myOffsetYr$   elementr   r   r   r7   o   s>    




zStrike.fromXML)Nr   r   )__name__
__module____qualname__r   r   r'   r/   r7   r   r   r   r   r      s
   
"r   )ZfontTools.miscr   ZfontTools.misc.textToolsr   Z	sbixGlyphr   r   r   r)   calcsizer   r   objectr   r   r   r   r   <module>   s   

