
     i                        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  ee          D                       Zd Z  ej!        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.d2d'Z/ G d( d)          Z0 G d* d+ej                  Z1 G d, d-e2          Z3 G d. d/e2          Z4 G d0 d1e2          Z5d	S )3    )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                 8    g | ]\  }}|d          ||d         ffS r   r    ).0ixs      i/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/S__i_l_f.py
<listcomp>rb      s-    FFF11Q4!QqT#FFF    c           	         t          |           }d}g }||k     rPt          | ||dz                      }|t          t                    k    rt          d         }nt          |         }|dz  }|d         dk    r||k    r|S |d         dk    r t          | |                   }d|z  }|dz  }n|d         dk    rd}n|d         }|dk    r|                    |d                    t	          j        || |d                    }|                    |d         dz   d                    t          t          |                    z   dz              |t	          j	        |          z  }||k     P|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	            ra   disassembler{      sl   %jjG	
B
C
w,,rBF{+,,C
OO##qMEEv&E
a8q==R7]]J8r>>E"I&&E%-C!GBB1X]]CC(C"99JJuQx   "3bcc
33

58c>DIIc#uoo$>$>>DEEE
foc"""- w,,. Jrc   z^\s*([^(]+)\s*(?:\(([^)]+)\))?c                 *   d}| D ]}t                               |          }|r|                    d          t          vr<t          |                    d                   \  }}|t	          j        d|          z  }|                    d          r|dk    rd t          j        d|                    d                    D             }|dk    r,t          |          }|t	          j        d	|dz   z  |g|R  z  }|t	          j        |g|R  z  }|S )
Nrc   r   r      r   c                 ,    g | ]}t          |          S r]   intr^   r`   s     ra   rb   zassemble.<locals>.<listcomp>   s    CCCSVVCCCrc   z,\s*r3   re   )	instrematchgroup	aCode_maprl   packresplitri   )instrsru   instmrv   parmfmtrz   ls           ra   assembler      s   
C 4 4LL 	

i//#AGGAJJ/v{3'''771:: 	4!||CCRXgqwwqzz%B%BCCCE"}}JJv{EQUOa@%@@@@v{73U3333Jrc   c                     |                     |            |                                 t          |          D ]+}|                    |           |                                 ,|                    |            |                                 d S N)begintagnewliner{   writeendtag)tagwriterr   r   s       ra   	writecoder      s    
OOC
NN    Q
MM#
NNrc   c                     g }t          |                               d          D ];}|                                }t          |          s&|                    |           <t          |          S )N
)content_stringr   stripri   rk   r   )contentru   es      ra   readcoder     sg    
CG$$**400  GGII1vv 	

1C==rc   )	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          fd|D                       } |j        | fi | |                                 d S )Nc                 4    g | ]}|t          |          fS r]   getattr)r^   kselfs     ra   rb   zwritesimple.<locals>.<listcomp>4  s(    :::A1gdA&&':::rc   )dict	simpletagr   )r   r   r   attrkeysattrss    `   ra   writesimpler   3  sV    :::::::;;EFS""E"""
NNrc   c                 z    |D ]7}||v r1t          | |t          t          ||                                        8d S r   )setattrr   r   )r   r   	attr_listr   s       ra   	getSimpler   9  sK     6 6::D!S%(!3!3445556 6rc   c                 n    d}| D ]}t          |t                    r||z  }|                                S )Nrf   )
isinstancetupler   )contentsru   elements      ra   r   r   ?  sD    
C  gu%% 	w99;;rc   P   c                 4   d}|D ]P}t          |          |k    r3|                     |d d                    |                                  d}||dz   z  }Qt          |          r3|                     |d d                    |                                  d S d S )Nrf   r3    )ri   r   r   )r   datlengthcurrlineds        ra   wrapliner   H  s    H  x==6!!LL#2#'''NNHAG
8}} Xcrc]### rc   c                       e Zd ZdS )_ObjectN)__name__
__module____qualname__r]   rc   ra   r   r   U  s        Drc   r   c                   2    e Zd ZdZddZd Zd Zd Zd ZdS )	table_S__i_l_fzhGraphite Rules table

    See also https://graphite.sil.org/graphite_techAbout#graphite-font-tables
    Nc                 T    t           j                             | |           g | _        d S r   )r   __init__silfs)r   r   s     ra   r   ztable_S__i_l_f.__init___  s&    !**4555


