a
    —Æàg«ˆ  ã                   @   sr  d dl mZ d dlmZ d dlmZ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 d	lZd d	lZd
ZdZdZdZdZdZdZdZdZdZdZdZdZedd„ eeƒD ƒƒZdd„ Z e !d¡Z"dd„ Z#dd„ Z$d d!„ Z%d"Z&d#Z'd$Z(d%Z)d&Z*d'Z+d(d)„ Z,d*d+„ Z-d,d-„ Z.d;d/d0„Z/G d1d2„ d2ƒZ0G d3d4„ d4ejƒZ1G d5d6„ d6e2ƒZ3G d7d8„ d8e2ƒZ4G d9d:„ d:e2ƒZ5d	S )<é    )Ússtruct)ÚfloatToFixedToStr)ÚbyteordÚsafeEvalé   )ÚDefaultTable)ÚgrUtils)Úarray)ÚreduceNz&
    >
    version:            16.16F
zŽ
    >
    version:            16.16F
    compilerVersion:    L
    numSilf:            H
                        x
                        x
zZ
    >
    ruleVersion:        16.16F
    passOffset:         H
    pseudosOffset:      H
aÁ  
    >
    maxGlyphID:         H
    extraAscent:        h
    extraDescent:       h
    numPasses:          B
    iSubst:             B
    iPos:               B
    iJust:              B
    iBidi:              B
    flags:              B
    maxPreContext:      B
    maxPostContext:     B
    attrPseudo:         B
    attrBreakWeight:    B
    attrDirectionality: B
    attrMirroring:      B
    attrSkipPasses:     B
    numJLevels:         B
z×
    >
    attrStretch:        B
    attrShrink:         B
    attrStep:           B
    attrWeight:         B
    runto:              B
                        x
                        x
                        x
zñ
    >
    numLigComp:         H
    numUserDefn:        B
    maxCompPerLig:      B
    direction:          B
    attCollisions:      B
                        x
                        x
                        x
    numCritFeatures:    B
z;
    >
    unicode:            L
    nPseudo:            H
z;
    >
    unicode:            H
    nPseudo:            H
z;
    >
    numClass:           H
    numLinear:          H
zo
    >
    numIDs:             H
    searchRange:        H
    entrySelector:      H
    rangeShift:         H
z;
    >
    glyphId:            H
    index:              H
as  
    >
    flags:              B
    maxRuleLoop:        B
    maxRuleContext:     B
    maxBackup:          B
    numRules:           H
    fsmOffset:          H
    pcCode:             L
    rcCode:             L
    aCode:              L
    oDebug:             L
    numRows:            H
    numTransitional:    H
    numSuccess:         H
    numColumns:         H
)C)ÚNOPr   )Z	PUSH_BYTEÚb)ZPUSH_BYTE_UÚB)Z
PUSH_SHORTz>h)ZPUSH_SHORT_Uú>H)Z	PUSH_LONGú>L)ZADDr   )ZSUBr   )ZMULr   )ZDIVr   )ZMINr   )ÚMAXr   )ZNEGr   )ZTRUNC8r   )ZTRUNC16r   )ZCONDr   )ÚANDr   )ÚORr   )ÚNOTr   )ÚEQUALr   )ZNOT_EQr   )ÚLESSr   )ZGTRr   )ZLESS_EQr   )ZGTR_EQr   )ZNEXTr   )ZNEXT_Nr   )Z	COPY_NEXTr   )ZPUT_GLYPH_8BIT_OBSr   )ZPUT_SUBS_8BIT_OBSZbBB)ZPUT_COPYr   )ZINSERTr   )ÚDELETEr   )ZASSOCéÿÿÿÿ)Z
CNTXT_ITEMZbB)ZATTR_SETr   )ZATTR_ADDr   )ZATTR_SUBr   )ZATTR_SET_SLOTr   )ZIATTR_SET_SLOTÚBB)ZPUSH_SLOT_ATTRÚBb)ZPUSH_GLYPH_ATTR_OBSr   )ZPUSH_GLYPH_METRICÚBbb)Z	PUSH_FEATr   )ZPUSH_ATT_TO_GATTR_OBSr   )ZPUSH_ATT_TO_GLYPH_METRICr   )ZPUSH_ISLOT_ATTRr   )ZPUSH_IGLYPH_ATTRr   )ZPOP_RETr   )ZRET_ZEROr   )ZRET_TRUEr   )Z	IATTR_SETr   )Z	IATTR_ADDr   )Z	IATTR_SUBr   )ZPUSH_PROC_STATEr   )ZPUSH_VERSIONr   )ZPUT_SUBSz>bHH)Z	PUT_SUBS2r   )Z	PUT_SUBS3r   )Z	PUT_GLYPHr   )ZPUSH_GLYPH_ATTRú>Hb)ZPUSH_ATT_TO_GLYPH_ATTRr   )ZBITORr   )ZBITANDr   )ZBITNOTr   )ZBITSETú>HH)ZSET_FEATr   c                 C   s$   g | ]\}}|d  ||d ff‘qS ©r   r   © )Ú.0ÚiÚxr   r   úX/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S__i_l_f.pyÚ
<listcomp>Æ   ó    r#   c           	      C   s  t | ƒ}d}g }||k �rt| ||d … ƒ}|t tƒkrDtd }nt| }|d7 }|d dkrl||krl|S |d dkr–t| | ƒ}d| }|d7 }n|d dkr¨d}n|d }|dkrÈ| |d ¡ qt || |d … ¡}| |d d d tt|ƒ¡ d ¡ |t 	|¡7 }q|S )	Nr   r   r   ú%dBÚ ú(z, ú))
Úlenr   Ú
aCode_infoÚappendÚstructÚunpack_fromÚjoinÚmapÚstrÚcalcsize)	ÚaCodeZcodelenZpcÚresÚopcodeÚinstrÚcountÚfmtÚparmsr   r   r"   ÚdisassembleÉ   s2    


