
    ͏kh              
          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 ee      D  cg c]  \  } }|d    | |d   ff c}}       Zd Z  ejB                  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.d0d%Z/ G d& d'      Z0 G d( d)ej                        Z1 G d* d+e2      Z3 G d, d-e2      Z4 G d. d/e2      Z5y	c c}} w )1    )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_ATTRrS   )BITORr   )BITANDr   )BITNOTr   )BITSET>HH)SET_FEATr=   c           	      >   t        |       }d}g }||k  rt        | ||dz          }|t        t              kD  r
t        d   }n	t        |   }|dz  }|d   dk7  r||k\  r|S |d   dk(  rt        | |         }d|z  }|dz  }n|d   dk(  rd}n|d   }|dk(  r|j                  |d          t	        j
                  || |d        }|j                  |d   dz   dj                  t        t        |            z   dz          |t	        j                  |      z  }||k  r|S )	Nr   r   r3   %dB (z, ))
lenr   
aCode_infoappendstructunpack_fromjoinmapstrcalcsize)	aCodecodelenpcresopcodeinstrcountfmtparmss	            [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/S__i_l_f.pydisassemblers      s5   %jG	
B
C
w,rBF+,C
O#qMEv&E
a8q=R7]J8r>E"I&E%-C!GB1X]C(C"9JJuQx ""3bc
3

58c>DIIc#uo$>>DE
fooc""- w,. J    z^\s*([^(]+)\s*(?:\(([^)]+)\))?c                 &   d}| D ]  }t         j                  |      }|r|j                  d      t        vr3t        |j                  d         \  }}|t	        j
                  d|      z  }|j                  d      sy|dk(  rt        j                  d|j                  d            D cg c]  }t        |       }}|dk(  r,t        |      }|t	        j
                  d|dz   z  |g| z  }|t	        j
                  |g| z  } |S c c}w )	Nrt   r   r      r   z,\s*r3   r\   )
instrematchgroup	aCode_maprc   packresplitintr`   )	instrsrl   instmrm   parmfmtxrq   ls	            rr   assembler      s    
C 4LL
i/#AGGAJ/v{{3''771:!|%'XXgqwwqz%BCSVCEC"}Jv{{EQUOa@%@@v{{73U334 J Ds   +Dc                     |j                  |        |j                          t        |      D ]#  }|j                  |       |j                          % |j	                  |        |j                          y N)begintagnewliners   writeendtag)tagwriterr   r   s       rr   	writecoder      sY    
OOC
NN  Q MM#
NNrt   c                     g }t        |       j                  d      D ]/  }|j                         }t        |      s|j	                  |       1 t        |      S )N
)content_stringr}   stripr`   rb   r   )contentrl   es      rr   readcoder     sR    
CG$**40 GGI1v

1	
 C=rt   )	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           
          t        |D cg c]  }|t        ||      f c}      } |j                  | fi | |j                          y c c}w r   )dictgetattr	simpletagr   )r   selfr   attrkeyskattrss         rr   writesimpler   3  sG    :A1gdA&':;EFS"E"
