o
    ‡‚¡ex!  ã                   @   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                   @   ó   e Zd ZdS )Ú_ObjectN©Ú__name__Ú
__module__Ú__qualname__© r   r   úN/var/www/myenv/lib/python3.10/site-packages/fontTools/ttLib/tables/G__l_a_t.pyr
   8   ó    r
   c                   @   r	   )Ú_DictNr   r   r   r   r   r   <   r   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   E   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}n,| jdkr+t| jt	d}n| jdkrJt
 |¡\}| _t  t|| ¡ | jd@ dk| _| j}|d }i | _d	}t||dd … ƒD ]\}}||||… ƒ| j| |¡< |d7 }q\d S )
Né   )ÚprecisionBitsçffffffþ?©Úfmtç333333@ç      @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ÚdecoderÚglocÚcountÚsÚer   r   r   Ú	decompileI   s$   



þztable_G__l_a_t.decompilec                 C   s   t ƒ }t|ƒdkrFt ||tƒ ¡\}}t|j|j|j ƒ}t|ƒd|j kr@t 	d|j |¡}| 
t||ƒ¡ |d|j d … }t|ƒdks	|S )Né   é   ú>%dh)r   Úlenr   r!   r
   ÚrangeÚattNumÚnumÚstructÚunpack_fromÚupdater.   )r   r0   r   r-   r6   ÚkeysÚvalsr   r   r   r%   ]   s   úz$table_G__l_a_t.decompileAttributes12c                 C   s†   | j r5t t|tƒ ¡\}}t|jƒ d¡}g |_t	|ƒD ]}t
|ƒdkr4t t|tƒ ¡\}}|j |¡ q|  |t¡}| j rA||_|S )NÚ1é   )r+   r   r!   ÚGlat_format_3_octabox_metricsr
   ÚbinÚsubboxBitmapr4   Úsubboxesr<   r;   ÚGlat_format_3_subbox_entryÚappendr%   r'   Úoctabox)r   r0   ÚoÚnumsubÚbÚsubboxÚattrsr   r   r   r,   h   s   ÿ€z#table_G__l_a_t.decompileAttributes3c                 C   sì   t  t| ¡}| jdkrt| jtd}n(| jdkr t| jtd}n| jdkr;| jd> | jr.dnd | _	t  t
| ¡}| j}g }tt| jƒƒD ]}| t|ƒ¡ ||| j| |¡ ƒ7 }qD| t|ƒ¡ |d  |¡ | jdkrtt | j|¡}|S )	Nr   r   r   r   é   r   r   r    )r   Úpackr"   r$   r   ÚcompileAttributes12r&   r   r+   r*   r)   ÚcompileAttributes3r<   r;   r-   rK   r/   Úsetr   Úcompress)r   r1   r0   ÚencoderÚglocsÚnr   r   r   Úcompilex   s$   



ztable_G__l_a_t.compilec                 C   sX   d}t  |¡D ]"}|t ||d |d dœ¡tjdt|d ƒ g|d ¢R Ž  7 }q|S )Nó    r   r   )r=   r>   r:   r9   )r   Úentriesr   rS   r?   r;   )r   rQ   r   r0   r6   r   r   r   rT   Ž   s   ÿÿz"table_G__l_a_t.compileAttributes12c                 C   sb   | j r'|j}t t|¡}t|jƒ d¡}t|ƒD ]}|t t	|j
| ¡7 }qnd}||  |t¡ S )NrD   Ú )r+   rL   r   rS   rF   rG   rH   r4   r<   rJ   rI   rT   r'   )r   rQ   rM   r0   rN   rO   r   r   r   rU   –   s   ÿz!table_G__l_a_t.compileAttributes3c                    s†  |j d| j| jd | ¡  t| j ¡ ‡ fdd„dD ]¥\}}|jd|d | ¡  t|dƒr |j	}t
 t¡\}}}i }	|D ]}
|
d	krEq>d
 t||
ƒd d ¡|	|
< q>d |j¡|	d< |jdi |	¤Ž | ¡  t
 t¡\}}}|jD ]#}i }	|D ]}
d
 t||
ƒd d ¡|	|
< qy|j di |	¤Ž | ¡  qs| d¡ | ¡  t| ¡ ƒD ]\}
}|j d|
|d | ¡  q¦| d¡ | ¡  qd S )Nr$   )r$   ÚcompressionSchemec                    s   ˆ   | d ¡S r   )Ú
getGlyphID)Úx©r1   r   r   Ú<lambda>¥   s    z&table_G__l_a_t.toXML.<locals>.<lambda>)ÚkeyÚglyph)ÚnamerL   rH   z{:.3f}%ç      Y@éÿ   z{:0X}ÚbitmapÚ	octaboxesÚ	attribute)ÚindexÚvalue)rj   )rL   )Ú	simpletagr$   r   ÚnewlineÚsortedr-   ÚitemsÚbegintagÚhasattrrL   r   Ú	getformatrF   ÚformatÚgetattrrH   rJ   rI   Úendtag)r   Úwriterr1   rZ   ÚarM   ÚformatstringÚnamesÚfixesrC   Úkr5   Úvr   rb   r   ÚtoXML¡   sJ   ÿ

ÿ
ÿ





ßztable_G__l_a_t.toXMLc                 C   s’  |dkrt t|d ƒƒ| _tt|d ƒƒ| _|dkrd S t| dƒs$i | _|d }tƒ }|D ]”}t|t	ƒs5q-|\}}}	|dkrStt|d ƒƒ}
tt|d ƒƒ}|||
< q-|d	krÁd
| _
tƒ }t|d dƒ|_g |_|d= | ¡ D ]\}
}t||
tt |d d… ƒd d d ƒƒ qo|	D ]3}t|t	ƒs’qŠ|\}}}	tƒ }| ¡ D ]\}
}t||
tt |d d… ƒd d d ƒƒ qž|j |¡ qŠ||_q-|| j|< d S )Nr$   r_   re   r-   rf   rk   rl   rm   rj   Tri   r   éÿÿÿÿg     ào@rg   g      à?)r#   r   r$   Úintr   rs   r-   r   Ú
isinstanceÚtupler+   r
   rH   rI   rq   ÚsetattrrK   rL   )r   rf   rQ   Úcontentr1   Úgnamer-   Úelementr   Ú
subcontentr}   r~   rM   Úsor   r   r   ÚfromXMLÇ   sH   



*

*€ztable_G__l_a_t.fromXML)N)r   r   r   Ú__doc__r   r7   r%   r,   r[   rT   rU   r   rŠ   r   r   r   r   r   @   s    
&r   )ÚfontTools.miscr   ÚfontTools.misc.fixedToolsr   ÚfontTools.misc.textToolsr   Ú	functoolsr   r^   r   r   r?   r"   r)   r&   r'   rF   rJ   r
   Údictr   r   r   r   r   r   Ú<module>   s     	