&r9   z^\s*([^(]+)\s*(?:\(([^)]+)\))?c                 C   sÊ   d}| D ]¼}t  |¡}|r| d¡tvr*qt| d¡ \}}|t d|¡7 }| d¡r|dkr`qdd„ t d| d¡¡D ƒ}|d	kr®t|ƒ}|tjd
|d  |g|¢R Ž 7 }q|tj|g|¢R Ž 7 }q|S )Nr$   r   r   é   r   c                 S   s   g | ]}t |ƒ‘qS r   ©Úint©r   r!   r   r   r"   r#   õ   r$   zassemble.<locals>.<listcomp>z,\s*r   r%   )	ÚinstreÚmatchÚgroupÚ	aCode_mapr,   ÚpackÚreÚsplitr)   )Úinstrsr3   ÚinstÚmr4   Zparmfmtr8   Úlr   r   r"   Úassembleê   s     

"rI   c                 C   sH   |  | ¡ | ¡  t|ƒD ]}| |¡ | ¡  q| | ¡ | ¡  d S ©N)ÚbegintagÚnewliner9   ÚwriteÚendtag)ÚtagÚwriterrE   rH   r   r   r"   Ú	writecodeþ   s    



rQ   c                 C   s<   g }t | ƒ d¡D ] }| ¡ }t|ƒs(q| |¡ qt|ƒS )NÚ
)Úcontent_stringrD   Ústripr)   r+   rI   )Úcontentr3   Úer   r   r"   Úreadcode  s    rW   )	ÚflagsZextraAscentZextraDescentZ
maxGlyphIDZ
numLigCompZnumUserDefnZmaxCompPerLigÚ	directionÚlbGID)ZiSubstZiPosZiJustZiBidi)ZmaxPreContextZmaxPostContext)Z
attrPseudoZattrBreakWeightZattrDirectionalityZattrMirroringZattrSkipPassesZattCollisions)rX   ZmaxRuleLoopZmaxRuleContextZ	maxBackupÚminRulePreContextÚmaxRulePreContextÚcollisionThreshold)ÚnumRowsÚnumTransitionalÚ
numSuccessÚ
numColumnsc                    s4   t ‡ fdd„|D ƒƒ}|j| fi |¤Ž | ¡  d S )Nc                    s   g | ]}|t ˆ |ƒf‘qS r   ©Úgetattr©r   Úk©Úselfr   r"   r#   4  r$   zwritesimple.<locals>.<listcomp>)ÚdictÚ	simpletagrL   )rO   rg   rP   ZattrkeysÚattrsr   rf   r"   Úwritesimple3  s    rk   c                 G   s.   |D ]$}||v rt | |tt|| ƒƒƒ qd S rJ   )Úsetattrr<   r   )rg   rj   Ú	attr_listre   r   r   r"   Ú	getSimple9  s    rn   c                 C   s*   d}| D ]}t |tƒrq||7 }q| ¡ S )Nr&   )Ú
isinstanceÚtuplerT   )Úcontentsr3   Úelementr   r   r"   rS   ?  s    

rS   éP   c                 C   sj   d}|D ]:}t |ƒ|kr6|  |d d… ¡ |  ¡  d}||d 7 }qt |ƒrf|  |d d… ¡ |  ¡  d S )Nr&   r   ú )r)   rM   rL   )rP   ZdatÚlengthZcurrlineÚdr   r   r"   ÚwraplineH  s    rw   c                   @   s   e Zd ZdS )Ú_ObjectN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r"   rx   U  s   rx   c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Útable_S__i_l_fzhGraphite Rules table

    See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
    Nc                 C   s   t j  | |¡ g | _d S rJ   )r   Ú__init__Úsilfs)rg   rO   r   r   r"   r}   _  s    ztable_S__i_l_f.__init__c                 C   sø   t  t|| ¡ tt| jdd�ƒ| _| jdkrVt |¡\}| _t  t	|| ¡ t  
t	¡}nP| jdk rˆt d|dd… ¡| _d| _d| _d	}nd| _t  t	|| ¡ t  
t	¡}t d
| j ||d … ¡}|D ].}tƒ }| j |¡ | ||d … || j¡ qÄd S )Né   ©ZprecisionBitsç      @ç      @r   é   é   r   é   ú>%dL)r   Úunpack2ÚSilf_hdr_formatÚfloatr   Úversionr   Ú
decompressÚschemeÚSilf_hdr_format_3r1   r,   ÚunpackÚnumSilfÚcompilerVersionr-   ÚSilfr~   r+   Ú	decompile)rg   ÚdataÚttFontÚbaseZsilfoffsetsÚoffsetÚsr   r   r"   r’   c  s&    


ztable_S__i_l_f.decompilec                 C   s¼   t | jƒ| _| jdk r8t t| ¡}|t d| jd¡7 }nt t| ¡}t |ƒd| j  }d}| jD ]6}|t d|¡7 }| 	|| j¡}|t |ƒ7 }||7 }q`| jdkr´t
 | j|| ¡S || S )Nr‚   r   r   rƒ   r$   r   r�   )r)   r~   r�   rŠ   r   rB   rˆ   r,   r�   Úcompiler   ÚcompressrŒ   )rg   r”   Úhdrr–   r“   r—   Zsubdatar   r   r"   r˜   z  s    