NN ;s   A
c                 `    |D ])  }||v st        | |t        t        ||                      + y r   )setattrr~   r   )r   r   	attr_listr   s       rr   	getSimpler   9  s2     6:D!S%(!3456rt   c                 `    d}| D ]  }t        |t              r||z  } |j                         S )Nr]   )
isinstancetupler   )contentsrl   elements      rr   r   r   ?  s:    
C gu%w 99;rt   c                     d}|D ]>  }t        |      |kD  r&| j                  |d d        | j                          d}||dz   z  }@ t        |      r%| j                  |d d        | j                          y y )Nr]   r3    )r`   r   r   )r   datlengthcurrlineds        rr   wrapliner   H  s{    H x=6!LL#2'NNHAG 8}Xcr]# rt   c                       e Zd Zy)_ObjectN)__name__
__module____qualname__ rt   rr   r   r   U  s    rt   r   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	table_S__i_l_fzhGraphite Rules table

    See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
    Nc                 R    t         j                   j                  | |       g | _        y r   )r   __init__silfs)r   r   s     rr   r   ztable_S__i_l_f.__init___  s    !!**45
rt   c                    t        j                  t        ||        t        t	        | j
                  d            | _        | j
                  dk\  rRt        j                  |      \  }| _        t        j                  t        ||        t        j                  t              }ny| j
                  dk  r/t        j                  d|dd       | _        d| _        d| _        d	}n;d| _        t        j                  t        ||        t        j                  t              }t        j                  d
| j                  z  ||d        }|D ]G  }t!               }| j"                  j%                  |       |j'                  ||d  || j
                         I y )N   precisionBits      @      @r         r      >%dL)r   unpack2Silf_hdr_formatfloatr   versionr	   
decompressschemeSilf_hdr_format_3rh   rc   unpacknumSilfcompilerVersionrd   Silfr   rb   	decompile)r   datattFontbasesilfoffsetsoffsetss          rr   r   ztable_S__i_l_f.decompilec  s3   t4.t||2NO<<3")"4"4T":T4;OO-tT:##$56D\\C!==tAay9DLDK#$D DDKOO-tT:##$56D((&4<<*?$tu+N! 	=FAJJa KKVWvt||<	=rt   c                 `   t        | j                        | _        | j                  dk  r?t	        j
                  t        |       }|t        j
                  d| j                  d      z  }nt	        j
                  t        |       }t        |      d| j                  z  z   }d}| j                  D ]J  }|t        j
                  d|      z  }|j                  || j                        }|t        |      z  }||z  }L | j                  dk\  r#t        j                  | j                  ||z         S ||z   S )Nr   rY   r   r   rt   r   r   )r`   r   r   r   r   r{   r   rc   r   compiler	   compressr   )r   r   hdrr   r   r   subdatas          rr   r   ztable_S__i_l_f.compilez  s    4::<<#,,5C6;;udllA66C,,0$7CSA,, 	A6;;tV,,Cii5Gc'l"FGOD		
 <<3##DKKt<<Tzrt   c                    |j                  d       |j                          |j                  d| j                  | j                  | j
                         |j                          | j                  D ]a  }|j                  d       |j                          |j                  ||| j                         |j                  d       |j                          c y )Nz/Attributes starting with _ are informative onlyr   )r   r   compressionSchemesilf)
commentr   r   r   r   r   r   r   toXMLr   )r   r   r   r   s       rr   r   ztable_S__i_l_f.toXML  s    HILL 00"kk	 	 	
 	 	AOOF#NNGGFFDLL1MM&!NN	rt   c                    |dk(  rUt        t        |d               | _        t        t        |d               | _        t        t        |d               | _        y |dk(  rct               }| j                  j                  |       |D ]8  }t        |t              s|\  }}}|j                  ||||| j                         : y y )Nr   r   r   r   )r~   r   r   r   r   r   r   r   rb   r   r   fromXML)	r   namer   r   r   r   r   r   
subcontents	            rr   r   ztable_S__i_l_f.fromXML  s    9hu-@'ABCDK %	*:!;<DL#&x6G0H'I#JD 6>AJJa " H!'51)0&UJ		#uj&$,,G	H rt   r   	r   r   r   __doc__r   r   r   r   r   r   rt   rr   r   r   Y  s!    
=.$"Hrt   r   c                   6    e Zd ZdZd ZddZddZddZddZy)	r   zA particular Silf subtablec                 J    g | _         g | _        g | _        g | _        i | _        y r   )passes
scriptTagscritFeaturesjLevelspMapr   s    rr   r   zSilf.__init__  s&    	rt   c           
         |dk\  rCt        j                  t        ||       \  }}t        t	        | j
                  d            | _        t        j                  t        ||       \  }}t        | j                        D ]C  }t        j                  t        |t                     \  }}| j                  j                  |       E t        j                  t        ||       \  }}| j                  r(t        j                   d| j                  z  |      | _        || j                  dz  dz   d  }t        j                   d|      \  }|rRt        ddd|z  z   d      D cg c]0  }t        j$                  d	|||dz          d
   j'                  d      2 c}| _        |dd|z  z   d  }t        j$                  d|d d       \  | _        | j,                  r>t        j$                  d| j,                  dz   z  |ddd| j,                  z  z          | _        |dd| j,                  z  z   d  }t        j$                  d|d d       \  }	t        |	      D ]  }
