o
    Õj©ˆ  ã                   @   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   ú`/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/fontTools/ttLib/tables/S__i_l_f.pyÚ
<listcomp>Æ   s   $ r#   c           	      C   s  t | ƒ}d}g }||k r‹t| ||d … ƒ}|t tƒkr!td }nt| }|d7 }|d dkr5||kr5|S |d dkrJt| | ƒ}d| }|d7 }n|d dkrSd}n|d }|dkrc| |d ¡ qt || |d … ¡}| |d d d tt|ƒ¡ d ¡ |t 	|¡7 }||k s|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É   s4   

&êr8   z^\s*([^(]+)\s*(?:\(([^)]+)\))?c                 C   sÊ   d}| D ]^}t  |¡}|r| d¡tvrqt| d¡ \}}|t d|¡7 }| d¡rb|dkr0qdd„ t d| d¡¡D ƒ}|d	krWt|ƒ}|tjd
|d  |g|¢R Ž 7 }q|tj|g|¢R Ž 7 }q|S )Nó    r   r   é   r   c                 S   ó   g | ]}t |ƒ‘qS r   ©Úint©r   r!   r   r   r"   r#   õ   ó    zassemble.<locals>.<listcomp>z,\s*r   r$   )	ÚinstreÚmatchÚgroupÚ	aCode_mapr+   ÚpackÚreÚsplitr(   )Úinstrsr2   ÚinstÚmr3   Zparmfmtr7   Úlr   r   r"   Úassembleê   s"   

"€rK   c                 C   sH   |  | ¡ | ¡  t|ƒD ]}| |¡ | ¡  q| | ¡ | ¡  d S ©N)ÚbegintagÚnewliner8   ÚwriteÚendtag)ÚtagÚwriterrG   rJ   r   r   r"   Ú	writecodeþ   s   



rS   c                 C   s<   g }t | ƒ d¡D ]}| ¡ }t|ƒsq	| |¡ q	t|ƒS )NÚ
)Úcontent_stringrF   Ústripr(   r*   rK   )Úcontentr2   Úer   r   r"   Úreadcode  s   rY   )	ÚflagsZextraAscentZextraDescentZ
maxGlyphIDZ
numLigCompZnumUserDefnZmaxCompPerLigÚ	directionÚlbGID)ZiSubstZiPosZiJustZiBidi)ZmaxPreContextZmaxPostContext)Z
attrPseudoZattrBreakWeightZattrDirectionalityZattrMirroringZattrSkipPassesZattCollisions)rZ   ZmaxRuleLoopZmaxRuleContextZ	maxBackupÚminRulePreContextÚmaxRulePreContextÚcollisionThreshold)ÚnumRowsÚnumTransitionalÚ
numSuccessÚ
numColumnsc                    s4   t ‡ fdd„|D ƒƒ}|j| fi |¤Ž | ¡  d S )Nc                    ó   g | ]	}|t ˆ |ƒf‘qS r   ©Úgetattr©r   Úk©Úselfr   r"   r#   4  ó    zwritesimple.<locals>.<listcomp>)ÚdictÚ	simpletagrN   )rQ   rj   rR   ZattrkeysÚattrsr   ri   r"   Úwritesimple3  s   ro   c                 G   s.   |D ]}||v rt | |tt|| ƒƒƒ qd S rL   )Úsetattrr=   r   )rj   rn   Z	attr_listrh   r   r   r"   Ú	getSimple9  s
   €þrq   c                 C   s*   d}| D ]}t |tƒrq||7 }q| ¡ S )Nr%   )Ú
isinstanceÚtuplerV   )Úcontentsr2   Úelementr   r   r"   rU   ?  s   

rU   éP   c                 C   sn   d}|D ]}t |ƒ|kr|  |d d… ¡ |  ¡  d}||d 7 }qt |ƒr5|  |d d… ¡ |  ¡  d S d S )Nr%   r   ú )r(   rO   rN   )rR   ZdatÚlengthZcurrlineÚdr   r   r"   ÚwraplineH  s   þrz   c                   @   s   e Zd ZdS )Ú_ObjectN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r"   r{   U  s    r{   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 rL   )r   Ú__init__Úsilfs)rj   rQ   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r+t |¡\}| _t  t	|| ¡ t  
t	¡}n(| jdk rDt d|dd… ¡| _d| _d| _d	}nd| _t  t	|| ¡ t  
t	¡}t d
| j ||d … ¡}|D ]}tƒ }| j |¡ | ||d … || j¡ qbd S )Né   ©ZprecisionBitsç      @ç      @r   é   é   r   é   ú>%dL)r   Úunpack2ÚSilf_hdr_formatÚfloatr   Úversionr   Ú
decompressÚschemeÚSilf_hdr_format_3r0   r+   ÚunpackÚnumSilfÚcompilerVersionr,   ÚSilfr   r*   Ú	decompile)rj   Ú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 rt t| ¡}|t d| jd¡7 }nt t| ¡}t |ƒd| j  }d}| jD ]}|t d|¡7 }| 	|| j¡}|t |ƒ7 }||7 }q0| jdkrZt
 | j|| ¡S || S )Nr…   r   r   r†   r9   r   r„   )r(   r   r’   r   r   rD   r‹   r+   r   Úcompiler   Úcompressr   )rj   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 ]}| d¡ | ¡  | ||| j¡ | 	d¡ | ¡  qd S )Nz/Attributes starting with _ are informative onlyr   )r   r“   ÚcompressionSchemeÚsilf)
ÚcommentrN   rm   r   r“   r   r   rM   ÚtoXMLrP   )rj   rR   r—   rš   r   r   r"   r¡   Œ  s    
ü



ûztable_S__i_l_f.toXMLc           	      C   s˜   |dkr!t t|d ƒƒ| _tt|d ƒƒ| _t t|d ƒƒ| _d S |dkrHtƒ }| j |¡ |D ]}t	|t
ƒs8q0|\}}}| ||||| j¡ q0d S d S )Nr   rž   r“   rŸ   )r=   r   r   rŒ   r   r“   r”   r   r*   rr   rs   ÚfromXML)	rj   Únamern   rW   r—   rš   ru   rQ   Ú
subcontentr   r   r"   r¢     s   

ùztable_S__i_l_f.fromXMLrL   ©	r|   r}   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 rL   )ÚpassesÚ
scriptTagsÚcritFeaturesÚjLevelsÚpMapri   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 |¡ q%t  tˆ | ¡\}‰ | jrNt d| j ˆ ¡| _ˆ | jd d d … ‰ t dˆ ¡\}|rt‡ fdd	„tddd
|  d
ƒD ƒ| _ˆ dd
|  d … ‰ t dˆ d d… ¡\| _| jr¢t d| jd  ˆ ddd
| j  … ¡| _ˆ dd
| j  d … ‰ t dˆ d d… ¡\}t|ƒD ]9}	|dkr×t  tˆ dd|	  dd|	  … t
ƒ ¡}
nt  tˆ dd
|	  dd
|	  … t
ƒ ¡}
| |
j¡| j|
j< q¼ˆ dd|  d … ‰ t  t¡t  t	¡| j  t  t¡ d| j  d d d
|  d d
| j  d d|  }|dkr8|t  t¡7 }tƒ | _| j  ˆ ||¡ t| jƒD ]#}	t!ƒ }| j" |¡ |  ˆ | j|	 | | j|	d  | … ||¡ qId 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_formatr{   rª   r*   ÚSilf_part2_formatÚnumCritFeaturesr+   r,   r©   r¨   r‘   r\   Ú	numPassesZoPassesÚSilf_pseudomap_formatÚSilf_pseudomap_format_hÚgetGlyphNameZnPseudor«   Úunicoder0   ÚClassesÚclassesr•   ÚPassr§   )rj   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r#t 	t
¡}nd}|t t| ¡7 }| jD ]
}|t t|¡7 }q0|t t| ¡7 }| jrU|tjd| j g| j¢R Ž 7 }|t ddt | jƒ¡7 }t | jƒrudd„ | jD ƒ}|d |¡7 }|t d| j¡7 }t |ƒ| _t |d	¡}|t |ƒ d
| jd   }	|	t |ƒ | _t| j ¡ ƒD ]\}
}|t |dkr±dnd|
| |¡¡7 }q¤|| j ||¡7 }|	t |ƒ7 }	d}d}t| jƒD ]\}}|	t |ƒ }|t d|¡7 }|| |||¡7 }qÓ|t d|	t |ƒ ¡7 }|dkrt t
| ¡}nd}|| | | | S )Nr9   r…   r   r­   r   c                 S   s   g | ]}t  d | d¡¡‘qS )r®   r¯   )r+   rD   Úencoder>   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   r0   r´   rD   r¶   r¹   rº   r+   ZnumCritFeatursr¨   r-   r\   Z
passOffsetr   ÚbininfoZpseudosOffsetÚsortedÚitemsÚ
getGlyphIDrÂ   r›   Ú	enumerate)rj   r—   r   rÆ   r–   Z	hdroffsetrÅ   ZtdataZdata1rÈ   ÚurÉ   Zdata2Zdataor    r˜   Zdata3r   r   r"   r›   ú  sP   



ÿ
zSilf.compilec                    sx  |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	ƒrx| 
d¡ | ¡  t t¡\}}}t| j	ƒD ]\}‰ t‡ fd	d
„|D ƒƒ}|j di |¤Ž | ¡  qS| 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ƒr:| 
d¡ | ¡  t| jƒD ] \}}|j
d|d | ¡  | |||¡ | d¡ | ¡  q| d¡ | ¡  d S d S )Nr…   r   )rµ   ÚinfoÚpassindexesÚcontextsÚ
attributesÚjustificationsc                    rd   r   re   rg   ©rÅ   r   r"   r#   5  rk   zSilf.toXML.<locals>.<listcomp>Újustifyr©   rw   r¨   Ú	pseudoMaprÇ   )rÀ   rÇ   r§   Úpass©Ú_index)rØ   )rm   rµ   rN   ro   Ú
attrs_infoÚattrs_passindexesÚattrs_contextsÚattrs_attributesr(   rª   rM   r   Z	getformatr¹   rÐ   rl   rP   r©   rO   r-   r.   r/   r¨   r«   rÍ   rÎ   ÚhexrÂ   r¡   r§   )rj   rR   r—   r   ZjformatZjnamesZjfixesr    rn   rh   ÚvrÉ   r   r×   r"   r¡   (  sh   















öz
Silf.toXMLc              	   C   s”  |dkrt t| dd¡ƒƒ| _|dkrt| |gt¢R Ž  d S |dkr-t| |gt¢R Ž  d S |dkr<t| |gt¢R Ž  d S |dkrKt| |gt¢R Ž  d S |dkr|D ]+}t	|t
ƒsYqQ|\}}}|d	kr|tƒ }	| ¡ D ]\}
}t|	|
t|ƒƒ qi| j |	¡ qQd S |d
kr—g | _t|ƒ}| j tt| ¡ ƒ¡ d S |dkr±g | _t|ƒ}| ¡ D ]}| j |¡ q¦d S |dkrÞi | _|D ]!}t	|t
ƒsÂqº|\}}}|dkrÖt|d dƒ}
|d }|| j|
< qºd S |dkrtƒ | _|D ]}t	|t
ƒsñqé|\}}}| j |||||¡ qéd S |dkrF|D ]=}t	|t
ƒsq
|\}}}|dkrDtƒ }|D ]}t	|t
ƒs-q#| |d |d |d ||¡ q#| j |¡ q
d S 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µ   rq   rÝ   rÞ   rß   rà   rr   rs   r{   rÎ   rp   r=   rª   r*   r©   rU   Úextendr.   rF   r¨   r«   rÁ   rÂ   r¢   rÃ   r§   )rj   r£   rn   rW   r—   r   ru   rQ   r¤   rÅ   rh   râ   ÚnrÉ   rX   r   r   r"   r¢   ]  s„   

€ø	ÿ

ù


ü


"€õzSilf.fromXMLN©r¬   r¥   r   r   r   r"   r”   ­  s    

C
.5r”   c                   @   ó<   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 rL   )ÚlinearÚ	nonLinearri   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 ƒ¡ qEt|| j| j… || jd | jd … ƒD ]$\}}‡ fdd„t
|d |dƒD ƒ}t‡fdd„|D ƒƒ}| j 	|¡ qzd S )Nç      @r‰   r   r†   rˆ   r­   r‡   r:   c                 3   s    | ]}ˆ   |¡V  qd S rL   ©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                    ó"   g | ]}ˆ   |d  ¡|d f‘qS r   rì   r>   rí   r   r"   r#   µ  ó   " )r   rŠ   ÚSilf_classmap_formatr+   r‘   ÚnumClassÚzipÚ	numLinearré   r*   r·   rl   rê   )	rj   r–   r—   r   ÚoClassesrš   rX   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 ]#}| t |ƒ| ¡ ‡ fdd„|D ƒ}|tjd	t |ƒ g|¢R Ž 7 }q(| jD ]-}| t |ƒ| ¡ ‡ fd
d„| ¡ D ƒ}|t t |ƒ¡7 }|d 	dd„ t
|ƒD ƒ¡7 }qO| t |ƒ| ¡ t |ƒd | _t | jƒ| _t t| ¡tj|dkr dnd	t |ƒ g|¢R Ž  | S )Nr9   rë   rˆ   r†   r‡   r:   c                    s   g | ]}ˆ   |¡‘qS r   ©rÏ   r>   rí   r   r"   r#   Á  s    z#Classes.compile.<locals>.<listcomp>r­   c                    rï   r   rö   r>   rí   r   r"   r#   Å  rð   c                 S   s   g | ]}t jd g|¢R Ž ‘qS )r   ©r+   rD   r>   r   r   r"   r#   Ç  rË   r   r‰   )r(   ré   rê   r*   r+   rD   rÎ   r   rÌ   r-   rÍ   rò   rô   r   rñ   )rj   r—   r   r–   rõ   r™   rJ   Ú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 ]0\}}|j d|| j d | ¡  | ¡ D ]\}}|j	d||d | ¡  qb| d¡ | ¡  qL| d¡ | ¡  | d¡ | ¡  d S )	NrÂ   ÚlinearClassesré   rÛ   ÚnonLinearClassesrê   r.   )ÚglyphÚindex)
rM   rN   rÐ   ré   rz   rP   rê   rô   rÎ   rm   )rj   rR   r—   r   r    rJ   ÚinpÚindr   r   r"   r¡   Ó  s4   











zClasses.toXMLc                 C   sÔ   |dkr&|D ]}t |tƒsq|\}}}|dkr#t|ƒ ¡ }	| j |	¡ qd S |dkrf|D ];}t |tƒs4q,|\}}}|dkrei }	|D ]}
t |
tƒsIqA|
\}}}|dkr^tt|d ƒƒ|	|d < qA| j |	¡ q,d S d S )Nrù   ré   rú   rê   r.   rü   rû   )	rr   rs   rU   rF   ré   r*   r=   r   rê   )rj   r£   rn   rW   r—   r   ru   rQ   r¤   rJ   rX   Zsubsubcontentr   r   r"   r¢   ï  s8   

€ú



€€ózClasses.fromXMLNrç   ©r|   r}   r~   r€   r•   r›   r¡   r¢   r   r   r   r"   rÁ   š  s    


rÁ   c                   @   rè   )rÃ   c                 C   s:   i | _ g | _g | _g | _g | _d| _g | _g | _g | _d S )Nr9   )	ÚcolMapÚrulesÚrulePreContextsÚruleSortKeysÚruleConstraintsÚpassConstraintsÚactionsÚ
stateTransÚstartStatesri   r   r   r"   r€   	  s   
zPass.__init__r¬   c              	      s¬  t  tˆ | ¡\}‰ t dˆ d d… ¡\}}}}ˆ dd … ‰ t|ƒD ]'}t dˆ d| d| d … ¡\}}}	t||d ƒD ]
}
|	| j| |
¡< q=q!ˆ 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 ](}tdˆ || j d |d | j d … ƒ}tjdkrb| ¡  | j |¡ qAˆ | 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š   rX   )r  r   r"   r#      s    z"Pass.decompile.<locals>.<listcomp>r   r$   ú>BHé   é   ÚHÚbigr   c                    ó,   g | ]\}}|| d krˆ ||… nd‘qS )r   r9   r   r
  r±   r   r"   r#   H  s    ÿÿc                    r  )r   r%   r   r
  r±   r   r"   r#   M  s     ÿ) r   rŠ   ÚSilf_pass_formatr+   r‘   r·   r   r¿   r,   rb   ró   r  r]   r^   r  ÚnumRulesr  r  r_   Úlistra   r	   rc   ÚsysÚ	byteorderÚbyteswapr  r*   r  r(   r  r  )rj   r–   r—   r   rÄ   ZnumRanger    ÚfirstÚlastÚcolÚgÚoRuleMapZnumStartStatesZpConstraintÚoConstraintsÚoActionsÚar   )r–   r  r"   r•     sz   &ÿ"ÿÿÿ ÿÿ&ÿ$ÿ€
þ
ÿ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 ]}tjdkr8| ¡  | | 	¡ ¡ tjdkrH| ¡  q-t
|ƒsQdg| _t d	d„ | jg g dg fƒd }	g }
t‡ fd
d„| j ¡ D ƒƒ}tj|ddD ]}|d r”|
 |d |d |d  d |d d f¡ qxt
| 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   ó"   | d t |ƒ | d | d g fS ©Nr   r   ©r(   ©r  r!   r   r   r"   Ú<lambda>V  rð   zPass.compile.<locals>.<lambda>r9   r   r   c                 S   r  r   r!  r"  r   r   r"   r#  Y  rð   ó    r  c                 S   r  r   r!  r"  r   r   r"   r#  h  rð   c                    rï   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î   †  s   €  zPass.compile.<locals>.<genexpr>r­   c                 S   s   | | S rL   r   r"  r   r   r"   r#  ˆ  s    r   r$   r  r   )&r
   r  r  r-   r  r  r  r  r*   Útobytesr(   r  r  rl   r   rÎ   r   Úentriesr  r   r0   r  Z	fsmOffsetra   rc   ZpcCoder  ZrcCoder1   ZoDebugrD   rÌ   r+   r]   r^   r  r  r_   )rj   r—   r˜   r   r  r  ZconstraintCodeZtransesÚtr  Z
passRangesZ	gidcolmaprX   r–   Z	flatrulesr   rí   r"   r›   S  s®   ÿþ
ýü


€ÿþ,€ÿ
þ
ý
üûúùø	÷
öÿÿ"  ÿ
þýü
ûÿzPass.compilec              	      sH  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 ]\}}|jd
| j| j | d tt|ƒ¡d | ¡  qI| 	d	¡ | ¡  | d¡ | ¡  t
| jƒD ]6\}}|jd|| j| | j| d | ¡  t| j| ƒr¤td|| j| ƒ td||ƒ | 	d¡ | ¡  q}| 	d¡ | ¡  t| jƒrÉtd|| jƒ t| jƒr"| d¡ | ¡  | d¡ | d tt| jƒ¡¡ | 	d¡ | ¡  t
| jƒD ]\}}|jd|d | d tt|ƒ¡¡ | 	d¡ | ¡  q÷| 	d¡ | ¡  d S 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#  ¤  s    zPass.toXML.<locals>.<lambda>)ÚkeyÚstaterulemapÚstaterw   )Únumberr  r  Úrule)rü   Ú
precontextÚsortkeyÚ
constraintÚactionÚpassConstraintÚfsmÚstartsÚrow)Z_i)ro   Úpass_attrs_infoÚpass_attrs_fsmrM   rN   rz   rÍ   r   rÎ   rP   rÐ   r  rm   r`   rb   r-   r.   r/   r  r  r  r(   r  rS   r  r  rO   r  )rj   rR   r—   r   r    Úrr3  rš   r   rí   r"   r¡   š  sv   
ÿþþ
	