ztable_S__i_l_f.compilec                 C   sv   |  d¡ | ¡  |jd| j| j| jd� | ¡  | jD ]8}| d¡ | ¡  | ||| j¡ | 	d¡ | ¡  q8d S )Nz/Attributes starting with _ are informative onlyrŠ   )rŠ   r�   ÚcompressionSchemeÚsilf)
ÚcommentrL   ri   rŠ   r�   rŒ   r~   rK   ÚtoXMLrN   )rg   rP   r”   r—   r   r   r"   rž   Œ  s    
ü


ztable_S__i_l_f.toXMLc           	      C   s”   |dkrBt t|d ƒƒ| _tt|d ƒƒ| _t t|d ƒƒ| _d S |dkr�tƒ }| j |¡ |D ].}t	|t
ƒspq`|\}}}| ||||| j¡ q`d S )NrŠ   r›   r�   rœ   )r<   r   rŒ   r‰   rŠ   r�   r‘   r~   r+   ro   rp   ÚfromXML)	rg   Únamerj   rU   r”   r—   rr   rO   Ú
subcontentr   r   r"   rŸ   �  s    

ztable_S__i_l_f.fromXML)N©	ry   rz   r{   Ú__doc__r}   r’   r˜   rž   rŸ   r   r   r   r"   r|   Y  s   
r|   c                   @   s@   e Zd ZdZdd„ Zddd„Zddd„Zdd	d
„Zddd„ZdS )r‘   zA particular Silf subtablec                 C   s"   g | _ g | _g | _g | _i | _d S rJ   )ÚpassesÚ
scriptTagsÚcritFeaturesÚjLevelsÚpMaprf   r   r   r"   r}   °  s
    zSilf.__init__ç       @c              	      sä  |dkr.t  tˆ | ¡\}‰ tt| jdd�ƒ| _t  tˆ | ¡\}‰ t| jƒD ]$}t  t	ˆ t