|dk\  r3t        j$                  t0        |dd|
z  z   dd|
z  z    t                     }n2t        j$                  t2        |dd|
z  z   dd|
z  z    t                     }|j5                  |j6                        | j8                  |j:                  <    |dd|	z  z   d  }t        j<                  t              t        j<                  t              | j                  z  z   t        j<                  t              z   d| j                  z  z   dz   dz   d|z  z   dz   d| j,                  z  z   dz   d|	z  z   }|dk\  r|t        j<                  t              z  }t?               | _         | j@                  jC                  |||       t        | j,                        D ]`  }
tE               }| jF                  j                  |       |jC                  || j.                  |
   |z
  | j.                  |
dz      |z
   ||       b y c c}w )Nr   r   r   >%dHrv   r   r   r   4sr   asciir   r   r   r         )$r   r   Silf_part1_format_v3r   r   ruleVersionSilf_part1_formatrange
numJLevelsSilf_justify_formatr   r
  rb   Silf_part2_formatnumCritFeaturesrc   rd   r	  r   decoder  r   	numPassesoPassesSilf_pseudomap_formatSilf_pseudomap_format_hgetGlyphNamenPseudor  unicoderh   Classesclassesr   Passr  )r   r   r   r   _jleveljnumScriptTagr   	numPseudoipseudocurrposps                 rr   r   zSilf.decompile  s(   c>oo&:D$GGAt$!$"2"2"E D //"3T4@4DOO, 	#Foo&94KGAtLL"	# //"3T4@4 & 2 2$...!D D((1,q023 ,,S$7 q!a,&6"6: dDQUO4Q7>>wGDO AL((*+dD!H5>>!==4>>A-.a!a$..>P:P1QDL ADNN**,-}}T484y! 		LA#~ )4AE	BQJ+G !+T!a!e)b1q5j-I79 )/(;(;FNN(KDIIfnn%		L AI%'(./23dooEF012 $&&&' 	
  ,  $.. ! 	 )m
 	 c>w''(<==GytVW5t~~& 	AAKKq!KKT\\!_w.a!e1Dw1NO	Qs   5Q	c           	         t        | j                        | _        t        | j                        | _        t        | j
                        | _        t        | j                        }d}|dk\  rt        j                  t              }nd}|t        j                  t        |       z  }| j                  D ]  }|t        j                  t        |      z  }! |t        j                  t        |       z  }| j                  r0|t        j                  d| j                   z  g| j
                   z  }|t        j                  ddt        | j"                              z  }t        | j"                        rP| j"                  D cg c]'  }t        j                  d|j%                  d            ) }}|dj'                  |      z  }|t        j                  d| j(                        z  }t        |      | _        t-        j.                  |d	      }	|t        |      z   d
| j                  dz   z  z   }
|
t        |	      z   | _        t3        | j                  j5                               D ]5  \  }}|	t        j                  |dk\  rdnd||j7                  |            z  }	7 |	| j8                  j;                  ||      z  }	|
t        |	      z  }
d}d}t=        | j                        D ]B  \  }}|
t        |      z   }|t        j                  d|      z  }||j;                  |||      z  }D |t        j                  d|
t        |      z         z  }|dk\  rt        j                  t        |       }nd}||z   |z   |	z   |z   S c c}w )Nrt   r   r   r  r;   r  r  r   r   r   r   z>LHrY   r   )r`   r  r  r
  r  r	  r  r  r   rh   r  r{   r  r  r  rc   numCritFeatursr  encodere   r   
passOffsetr	   bininfopseudosOffsetsorteditems
getGlyphIDr$  r   	enumerate)r   r   r   r*  r   	hdroffsetr(  r   tdatadata1r-  ur.  data2dataor+  r   data3s                     rr   r   zSilf.compile  s   T[[)dll+"4#4#45		N	c>(()=>II.55 	9AGLL!4a88D	9.55FKK$*=*=!=SARARSSDD!S%9::tCG??SaV[[qxx'89SESCHHUO#DD$**--d)	1-c$i'!t~~/A*BB$s5z1499??,- 	DAqV[[!S.ea9J9J19M E	 	%%fg663u:dkk* 	6DAqSZ'DV[[t,,EQYYvtW55E	6 	T7SZ#788c>LL!5t<EEt|e#e+e335 Ts   ;,M5c                 0   |dk\  r-|j                  d| j                         |j                          t        d| |gt          t        d| |gt
          t        d| |gt          t        d| |gt          t        | j                        r|j                  d       |j                          t        j                  t              \  }}}t        | j                        D ]L  \  }}t        |D 	cg c]  }	|	t!        ||	      f c}	      }
 |j                   di |
 |j                          N |j#                  d       |j                          t        | j$                        r|j                  d	       |j                          |j'                  d
