a
    ZXh                     @   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   d/var/www/viveiro_mudafortebrasil/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rt| | }d| }|d7 }n|d dkrd}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rt|}|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 rtd|dd | _d| _d| _d	}nd| _t t	||  t 
t	}td
| j ||d  }|D ].}t }| j| |||d  || j qd 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rt
| 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rt }| 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rt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rt 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  |  || qd 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rd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rt| |gtR   n|dkr|D ]V}t	|t
sq|\}}}|d	krt }	| 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ri | _|D ]J}t	|t
sq||\}}}|dkrt|d d}
|d }|| j|
< q|n|dkrt | _|D ]4}t	|t
sq|\}}}| j||||| qn|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  qt|| j| j || jd | jd  D ]H\}} fddt
|d |dD }tfdd|D }| j	| qd 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sq|
\}}}|dkrt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
|sd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 qt
| 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rt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rt|}| D ]J}|d}t|dksT|d dksT|d dkrqTt|d | j|d < qTn|d	kr|D ]B}t|t	sq|\}	}
}|	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rt|}n|	dkrft|}qf| j| | j| qn|dkrt|| _n|dkr~|D ]}t|t	sq|\}	}
}|	dkrJtd}t|}|tt|  | j| n0|	dkrg }t|}|tt|  || _qd 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