ƒ ¡\}‰ | j |¡ qJt  tˆ | ¡\}‰ | jrœt d| j ˆ ¡| _ˆ | jd d d … ‰ t dˆ ¡\}|rè‡ fdd	„tddd
|  d
ƒD ƒ| _ˆ dd
|  d … ‰ t dˆ d d… ¡\| _| j�rFt d| jd  ˆ ddd
| j  … ¡| _ˆ dd
| j  d … ‰ t dˆ d d… ¡\}t|ƒD ]v}	|dk�r²t  tˆ dd|	  dd|	  … t
ƒ ¡}
n(t  tˆ dd
|	  dd
|	  … t
ƒ ¡}
| |
j¡| j|
j< �qzˆ dd|  d … ‰ t  t¡t  t	¡| j  t  t¡ d| j  d d d
|  d d
| j  d d|  }|dk�rv|t  t¡7 }tƒ | _| j  ˆ ||¡ t| jƒD ]F}	t!ƒ }| j" |¡ |  ˆ | j|	 | | j|	d  | … ||¡ �q˜d S )Nr‚   r   r€   ú>%dHr:   r   r   c              	      s.   g | ]&}t  d ˆ ||d … ¡d  d¡‘qS )Ú4srƒ   r   Úascii)r,   rŽ   Údecoder=   ©r“   r   r"   r#   É  s   ÿz"Silf.decompile.<locals>.<listcomp>rƒ   r   r†   r„   r…   é   é   )#r   r‡   ÚSilf_part1_format_v3r‰   r   ÚruleVersionÚSilf_part1_formatÚrangeÚ
numJLevelsÚSilf_justify_formatrx   r§   r+   ÚSilf_part2_formatÚnumCritFeaturesr,   r-   r¦   r¥   rŽ   rZ   Ú	numPassesZoPassesÚSilf_pseudomap_formatÚSilf_pseudomap_format_hÚgetGlyphNameZnPseudor¨   Úunicoder1   ÚClassesÚclassesr’   ÚPassr¤   )rg   r“   r”   rŠ   Ú_ZjlevelÚjZnumScriptTagÚ	numPseudor    ÚpseudoÚcurrposÚpr   r®   r"   r’   ·  s�    ÿ
ÿ
þ ÿ
 ÿ ÿÿþýüûúùø	÷