j)                  t+        t,        | j$                                     |j                          |j#                  d	       |j                          t        | j.                        r||j                  d       |j                          |j'                  d
j)                  | j.                               |j                          |j#                  d       |j                          | j0                  r|j                  d       |j                          t3        | j0                  j5                               D ]2  \  }	}|j                  dt7        |	      |       |j                          4 |j#                  d       |j                          | j8                  j;                  |||       t        | j<                        r|j                  d       |j                          t        | j<                        D ]\  \  }}|j                  d|       |j                          |j;                  |||       |j#                  d       |j                          ^ |j#                  d       |j                          y y c c}	w )Nr   r   )r  infopassindexescontexts
attributesjustificationsr	  r   r  	pseudoMapr,  )r"  r,  r  pass_index)justify)r   r  r   r   
attrs_infoattrs_passindexesattrs_contextsattrs_attributesr`   r
  r   r   	getformatr  r8  r   r   r   r	  r   re   rf   rg   r  r  r5  r6  hexr$  r   r  )r   r   r   r   jformatjnamesjfixesr+  r(  r   r   vr.  s                rr   r   z
Silf.toXML(  s   c>YD4D4DENNFD&6:6M4D2CDJf>~>L$B1ABt||OO,-NN&-&7&78K&L#GVV!$,,/ !1&AQq'!Q-0AB   4e4 ! MM*+NNt  !OON+NNLL#c4+<+<"=>?NNMM.)NNtOOL)NNLL$//23NNMM,'NN99OOK(NNtyy01 !1  3q6! D ! MM+&NN6673t{{OOH%NN!$++. !1q1 0f% ! MM(#NN 9 Bs   2P
c           	         |dk(  r)t        t        |j                  dd                  | _        |dk(  rt	        | |gt
          y |dk(  rt	        | |gt          y |dk(  rt	        | |gt          y |dk(  rt	        | |gt          y |dk(  rx|D ]r  }t        |t              s|\  }}}|d	k(  s t               }	|j                         D ]  \  }
}t        |	|
t        |              | j                  j!                  |	       t y |d
k(  rJg | _        t%        |      }| j"                  j'                  t)        t        |j+                                      y |dk(  rCg | _        t%        |      }|j+                         D ]  }| j,                  j!                  |        y |dk(  rNi | _        |D ]A  }t        |t              s|\  }}}|dk(  rt        |d   d      }
|d   }| j.                  
<   C y |dk(  rMt1               | _        |D ]8  }t        |t              s|\  }}}| j2                  j5                  |||||       : y |dk(  r|D ]z  }t        |t              s|\  }}}|dk(  s t7               }|D ]1  }t        |t              s|j5                  |d   |d   |d   ||       3 | j8                  j!                  |       | y y )Nr   r  0rA  rB  rC  rD  rE  rJ  r	  r  rF  r,  r"  r   r$  r  rG  r   r   rv   )r   r   getr  r   rK  rL  rM  rN  r   r   r   r6  r   r~   r
  rb   r	  r   extendrf   r}   r  r  r#  r$  r   r%  r  )r   r  r   r   r   r   r   r   r  r(  r   rT  nr.  r   s                  rr   r   zSilf.fromXML]  s   9$Xeiis.K%LMD6>dE/J/]"dE6$56ZdE3N3\!dE5$45%%" +!'51+2(eZ)#	A % .11c!f-.LL''*+ ^# "D$W-G$$Sgmmo%>?\! DO$W-G]]_ *&&q)*[ DI" !!'51+2(eZ(?E),b1AhA 		!! Y"9DL" N!'51)0&UJ$$S%VWM	N
 X" 
*!'51)0&UJ&=A' E)!U3$		!A$!adFGDE KK&&q)
* rt   Ng       @r  r   rt   rr   r   r     s"    $AF,4\3j:*rt   r   c                   2    e Zd Zd ZddZddZddZddZy)r#  c                      g | _         g | _        y r   )linear	nonLinearr  s    rr   r   zClasses.__init__  s    rt   c                    t        j                  t        ||        |dk\  r:t        j                  d| j
                  dz   z  |ddd| j
                  z  z          }n9t        j                  d| j
                  dz   z  |ddd| j
                  z  z          }t        |d | j                   |d| j                  dz          D ]I  \  }}| j                  j                  fd	t        j                  d||z
  dz  z  |||       D               K t        || j                  | j
                   || j                  dz   | j
                  dz          D ]  \  }}t        |dz   |d      D cg c]  }t        j                  d
|||dz            }}t        |D cg c]  }j                  |d         |d   f c}      }	| j                  j                  |	        y c c}w c c}w )N      @r   r   r   r   r  r   rv   c              3   @   K   | ]  }j                  |        y wr   )r   ).0r   r   s     rr   	<genexpr>z$Classes.decompile.<locals>.<genexpr>  s$       ##A&s   rY   r   )r   r   Silf_classmap_formatrc   r   numClasszip	numLinearr]  rb   r  r   r   r^  )
r   r   r   r   oClassesr   r   r   	nonLinidsnonLins
     `       rr   r   zClasses.decompile  s   ,dD9c>}}4==1,-QQ=N9N0OH }}4==1,-QQ=N9N0OH !14>>2HQRSAS4TU 	DAqKK 1q5A+(>aK 	
 T^^dmm4T^^a'$--!*;<
 	*DAq
 @EQUAq?Q:;eT!a!e_5I  iPF//!5qt<PQFNN!!&)	* Qs   "#G G
c                    d}g }|dk\  r2ddt        | j                        t        | j                        z   z  z   }n1ddt        | j                        t        | j                        z   z  z   }| j                  D ]b  }|j                  t        |      |z          |D cg c]  }|j	                  |       }}|t        j                  dt        |      z  g| z  }d | j                  D ]  }|j                  t        |      |z          |j                         D cg c]  }|j	                  |d         |d	   f }}|t        j                  t        |            z  }|dj                  t        |      D cg c]  }t        j                  d
g|  c}      z  } |j                  t        |      |z          t        |      d	z
  | _        t        | j                        | _        t        j                  t        |       t        j                  |dk\  rdndt        |      z  g| z   |z   S c c}w c c}w c c}w )Nrt   r`  r   r   r   rv   r  r   r   rY   r   )r`   r]  r^  rb   r7  rc   r{   r6  r	   r3  re   r5  re  rg  r   rd  )	r   r   r   r   rh  r   r   r   gss	            rr   r   zClasses.compile  s   c>c$++.T^^1DDEEFc$++.T^^1DDEEF 	8AOOCI./0121&##A&2B2FKK#a&7B77D	8  	KAOOCI./;<779Ea6$$QqT*AaD1EBEGOOCG,,DCHHfRjIfkk%4!4IJJD		K
 	D	F*+H)T[[)LL-t4kk#sN&#h-GKS 		
 3 FIs   H1 H68H;c                    |j                  d       |j                          |j                  d       |j                          t        | j                        D ]U  \  }}|j                  d|       |j                          t	        ||       |j                  d       |j                          W |j                  d       |j                          |j                  d       |j                          t        | j                        D ]  \  }}|j                  d|| j                  z          |j                          |j                         D ])  \  }}|j                  d||       |j                          + |j                  d       |j                           |j                  d       |j                          |j                  d       |j                          y )	Nr$  linearClassesr]  rH  nonLinearClassesr^  rf   )glyphindex)