rc   c                 "   t          j        t          ||            t          t	          | j        d                    | _        | j        dk    rQt          j        |          \  }| _        t          j        t          ||            t          j
        t                    }ny| j        dk     r3t          j        d|dd                   | _        d| _        d| _        d	}n;d| _        t          j        t          ||            t          j
        t                    }t          j        d
| j        z  ||d                    }|D ]N}t!                      }| j                            |           |                    ||d          || j                   Od S )N   precisionBits      @      @r         r      >%dL)r   unpack2Silf_hdr_formatfloatr   versionr	   
decompressschemeSilf_hdr_format_3rq   rl   unpacknumSilfcompilerVersionrm   Silfr   rk   	decompile)r   datattFontbasesilfoffsetsoffsetss          ra   r   ztable_S__i_l_f.decompilec  sh   t444.t|2NNNOO<3")"4T":":T4;O-tT:::#$566DD\C!=tAaCy99DLDK#$D DDDKO-tT:::#$566D(&4<*?$tuu+NN! 	= 	=FAJa   KKVWWvt|<<<<	= 	=rc   c                 *   t          | j                  | _        | j        dk     r9t	          j        t          |           }|t          j        d| j        d          z  }nt	          j        t          |           }t          |          d| j        z  z   }d}| j        D ]L}|t          j        d|          z  }|	                    || j                  }|t          |          z  }||z  }M| j        dk    rt          j        | j        ||z             S ||z   S )Nr   rY   r   r   rc   r   r   )ri   r   r   r   r   r   r   rl   r   compiler	   compressr   )r   r   hdrr   r   r   subdatas          ra   r  ztable_S__i_l_f.compilez  s    4:<#,55C6;udlA666CC,0$77CSA,, 	 	A6;tV,,,Cii55Gc'll"FGODD<3#DKt<<<Tzrc   c                    |                     d           |                                 |                    d| j        | j        | j                   |                                 | j        D ]p}|                    d           |                                 |                    ||| j                   |	                    d           |                                 qd S )Nz/Attributes starting with _ are informative onlyr   )r   r   compressionSchemesilf)
commentr   r   r   r   r   r   r   toXMLr   )r   r   r   r   s       ra   r	  ztable_S__i_l_f.toXML  s    HIIIL 0"k	 	 	
 	
 	
 	 	 	AOOF###NNGGFFDL111MM&!!!NN	 	rc   c                    |dk    rwt          t          |d                             | _        t          t          |d                             | _        t          t          |d                             | _        d S |dk    rgt                      }| j                            |           |D ]>}t          |t                    s|\  }}}|                    ||||| j                   =d S d S )Nr   r  r   r  )r   r   r   r   r   r   r   r   rk   r   r   fromXML)	r   namer   r   r   r   r   r   
subcontents	            ra   r  ztable_S__i_l_f.fromXML  s    9hu-@'ABBCCDK %	*:!;!;<<DL#&x6G0H'I'I#J#JD F6>>AJa   " H H!'511 )0&UJ		#uj&$,GGGG >H Hrc   r   	r   r   r   __doc__r   r   r  r	  r  r]   rc   ra   r   r   Y  ss         
   = = =.  $  "H H H H Hrc   r   c                   8    e Zd ZdZd Zd	dZd	dZd	dZd	dZdS )