öÿ
"ýzSilf.decompilec              	   C   s,  t | jƒ| _t | jƒ| _t | jƒ| _t | jƒ}d}|dkrFt 	t
¡}nd}|t t| ¡7 }| jD ]}|t t|¡7 }q`|t t| ¡7 }| jrª|tjd| j g| j¢R Ž 7 }|t ddt | jƒ¡7 }t | jƒrêdd„ | jD ƒ}|d |¡7 }|t d| j¡7 }t |ƒ| _t |d	¡}|t |ƒ d
| jd   }	|	t |ƒ | _t| j ¡ ƒD ]0\}
}|t |dk�rddnd|
| |¡¡7 }�qH|| j ||¡7 }|	t |ƒ7 }	d}d}t| jƒD ]8\}}|	t |ƒ }|t d|¡7 }|| |||¡7 }�qª|t d|	t |ƒ ¡7 }|dk�rt t
| ¡}nd}|| | | | S )Nr$   r‚   r   rª   r   c                 S   s   g | ]}t  d | d¡¡‘qS )r«   r¬   )r,   rB   Úencoder=   r   r   r"   r#     r$   z Silf.compile.<locals>.<listcomp>r   r„   rƒ   r   z>LHr   r   )r)   r¤   r¹   r§   rµ   r¦   r¸   r¨   r   r1   r±   rB   r³   r¶   r·   r,   ZnumCritFeatursr¥   r.   rZ   Z
passOffsetr   ÚbininfoZpseudosOffsetÚsortedÚitemsÚ
getGlyphIDr¿   r˜   Ú	enumerate)rg   r”   rŠ   rÃ   r“   Z	hdroffsetrÂ   ZtdataZdata1rÅ   ÚurÆ   Zdata2Zdataor    r•   Zdata3r   r   r"   r˜   ú  sP    



ÿ

zSilf.compilec                    s|  |dkr |j d| jd� | ¡  td| |gt¢R Ž  td| |gt¢R Ž  td| |gt¢R Ž  td| |gt¢R Ž  t| j	ƒrð| 
d¡ | ¡  t t¡\}}}t| j	ƒD ]6\}‰ t‡ fd	d
„|D ƒƒ}|j di |¤Ž | ¡  q¦| d¡ | ¡  t| jƒ�r@| 
d¡ | ¡  | d tt| jƒ¡¡ | ¡  | d¡ | ¡  t| jƒ�rŠ| 
d¡ | ¡  | d | j¡¡ | ¡  | d¡ | ¡  | j�rì| 
d¡ | ¡  t| j ¡ ƒD ]&\}	}
|j dt|	ƒ|
d� | ¡  �q²| d¡ | ¡  | j |||¡ t| jƒ�rx| 
d¡ | ¡  t| jƒD ]@\}}|j
d|d� | ¡  | |||¡ | d¡ | ¡  �q$| d¡ | ¡  d S )Nr‚   rŠ   )r²   ÚinfoÚpassindexesÚcontextsÚ
attributesÚjustificationsc                    s   g | ]}|t ˆ |ƒf‘qS r   rb   rd   ©rÂ   r   r"   r#   5  r$   zSilf.toXML.<locals>.<listcomp>Újustifyr¦   rt   r¥   Ú	pseudoMaprÄ   )r½   rÄ   r¤   Úpass©Ú_index)rÔ   )ri   r²   rL   rk   Ú
attrs_infoÚattrs_passindexesÚattrs_contextsÚattrs_attributesr)   r§   rK   r   Z	getformatr¶   rÌ   rh   rN   r¦   rM   r.   r/   r0   r¥   r¨   rÉ   rÊ   Úhexr¿   rž   r¤   )rg   rP   r”   rŠ   ZjformatZjnamesZjfixesr    rj   re   ÚvrÆ   r   rÓ   r"   rž   (  sf    












z
Silf.toXMLc              	   C   s¢  |dkrt t| dd¡ƒƒ| _|dkr<t| |gt¢R Ž  �nb|dkrZt| |gt¢R Ž  �nD|dkrxt| |gt¢R Ž  �n&|dkr–t| |gt¢R Ž  �n|dkrþ|D ]V}t	|t
ƒs²q¢|\}}}|d	kr¢tƒ }	| ¡ D ]\}
}t|	|
t|ƒƒ qÒ| j |	¡ q¢�n |d
k�r0g | _t|ƒ}| j tt| ¡ ƒ¡ �nn|dk�rhg | _t|ƒ}| ¡ D ]}| j |¡ �qP�n6|dk�rÊi | _|D ]J}t	|t
ƒ�s��q||\}}}|dk�rºt|d dƒ}
|d }|| j|
< �q|nÔ|dk�rtƒ | _|D ]4}t	|t
ƒ�sô�qà|\}}}| j |||||¡ �qàn†|dk�rž|D ]v}t	|t
ƒ�s:�q&|\}}}|dk�r&tƒ }|D ]4}t	|t
ƒ�sl�qX| |d |d |d ||¡ �qX| j |¡ �q&d S )NrŠ   r²   Ú0rÎ   rÏ   rÐ   rÑ   rÒ   rÔ   r¦   r¥   rÕ   rÄ   r½   r   r¿   r¤   rÖ   r   r   r:   )r‰   r   Úgetr²   rn   rÙ   rÚ   rÛ   rÜ   ro   rp   rx   rÊ   rl   r<   r§   r+   r¦   rS   Úextendr/   rD   r¥   r¨   r¾   r¿   rŸ   rÀ   r¤   )rg   r    rj   rU   r”   rŠ   rr   rO   r¡   rÂ   re   rÞ   ÚnrÆ   rV   r   r   r"   rŸ   ]  st    











"zSilf.fromXMLN)r©   )r©   )r©   )r©   r¢   r   r   r   r"   r‘   ­  s   
C
.
5r‘   c                   @   s<   e Zd Zdd„ Zddd„Zddd„Zddd	„Zdd
d„ZdS )r¾   c                 C   s   g | _ g | _d S rJ   )ÚlinearÚ	nonLinearrf   r   r   r"   r}   ›  s    zClasses.__init__r©   c           	   
      sB  t  tˆ | ¡ |dkr@t d| jd  ˆ ddd| j  … ¡}n(t d| jd  ˆ ddd| j  … ¡}t|d | j… |d| jd … ƒD ]>\}}| j 	‡fd	d
„t d|| d  ˆ ||… ¡D ƒ¡ qŠt|| j| j… || jd | jd … ƒD ]H\}}‡ fdd„t
|d |dƒD ƒ}t‡fdd„|D ƒƒ}| j 	|¡ qôd S )Nç      @r†   r   rƒ   r…   rª   r„   r:   c                 3   s   | ]}ˆ   |¡V  qd S rJ   ©r¼   r=   ©r”   r   r"   Ú	<genexpr>ª  s   ÿz$Classes.decompile.<locals>.<genexpr>c              	      s$   g | ]}t  d ˆ ||d … ¡‘qS )r   rƒ   )r,   rŽ   r=   r®   r   r"   r#   ²  s   z%Classes.decompile.<locals>.<listcomp>c                    s"   g | ]}ˆ   |d  ¡|d f‘qS r   ræ   r=   rç   r   r"   r#   µ  r$   )r   r‡   ÚSilf_classmap_formatr,   rŽ   ÚnumClassÚzipÚ	numLinearrã   r+   r´   rh   rä   )	rg   r“   r”   rŠ   ÚoClassesr—   rV   Z	nonLinidsZnonLinr   )r“   r”   r"   r’   Ÿ  s*     ÿ ÿ*þ
þ
ÿzClasses.decompilec                    s^  d}g }|dkr.ddt | jƒt | jƒ   }nddt | jƒt | jƒ   }| jD ]F}| t |ƒ| ¡ ‡ fdd„|D ƒ}|tjd	t |ƒ g|¢R Ž 7 }qP| jD ]Z}| t |ƒ| ¡ ‡ fd
d„| ¡ D ƒ}|t t |ƒ¡7 }|d 	dd„ t
|ƒD ƒ¡7 }qž| t |ƒ| ¡ t |ƒd | _t | jƒ| _t t| ¡tj|dk�rBdnd	t |ƒ g|¢R Ž  | S )Nr$   rå   r…   rƒ   r„   r:   c                    s   g | ]}ˆ   |¡‘qS r   ©rË   r=   rç   r   r"   r#   Á  r$   z#Classes.compile.<locals>.<listcomp>rª   c                    s"   g | ]}ˆ   |d  ¡|d f‘qS r   rî   r=   rç   r   r"   r#   Å  r$   c                 S   s   g | ]}t jd g|¢R Ž ‘qS )r   ©r,   rB   r=   r   r   r"   r#   Ç  r$   r   r†   )r)   rã   rä   r+   r,   rB   rÊ   r   rÈ   r.   rÉ   rê   rì   r   ré   )rg   r”   rŠ   r“   rí   r–   rH   Zgsr   rç   r"   r˜   ¸  s6    
 

ÿÿÿüÿzClasses.compilec                 C   s"  |  d¡ | ¡  |  d¡ | ¡  t| jƒD ]:\}}|j d|d� | ¡  t||ƒ | d¡ | ¡  q.| d¡ | ¡  |  d¡ | ¡  t| jƒD ]`\}}|j d|| j d� | ¡  | ¡ D ] \}}|j	d||d� | ¡  qÄ| d¡ | ¡  q˜| d¡ | ¡  | d¡ | ¡  d S )	Nr¿   ÚlinearClassesrã   r×   ÚnonLinearClassesrä   r/   )ÚglyphÚindex)
rK   rL   rÌ   rã   rw   rN   rä   rì   rÊ   ri   )rg   rP   r”   rŠ   r    rH   ÚinpÚindr   r   r"   rž   Ó  s4    