r   r   r8  r]  r   r   r^  rg  r6  r   )r   r   r   r   r+  r   inpinds           rr   r   zClasses.toXML  sq   	"(dkk* 	DAqOOHQO/NNVQMM(#NN	 	o&*+dnn- 	DAqOOKDNN0BOCNNGGI !S  c = ! MM+&NN	 	()i rt   c                    |dk(  rY|D ]S  }t        |t              s|\  }}}|dk(  s t        |      j                         }	| j                  j                  |	       U y |dk(  r|D ]}  }t        |t              s|\  }}}|dk(  s i }	|D ]<  }
t        |
t              s|
\  }}}|dk(  s t        t        |d               |	|d   <   > | j                  j                  |	        y y )Nrn  r]  ro  r^  rf   rq  rp  )	r   r   r   r}   r]  rb   r~   r   r^  )r   r  r   r   r   r   r   r   r  r   r   subsubcontents               rr   r   zClasses.fromXML  s   ?"" *!'51)0&UJ(?&z288:AKK&&q)* ''" -!'51)0&UJ+%A' N)!U3$451UM%<03HU7^4L0MAeGn-N NN))!,- (rt   NrZ  r   r   r   r   r   r   r   r   r   rt   rr   r#  r#    s    *2
68-rt   r#  c                   2    e Zd Zd ZddZddZddZddZy)r%  c                     i | _         g | _        g | _        g | _        g | _        d| _        g | _        g | _        g | _        y )Nrt   )	colMaprulesrulePreContextsruleSortKeysruleConstraintspassConstraintsactions
stateTransstartStatesr  s    rr   r   zPass.__init__	  sF    
!!"rt   c           
      	   t        j                  t        ||       \  }}t        j                  d|d d       \  }}}}|dd  }t        |      D ]Z  }t        j                  d|d|z  d|z  dz          \  }}}	t        ||dz         D ]   }
