B
    Jd                  @   s   d dl mZ d dlmZ d dlmZ d dlmZ ddlm	Z	 ddlm
Z
 d dlZd	Zd
ZdZdZdZdZG dd dZG dd deZG dd de	j	ZdS )    )sstruct)floatToFixedToStr)safeEval)partial   )DefaultTable)grUtilsNz/
    >        # big endian
    version: 16.16F
zR
    >
    version: 16.16F
    compression:L    # compression scheme or reserved 
zz
    >
    attNum:     B    # Attribute number of first attribute
    num:        B    # Number of attributes in this run
zz
    >
    attNum:     H    # Attribute number of first attribute
    num:        H    # Number of attributes in this run
ao  
    >
    subboxBitmap:   H    # Which subboxes exist on 4x4 grid
    diagNegMin:     B    # Defines minimum negatively-sloped diagonal (si)
    diagNegMax:     B    # Defines maximum negatively-sloped diagonal (sa)
    diagPosMin:     B    # Defines minimum positively-sloped diagonal (di)
    diagPosMax:     B    # Defines maximum positively-sloped diagonal (da)
a  
    >
    left:           B    # xi
    right:          B    # xa
    bottom:         B    # yi
    top:            B    # ya
    diagNegMin:     B    # Defines minimum negatively-sloped diagonal (si)
    diagNegMax:     B    # Defines maximum negatively-sloped diagonal (sa)
    diagPosMin:     B    # Defines minimum positively-sloped diagonal (di)
    diagPosMax:     B    # Defines maximum positively-sloped diagonal (da)
c               @   s   e Zd ZdS )_ObjectN)__name__
__module____qualname__ r   r   Q/var/www/html/venv/lib/python3.7/site-packages/fontTools/ttLib/tables/G__l_a_t.pyr	   6   s   r	   c               @   s   e Zd ZdS )_DictN)r
   r   r   r   r   r   r   r   9   s   r   c               @   sZ   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )table_G__l_a_tz&
    Support Graphite Glat tables
    Nc             C   s   t j | | d| _d S )Nr   )r   __init__scheme)selftagr   r   r   r   A   s    ztable_G__l_a_t.__init__c             C   s   t t||  tt| jdd| _| jdkr<t| jtd}nX| jdkrVt| jt	d}n>| jdkrt
|\}| _t t||  | jd@ dk| _| j}|d }i | _d	}xBt||dd  D ],\}}|||| | j||< |d7 }qW d S )
N   )ZprecisionBitsgffffff?)fmtg333333@g      @r   Glocr   )r   unpack2Glat_format_0floatr   versionr   decompileAttributes12Glat_format_1_entryGlat_format_23_entryr   
decompressr   Glat_format_3compressionhasOctaboxesdecompileAttributes3
attributeszipgetGlyphName)r   datattFontdecoderZgloccountser   r   r   	decompileE   s"    


ztable_G__l_a_t.decompilec             C   s   t  }x~t|dkrt||t \}}t|j|j|j }t|d|j krt	d|j |}|
t|| |d|j d  }qW |S )N      z>%dh)r   lenr   r   r	   rangeattNumnumstructunpack_fromupdater%   )r   r'   r   r$   r,   keysvalsr   r   r   r   Y   s    z$table_G__l_a_t.decompileAttributes12c             C   s   | j rntt|t \}}t|jd}g |_x<t	|D ]0}t
|dkr:tt|t \}}|j| q:W | |t}| j r||_|S )N1   )r"   r   r   Glat_format_3_octabox_metricsr	   binsubboxBitmapr*   subboxesr1   r0   Glat_format_3_subbox_entryappendr   r   octabox)r   r'   onumsubbZsubboxattrsr   r   r   r#   d   s    z#table_G__l_a_t.decompileAttributes3c             C   s   t t| }| jdkr&t| jtd}nP| jdkr@t| jtd}n6| jdkrv| jd> | jr\dnd | _	t t
| }| j}g }x<tt| jD ]*}|t| ||| j|| 7 }qW |t| |d | | jdkrt| j|}|S )	Ngffffff?)r   g333333@g      @   r   r   r   )r   packr   r   r   compileAttributes12r   r   r"   r!   r    compileAttributes3r1   r0   r$   r@   r&   setr   compress)r   r(   r'   encoderZglocsnr   r   r   compiles   s$    



ztable_G__l_a_t.compilec             C   sZ   d}xPt |D ]B}|t||d |d dtjdt|d  f|d   7 }qW |S )N    r   r   )r2   r3   z>%dhr/   )r   entriesr   rG   r4   r0   )r   rE   r   r'   r,   r   r   r   rH      s
    (z"table_G__l_a_t.compileAttributes12c             C   sf   | j rR|j}tt|}t|jd}x,t|D ]}|tt	|j
| 7 }q2W nd}|| |t S )Nr9    )r"   rA   r   rG   r;   r<   r=   r*   r1   r?   r>   rH   r   )r   rE   rB   r'   rC   rD   r   r   r   rI      s    z!table_G__l_a_t.compileAttributes3c                s  |j d| j| jd |  xxt| j  fdddD ]X\}}|jd|d |  t|drN|j	}t
t\}}}i }	x2|D ]*}
|
d	krqd
t||
d d |	|
< qW d|j|	d< |jd|	 |  t
t\}}}xR|jD ]H}i }	x*|D ]"}
d
t||
d d |	|
<  qW |j d|	 |  qW |d |  x2t| D ]"\}
}|j d|
|d |  q\W |d |  q:W d S )Nr   )r   compressionSchemec                s     | d S )Nr   )Z
getGlyphID)x)r(   r   r   <lambda>   rO   z&table_G__l_a_t.toXML.<locals>.<lambda>)keyglyph)namerA   r=   z{:.3f}%g      Y@   z{:0X}bitmap	octaboxes	attribute)indexvalue)rZ   )rA   )Z	simpletagr   r   newlinesortedr$   itemsZbegintaghasattrrA   r   Z	getformatr;   formatgetattrr=   r?   r>   Zendtag)r   writerr(   rM   arB   formatstringnamesfixesr8   kr+   vr   )r(   r   toXML   s<    (
  
"

ztable_G__l_a_t.toXMLc             C   s  |dkr,t t|d | _tt|d | _|dkr8d S t| dsHi | _|d }t }xF|D ]<}t|t	spq^|\}}}	|dkrtt|d }
tt|d }|||
< q^|d	kr^d
| _
t }t|d d|_g |_|d= x<| D ]0\}
}t||
tt |d d d d d  qW xz|	D ]r}t|t	s4q |\}}}	t }x>| D ]2\}
}t||
tt |d d d d d  qNW |j| q W ||_q^W || j|< d S )Nr   rR   rV   r$   rW   r[   r\   r]   rZ   TrY   r   g     o@g      Y@g      ?)r   r   r   intr   ra   r$   r   
isinstancetupler"   r	   r=   r>   r`   setattrr@   rA   )r   rW   rE   contentr(   gnamer$   elementr   Z
subcontentri   rj   rB   sor   r   r   fromXML   sF     

 

,
 
.
ztable_G__l_a_t.fromXML)N)r
   r   r   __doc__r   r-   r   r#   rN   rH   rI   rk   ru   r   r   r   r   r   <   s   
r   )ZfontTools.miscr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.textToolsr   	functoolsr   rQ   r   r   r4   r   r    r   r   r;   r?   r	   dictr   r   r   r   r   r   <module>   s   	