zClasses.toXMLc                 C   sÎ   |dkrJ|D ]:}t |tƒsq|\}}}|dkrt|ƒ ¡ }	| j |	¡ qn€|dkrÊ|D ]r}t |tƒsfqV|\}}}|dkrVi }	|D ]:}
t |
tƒs�q€|
\}}}|dkr€tt|d ƒƒ|	|d < q€| j |	¡ qVd S )Nrð   rã   rñ   rä   r/   ró   rò   )	ro   rp   rS   rD   rã   r+   r<   r   rä   )rg   r    rj   rU   r”   rŠ   rr   rO   r¡   rH   rV   Zsubsubcontentr   r   r"   rŸ   ï  s,    





zClasses.fromXMLN)r©   )r©   )r©   )r©   ©ry   rz   r{   r}   r’   r˜   rž   rŸ   r   r   r   r"   r¾   š  s
   


r¾   c                   @   s<   e Zd Zdd„ Zddd„Zddd„Zddd	„Zdd
d„ZdS )rÀ   c                 C   s:   i | _ g | _g | _g | _g | _d| _g | _g | _g | _d S )Nr$   )	ÚcolMapÚrulesÚrulePreContextsÚruleSortKeysÚruleConstraintsÚpassConstraintsÚactionsÚ
stateTransÚstartStatesrf   r   r   r"   r}   	  s    zPass.__init__r©   c              	      s¬  t  tˆ | ¡\}‰ t dˆ d d… ¡\}}}}ˆ dd … ‰ t|ƒD ]N}t dˆ d| d| d … ¡\}}}	t||d ƒD ]}
|	| j| |
¡< qzqBˆ d| d … ‰ t d| j	d  ˆ ¡}ˆ dd| j	  d … ‰ t d|d  ˆ ¡‰‡fd	d
„t
||dd … ƒD ƒ| _ˆ d|d  d … ‰ t dˆ d d… ¡\| _| _| j| j d }t d| ˆ dd|d  … ¡| _ˆ d|d  d … ‰ t d| j ˆ d d| j … ¡| _ˆ d| j d … ‰ t d| j ˆ d | j… ¡| _ˆ | jd … ‰ t dˆ d d… ¡\| _}tt d| jd  ˆ dd| jd  … ¡ƒ}ˆ d| jd  d … ‰ tt d| jd  ˆ d d| jd  … ¡ƒ}ˆ d| j d d … ‰ t| jƒD ]P}tdˆ || j d |d | j d … ƒ}tjdk�rÄ| ¡  | j |¡ �q‚ˆ | j| j d d d … ‰ ˆ d |… | _ˆ |d … ‰ tt|ƒd ddƒD ]$}|| dk�r||d  ||< �q‡ fdd
„t
||dd … ƒD ƒ| _ˆ |d d … ‰ ‡ fdd
„t
||dd … ƒD ƒ| _ˆ |d d … ‰ d S )Nz>4Hr…   ú>3Hr„   r   rª   r:   r   c                    s   g | ]\}}ˆ ||… ‘qS r   r   ©r   r—   rV   )rø   r   r"   r#      r$   z"Pass.decompile.<locals>.<listcomp>r   r%   ú>BHé   é   ÚHÚbigr   c                    s,   g | ]$\}}|| d kr$ˆ ||… nd‘qS )r   r$   r   r  r®   r   r"   r#   H  s   ÿc                    s,   g | ]$\}}|| d kr$ˆ ||… nd‘qS )r   r&   r   r  r®   r   r"   r#   M  s   ) r   r‡   ÚSilf_pass_formatr,   rŽ   r´   r÷   r¼   r-   r`   rë   rø   r[   r\   rÿ   ÚnumRulesrú   rù   r]   Úlistr_   r	   ra   ÚsysÚ	byteorderÚbyteswaprþ   r+   rü   r)   rû   rý   )rg   r“   r”   rŠ   rÁ   ZnumRanger    ÚfirstÚlastÚcolÚgÚoRuleMapZnumStartStatesZpConstraintÚoConstraintsÚoActionsÚar   )r“   rø   r"   r’     sv    &"ÿÿÿ ÿÿ&ÿ$ÿ
þ
ÿzPass.decompilec                    sd  t dd„ | jdg dg fƒd }t dd„ | jdg dg fƒd }dd | j¡ }g }| jD ]6}tjdkrp| ¡  | | 	¡ ¡ tjdkrZ| ¡  qZt
|ƒs¢dg| _t d	d„ | jg g dg fƒd }	g }
t‡ fd
d„| j ¡ D ƒƒ}tj|dd�D ]8}|d rð|
 |d |d |d  d |d d f¡ qðt