|	| j                  |j                  |
      <   " \ |d|z  d  }t        j                  d| j                  dz   z  |      }|dd| j                  z  z   d  }t        j                  d|d   z  |      }t        ||dd        D cg c]
  \  }}|||  c}}| _        |d|d   z  d  }t        j                  d	|d d       \  | _        | _        | j                  | j                  z
  dz   }t        j                  d|z  |dd|dz  z          | _        |d|dz  z   d  }t        j                  d| j                  z  |d d| j                  z         | _        |d| j                  z  d  }t        j                  d
| j                  z  |d | j                         | _        || j                  d  }t        j                  d|d d       \  | _        }t'        t        j                  d| j                  dz   z  |dd| j                  dz  z                }|d| j                  dz  z   d  }t'        t        j                  d| j                  dz   z  |d d| j                  dz  z                }|d| j                  z  dz   d  }t        | j(                        D ]r  }t+        d||| j,                  z  dz  |dz   | j,                  z  dz         }t.        j0                  dk7  r|j3                          | j4                  j7                  |       t || j(                  | j,                  z  dz  dz   d  }|d | | _        ||d  }t        t;        |      dz
  dd      D ]  }||   dk(  s||dz      ||<    t        ||dd        D cg c]  \  }}||z
  dkD  r||| nd c}}| _        ||d   d  }t        ||dd        D cg c]  \  }}||z
  dkD  r||| nd c}}| _        ||d   d  }y c c}}w c c}}w c c}}w )Nz>4Hr   >3Hr   r   r  rv   r3   r;   r\   >BH      Hbigr   rt   r]   ) r   r   Silf_pass_formatrc   r   r  ry  r   rd   r   rf  rz  r   r   r  numRulesr|  r{  r   listr   r
   r   sys	byteorderbyteswapr  rb   r~  r`   r}  r  )r   r   r   r   r&  numRanger+  firstlastcolgoRuleMaprz  r   r   numStartStatespConstraintoConstraintsoActionsas                       rr   r   zPass.decompile  s   //"2D$?4$mmE48<1aABxx 	:A!'ud1q51q5196M!NUD#5$(+ :69F//23:	: ALN#%%v11D'EMADOO++-.""FXb\$9DA/28Xab\/JKVaeAajK
A$&';A==tTVUVx;X8	!7//$2H2HH1L!==n$tANQ4F0F'G
 A**,-"MMdmm#d+>Q->&?
 A%'(%}}T]]"T/DMM%: 
 DMMO$17ud2Ah1O.	 +MM4==1,-QT]]Q=N9N0O

 A))+,MM6T]]Q%67$?VT]]UVEVAV:WX
 A%)+,t++, 	&AT!doo-1QUdoo4MPQ4QRA }}%

OO""1%	& D((4??:Q>BDE#L[1KL!s<(1,b"5 	6AA!#".q1u"5Q	6
 lL,<= 
A q519T!AY3. 
 L$&'=@8TUTV<=X
39Aq1q519T!AY2-
 HRLN#a LP 


s   Q5Q;
Rc           	      J
   t        d | j                  dgz   dg f      d   }t        d | j                  dgz   dg f      d   }ddj                  | j                        z   }g }| j                  D ]h  }t
        j                  dk7  r|j                          |j                  |j                                t
        j                  dk7  sY|j                          j t        |      sdg| _        t        d | j                  g gz   dg f      d   }	g }
t        | j                  j                         D cg c]  }|j!                  |d         |d   f c}      }t#        j$                  |d	
      D ]1  }|d   s	|
j                  |d   |d   |d   z   dz
  |d   d   f       3 t        | j                        | _        t)        j*                  t,              dz   t        |
      dz  z   t        |	      dz  z   d|	d   z  z   dz   dt        | j                        z  z   d| j&                  z  z   dz   d| j&                  z  z   dz   | _        | j.                  d| j0                  z  | j2                  z  z   dz   |z   | _        | j4                  t        | j6                        z   | _        | j8                  t        |      z   | _        d| _        t)        j>                  t,        |       }|t#        j@                  t        |
      d      z  }|dj                  d |
D              z  }|tC        j>                  dt        |	      z  g|	 z  }t        d | j                  g       }|tC        j>                  d|	d   z  g| z  }|tC        j>                  d| jD                  | jF                        z  }|tC        j>                  dt        | j                        z  g| j                   z  }|tC        j>                  d| j&                  z  g| jH                   z  }|tC        j>                  d| j&                  z  g| jJ                   z  }|tC        j>                  d| jL                  t        | j6                              z  }|tC        j>                  d| j&                  dz   z  g| z  }|tC        j>                  d| j&                  dz   z  g| z  }|dj                  |      z   tC        j>                  dd      z   | j6                  z   |z   dj                  | j                        z   S c c}w )Nc                 <    | d   t        |      z   | d   | d   gz   fS Nr   r   r`   r  r   s     rr   <lambda>zPass.compile.<locals>.<lambda>V  %    !A$Q-117 rt   rt   r   r   c                 <    | d   t        |      z   | d   | d   gz   fS r  r  r  s     rr   r  zPass.compile.<locals>.<lambda>Y  r  rt       r  c                 <    | d   t        |      z   | d   | d   gz   fS r  r  r  s     rr   r  zPass.compile.<locals>.<lambda>h  r  rt   T)samevalrv   r   r   r3   r  r   c              3   H   K   | ]  }t        j                  d g|   yw)r  N)rc   r{   )rb  r.  s     rr   rc  zPass.compile.<locals>.<genexpr>  s     DAU/Q/Ds    "r  c                     | |z   S r   r   r  s     rr   r  zPass.compile.<locals>.<lambda>  s
    A rt   r;   r\   r  r   )'r   r  r}  re   r  r  r  r  rb   tobytesr`   r  rz  r   ry  r6  r7  r	   entriesr  r   rh   r  	fsmOffsetr   r   pcCoder~  rcCoderi   oDebugr{   r3  rc   r   r   r|  r{  r   )r   r   r   r   r  r  constraintCodetransestr  
