a
    w=ic                     @   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   r/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/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| qt| 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sbixGlyphDataOffsetFormatSizeZ	numGlyphsglyphDataOffsetsrangeappendr   	decompiler   	glyphName)r   ttFontr   ZfirstGlyphDataOffsetistartcurrent_offsetcurrent_glyphr   r   r   r      s2    
&
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(   A   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
   )ZbegintagnewlineZ	simpletagr	   r
   r'   r   r   r   toXMLZendtag)r   Z	xmlWriterr!   r+   r"   r   r   r   r0   `   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 rtd|d  d }ndd	lm} |d
d|v rt|d }nd}d|v rt|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.   ZglyphgraphicTypez'''Z	glyphnamenamer   r   zGlyph must have a glyph name.originOffsetXoriginOffsetY)r    r1   r3   r4   zcan't handle '%s' element)setattrr   r   r   r   r   
isinstancetuplefromXMLr(   r   r    )r   r2   attrscontentr!   ZmyFormatZmyGlyphNamer   Z	myOffsetXZ	myOffsetYr%   elementr   r   r   r8   o   s@    



zStrike.fromXML)Nr   r   )__name__
__module____qualname__r   r   r(   r0   r8   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   