| jƒ| _t t¡d t
|
ƒd  t
|	ƒd  d|	d   d dt
| jƒ  d| j  d d| j  d | _| jd| j | j  d | | _| jt
| jƒ | _| jt
|ƒ | _d| _t t| ¡}|t t
|
ƒd¡7 }|d dd„ |
D ƒ¡7 }|t jdt
|	ƒ g|	¢R Ž 7 }t dd„ | jg ƒ}|t jd|	d  g|¢R Ž 7 }|t  d| j!| j"¡7 }|t jdt
| jƒ g| j¢R Ž 7 }|t jd| j g| j#¢R Ž 7 }|t jd| j g| j$¢R Ž 7 }|t  d| j%t
| jƒ¡7 }|t jd| jd  g|¢R Ž 7 }|t jd| jd  g|¢R Ž 7 }|d |¡ t  dd¡ | j | d | j¡ S )Nc                 S   s"   | d t |ƒ | d | d g fS ©Nr   r   ©r)   ©r  r!   r   r   r"   Ú<lambda>V  r$   zPass.compile.<locals>.<lambda>r$   r   r   c                 S   s"   | d t |ƒ | d | d g fS r  r  r  r   r   r"   r  Y  r$   ó    r  c                 S   s"   | d t |ƒ | d | d g fS r  r  r  r   r   r"   r  h  r$   c                    s"   g | ]}ˆ   |d  ¡|d f‘qS r   rî   r=   rç   r   r"   r#   k  r$   z Pass.compile.<locals>.<listcomp>T)Zsamevalr:   r…   r„   r   r  rƒ   c                 s   s    | ]}t jd g|¢R Ž V  qdS )r   Nrï   )r   rÆ   r   r   r"   rè   †  r$   zPass.compile.<locals>.<genexpr>rª   c                 S   s   | | S rJ   r   r  r   r   r"   r  ˆ  r$   r   r%   r  r   )&r
   rý   rû   r.   rþ   r
  r  r  r+   Útobytesr)   rÿ   rø   rh   r÷   rÊ   r   Úentriesr  r   r1   r  Z	fsmOffsetr_   ra   ZpcCoderü   ZrcCoder2   ZoDebugrB   rÈ   r,   r[   r\   rú   rù   r]   )rg   r”   r•   rŠ   r  r  ZconstraintCodeZtransesÚtr  Z
passRangesZ	gidcolmaprV   r“   Z	flatrulesr   rç   r"   r˜   S  sª    ÿþ
ýü