passRangesr   	gidcolmapr   r   	flatruless                   rr   r   zPass.compileS  s   79MPQSUw

 7  C5(G
 	
 !388D,@,@#AA 	A}}%

NN199;'}}%

	 7| !sD7rd9JQPRG

 
4;;CTCTCVWa6,,QqT2AaD9WX	D9 	DAt!!1Q41!q!A$q'"BC	D DLL)-.*o!" (ma  (2,	
  #d&&''( $--   $--	  
 	 NNQ!5!55GG!KdR 	 kkC(<(<$==[[3~#66
||,d3J33DDDDVc(m3@x@@-tzz2>	Vhrl2@i@@D$"8"8$:P:PQQVc$*:*:&;;Pt?O?OPPVdmm3It7H7HIIUT]]2Kd6J6JKKE4#:#:C@T@T<UVVVt}}q'89J\JJVt}}q'89FXFFhhw kk#q!" ""# 	
 hht||$%	
M Xs   1 T c                    t        d| |gt          t        d| |gt          |j                  d       |j	                          t        |t        | j                  j                         fd      D cg c]  } dj                  |  c}       |j                  d       |j	                          |j                  d       |j	                          t        | j                        D ]`  \  }}|j                  d| j                  | j                  z
  |z   d	j!                  t#        t$        |            
       |j	                          b |j                  d       |j	                          |j                  d       |j	                          t'        t)        | j*                              D ]  }|j                  d|| j,                  |   | j.                  |          |j	                          t)        | j0                  |         rt3        d|| j0                  |          t3        d|| j*                  |          |j                  d       |j	                           |j                  d       |j	                          t)        | j4                        rt3        d|| j4                         t)        | j6                        r,|j                  d       |j	                          |j                  d       |j9                  d	j!                  t#        t$        | j:                                     |j                  d       |j	                          t        | j6                        D ]g  \  }}|j                  d|       |j9                  d	j!                  t#        t$        |                   |j                  d       |j	                          i |j                  d       |j	                          y y c c}w )NrA  fsminfocolmapc                 ,    j                  | d         S )Nr   )r7  )r   r   s    rr   r  zPass.toXML.<locals>.<lambda>  s    v7H7H17N rt   )keyz{}={}staterulemapstater   )numberrz  rz  rule)rq  
precontextsortkey
constraintactionpassConstraintfsmstartsrow)_i)r   pass_attrs_infopass_attrs_fsmr   r   r   r5  ry  r6  formatr   r8  rz  r   r   r   re   rf   rg   r  r`   r  r{  r|  r}  r   r~  r  r   r  )r   r   r   r   r   r+  rr   s     `     rr   r   z
Pass.toXML  s   FD&;?;ItV=n=!  KK%%'-N "	
 	h'djj) 	DAq||doo59hhs3{+  
 NN	 	n% s4<<() 	AOO//2))!,	   NN4''*+,0D0DQ0GHhQ8MM&!NN	 	gt##$&0D0DEtOOE"NNOOH%LL#c4+;+;"<=>MM(#NN!$//2 !1!,SXXc#qk23e$ ! MM% NN  Os   7O/
c           	         |dk(  rt        | |gt          y |dk(  rt        | |gt          y |dk(  rot        |      }|j	                         D ]P  }|j	                  d      }t        |      dk7  s|d   dk(  s|d   dk(  r3t        |d         | j                  |d   <   R y |d	k(  ri|D ]c  }t        |t              s|\  }	}
}|	d
k(  s | j                  j                  |
d   j	                  d      D cg c]  }t        |       c}       e y |dk(  r|D ]  }t        |t              s|\  }	}
}|	dk7  r | j                  j                  t        |
d                | j                  j                  t        |
d                d}d}|D ];  }t        |t              s|\  }	}
}|	dk(  rt        |      }+|	dk(  s1t        |      }= | j                  j                  |       | j                   j                  |        y |dk(  rt        |      | _        y |dk(  r|D ]  }t        |t              s|\  }	}
}|	dk(  r_t%        d      }t        |      }|j'                  t)        t        |j	                                      | j*                  j                  |       ~|	dk(  sg }t        |      }|j'                  t)        t        |j	                                      || _         y y c c}w )NrA  r  r  =rv   r   r]   r   r  r  rz  r   r  r  r  rt   r  r  r  r  r  r  r  )r   r  r  r   r}   r`   r~   ry  r   r   rz  rb   r{  r|  r   r  r}  r~  r
   rX  rf   r  r  )r   r  r   r   r   r   r   wr   r   r  cr   conactsubcr   s                    rr   r   zPass.fromXML  s   6>dE4O4YdE3N3Xw'AWWY .GGCLq6Q;!A$"*!
$'!IAaD!	.
 ^# O!!U+	Q'>JJ%%qz7G7G7L&M!s1v&MNO W_" 1!'51#	Q&=$$++C,,@A!!((Qy\):; -A%a/ #$LCDl*&tn&tn- ##C($$++C0'1( %%#+G#4D U]" )!'51#	Q%<c
A&q)AHHSaggi01OO**1-H_A&q)AHHSaggi01'(D$) 1 'Ns   5K)
NrZ  rv  r   rt   rr   r%  r%    s    	<$~E
N<|8)rt   r%  )P   )6fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr   r   r]   r   r	   r
   	functoolsr   rc   r|   r  r   r   r  r  r  r  r  r  rd  Silf_lookupclass_formatSilf_lookuppair_formatr  ra   r   r8  rz   rs   r   rw   r   r   r   rK  rL  rM  rN  r  r  r   r   r   r   r   r   objectr   r#  r%  )r+  r   s   00rr   <module>r     su   " 7 6      
   *
        $D
J 	*0EF11Q4!QqT#FG	< 
5	6(

 9 4  L6
	 	QH\.. QHhj*6 j*Zk-f k-\H)6 H)E Gs    C6