ý


ü









òz
Pass.toXMLc                 C   sl  |dkrt | |gt¢R Ž  d S |dkrt | |gt¢R Ž  d S |dkrRt|ƒ}| ¡ D ]%}| d¡}t|ƒdksC|d dksC|d dkrDq*t|d ƒ| j|d < q*d S |d	kr||D ]!}t|t	ƒs`qX|\}	}
}|	d
kry| j
 dd„ |
d  d¡D ƒ¡ qXd S |dkrÜ|D ]W}t|t	ƒsŠq‚|\}	}
}|	dkr”q‚| j t|
d ƒ¡ | j t|
d ƒ¡ d}d}|D ]}t|t	ƒs¶q®|\}	}
}|	dkrÄt|ƒ}q®|	dkrÌt|ƒ}q®| j |¡ | j |¡ q‚d S |dkrçt|ƒ| _d S |dkr2|D ]E}t|t	ƒsöqî|\}	}
}|	dkrtdƒ}t|ƒ}| tt| ¡ ƒ¡ | j |¡ qî|	dkr1g }t|ƒ}| tt| ¡ ƒ¡ || _qîd S d S )NrÒ   r(  r)  ú=r:   r   r%   r   r,  r-  c                 S   r;   r   r<   r>   r   r   r"   r#   ê  r?   z Pass.fromXML.<locals>.<listcomp>r  rw   r/  r0  r1  r9   r2  r3  r4  r5  r7  r  r6  )rq   r8  r9  rU   rF   r(   r=   r   rr   rs   r  r*   r  r  rY   r  r  r  r	   rå   r.   r  r  )rj   r£   rn   rW   r—   r   rX   Úwr!   rQ   r  Úcru   ÚconZactZsubcrš   r   r   r"   r¢   Ø  s€   
$ü

 €û




€í




€òzPass.fromXMLNrç   rÿ   r   r   r   r"   rÃ     s    

?
G>rÃ   )rv   )6ZfontTools.miscr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.textToolsr   r   r%   r   r   r	   Ú	functoolsr
   r+   rE   r  r‹   r   r´   r¶   r¹   rº   r½   r¾   rñ   ZSilf_lookupclass_formatZSilf_lookuppair_formatr  r)   rl   rÐ   rC   r8   r›   r@   rK   rS   rY   rÝ   rÞ   rß   rà   r8  r9  ro   rq   rU   rz   r{   r   Úobjectr”   rÁ   rÃ   r   r   r   r"   Ú<module>   sV    	E


	
	T nn