ÿþ.ÿ
þ
ý
üûúùø	÷
öÿÿ"  ÿ
þýü
ûÿzPass.compilec              	      sP  t d| |gt¢R Ž  t d| |gt¢R Ž  | d¡ | ¡  t|dd„ t| j ¡ ‡ fdd„d�D ƒƒ | 	d¡ | ¡  | d	¡ | ¡  t
| jƒD ]8\}}|jd
| j| j | d tt|ƒ¡d� | ¡  q’| 	d	¡ | ¡  | d¡ | ¡  tt| jƒƒD ]p}|jd|| j| | j| d� | ¡  t| j| ƒ�rJtd|| j| ƒ td|| j| ƒ | 	d¡ | ¡  qþ| 	d¡ | ¡  t| jƒ�rœtd|| jƒ t| jƒ�rL| d¡ | ¡  | d¡ | d tt| jƒ¡¡ | 	d¡ | ¡  t
| jƒD ]@\}}|jd|d� | d tt|ƒ¡¡ | 	d¡ | ¡  �qø| 	d¡ | ¡  d S )NrÎ   ÚfsminfoÚcolmapc                 S   s   g | ]}d j |Ž ‘qS )z{}={})Úformatr=   r   r   r"   r#   ¡  s   ÿzPass.toXML.<locals>.<listcomp>c                    s   ˆ   | d ¡S )Nr   rî   )r!   rç   r   r"   r  ¤  r$   zPass.toXML.<locals>.<lambda>)ÚkeyÚstaterulemapÚstatert   )Únumberrø   rø   Úrule)ró   Ú
precontextÚsortkeyÚ
constraintÚactionÚpassConstraintÚfsmÚstartsÚrow)Z_i)rk   Úpass_attrs_infoÚpass_attrs_fsmrK   rL   rw   rÉ   r÷   rÊ   rN   rÌ   rø   ri   r^   r`   r.   r/   r0   r´   r)   rý   rù   rú   rû   rQ   rü   rþ   rM   rÿ   )rg   rP   r”   rŠ   r    Úrr—   r   rç   r"   rž   š  st    
ÿþþ	

ý


ü







z
Pass.toXMLc                 C   s‚  |dkrt | |gt¢R Ž  �n`|dkr<t | |gt¢R Ž  �nB|dkr¤t|ƒ}| ¡ D ]J}| d¡}t|ƒdksT|d dksT|d dkrˆqTt|d ƒ| j|d < qT�nÚ|d	krø|D ]B}t|t	ƒsÀq°|\}	}
}|	d
kr°| j
 dd„ |
d  d¡D ƒ¡ q°�n†|dk�rÌ|D ]Â}t|t	ƒ�s�q|\}	}
}|	dk�r2�q| j t|
d ƒ¡ | j t|
d ƒ¡ d}d}|D ]F}t|t	ƒ�sz�qf|\}	}
}|	dk�r˜t|ƒ}n|	dk�rft|ƒ}�qf| j |¡ | j |¡ �qn²|dk�rât|ƒ| _nœ|dk�r~|D ]Œ}t|t	ƒ�s�qð|\}	}
}|	dk�rJtdƒ}t|ƒ}| tt| ¡ ƒ¡ | j |¡ n0|	dk�rðg }t|ƒ}| tt| ¡ ƒ¡ || _�qðd S )NrÎ   r  r  ú=r:   r   r&   r   r!  r"  c                 S   s   g | ]}t |ƒ‘qS r   r;   r=   r   r   r"   r#   ê  r$   z Pass.fromXML.<locals>.<listcomp>rø   rt   r$  r%  r&  r$   r'  r(  r)  r*  r,  r  r+  )rn   r-  r.  rS   rD   r)   r<   r÷   ro   rp   rø   r+   rù   rú   rW   rý   rû   rü   r	   rá   r/   rþ   rÿ   )rg   r    rj   rU   r”   rŠ   rV   Úwr!   rO   r  Úcrr   ÚconZactZsubcr—   r   r   r"   rŸ   Ø  sp    
$

&











zPass.fromXMLN)r©   )r©   )r©   )r©   rö   r   r   r   r"   rÀ     s
   
?
G
>rÀ   )rs   )6ZfontTools.miscr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.textToolsr   r   r&   r   r   r	   Ú	functoolsr
   r,   rC   r
  rˆ   r�   r±   r³   r¶   r·   rº   r»   ré   ZSilf_lookupclass_formatZSilf_lookuppair_formatr  r*   rh   rÌ   rA   r9   r˜   r>   rI   rQ   rW   rÙ   rÚ   rÛ   rÜ   r-  r.  rk   rn   rS   rw   rx   r|   Úobjectr‘   r¾   rÀ   r   r   r   r"   Ú<module>   sT   	E


		
T nn