o
    _h                     @   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   )	PUSH_BYTEb)PUSH_BYTE_UB)
PUSH_SHORTz>h)PUSH_SHORT_U>H)	PUSH_LONG>L)ADDr   )SUBr   )MULr   )DIVr   )MINr   )MAXr   )NEGr   )TRUNC8r   )TRUNC16r   )CONDr   )ANDr   )ORr   )NOTr   )EQUALr   )NOT_EQr   )LESSr   )GTRr   )LESS_EQr   )GTR_EQr   )NEXTr   )NEXT_Nr   )	COPY_NEXTr   )PUT_GLYPH_8BIT_OBSr   )PUT_SUBS_8BIT_OBSbBB)PUT_COPYr   )INSERTr   )DELETEr   )ASSOC)
CNTXT_ITEMbB)ATTR_SETr   )ATTR_ADDr   )ATTR_SUBr   )ATTR_SET_SLOTr   )IATTR_SET_SLOTBB)PUSH_SLOT_ATTRBb)PUSH_GLYPH_ATTR_OBSr<   )PUSH_GLYPH_METRICBbb)	PUSH_FEATr<   )PUSH_ATT_TO_GATTR_OBSr<   )PUSH_ATT_TO_GLYPH_METRICr?   )PUSH_ISLOT_ATTRr?   )PUSH_IGLYPH_ATTRr?   )POP_RETr   )RET_ZEROr   )RET_TRUEr   )	IATTR_SETr:   )	IATTR_ADDr:   )	IATTR_SUBr:   )PUSH_PROC_STATEr   )PUSH_VERSIONr   )PUT_SUBSz>bHH)	PUT_SUBS2r   )	PUT_SUBS3r   )	PUT_GLYPHr   )PUSH_GLYPH_ATTR>Hb)PUSH_ATT_TO_GLYPH_ATTRrR   )BITORr   )BITANDr   )BITNOTr   )BITSET>HH)SET_FEATr<   c                 C   s$   g | ]\}}|d  ||d ffqS r   r    ).0ixr[   r[   S/var/www/html/myenv/lib/python3.10/site-packages/fontTools/ttLib/tables/S__i_l_f.py
<listcomp>   s   $ r`   c           	      C   s  t | }d}g }||k rt| ||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   r2   %dB (z, ))
lenr   
aCode_infoappendstructunpack_fromjoinmapstrcalcsize)	aCodecodelenpcresopcodeinstrcountfmtparmsr[   r[   r_   disassemble   s4   

&rw   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*r2   ra   )	instrematchgroup	aCode_maprh   packresplitre   )instrsrq   instmrr   parmfmtrv   lr[   r[   r_   assemble   s"   

"r   c                 C   sH   | |  |  t|D ]}|| |  q||  |  d S N)begintagnewlinerw   writeendtag)tagwriterr   r   r[   r[   r_   	writecode   s   



r   c                 C   s<   g }t | dD ]}| }t|sq	|| q	t|S )N
)content_stringr   stripre   rg   r   )contentrq   er[   r[   r_   readcode  s   r   )	flagsextraAscentextraDescent
maxGlyphID
numLigCompnumUserDefnmaxCompPerLig	directionlbGID)iSubstiPosiJustiBidi)maxPreContextmaxPostContext)
attrPseudoattrBreakWeightattrDirectionalityattrMirroringattrSkipPassesattCollisions)r   maxRuleLoopmaxRuleContext	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	simpletagr   )r   r   r   attrkeysattrsr[   r   r_   writesimple3  s   r   c                 G   s.   |D ]}||v rt | |tt||  qd S r   )setattrr|   r   )r   r   	attr_listr   r[   r[   r_   	getSimple9  s
   r   c                 C   s*   d}| D ]}t |trq||7 }q| S )Nrb   )
isinstancetupler   )contentsrq   elementr[   r[   r_   r   ?  s   

r   P   c                 C   sn   d}|D ]}t ||kr| |d d  |   d}||d 7 }qt |r5| |d d  |   d S d S )Nrb   r2    )re   r   r   )r   datlengthcurrlinedr[   r[   r_   wraplineH  s   r   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 r   )r   __init__silfs)r   r   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   precisionBits      @      @r         r      >%dL)r   unpack2Silf_hdr_formatfloatr   versionr   
decompressschemeSilf_hdr_format_3rm   rh   unpacknumSilfcompilerVersionri   Silfr   rg   	decompile)r   datattFontbase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   rX   r   r   rx   r   r   )re   r   r   r   r   r   r   rh   r   compiler   compressr   )r   r   hdrr   r   r   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)
commentr   r   r   r   r   r   r   toXMLr   )r   r   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   rg   r   r   fromXML)	r   namer   r   r   r   r   r   
subcontentr[   r[   r_   r     s   

ztable_S__i_l_f.fromXMLr   	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 r   )passes
scriptTagscritFeaturesjLevelspMapr   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rtd| jd   ddd
| j   | _ dd
| j  d   td d d \}t|D ]9}	|dkrt 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   >%dHry   r   r   c              	      s.   g | ]}t d  ||d  d dqS )4sr   r   ascii)rh   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  rg   Silf_part2_formatnumCritFeaturesrh   ri   r  r  r   r   	numPassesoPassesSilf_pseudomap_formatSilf_pseudomap_format_hgetGlyphNamenPseudor  unicoderm   Classesclassesr   Passr  )r   r   r   r   _jlevelj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rd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 )Nrx   r   r   r	  r:   c                 S   s   g | ]}t d |dqS )r
  r  )rh   r   encoder}   r[   r[   r_   r`         z Silf.compile.<locals>.<listcomp>r   r   r   r   z>LHrX   r   )re   r  r  r  r  r  r  r  r   rm   r  r   r  r  r  rh   numCritFeatursr  rj   r   
passOffsetr   bininfopseudosOffsetsorteditems
getGlyphIDr   r   	enumerate)r   r   r   r&  r   	hdroffsetr$  tdatadata1r(  ur)  data2dataor]   r   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                    r   r[   r   r   r$  r[   r_   r`   5  r   zSilf.toXML.<locals>.<listcomp>justifyr  r   r  	pseudoMapr'  )r  r'  r  pass_index)rA  )r   r  r   r   
attrs_infoattrs_passindexesattrs_contextsattrs_attributesre   r  r   r   	getformatr  r3  r   r   r  r   rj   rk   rl   r  r  r0  r1  hexr   r   r  )r   r   r   r   jformatjnamesjfixesr]   r   r   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rg | _t|}| jtt|  d S |dkrg | _t|}| D ]}| j| qd S |dkri | _|D ]!}t	|t
sq|\}}}|dkrt|d d}
|d }|| j|
< qd S |dkrt | _|D ]}t	|t
sq|\}}}| j||||| qd 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?  rA  r  r  rB  r'  r  r   r   r  rC  r   r   ry   )r   r   getr  r   rF  rG  rH  rI  r   r   r   r1  r   r|   r  rg   r  r   extendrk   r   r  r  r  r   r   r!  r  )r   r   r   r   r   r   r   r   r   r$  r   rO  nr)  r   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 r   )linear	nonLinearr   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   ry   c                 3   s    | ]}  |V  qd S r   r  r}   r   r[   r_   	<genexpr>  s
    
z$Classes.decompile.<locals>.<genexpr>c              	      s$   g | ]}t d  ||d  qS )rX   r   )rh   r   r}   r  r[   r_   r`     s    z%Classes.decompile.<locals>.<listcomp>c                    "   g | ]}  |d  |d fqS rZ   rY  r}   rZ  r[   r_   r`        " )r   r   Silf_classmap_formatrh   r   numClasszip	numLinearrV  rg   r  r   rW  )	r   r   r   r   oClassesr   r   	nonLinids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rdnd	t | g|R   | S )Nrx   rX  r   r   r   ry   c                    s   g | ]}  |qS r[   r2  r}   rZ  r[   r_   r`     s    z#Classes.compile.<locals>.<listcomp>r	  c                    r\  rZ   re  r}   rZ  r[   r_   r`     r]  c                 S   s   g | ]}t jd g|R  qS )rX   rh   r   r}   r[   r[   r_   r`     r+  r   r   )re   rV  rW  rg   rh   r   r1  r   r.  rj   r0  r_  ra  r   r^  )r   r   r   r   rb  r   r   gsr[   rZ  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   linearClassesrV  rD  nonLinearClassesrW  rk   )glyphindex)
r   r   r3  rV  r   r   rW  ra  r1  r   )r   r   r   r   r]   r   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 )Nrh  rV  ri  rW  rk   rk  rj  )	r   r   r   r   rV  rg   r|   r   rW  )r   r   r   r   r   r   r   r   r   r   r   subsubcontentr[   r[   r_   r     s8   





zClasses.fromXMLNrT  r   r   r   r   r   r   r   r   r[   r[   r[   r_   r    s    


r  c                   @   rU  )r!  c                 C   s:   i | _ g | _g | _g | _g | _d| _g | _g | _g | _d S )Nrx   )	colMaprulesrulePreContextsruleSortKeysruleConstraintspassConstraintsactions
stateTransstartStatesr   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	  ry   r2   c                    s   g | ]
\}} || qS r[   r[   r\   r   r   )rq  r[   r_   r`      s    z"Pass.decompile.<locals>.<listcomp>r:   ra   >BH      Hbigr   c                    ,   g | ]\}}|| d kr || ndqS )r   rx   r[   rz  r  r[   r_   r`   H  s    c                    r  )r   rb   r[   rz  r  r[   r_   r`   M  s     ) r   r   Silf_pass_formatrh   r   r  rp  r  ri   r   r`  rq  r   r   rx  numRulesrs  rr  r   listr   r	   r   sys	byteorderbyteswaprw  rg   ru  re   rt  rv  )r   r   r   r   r"  numRanger]   firstlastcolgoRuleMapnumStartStatespConstraintoConstraintsoActionsar[   )r   rq  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   re   r  r^   r[   r[   r_   <lambda>V  r]  zPass.compile.<locals>.<lambda>rx   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\  rZ   re  r}   rZ  r[   r_   r`   k  r]  z Pass.compile.<locals>.<listcomp>T)samevalry   r   r   r2   r|  r   c                 s   s"    | ]}t jd g|R  V  qdS )ry  Nrf  )r\   r)  r[   r[   r_   r[    s     zPass.compile.<locals>.<genexpr>r	  c                 S   s   | | S r   r[   r  r[   r[   r_   r    s    r:   ra   r{  r   )&r
   rv  rt  rj   rw  r  r  r  rg   tobytesre   rx  rq  r   rp  r1  r   entriesr  r   rm   r  	fsmOffsetr   r   pcCoderu  rcCodern   oDebugr   r.  rh   r   r   rs  rr  r   )r   r   r   r   r  r  constraintCodetransestr  
passRanges	gidcolmapr   r   	flatrulesr[   rZ  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| rtd|| j|  td|| |	d |  q}|	d |  t| jrt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   re  )r^   rZ  r[   r_   r    s    zPass.toXML.<locals>.<lambda>)keystaterulemapstater   )numberrq  rq  rule)rk  
precontextsortkey
constraintactionpassConstraintfsmstartsrow)_i)r   pass_attrs_infopass_attrs_fsmr   r   r   r0  rp  r1  r   r3  rq  r   r   r   rj   rk   rl   rv  rr  rs  re   rt  r   ru  rw  r   rx  )r   r   r   r   r]   rr  r   r[   rZ  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	sq|\}	}
}|	dkrq| jt|
d  | jt|
d  d}d}|D ]}t|t	sq|\}	}
}|	dkrt|}q|	dkrt|}q| j| | j| qd S |dkrt|| _d S |dkr2|D ]E}t|t	sq|\}	}
}|	dkrtd}t|}|tt|  | j| q|	dkr1g }t|}|tt|  || _qd S d S )Nr;  r  r  =ry   r   rb   r   r  r  c                 S   rz   r[   r{   r}   r[   r[   r_   r`     r~   z Pass.fromXML.<locals>.<listcomp>rq  r   r  r  r  rx   r  r  r  r  r  r~  r  )r   r  r  r   r   re   r|   rp  r   r   rq  rg   rr  rs  r   rv  rt  ru  r	   rR  rk   rw  rx  )r   r   r   r   r   r   r   wr^   r   r  cr   conactsubcr   r[   r[   r_   r     s   
$

 









zPass.fromXMLNrT  ro  r[   r[   r[   r_   r!    s    

?
G>r!  )r   )6fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr   r   rb   r   r   r	   	functoolsr
   rh   r   r  r   r   r  r  r  r  r  r  r^  Silf_lookupclass_formatSilf_lookuppair_formatr  rf   r   r3  r   rw   r   r   r   r   r   rF  rG  rH  rI  r  r  r   r   r   r   r   r   objectr   r  r!  r[   r[   r[   r_   <module>   sV    	E


	
	T nn