r   zA particular Silf subtablec                 L    g | _         g | _        g | _        g | _        i | _        d S r   )passes
scriptTagscritFeaturesjLevelspMapr   s    ra   r   zSilf.__init__  s*    			rc          @c           	      H   |dk    rFt          j        t          |           \  }t          t	          | j        d                    | _        t          j        t          |           \  }t          | j                  D ]F}t          j        t          t                                \  }| j                            |           Gt          j        t          |           \  }| j        r"t          j        d| j        z            | _        | j        dz  dz   d          t          j        d          \  }|r(fdt          ddd	|z  z   d	          D             | _        dd	|z  z   d          t          j        d
d d                   \  | _        | j        r8t          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    r<t          j        t.          dd|	z  z   dd|	z  z            t                                }
n;t          j        t0          dd	|	z  z   dd	|	z  z            t                                }
|                    |
j                  | j        |
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                             ||           t          | j                  D ]h}	tC                      }| j"                            |           |                     | j        |	         |z
  | j        |	dz            |z
           ||           id S )Nr   r   r   >%dHr}   r   r   c           	          g | ];}t          j        d ||dz                      d                             d          <S )4sr   r   ascii)rl   r   decoder^   r`   r   s     ra   rb   z"Silf.decompile.<locals>.<listcomp>  sT        dDQUO44Q7>>wGG  rc   r   r   r   r   r         )#r   r   Silf_part1_format_v3r   r   ruleVersionSilf_part1_formatrange
numJLevelsSilf_justify_formatr   r  rk   Silf_part2_formatnumCritFeaturesrl   rm   r  r  r   r   	numPassesoPassesSilf_pseudomap_formatSilf_pseudomap_format_hgetGlyphNamenPseudor  unicoderq   Classesclassesr   Passr  )r   r   r   r   _jleveljnumScriptTag	numPseudor_   pseudocurrposps    `           ra   r   zSilf.decompile  sr   c>>o&:D$GGGAt$!$"2"EEE   D /"3T4@@4DO,, 	# 	#Fo&94KKGAtL""""/"3T4@@4 	 & 2$..! !D D(1,q0223 ,S$77 	   q!a,&6"6::  DO AL((**+dD!H55> 	!=4>A-.a!a$.>P:P6P1Q DL ADN**,,-}T4844y!! 		L 		LA#~~ )4AE	BQJ0F+G  !+T!a!e)b1q5j2H-I799  )/(;(;FN(K(KDIfn%%AI%''(.//233doEF0112 $&&' 	
  ,  $. ! 	 )m
 	 c>>w'(<===GyytVW555t~&& 	 	AAKq!!!KKT\!_w.a!e1Dw1NNO   	 	rc   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        r"|t          j        d| j        z  g| j        R  z  }|t          j        ddt          | j                            z  }t          | j                  r)d | j        D             }|d                    |          z  }|t          j        d| j                  z  }t          |          | _        t+          j        |d          }|t          |          z   d	| j        d
z   z  z   }	|	t          |          z   | _        t1          | j                                                  D ]9\  }
}|t          j        |dk    rdnd|
|                    |                    z  }:|| j                            ||          z  }|	t          |          z  }	d}d}t;          | j                  D ]I\  }}|	t          |          z   }|t          j        d|          z  }||                    |||          z  }J|t          j        d|	t          |          z             z  }|dk    rt          j        t          |           }nd}||z   |z   |z   |z   S )Nrc   r   r   r  r;   c                 ^    g | ]*}t          j        d |                    d                    +S )r  r  )rl   r   encoder   s     ra   rb   z Silf.compile.<locals>.<listcomp>  s0    SSSaV[qxx'8'899SSSrc   r   r   r   r   z>LHrY   r   )ri   r  r*  r  r&  r  r)  r  r   rq   r"  r   r$  r'  r(  rl   numCritFeatursr  rn   r   
passOffsetr	   bininfopseudosOffsetsorteditems
getGlyphIDr2  r  	enumerate)r   r   r   r8  r   	hdroffsetr6  tdatadata1r:  ur;  data2dataor_   r   data3s                    ra   r  zSilf.compile  s   T[))dl++"4#455	NN	c>>()=>>III.555 	9 	9AGL!4a888DD.555 	TFK$*=!=SARSSSSDD!S%9%9:::t 	$SS4?SSSECHHUOO#DD$*---d))	1--c$ii'!t~/A*BB$s5zz149??,,-- 	 	DAqV[!S..ea9J9J19M9M  EE 	%%fg6663u::dk** 	6 	6DAqSZZ'DV[t,,,EQYYvtW555EET7SZZ#7888c>>L!5t<<EEEt|e#e+e33rc   c                 	   |dk    r0|                     d| j                   |                                 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          j        t                    \  }}}t          | j	                  D ]A\  }t          fd	|D                       } |j         di | |                                 B|                    d           |                                 t          | j                  r|
                    d           |                                 |                    d                    t)          t*          | j                                       |                                 |                    d           |                                 t          | j                  r|
                    d           |                                 |                    d                    | j                             |                                 |                    d           |                                 | j        r|
                    d           |                                 t1          | j                                                  D ]>\  }	}
|                     dt5          |	          |
           |                                 ?|                    d           |                                 | j                            |||           t          | j                  r|
                    d           |                                 t          | j                  D ]p\  }}|
                    d|           |                                 |                    |||           |                    d           |                                 q|                    d           |                                 d S d S )Nr   r   )r#  infopassindexescontexts
attributesjustificationsc                 4    g | ]}|t          |          fS r]   r   )r^   r   r6  s     ra   rb   zSilf.toXML.<locals>.<listcomp>5  s&    AAAQq'!Q--0AAArc   justifyr  r   r  	pseudoMapr9  )r0  r9  r  pass_index)rU  )r   r#  r   r   
attrs_infoattrs_passindexesattrs_contextsattrs_attributesri   r  r   r   	getformatr'  rF  r   r   r  r   rn   ro   rp   r  r  rC  rD  hexr2  r	  r  )r   r   r   r   jformatjnamesjfixesr_   r   r   vr;  r6  s               @ra   r	  z
Silf.toXML(  s<   c>>YD4DEEENNFD&6:6666M4D2CDDDDJf>~>>>>L$B1ABBBBt| 		OO,---NN&-&78K&L&L#GVV!$,// ! !1AAAA&AAABB  44e444    MM*+++NNt !! 	OON+++NNLL#c4+<"="=>>???NNMM.)))NNt 	OOL)))NNLL$/22333NNMM,'''NN9 	OOK(((NNty0011 ! !1  3q66! DDD    MM+&&&NN667333t{ 
	OOH%%%NN!$+.. ! !1q111   000f%%%    MM(###NN
	 
	rc   c           	      t   |dk    r5t          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    rt	          | |gt          R   d S |dk    r|D ]}t          |t                    s|\  }}}|d	k    r`t                      }	|                                D ]#\  }
}t          |	|
t          |                     $| j                            |	           d S |d
k    rWg | _        t%          |          }| j                            t)          t          |                                                     d S |dk    rIg | _        t%          |          }|                                D ]}| j                            |           d S |dk    rXi | _        |D ]L}t          |t                    s|\  }}}|dk    rt          |d         d          }
|d         }|| j        |
<   Md S |dk    rTt1                      | _        |D ]<}t          |t                    s|\  }}}| j                            |||||           =d S |dk    r|D ]}t          |t                    s|\  }}}|dk    rnt7                      }|D ]C}t          |t                    s|                    |d         |d         |d         ||           D| j                            |           d S d S )Nr   r#  0rO  rP  rQ  rR  rS  rU  r  r  rV  r9  r0  r   r2  r  rW  r   r   r}   )r   r   getr#  r   rZ  r[  r\  r]  r   r   r   rD  r   r   r  rk   r  r   extendro   r   r  r  r1  r2  r  r3  r  )r   r  r   r   r   r   r   r   r  r6  r   rc  nr;  r   s                  ra   r  zSilf.fromXML]  s   9$Xeiis.K.K%L%LMMD6>>dE/J//////]""dE6$5666666ZdE3N333333\!!dE5$4555555%%%" + +!'511 +2(eZ)##		A % . .11c!ff----L''***+ + ^## "D$W--G$$Sgmmoo%>%>?????\!! DO$W--G]]__ * *&&q))))* *[  DI" ! !!'511 +2(eZ(??E),b11AhA 	!! ! Y"99DL" N N!'511 )0&UJ$$S%VWMMMM	N N
 X" 
* 
*!'511 )0&UJ&==A' E E)!U33 %$		!A$!adFGDDDDK&&q))) 
* 
*rc   Nr  r  r]   rc   ra   r   r     s        $$  A A A AF,4 ,4 ,4 ,4\3 3 3 3j:* :* :* :* :* :*rc   r   c                   4    e Zd Zd ZddZddZddZddZdS )	r1  c                 "    g | _         g | _        d S r   )linear	nonLinearr  s    ra   r   zClasses.__init__  s    rc   r  c           
      >   t          j        t          |            |dk    r4t          j        d| j        dz   z  ddd| j        z  z                      }n3t          j        d| j        dz   z  ddd| j        z  z                      }t          |d | j                 |d| j        dz                      D ]O\  }}| j        	                    fd	t          j        d||z
  dz  z  ||                   D                        Pt          || j        | j                 || j        dz   | j        dz                      D ]Z\  }}fd
t          |dz   |d          D             }t          fd|D                       }| j        	                    |           [d S )N      @r   r   r   r   r  r   r}   c              3   B   K   | ]}                     |          V  d S r   r.  r^   r`   r   s     ra   	<genexpr>z$Classes.decompile.<locals>.<genexpr>  sE         ##A&&     rc   c           	      P    g | ]"}t          j        d ||dz                      #S )rY   r   )rl   r   r  s     ra   rb   z%Classes.decompile.<locals>.<listcomp>  s>       :;eT!a!e)_55  rc   c                 V    g | ]%}                     |d                    |d         f&S r\   rq  rr  s     ra   rb   z%Classes.decompile.<locals>.<listcomp>  s4    PPPF//!55qt<PPPrc   )r   r   Silf_classmap_formatrl   r   numClasszip	numLinearrl  rk   r%  r   rm  )	r   r   r   r   oClassesr   r   	nonLinidsnonLins	    ``      ra   r   zClasses.decompile  s   ,dD999c>>}4=1,-QQ=N9N5N0O HH }4=1,-QQ=N9N5N0O H !14>!12HQRSAS=S4TUU 	 	DAqK    1q5A+(>acKK       T^dm34T^a'$-!*;;<
 
 	* 	*DAq   ?DQUAq?Q?Q  I PPPPiPPPQQFN!!&))))	* 	*rc   c                    d}g }|dk    r0ddt          | j                  t          | j                  z   z  z   }n/ddt          | j                  t          | j                  z   z  z   }| j        D ]Z}|                    t          |          |z              fd|D             }|t	          j        dt          |          z  g|R  z  }[| j        D ]}|                    t          |          |z              fd	|                                D             }|t          j        t          |                    z  }|d	                    d
 t          |          D                       z  }|                    t          |          |z              t          |          dz
  | _        t          | j                  | _        t          j        t          |           t	          j        |dk    rdndt          |          z  g|R  z   |z   S )Nrc   ro  r   r   r   r}   c                 :    g | ]}                     |          S r]   rE  rr  s     ra   rb   z#Classes.compile.<locals>.<listcomp>  s'    2221&##A&&222rc   r  c                 V    g | ]%}                     |d                    |d         f&S r\   r  rr  s     ra   rb   z#Classes.compile.<locals>.<listcomp>  s4    EEEa6$$QqT**AaD1EEErc   c                 2    g | ]}t          j        d g|R  S )rY   rl   r   r   s     ra   rb   z#Classes.compile.<locals>.<listcomp>  s*    IIIfk%4!444IIIrc   r   r   )ri   rl  rm  rk   rl   r   rD  r	   rA  rn   rC  rw  ry  r   rv  )r   r   r   r   rz  r   r   gss    `      ra   r  zClasses.compile  s	   c>>c$+..T^1D1DDEEFFc$+..T^1D1DDEEF 	8 	8AOOCII.///2222222BFK#a&&7B7777DD 	K 	KAOOCII.///EEEE17799EEEBGOCGG,,,DCHHIIfRjjIIIJJJDDD		F*+++H)T[))L-t44k#sNN&&#h--GKS   		
rc   c                 f   |                     d           |                                 |                     d           |                                 t          | j                  D ]i\  }}|                     d|           |                                 t	          ||           |                    d           |                                 j|                    d           |                                 |                     d           |                                 t          | j                  D ]\  }}|                     d|| j        z              |                                 |                                D ]1\  }}|	                    d||           |                                 2|                    d           |                                 |                    d           |                                 |                    d           |                                 d S )	Nr2  linearClassesrl  rX  nonLinearClassesrm  ro   )glyphindex)
r   r   rF  rl  r   r   rm  ry  rD  r   )r   r   r   r   r_   r   inpinds           ra   r	  zClasses.toXML  s   	"""(((dk** 	 	DAqOOHQO///NNVQMM(###NNo&&&*+++dn-- 	 	DAqOOKDN0BOCCCNNGGII ! !S  c ===    MM+&&&NN()))i   rc   c                    |dk    rd|D ]_}t          |t                    s|\  }}}|dk    r;t          |                                          }	| j                            |	           `d S |dk    r|D ]}t          |t                    s|\  }}}|dk    rni }	|D ]O}
t          |
t                    s|
\  }}}|dk    r+t          t          |d                             |	|d         <   P| j                            |	           d S d S )Nr  rl  r  rm  ro   r  r  )	r   r   r   r   rl  rk   r   r   rm  )r   r  r   r   r   r   r   r   r  r   r   subsubcontents               ra   r  zClasses.fromXML  sU   ?""" * *!'511 )0&UJ(??&z2288::AK&&q)))* * '''" - -!'511 )0&UJ+%%A' N N)!U33 %$451UM%<<03HU7^4L4L0M0MAeGn-N))!,,, ('- -rc   Nri  r   r   r   r   r   r  r	  r  r]   rc   ra   r1  r1    ss          * * * *2
 
 
 
6   8- - - - - -rc   r1  c                   4    e Zd Zd ZddZddZddZddZdS )	r3  c                     i | _         g | _        g | _        g | _        g | _        d| _        g | _        g | _        g | _        d S )Nrc   )	colMaprulesrulePreContextsruleSortKeysruleConstraintspassConstraintsactions
stateTransstartStatesr  s    ra   r   zPass.__init__	  sL    
!!"rc   r  c           
      	   t          j        t          |           \  }t          j        dd d                   \  }}}}dd          t          |          D ]_}t          j        dd|z  d|z  dz                      \  }}}	t          ||dz             D ]}
|	| j        |                    |
          <    `d|z  d          t          j        d| j	        dz   z            }dd| j	        z  z   d          t          j        d|d         z            fd	t          ||dd                    D             | _        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 ]q}t+          d|| j        z  dz  |dz   | j        z  dz                     }t.          j        dk    r|                                 | j                            |           r| j        | j        z  dz  dz   d          d |         | _        |d          t          t;          |          dz
  dd          D ]}||         dk    r||dz            ||<   fdt          ||dd                    D             | _        |d         d          fdt          ||dd                    D             | _        |d         d          d S )Nz>4Hr   >3Hr   r   r  r}   r3   c                 *    g | ]\  }}||         S r]   r]   )r^   r   r   r  s      ra   rb   z"Pass.decompile.<locals>.<listcomp>   s%    KKKVaeAaCjKKKrc   r;   re   >BH      Hbigr   c                 @    g | ]\  }}||z
  d k    r
||         ndS )r   rc   r]   r^   r   r   r   s      ra   rb   z"Pass.decompile.<locals>.<listcomp>H  sE      
  
  
A q5199T!A#YY3 
  
  
rc   c                 @    g | ]\  }}||z
  d k    r
||         ndS )r   rf   r]   r  s      ra   rb   z"Pass.decompile.<locals>.<listcomp>M  sB     
 
 
39Aq1q5199T!A#YY2
 
 
rc   ) r   r   Silf_pass_formatrl   r   r%  r  r.  rm   r   rx  r  r   r   r  numRulesr  r  r   listr   r
   r   sys	byteorderbyteswapr  rk   r  ri   r  r  )r   r   r   r   r4  numRanger_   firstlastcolgoRuleMapnumStartStatespConstraintoConstraintsoActionsar  s    `               @ra   r   zPass.decompile  s3   /"2D$??4$mE48<<1aABBxx 	: 	:A!'ud1q51q519;L6M!N!NUD#5$(++ : :69F//2233:ALNN#%v11D'EMMADO++--."FXb\$9DAAKKKKs8Xabb\/J/JKKK
A$&&';A=tTVUVTVx;X;X8	!7/$2HH1L!=n$tANQ4F0F,F'G
 
 A**,,-"Mdm#d+>Q->+>&?
 
 A%''(%}T]"T/DM/%: 
  
 DMOO$17ud2A2h1O1O.	 +M4=1,-QT]Q=N9N5N0O 
 

 A))++,M6T]Q%67$?VT]UVEVAV?V:WXX
 
 A%)++,t+,, 	& 	&AT!do-1QUdo4MPQ4QQR A }%%

O""1%%%%D(4?:Q>BDDE#L[L1KLL!s<((1,b"55 	6 	6AA!##".q1u"5Q 
  
  
  
lL,<== 
  
  
 L$&&'
 
 
 
=@8TUTVTV<=X=X
 
 
 HRLNN#rc   c                 	   t          d | j        dgz   dg f          d         }t          d | j        dgz   dg f          d         }dd                    | j                  z   }g }| j        D ]q}t
          j        dk    r|                                 |                    |	                                           t
          j        dk    r|                                 rt          |          sdg| _        t          d | j        g gz   dg f          d         }	g }
t          fd	| j                                        D                       }t!          j        |d
          D ]F}|d         r<|
                    |d         |d         |d         z   dz
  |d         d         f           Gt          | 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| j        z  | j        z  z   dz   |z   | _        | j        t          | j                  z   | _        | j        t          |          z   | _        d| _        t'          j        t*          |           }|t!          j        t          |
          d          z  }|d                    d |
D                       z  }|tA          j        dt          |	          z  g|	R  z  }t          d | j        g           }|tA          j        d|	d         z  g|R  z  }|tA          j        d| j!        | j"                  z  }|tA          j        dt          | j                  z  g| j        R  z  }|tA          j        d| j        z  g| j#        R  z  }|tA          j        d| j        z  g| j$        R  z  }|tA          j        d| j%        t          | j                            z  }|tA          j        d| j        dz   z  g|R  z  }|tA          j        d| j        dz   z  g|R  z  }|d                    |          z   tA          j        dd          z   | j        z   |z   d                    | j                  z   S )Nc                 V    | d         t          |          z   | d         | d         gz   fS Nr   r   ri   r  r`   s     ra   <lambda>zPass.compile.<locals>.<lambda>V  '    !A$Q-117 rc   rc   r   r   c                 V    | d         t          |          z   | d         | d         gz   fS r  r  r  s     ra   r  zPass.compile.<locals>.<lambda>Y  r  rc       r  c                 V    | d         t          |          z   | d         | d         gz   fS r  r  r  s     ra   r  zPass.compile.<locals>.<lambda>h  r  rc   c                 V    g | ]%}                     |d                    |d         f&S r\   r  rr  s     ra   rb   z Pass.compile.<locals>.<listcomp>k  s4    WWWa6,,QqT22AaD9WWWrc   T)samevalr}   r   r   r3   r  r   c              3   :   K   | ]}t          j        d g|R  V  dS )r  Nr  )r^   r;  s     ra   rs  zPass.compile.<locals>.<genexpr>  s4      DDAU/Q///DDDDDDrc   r  c                     | |z   S r   r]   r  s     ra   r  zPass.compile.<locals>.<lambda>  s
    A rc   r;   re   r  r   )&r   r  r  rn   r  r  r  r  rk   tobytesri   r  r  r   r  rD  r	   entriesr  r   rq   r  	fsmOffsetr   r   pcCoder  rcCoderr   oDebugr   rA  rl   r   r   r  r  r   )r   r   r   r   r  r  constraintCodetransestr  
passRanges	gidcolmapr   r   	flatruless    `             ra   r  zPass.compileS  s   779MPQSUw
 

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

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

7|| 	# !sD77rd9JQPRG
 

 
WWWW4;CTCTCVCVWWWXX	D999 	D 	DAt D!!1Q41!q!A$q'"BCCCDL))-..*oo!" (mma  (2,	
  #d&'''( $-   $-	  
 	 NQ!55GG!KdR 	 kC(<$=$==[3~#6#66
|,d33J333DDDDDDDDVc(mm3@x@@@@--tz2>>	Vhrl2@i@@@@D$"8$:PQQQVc$*:&;&;;Pt?OPPPPVdm3It7HIIIIUT]2Kd6JKKKKE4#:C@T<U<UVVVVt}q'89J\JJJJVt}q'89FXFFFFhhw k#q!!" "# 	
 hht|$$%	
rc   c                    t          d| |gt          R   t          d| |gt          R   |                    d           |                                 t          |d t          | j                                        fd          D                        |	                    d           |                                 |                    d           |                                 t          | j                  D ]g\  }}|                    d| j        | j        z
  |z   d	                    t!          t"          |                    
           |                                 h|	                    d           |                                 |                    d           |                                 t          | j                  D ]\  }}|                    d|| j        |         | j        |                    |                                 t+          | j        |                   rt/          d|| j        |                    t/          d||           |	                    d           |                                 |	                    d           |                                 t+          | j                  rt/          d|| j                   t+          | j                  rg|                    d           |                                 |                    d           |                    d	                    t!          t"          | j                                       |	                    d           |                                 t          | j                  D ]\  }}|                    d|           |                    d	                    t!          t"          |                               |	                    d           |                                 |	                    d           |                                 d S d S )NrO  fsminfocolmapc                 "    g | ]} d j         | S )z{}={})formatr   s     ra   rb   zPass.toXML.<locals>.<listcomp>  s1        "  rc   c                 :                         | d                   S )Nr   r  )r`   r   s    ra   r  zPass.toXML.<locals>.<lambda>  s    v7H7H17N7N rc   )keystaterulemapstater   )numberr  r  rule)r  
precontextsortkey
constraintactionpassConstraintfsmstartsrow)_i)r   pass_attrs_infopass_attrs_fsmr   r   r   rC  r  rD  r   rF  r  r   r   r   rn   ro   rp   r  r  r  ri   r  r   r  r  r   r  )r   r   r   r   r_   rr  r   s     `     ra   r	  z
Pass.toXML  s   FD&;?;;;;ItV=n====!!! K%%''-N-N-N-N    	
 	
 	
 	h'''dj)) 	 	DAq|do59hhs3{{++    
 NNn%%%   "4<00 	 	IAvOO/2)!,	     NN4'*++ I,0DQ0GHHHh///MM&!!!NNgt#$$ 	F&0DEEEt 	OOE"""NNOOH%%%LL#c4+;"<"<==>>>MM(###NN!$/22 ! !1!,,,SXXc#qkk22333e$$$    MM%   NN	 	rc   c                    |dk    rt          | |gt          R   d S |dk    rt          | |gt          R   d S |dk    rt          |          }|                                D ]f}|                    d          }t          |          dk    s|d         dk    s|d         dk    rCt          |d                   | j        |d         <   gd S |d	k    rf|D ]a}t          |t                    s|\  }	}
}|	d
k    r=| j
                            d |
