a
    ZXh!                     @   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   d/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G__l_a_t.pyr	   8   s   r	   c                   @   s   e Zd ZdS )_DictNr
   r   r   r   r   r   <   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_tzsGraphite Glyph Attributes table

    See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
    Nc                 C   s   t j | | d| _d S Nr   )r   __init__scheme)selftagr   r   r   r   F   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	}t||dd  D ],\}}|||| | j||< |d7 }qd S )
N   )ZprecisionBitsffffff?fmt333333@      @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   	decompileJ   s"    


ztable_G__l_a_t.decompilec                 C   s   t  }t|dkrt||t \}}t|j|j|j }t|d|j krt	d|j |}|
t|| |d|j d  }q|S )N      >%dh)r   lenr   r   r	   rangeattNumnumstructunpack_fromupdater+   )r   r-   r   r*   r2   keysvalsr   r   r   r"   ^   s    z$table_G__l_a_t.decompileAttributes12c                 C   s   | j rjtt|t \}}t|jd}g |_t	|D ]0}t
|dkr8tt|t \}}|j| q8| |t}| j r||_|S )N1   )r(   r   r   Glat_format_3_octabox_metricsr	   binsubboxBitmapr0   subboxesr8   r7   Glat_format_3_subbox_entryappendr"   r$   octabox)r   r-   onumsubbZsubboxattrsr   r   r   r)   i   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 }tt| jD ]*}|t| ||| j|| 7 }q|t| |d | | jdkrt| j|}|S )	Nr   r   r   r      r   r   r   )r   packr   r!   r   compileAttributes12r#   r   r(   r'   r&   compileAttributes3r8   r7   r*   rG   r,   setr   compress)r   r.   r-   encoderZglocsnr   r   r   compiley   s$    



ztable_G__l_a_t.compilec                 C   sX   d}t |D ]D}|t||d |d dtjdt|d  g|d R   7 }q|S )N    r   r   )r9   r:   r6   r5   )r   entriesr   rN   r;   r7   )r   rL   r   r-   r2   r   r   r   rO      s    z"table_G__l_a_t.compileAttributes12c                 C   sb   | j rN|j}tt|}t|jd}t|D ]}|tt	|j
| 7 }q0nd}|| |t S )Nr@    )r(   rH   r   rN   rB   rC   rD   r0   r8   rF   rE   rO   r$   )r   rL   rI   r-   rJ   rK   r   r   r   rP      s    z!table_G__l_a_t.compileAttributes3c                    s  |j d| j| jd |  t| j  fdddD ]N\}}|jd|d |  t|drD|j	}t
t\}}}i }	|D ]*}
|
d	krqd
t||
d d |	|
< qd|j|	d< |jdi |	 |  t
t\}}}|jD ]F}i }	|D ] }
d
t||
d d |	|
< q|j di |	 |  q|d |  t| D ]"\}
}|j d|
|d |  qP|d |  q6d S )Nr!   )r!   compressionSchemec                    s     | d S r   )Z
getGlyphID)xr.   r   r   <lambda>   rV   z&table_G__l_a_t.toXML.<locals>.<lambda>)keyglyph)namerH   rD   z{:.3f}%      Y@   z{:0X}bitmap	octaboxes	attribute)indexvalue)rc   )rH   )Z	simpletagr!   r   newlinesortedr*   itemsZbegintaghasattrrH   r   Z	getformatrB   formatgetattrrD   rF   rE   Zendtag)r   writerr.   rT   arI   formatstringnamesfixesr?   kr1   vr   r[   r   toXML   sH    





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 }|D ]0}t|t	slqZ|\}}}	|dkrtt|d }
tt|d }|||
< qZ|d	krZd
| _
t }t|d d|_g |_|d= | D ]0\}
}t||
tt |d d d d d  q|	D ]n}t|t	s*q|\}}}	t }| D ]2\}
}t||
tt |d d d d d  qB|j| q||_qZ|| j|< d S )Nr!   rY   r^   r*   r_   rd   re   rf   rc   Trb   r   g     o@r`   g      ?)r    r   r!   intr   rj   r*   r   
isinstancetupler(   r	   rD   rE   ri   setattrrG   rH   )r   r_   rL   contentr.   gnamer*   elementr   Z
subcontentrr   rs   rI   sor   r   r   fromXML   sF    




*
,ztable_G__l_a_t.fromXML)N)r   r   r   __doc__r   r3   r"   r)   rU   rO   rP   rt   r~   r   r   r   r   r   @   s   
&r   )ZfontTools.miscr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.textToolsr   	functoolsr   rX   r   r   r;   r   r&   r#   r$   rB   rF   r	   dictr   r   r   r   r   r   <module>   s   	