d                             d          D                        bd S |dk    r
|D ]}t          |t                    s|\  }	}
}|	dk    r&| j                            t          |
d                              | j                            t          |
d                              d}d}|D ]I}t          |t                    s|\  }	}
}|	dk    rt          |          }4|	dk    rt          |          }J| j                            |           | j                            |           d S |dk    rt          |          | _        d S |dk    r|D ]}t          |t                    s|\  }	}
}|	dk    rst%          d          }t          |          }|                    t)          t          |                                                     | j                            |           |	dk    rRg }t          |          }|                    t)          t          |                                                     || _        d S d S )NrO  r  r  =r}   r   rf   r   r  r  c                 ,    g | ]}t          |          S r]   r   r   s     ra   rb   z Pass.fromXML.<locals>.<listcomp>  s    &M&M&M!s1vv&M&M&Mrc   r  r   r  r  r  rc   r  r  r  r  r  r  r  )r   r  r  r   r   ri   r   r  r   r   r  rk   r  r  r   r  r  r  r
   rg  ro   r  r  )r   r  r   r   r   r   r   wr`   r   r  cr   conactsubcr   s                    ra   r  zPass.fromXML  s   6>>dE4O444444YdE3N333333Xw''AWWYY . .GGCLLq66Q;;!A$"**!

$'!IIAaD!!	. .
 ^## O O!!U++ 	Q'>>J%%&M&Mqz7G7G7L7L&M&M&MNNNO O W__" 1 1!'511 #	Q&==$++C,,@,@AAA!((Qy\):):;;; - -A%a// ! #$LCDl**&tnn&tnn##C((($++C0000'1 1( %%%#+G#4#4D   U]]" ) )!'511 #	Q%<<c

A&q))AHHSaggii00111O**1----H__A&q))AHHSaggii00111'(D$ ]) )rc   Nri  r  r]   rc   ra   r3  r3    sz        	 	 	<$ <$ <$ <$~E
 E
 E
 E
N< < < <|8) 8) 8) 8) 8) 8)rc   r3  )r   )6fontTools.miscr   fontTools.misc.fixedToolsr   fontTools.misc.textToolsr   r   rf   r   r	   r
   	functoolsr   rl   r   r  r   r   r"  r$  r'  r(  r,  r-  rv  Silf_lookupclass_formatSilf_lookuppair_formatr  rj   r   rF  r   r{   r  r   r   r   r   rZ  r[  r\  r]  r  r  r   r   r   r   r   r   objectr   r1  r3  r]   rc   ra   <module>r     s   " " " " " " 7 7 7 7 7 7 6 6 6 6 6 6 6 6                                    
   *
        $D
J DFF		*0E0EFFFGG	  < 
5	6	6  (    

 9 4  L  6 6 6  
 
 
 
	 	 	 	 	 	 	 	QH QH QH QH QH\. QH QH QHhj* j* j* j* j*6 j* j* j*Zk- k- k- k- k-f k- k- k-\H) H) H) H) H)6 H) H) H) H) H)rc   