+
    f7i
  c                   s   ^ RI Ht ^ RIHt ^ RIHt ^ RIHtH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHt ^ R
It^ R
It ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t]P:                  ! R4      tR tR t R t!R t"R t# ! R R]$4      t%RWR lt&RXR lt'R t(RWR lt)RWR lt*RWR  lt+RWR! lt,RWR" lt-RWR# lt.RWR$ lt/]P`                  3R% lt1RWR& lt2R' t3R( t4R) t5R* t6 ! R+ R,]74      t8 ! R- R.]84      t9 ! R/ R0]84      t: ! R1 R2]84      t;RWR3 lt<RWR4 lt=RWR5 lt>R6 t?R7 t@ ! R8 R9]74      tARWR: ltB]P                  3R; ltD]P                  3R< ltF]P                  3R= ltG]P                  3R> ltHR? tIRWR@ ltJRWRA ltKRWRB ltLRWRC ltMRWRD ltNRWRE ltORWRF ltPRG tQRH tRRI tSRJ tTRK tURL tVRM tWRN tXRO tYRP tZRWRQ lt[ ! RR RS]74      t\RWRT lt]RXRU lt^]_RV8X  d   ^ R
I`t`]`P                  ! ]^! 4       4       R
# R
# )Y    )ttLib)cmap_classes)otTables)ValueRecordvalueRecordFormatDict)builder)contextmanager)newTable)LOOKUP_DEBUG_ENV_VARLOOKUP_DEBUG_INFO_KEY)setitemNc                   s    ] tR t^tRtR# )MtiLibError N__name__
__module____qualname____firstlineno____static_attributes__r       @/usr/lib64/python3.14/site-packages/fontTools/mtiLib/__init__.pyr   r          r   r   c                   s    ] tR t^tRtR# )ReferenceNotFoundErrorr   Nr   r   r   r   r   r      r   r   r   c                   s    ] tR t^tRtR# )FeatureNotFoundErrorr   Nr   r   r   r   r   r      r   r   r   c                   s    ] tR t^ tRtR# )LookupNotFoundErrorr   Nr   r   r   r   r   r       r   r   r   zfontTools.mtiLibc                 s6   V R ,          R9   d1   \         P                  P                  \        V R,          ^4      4      # V R ,          R8X  d   R\        V R,          4      ,          # V P	                  R4      ^ 8  g   Q RV ,          4       hV '       g   Q R4       hV # ):N   Nr   NNz# z	glyph%.5d zSpace found in glyph name: %szGlyph name is empty)zU zu )r   TTFontZ_makeGlyphNameintZfind)s   &r   	makeGlyphr!   '   s}    u||**3qub>::	
2$S2Z''66#;??;a???###1Hr   c                 sB    V  Uu. uF  p\        V4      NK  	  up# u upi N)r!   )Zlg   & r   
makeGlyphsr%   1   s    "#$!QIaL!$$$s   c                 sn    Ve    W,          pV# \        V 4      pV#   \          d    \        T 4      hi ; ir"   )KeyErrorr   r   symmappingidx   && r   	mapLookupr,   5   sI     	+,C
 J #hJ	  	+%c**	+s    4c                 s     \        V 4      pV#   \         d(     Y,          p T#   \         d    \        T 4      hi ; ii ; ir"   )r   
ValueErrorr&   r   r'   r+   r   
mapFeaturer.   B   sW    ,#h J  ,	,,C J  	,&s++	,,s    A&=Ac                 s   aaa  V ! W!4      pS! SST4       R #   \          d<   p Te   TP                  TTT3R lY'4        R p?R #  h   \         d     h i ; iR p?ii ; i)Nc                 s   < S! SSV 4      # r"   r   )Zref
collectionkeysetters   &r   <lambda>ZsetReference.<locals>.<lambda>V   s    z3 <r   )r   addDeferredMappingZAttributeError)Zmapperr)   r(   r1   r/   r0   mappedes   &&&fff  r   setReferencer6   O   su    % :sF# " 		"**<c 	 # 	  			s2    AA	A	AAAAAc                   s2   a  ] tR t^_t o R tR tR tRtV tR# )DeferredMappingc                s    . V n         R # r"   _deferredMappingsselfr    r   __init__ZDeferredMapping.__init__`   s
    !#r   c                s    \         P                  R V\        V4      P                  4       V P                  P                  WV34       R# )z*Adding deferred mapping for symbol '%s' %sN)logdebugtyper   r9   append)r;   r1   r(   r5   s   &&&&r   r3   Z"DeferredMapping.addDeferredMappingc   s6    		>T!WEUEUV%%vA&67r   c                s   V P                    FW  w  rp\        P                  R V\        V4      P                  4        W,          pT! T4       \        P                  RT4       KY  	  . V n         R#   \
         d    Thi ; i)z,Applying deferred mapping for symbol '%s' %sz	Set to %sN)r9   r=   r>   r?   r   r&   )r;   r1   r(   r5   r4   s   &    r   applyDeferredMappingsZ%DeferredMapping.applyDeferredMappingsg   sv    "44NFII>T!WEUEU 6NIIk6* 5 "$	  s   A11A?r8   N)	r   r   r   r   r<   r3   rA   r   __classdictcell__Z__classdict__   @r   r7   r7   _   s     $8$ $r   r7   c                 s   \         P                  ! 4       p. pV P                  R 4      ;_uu_ 4        V  EF:  p\        V4      ^8  d   VP	                  R4       K#  Vw  rVrx\
        P                  RWV4       \         P                  ! 4       p	RV	n        V'       d   \        \        VV\        V	R4       MRV	n        \        V4      p
^.\        V
4      ,          ;V	n        p\        V
4       F  w  r\        \        W\         W4       K  	  \        V	P                  4      V	n        V Uu. uF  qP$                  V8X  g   K  VNK  	  ppV'       d   V^ ,          P&                  pM\         P(                  ! 4       pVR^\        V4      ,
          ,          ,           Vn        \         P&                  ! 4       Vn        VP	                  V4       VP&                  pRVn        . Vn        ^ Vn        VR8X  d
   Wn        EK  \         P,                  ! 4       pVR^\        V4      ,
          ,          ,           Vn        V	Vn        VP,                  P	                  V4       \        VP,                  4      Vn        EK=  	  RRR4       V F4  p\3        VP&                  P,                  R R	7      VP&                  n        K6  	  \3        VR
 R	7      Vn        \        VP(                  4      Vn        V# u upi   + '       g   i     L~; i)zscript table z#Adding script %s language-system %sNReqFeatureIndexi  r   Zdefaultc                     V P                   # r"   )
LangSysTagrecr    r   r2   !parseScriptList.<locals>.<lambda>   s    r   r0   c                 rG   r"   )	ScriptTagrI   r    r   r2   rK      s    r   )ot
ScriptListbetweenlenr@   r=   r>   ZLangSysZLookupOrderr6   r.   setattrrF   stripSplitCommaZFeatureIndex	enumerater   FeatureCountrM   ZScriptZScriptRecordZDefaultLangSysZLangSysRecordZLangSysCountrH   sortedZScriptCount)lines
featureMapr;   recordslineZ	scriptTagZ
langSysTagZdefaultFeatureZfeaturesZlangSyssymstheListir(   r   ZscriptZ	scriptRecZ
langSysRecs   &&                r   parseScriptListr^   u   sN   ==?DG	~	&	&Dd)a-B>B;I>II;YSjjlG"&G"% +1'"8,D./S3t9_<G 7#D/Z'7N *#&w';';#<G !(EAKK9,DaaFE))OO-	&/#S^9K2L&L	##%99;	 y)"))(,%')$&'#Y&(/%--/
(2SAJ<O5P(P
%%,
"$$++J7&)&*>*>&?#[  
'` &,MM''-G'
#  w,EFD4,,-DK9 F5 
'	&s%   C6K)'K$
>K$
D/K)$K))K9	c                 s   \         P                  ! 4       p. Vn        V P                  R 4      ;_uu_ 4        V  EFL  pVw  rVpVe,   WR9  g   Q RV,          4       h\	        VP                  4      W%&    \        V4      \	        VP                  4      8X  g$   Q RV\	        VP                  4      3,          4       h \         P                  ! 4       pWhn        \         P                  ! 4       Vn        VP                  P                  V4       VP                  p	RV	n
        \        V4      p
R.\	        V
4      ,          ;V	n        p\        V
4       F  w  r\        \        W\         W4       K  	  \	        V	P                  4      V	n        EKO  	  RRR4       \	        VP                  4      Vn        V#   \         d     ELi ; i  + '       g   i     L>; i)zfeature tableNzDuplicate feature name: %s%d %d)rN   FeatureListZFeatureRecordrP   rQ   r   r-   Z
FeatureTagZFeaturer@   ZFeatureParamsrS   LookupListIndexrT   r6   r,   r   LookupCountrU   )rW   	lookupMaprX   r;   rZ   nameZ
featureTagZlookupsZ
featureRecZfeaturer[   r\   r]   r(   s   &&&           r   parseFeatureListre      s   >>DD		'	'D(,%Dg%-R/Kd/RR-#&t'9'9#:
 4yC(:(:$;; W**+H > ; ))+J$.!!#J%%j1 ((G$(G!"7+D15T0BBG#g#D/Y	L *"%g&=&=">G/  
(4 D../DK   
(	's1   ;G 2AF.8CG .F=	9G <F=	=G  G	c                 s   ^ pRp. R	OpV P                  4       ^ ,          P                  4       V9   Ed   \        V 4      pR^R^R^R^/P                  V^ ,          P                  4       4      pV'       dQ   V^,          P                  4       R
9   g   Q V^,          4       hV^,          P                  4       R8X  d	   W,          pK  V^ ,          P                  4       R8X  d#   V\	        V^,          4      ^,          ,          pK  V^ ,          P                  4       R8X  g   EK  V^,          p\	        V^,          4      pEK7  W3# )r    Nrighttoleftignorebaseglyphsignoreligaturesignoremarksmarkattachmenttypemarkfiltertypeyes)rf   rg   rh   ri   rj   rk   )rl   Zno)peekslowernextgetr   )rW   Zflags	filtersetZallFlagsrZ   Zflag   &     r   parseLookupFlagsrs      s   EIH ++-

 
 
"h
.E{6v6	

 #d1gmmo
 	 7==?m3<T!W<3Aw}}%'7==?22Sa\Q&&E7==?..TMEDGIr   c                 s    / pV  F7  p\        V4      ^8X  g   Q V4       h\        V4      pV^,          W4^ ,          &   K9  	  \        P                  ! V4      # )r   )rQ   r%   otlZbuildSingleSubstSubtablerW   font
_lookupMapr)   rZ      &&&  r   parseSingleSubstry      sS    G4yA~#t#~$7Q  ''00r   c                 ~    / pV  F   p\        V4      pVR ,          W4^ ,          &   K"  	  \        P                  ! V4      #    NN)r%   rt   ZbuildMultipleSubstSubtableru   rx   r   parseMultipler~      s>    G$8Q  ))'22r   c                 rz   r{   )r%   rt   ZbuildAlternateSubstSubtableru   rx   r   parseAlternater     s>    G$8Q  **733r   c                 s    / pV  FA  p\        V4      ^8  g   Q V4       h\        V4      pV^ ,          V\        VR,          4      &   KC  	  \        P                  ! V4      # )r   r|   )rQ   r%   tuplert   ZbuildLigatureSubstSubtableru   rx   r   parseLigaturer     sY    G4yA~#t#~$#'7d2h   ))'22r   c                 s   / pV  F  p\        V4      ^8X  g   Q V4       hV^ ,          P                  4       P                  RR4      pV\        9   g   Q h\	        V^,          4      p\        V^,          4      pWc9  d   \        4       W6&   \        W6,          V4      '       d	   Q We34       h\        W6,          WW4       K  	  \        P                  ! W1P                  4       4      # )   r   rE   )rQ   titlereplacer   r!   r   r   hasattrrR   rt   ZbuildSinglePosSubtablegetReverseGlyphMap)rW   rv   rw   valuesrZ   Zwr#   v   &&&     r   parseSinglePosr     s    F4yA~#t#~GMMO##C,))))d1gQL?#FI69a((01&0(	1   %%f.E.E.GHHr   c                 s0   \         P                  ! 4       p^ ;Vn        Vn        V P	                  4       ^ ,          P                  4       ^ ,          P                  4       pVR9   Ed   ^Vn        / pV  EFv  p\        V4      ^8X  g   Q V4       hV^ ,          P                  4       ^ ,          P                  4       pVR9   g   Q V4       hV^ ,          \        V4      R P                  4       P                  RR4      p\        V,          ^ ,          p	\        VR,          4      w  r\        V^,          4      pW9   g   / WZ&   WV
,          9   g   \        4       \        4       3WZ,          V&   WZ,          V,          pVR8X  d$   V;P                  V	,          un        V^ ,          pM"V;P                  V	,          un        V^,          p\        W4      '       d	   Q W34       h\!        WV4       EKy  	  \#        \%        VP'                  4       4      V4      Vn        . Vn        VP(                  P,                   F  p
WZ,          p\         P*                  ! 4       p. ;pVn        \1        VP'                  4       VP2                  R7       Fh  pW,          p\         P.                  ! 4       pVVn        V^ ,          Vn        VP                  '       d
   V^,          MRVn        VP;                  V4       Kj  	  \        VP.                  4      Vn        VP*                  P;                  V4       K  	  \        VP*                  4      Vn        V# VPA                  R4      '       Ed   ^Vn        RR.pV P	                  4       ^ ,          PA                  R4      '       d   V PC                  4       ^ ,          R\        R4      )  P                  4       pR	^ \         PD                  3R
^\         PF                  3/V,          w  ppVV,          e   Q h\I        WVR7      VV&   K  Vw  Vn"        Vn#        R V 4       w  Vn%        Vn&        \O        VPJ                  4       Uu. uF  p\         PP                  ! 4       NK  	  upVn(        VPP                   Fq  p\O        VPL                  4       Uu. uF  p\         PR                  ! 4       NK  	  upVn)        VPR                   F!  p\        4       Vn        \        4       Vn        K#  	  Ks  	  V  EFK  p\        V4      ^8X  g   Q V4       hV^ ,          P                  4       ^ ,          P                  4       pVR9   g   Q V4       hV^ ,          \        V4      R P                  4       P                  RR4      p\        V,          ^ ,          p	R VR,           4       w  pppVPP                  V,          PR                  V,          pVR8X  d'   V;P                  V	,          un        VP6                  pM%V;P                  V	,          un        VP8                  p\        W4      '       d	   Q W34       h\!        WV4       EKN  	  VPP                   Ft  pVPR                   Fa  p\        VP                  VP6                  4      Vn        VP                  '       d!   \        VP                  VP8                  4      MRVn        Kc  	  Kv  	  \#        \%        VPD                  PT                  P'                  4       4      V4      Vn        V# Q T4       hu upi u upi )r    leftNr   rE   :r}   r   NrL   classclass definition beginZfirstZsecondklassc              3   sv   "   T F/  p^\        VP                  P                  4       4      ,           x  K1  	  R# 5ir}   N)max	classDefsr   ).0cr$   r   	<genexpr>parsePair.<locals>.<genexpr>\  s-      .
3<aAAKK&&()))9s   79c              3   8   "   T F  p\        V4      x  K  	  R # 5ir"   r   r   Zxr$   r   r   r   k  s     $?YSVVY   :r}      Nr   Zright)+rN   ZPairPosZValueFormat1ZValueFormat2rm   splitrn   FormatrQ   r   r   r   r%   r   r   r   rR   makeCoveragesetkeysCoverageZPairSetglyphsZPairValueRecordrV   
getGlyphIDZSecondGlyphZValue1ZValue2r@   ZPairValueCountZPairSetCountendswithpeekZ	ClassDef1Z	ClassDef2parseClassDefZClass1CountZClass2CountrangeZClass1RecordZClass2Recordr   )rW   rv   rw   r;   typr   rZ   ZsideZwhatZmaskZglyph1Zglyph2valueZrec2ZvrZvalues1ZpairsetrY   Zvalues2pairr   r*   r   r]   Zrec1ZjZclass1Zclass2s   &&&                         r   	parsePairr   $  s   ::<D,--D)
++-

 
 
"1
%
+
+
-C
Dt9>'4'>7==?1%++-D,,2d2,73t9;'--/77R@D(.q1D'S	2NFQLE#!#F^+*5-)Gv&>&)Dv~!!T)!!W!!T)!!Wr((42*4(Be$) * %S%7>mm**FnGjjlG022Gg- T__E!/))+#) %aj,0,=,=,=gaj4t$ F &))@)@%AG"LL( +  -d Kc 
g		4L	kkmA''(@AA**,q/"BS)A%B$BCIIKC!R\\*1bll+ JC S>)))*5eDIcN)2&.
3<.
*$* 9>d>N>N8OP8O1R__.8OP%%D<A$BRBR<S T<Sq!2<S TD)))m)m * &
 Dt9>'4'>7==?1%++-D,,2d2,73t9;'--/77R@D(.q1D$?T#Y$?!FFE$$V,99&ADv~!!T)![[!!T)![[r((42*4(Be$   %%D)))$*;*;T[[I (((   1 14;;?  * & %S)A)A)F)F)H%I4P K 	#qC Q Ts   \\c                 s   V P                  4       ^ ,          P                  4       ^ ,          P                  4       pVR9   d0   V P                  R4      ;_uu_ 4        \	        W4      uuRRR4       # \	        W4      #   + '       g   i     L; i)r    Nr   )zfirstclass definition beginzsecondclass definition begin)rm   r   rn   untilr   )rW   rv   rw   r      &&& r   parseKernsetr     sr    
++-

 
 
"1
%
+
+
-C
[[K
 
 U)
 
 U!!	
 
s   A<<B	c                 s    \        V 4      ^8:  g   Q hV! 4       p^Vn        \        V ^ ,          4      w  Vn        Vn        \        V 4      ^8  d-   V ^,          R8w  d   ^Vn        \        V ^,          4      Vn        V# )r   rE   )rQ   r   intSplitCommaZXCoordinateZYCoordinater   ZAnchorPoint)datar   anchorr+   r   
makeAnchorr     sj    t9>>WFFM-:47-C*F*
4y1}aB a\Mr   c                 s   / pV  F  p\        V4      R9   g   Q V4       hR^ \        P                  3R^\        P                  3/V^ ,          ,          w  rV\	        V^,          4      pWs9  d   RR.W7&   W7,          V,          e	   Q Wu34       h\        VR,          V4      W7,          V&   K  	  \        P                  ! W1P                  4       4      # )r   ZentryexitNr   )r   r   )	rQ   rN   ZEntryAnchorZ
ExitAnchorr!   r   rt   ZbuildCursivePosSubtabler   )rW   rv   rw   rY   rZ   r*   r   glyphr   r   parseCursiver     s    G4yF"(D("a(Q&
 q'
 $q'""D\GN~c"*8UL8*(b59s  &&w0G0G0IJJr   c                 s    . pVP                    FJ  pW,          w  rVVP                  4       pWWn        \        WrP                  V4       VP                  V4       KL  	  V# r"   )r   ZMarkRecordClassClassrR   Z
MarkAnchorr@   )r   coverager   rY   r   r   r   recordr   r   makeMarkRecordsr     sR    G""$f-v ! Nr   c                 s|   . p/ pVP                    FQ  p\        V4      WV&   VP                  4       pR .V,          p\        WrP                  V4       VP                  V4       KS  	  V P                  4        FB  w  w  rip
WEV,          ,          p\        WrP                  4      pW,          e	   Q Wi34       hWV	&   KD  	  V# r"   )r   rQ   ZBaseRecordClassrR   Z
BaseAnchorr@   itemsgetattr)r   r   r   
classCountrY   r*   r   r   anchorsr   r   s   &&&&       r   makeBaseRecordsr     s    G
C\
""$&:%g.v ! #'**,U$&,,/~%5~5%	 #/
 Nr   c                 s   R .\        VP                  4      ,          p\        VP                  4       UUu/ uF  w  rVWebK	  	  pppV P                  4        F  w  w  rrpWGV,          ,          pVf{   \        P
                  ! 4       ;qWx,          &   Wn        \        V4       Uu. uF  p\        P                  ! 4       NK  	  upVn        VP                   F  pR .V,          Vn	        K  	  VP                  V8X  g   Q VVP                  V34       hVP                  V
^,
          ,          P                  pW,          e
   Q WV	34       hWV	&   K  	  V# u uppi u upi r"   )
rQ   r   rT   r   rN   LigatureAttachZComponentCountr   ZComponentRecordZLigatureAnchor)r   r   r   r   rY   r]   r#   r*   r   r   ZcompIdxZ	compCountr   r   ZcompRecr   s   &&&&            r   makeLigatureRecordsr     sF   fs8??++G%hoo6
76DA146C
76:jjl2*wFU$>+-+<+<+>>FSZ($-!DI)DT%UDTqb&8&8&:DT%UF"!11*.*)<& 2$$	1 	
!!4
 	
1 ((15DD~%>'>>%! 7C" N' 8 &Vs   E$Ec           	      s<   VP                  4       p^Vn        / p/ pRWBP                  3RWRP                  3RWRP                  3/p^ pV  F  pV^ ,          p	V	R9   g   Q h\	        V^,          4      p
Wi,          w  rV	R8X  d   ^M^ p\
        ;QJ d    . R V^^V,             4       F  NK  	  5M! R V^^V,             4       4      p\        V^V,           ,          4      p\        V^V,           R V4      pV	R8X  d   YV3ppMW3V,           TppVV9  g   Q V4       hVVV&   \        W4      pK  	  \        \        VP                  4       4      WP                  4      pVP                  4       p\        VVV4      p\        VVP                   V4       \        VVP"                  \%        V4      4       \        W2P&                  V4       \        W2P(                  V4       V^,           Vn        V'       g   ^ M&^\        R VP-                  4        4       4      ,           Vn        \        \        VP                  4        Uu. uF  pV^ ,          NK  	  up4      WP0                  4      pVP3                  4       pVP4                  R8X  d   \7        VVW#P.                  4      pM\9        VVW#P.                  4      p\        VVP:                  V4       \        VVP<                  \%        V4      4       \        W2P>                  V4       \        W2P@                  V4       V# u upi )	r}   markbaseligaturec              3   r   r"   r   r   r]   r$   r   r   'parseMarkToSomething.<locals>.<genexpr>  s     @'?!s1vv'?r   Nc              3   s8   "   T F  w  rV^,          x  K  	  R# 5ir   r   )r   kr      &  r   r   r     s     4WFVdaQqTTFVr   Ligature)r   r   r   )!Typer   ZMarkAnchorClassZBaseAnchorClassr!   r   r   r   r   r   r   r   ZMarkCoverageClassZMarkArrayClassr   rR   Z
MarkRecordZ	MarkCountrQ   ZMarkCoverageZ	MarkArrayZ
ClassCountr   r   ZBaseCoverageClassZBaseArrayClassBaser   r   Z
BaseRecordZ	BaseCountZBaseCoverageZ	BaseArray)rW   rv   r   r;   ZmarkDataZbaseDataZDataZmaxKlassrZ   r   r   r   ZanchorClassZ
extraItemsZextrasr   r   r0   r   ZmarkCoverageZ	markArrayZmarkRecordsr   ZbaseCoverageZ	baseArrayZbaseRecordss   &&&                       r   parseMarkToSomethingr     s   668DDKHH,,-,,-X001D
 H1g2222$q'" I+Q
@tAJ'?@@tAJ'?@@DZ()DZ!12K@&=C .61FC$##S	x' $  HMMO 4d<O<OPL  "I!(L!<KIq||[1Iq{{C$45D..,/D++y)lDO  (aQ4WhnnFV4W1W-WDO8==?+?aQqTT?+,d4G4GL   "Ivv)(L!__U%haQIq||[1Iq{{C$45D..,/D++y)K ,s   <Lc                   &   a  ] tR tRt o R tRtV tR# )
MarkHelperi  c                s   R Fx  pR Fo  pW,           pVR 8X  d   VR9   d   TpM\        W4      V,           pVR8X  d   Rp\        WV4       VR8w  g   KL  \        \        V4      p\        WR,           V4       Kq  	  Kz  	  R# )	MarkCountZLigatureRecordr   r   N)r   r   )r   ZArrayr   RecordAnchor)r   r   r   )r   rR   rN   )r;   ZWhichZWhatr0   r   r   rr   r   r<   ZMarkHelper.__init__  sz    %EJlF?t/L'LE#D047E,,,E5)7?#B.ED-7 K &r   r   Nr   r   r   r   r<   r   rB   rC   rD   r   r   r     s     8 8r   r   c                   6    ] tR tRtRtRt]P                  tRt	R# )MarkToBaseHelperi&  r   r   r   N)
r   r   r   r   r   r   rN   ZMarkBasePosr   r   r   r   r   r   r   &  s    DD>>Dr   r   c                   r   )MarkToMarkHelperi,  ZMark1ZMark2r   N)
r   r   r   r   r   r   rN   ZMarkMarkPosr   r   r   r   r   r   r   ,  s    DD>>Dr   r   c                   r   )MarkToLigatureHelperi2  r   r   r   N)
r   r   r   r   r   r   rN   Z
MarkLigPosr   r   r   r   r   r   r   2  s    DD==Dr   r   c                 *    \        W\        4       4      # r"   )r   r   rW   rv   rw      &&&r   parseMarkToBaser   8      -=-?@@r   c                 r   r"   )r   r   r   r   r   parseMarkToMarkr   <  r   r   c                 r   r"   )r   r   r   r   r   parseMarkToLigaturer   @  s    -A-CDDr   c                 s|    V '       d/   V P                  R 4       Uu. uF  qP                  4       NK  	  up# . # u upi Z,)r   strip)rZ   r   r$   r   rS   rS   D  s-    37tzz#/!GGI/?R?/s   9c                 st    V '       d+   V P                  R 4       Uu. uF  p\        V4      NK  	  up# . # u upi r   )r   r   )rZ   r]   r$   r   r   r   H  s-    04DJJsO,OqCFO,<"<,s   5c                   r   )ContextHelperiM  c                s   VP                  R 4      '       d   RpR pMRpRpVP                  R4      '       d   Rp^p^pMRp^ p^pWS,           pW0n        W@n        WPn        Wn        W`n        Wpn        VR,           V n        V^8X  d   R p	R p
R pR	 pR
pR
pR pR pR pR pMVV^8X  d    R p	R p
R pR pR pR pR pR pR pR pM0V^8X  d   R p	R p
R
pR
pR
pR
pR pR pR pR pMQ RT,          4       hV'       d"   Wn	        Wn
        Wn        VV n        VV n        MWn	        Wn
        Wn        Wn        VV n        V^8X  dC   VR ,           V n        VR!,           V n        VR",           V n        VR#,           V n        R$ V n        R
# V^8X  dv   VR%,           V n        VR&,           V n        VR',           V n        VR(,           V n        R) V n        V'       d   R*MR+V n        V'       d   ^M^ V n        V'       d   R,MR-V n        R
# R
# ).ZSubstZSubZPosChainrE   LookupRecordc                 rG   r"   r   rr    r   r2   (ContextHelper.__init__.<locals>.<lambda>i      r   c                 rG   r"   r   r   r    r   r2   r   j      ajjr   c                     R# )Nr"   r   r   r    r   r2   r   k  s    Gr   c                 r   )N)NNNr   r   r    r   r2   r   l  s    );r   Nc                     V P                   3# r"   )Inputr   r    r   r2   r   o  
    !''r   c                 H    V P                   V P                  V P                  3# r"   	Backtrackr   	LookAheadr   r    r   r2   r   p      q{{AGGQ[[&Ir   c                 8    Vw  V n         R  V 4       w  V n        R# )c              3   F   "   T F  p\        V4      ^,           x  K  	  R# 5ir   rQ   r   r$   r   r   >ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>t       "9q!3q6A::q   !N)r   
GlyphCountr   Zd   &&r   SetRuleData+ContextHelper.__init__.<locals>.SetRuleDatar      
"9q"9r   c                     Vw  V n         V n        V n        \        V^ ,          4      \        V^,          4      ^,           \        V^,          4      uV n        V n        V n        R# r    Nr   r   r   rQ   BacktrackGlyphCountInputGlyphCountLookAheadGlyphCountr   r   r   ChainSetRuleData0ContextHelper.__init__.<locals>.ChainSetRuleDatav  P    673agq{
 1YAaD	As1Q4y	)%)r   c                 rG   r"   r   r   r    r   r2   r     r   r   c                 rG   r"   r   r   r    r   r2   r     r   r   c                 r   r"   ClassDefr   r    r   r2   r     s
    QZZMr   c                 r   r"   BacktrackClassDefInputClassDefLookAheadClassDefr   r    r   r2   r     s     ####*r   c                 s    Vw  V n         R # r"   r  r   r   r   SetContextDataZ.ContextHelper.__init__.<locals>.SetContextData  s     !r   c                 s0    Vw  V n         V n        V n        R # r"   r
  r   r   r   SetChainContextDataZ3ContextHelper.__init__.<locals>.SetChainContextData  s    NOK$aoq7Jr   c                 r   r"   )r   r   r    r   r2   r     r   r   c                 r   r"   r   r   r    r   r2   r     r   r   c                 r   )c              3   r   r   r   r   r$   r   r   r     r   r   N)r   r   r   r   r   r   r     r   r   c                 r   r   r  r   r   r   r  r    r  r   c                 (    V P                   ^ ,          # r    r   r   r    r   r2   r     s    Ar   c                 r  r  )InputCoverager   r    r   r2   r     s    aooa&8r   c                 rG   r"   r   r   r    r   r2   r     r   r   c                 s^    V P                   V P                  ,           V P                  ,           # r"   )BacktrackCoverager  LookAheadCoverager   r    r   r2   r     s    ##aoo58K8KKr   c                 r   )c              3   r   r"   r   r   r$   r   r   r     s     "51a3q661r   N)r   r   r   r   r   r   r     s     !"51"5r   c                 sh    Vw  V n         V n        V n        R  V 4       w  V n        V n        V n        R# )c              3   r   r"   r   r   r$   r   r   ZCContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>  s     'QSVVQr   N)r  r  r  r  r  r  r   r   r   r  r    s7    NOK$aoq7J
 (Q'	)%)r   zunknown format: %sRule	RuleCountRuleSetRuleSetCountc                 s    W 9   d   V.# . # r"   r   r   r   r   r   r   r2   r     s    1#2L"2Lr   Z	ClassRuleZClassRuleCountZClassSetZClassSetCountc                 sl    V'       d   VP                  W4      # V^ 8X  d   \        V 4      # \        4       # r  )Zintersect_classr   r  r   r   r2   r     s6     !!&, 8%&!Vc&k8148r   r  r	  r   r   )r   
startswithTypr   r   ChainTypInputIdxDataLenr   r   ContextDatar  RuleDatar   r  r  r  r  	Intersectr	  ClassDefIndexr   )r;   	klassNamer   r  r   r   r  r  r  r   ZChainCoverager  ZChainContextDatar  r  r   ZChainRuleDatar   r  s   &&&                r   r<   ZContextHelper.__init__N  s@   g&&CDCD((EHGEHG;	
   >1Q;+H0M+K;!N"&+HIM:: q[+H0M1K "P ,HIM:: q[.H8MK#!N"&+HM6( 4*V331)M/"5)DM/D$M*"0$M*DQ; 6)DI%3DN#i/DL (> 9DLDNq[ ;.DI%(88DN#j0DL (? :DDN 05O*DM&+D$)wDJ r   )r   r  r	  r"  r  r   r  r   r  r!  r   r  r  r   r  r  r  r   r  r   Nr   rC   rD   r   r   r   M  s     J7 J7r   r   c           	      sH   \        \        V4      p. pV  F  pV! 4       p\        V4      p\        V4      ^8X  g   Q V4       h\	        V^ ,          4      pV^ 8  g   Q V4       hV^,
          Vn        \        \        W%^,          \        VR4       VP                  V4       K  	  V# )r   ra   )
r   rN   rS   rQ   r   ZSequenceIndexr6   r,   rR   r@   )r   r#  rc   r   ZlstZitemrJ   r*   r   r   parseLookupRecordsr$    s    B	"E
Cgt$4yA~#t#~$q'lQww!GY	7GSBST

3  Jr   c                 sH    V '       g   R # V! 4       p\        V 4      Vn        V# r"   )dictr   )r   rv   r   r;   r   r   makeClassDefr&    s    7D)_DNKr   c                 s    / pV P                  R 4      ;_uu_ 4        V  F6  p\        V^ ,          4      pWS9  g   Q V4       h\        V^,          4      W5&   K8  	  RRR4       \        W1V4      #   + '       g   i     L; i)zclass definitionN)rP   r!   r   r&  )rW   rv   r   r   rZ   r   s   &&&   r   r   r     sm    I	)	*	*Dd1g&E)050)"47|I  
+
 	// 
+	*s   =A--A=	c                 s    V '       g   R # \        V \        4      '       d   \        V 4      p V! 4       p\        \        V 4      VP                  R7      Vn        V# )NrL   )Z
isinstancer   rV   r   r   )r   rv   r   r   r   r   r   r     s@    &#wHS[doo>HOOr   c           	      s    . pV P                  R 4      ;_uu_ 4        V  F$  pVP                  \        V^ ,          4      4       K&  	  RRR4       \        W1V4      #   + '       g   i     L; i)zcoverage definitionN)rP   r@   r!   r   )rW   rv   r   r   rZ   rx   r   parseCoverager'    sS    F	,	-	-DMM)DG,-  
. e,, 
.	-s   +AA+	c           	      s  a / pV F  w  rVVP                  VSP                  ,          ^ ,          . 4      P                  \        ;QJ d     . V3R l\	        V4       4       F  NK  	  5M! V3R l\	        V4       4       4      V34       K  	  . pV EF  pW9  d   VP                  R4       K  . p	WH,           F  w  rV\        \        SP                  4      ! 4       p
SP                  W4       \        V
SP                  R,           \        V4      4       \        V
SP                  V4       V	P                  V
4       K  	  \        \        SP                  4      ! 4       p\        VSP                  V	4       \        VSP                  \        V	4      4       VP                  V4       EK  	  \        V SP                  V4       \        V SP                  \        V4      4       R# )r    c              3   sV   <"   T F  w  rY!SP                   8X  d   ^M^ R x  K   	  R# 5ir   r  )r   r]   r   r      &  r   r   Z!bucketizeRules.<locals>.<genexpr>  s%     O1qzz/Qq23s   &)Nr   )
setdefaultr  r@   r   rT   r   rN   r  r   rR   r   rQ   r   r  r  r  )r;   r   rulesZ
bucketKeysZbucketsseqrecsZrulesetsZ
firstGlyphZ	thisRulesZruleZrulesets   &f&&        r   bucketizeRulesr.    sd   G	3qzz?1-r299UO	#OUUO	#OOQUV	
 
 H 
$OOD!	 ,,IC2qvv&(DMM$$D!&&7*CI6D!..$/T" - "aii(*+c)n5  !" D!))X&D!..#h-0r   c           
      sN  aa \        \        V4      ! 4       pV P                  4       ^ ,          P                  4       ^ ,          P	                  4       pVR8X  Ed   ^Vn        \        P                  RW$P
                  4       \        W$P
                  4      o. pV  F  pV^ ,          P	                  4       R8X  g   Q V^ ,          4       h\        V4      ^SP                  ,           8  d   VP                  R4       K4  \        ;QJ d(    . R V^^SP                  ,             4       F  NK  	  5M!! R V^^SP                  ,             4       4      p\        V^SP                  ,           R SP                  V4      p	VP                  W34       K  	  \        V3R lV 4       4      p
\!        W4      Vn        \%        VSWdP"                  P&                  4       V# VP)                  R4      '       Ed   ^Vn        \        P                  RW$P
                  4       \        W$P
                  4      oR.SP                  ,          pV P                  4       ^ ,          P)                  R4      '       d   V P+                  4       ^ ,          R\        R4      )  P	                  4       p^R^ \        P,                  3/^R	^ \        P.                  3R^\        P0                  3R
^\        P2                  3//SP                  ,          V,          w  rW,          e   Q V4       h\5        WVR7      W&   K  SP7                  WK4       . pV  EF  pV^ ,          P	                  4       P9                  R4      '       g   Q V^ ,          4       h\        V4      ^SP                  ,           8  d   VP                  R4       K4  \        ;QJ d(    . R V^^SP                  ,             4       F  NK  	  5M!! R V^^SP                  ,             4       4      p\        V^SP                  ,           R SP                  V4      p	VP                  W34       EK  	  \        V3R lV 4       4      o\        V3R lVSP:                  ,          P<                  P?                  4        4       4      p
\!        W4      Vn        \%        VSV\A        \C        S4      ^,           4      4       V# VP)                  R4      '       Ed8   ^Vn        \        P                  RW$P
                  4       \        W$P
                  4      o\        ;QJ d'    . R \A        SP                  4       4       F  NK  	  5M ! R \A        SP                  4       4       4      pV P                  4       ^ ,          P)                  R4      '       d   V P+                  4       ^ ,          R\        R4      )  P	                  4       p^R^ \        P"                  3/^R	^ \        PD                  3R^\        PF                  3R
^\        PH                  3//SP                  ,          V,          w  rW,          P                  \K        WVR7      4       K  SPM                  WN4       \O        V 4      p \        V 4      ^8X  g   Q hV ^ ,          pV^ ,          P	                  4       R8X  g   Q V^ ,          4       h\        VR,          SP                  V4      p	\Q        VSPR                  R,           \        V	4      4       \Q        VSP                  V	4       V# Q T4       h)r    r   zParsing %s format %srE   c              3   sJ   "   T F  p\        \        V4      4      x  K  	  R # 5ir"   )r%   rS   r   r$   r   r   parseContext.<locals>.<genexpr>7  s     X@W1
?1#566@Ws   !#Nc              3   \   <"   T F!  w  rVSP                   ,          ^ ,          x  K#  	  R# 5ir   r(  r   r,  r-  r   r)  r   r   r/  ;  s#     De#ajj/!,,e   ),r   r   	backtrack	lookaheadr   c              3   r   r"   )r   r   r$   r   r   r/  W  s     J2IQa((2Ir   c              3   r0  r   r(  r1  r)  r   r   r/  Z  s#     Eu)#3qzz?1--ur2  c              3   s>   <"   T F  w  rVS9   g   K  Vx  K  	  R # 5ir"   r   )r   r#   r   firstClassesr)  r   r   r/  [  s       
A$!Q,EVAAAs   
r   c              3   s&   "   T F  p. x  K	  	  R # 5ir"   r   r   r$   r   r   r/  d  s     7&6"&6s   coverage definition beginZinputr|   r   )*r   rN   rm   r   rn   r   r=   r>   r   rQ   r  r@   r   r$  r   r   r   r   r.  r   r   r   r	  r  r  r  r   r  r  r  r   r   r   r   r  r  r  r'  r   ZlistrR   r   )rW   rv   r   rc   r;   r   r+  rZ   r,  r-  ZfirstGlyphsr   r*   r   	coveragesr   r5  s   &&&&           @@r   parseContextr8  +  s   2tD
++-

 
 
"1
%
+
+
-C
g~		($<$,D7==?g-6tAw6-d)a!))m+B%XQQYY@WX%%XQQYY@WXXC%d1qyy=?&;Q^^YWDLL#%  DeDD$[7tQ}}';';<~ K} 
g				($<$,FQYY&	kkmA''(@AA**,q/"BS)A%B$BCIIKCBKK( !R%9%9!:B,,-!R%9%9!:		 ii	 	JC >).3.)*5eDIN	)D7==?--g66?Q?6d)a!))m+B%J$q1qyy=2IJ%%J$q1qyy=2IJJC%d1qyy=?&;Q^^YWDLL#%  EuEE 
#AJJ/99??A
 
 %[7tQuS->-B'CD: K9 
j	!	!		($<$,E7eAII&67EE7eAII&677	kkmA''(CDD**,q/"ES)D%E$EFLLNCBKK( !R%9%9!:a!1!12!R%9%9!:		 ii	 	JC N!!-5"IJ	d&U5zQQxAw}}*,5d1g5,!$r(ANNIFaffw&D	2annd+ K 	#qr   c                     \        WR VR7      # )ZContextSubstrc   r8  rW   rv   rc   r   r   parseContextSubstr=    s    ^yIIr   c                 r9  )Z
ContextPosr:  r;  r<  r   r   parseContextPosr>    s    \YGGr   c                 r9  )ZChainContextSubstr:  r;  r<  r   r   parseChainedSubstr?    s    %8INNr   c                 r9  )ZChainContextPosr:  r;  r<  r   r   parseChainedPosr@    s    %6)LLr   c                 s   \         P                  ! 4       p^Vn        . . 3pV P                  4       ^ ,          P	                  R4      '       d   V P                  4       ^ ,          R\        R4      )  P                  4       pR^ \         P                  3R^\         P                  3/V,          w  rgWF,          P                  \        WVR7      4       K  V^ ,          Vn        \        VP                  4      Vn        V^,          Vn	        \        VP                  4      Vn        / pV  F7  p	\        V	4      ^8X  g   Q V	4       h\        V	4      p	V	^,          W^ ,          &   K9  	  \        \!        VP#                  4       4      V4      Vn        VP$                  P&                   U
u. uF  qV
,          NK  	  up
Vn        \        VP(                  4      Vn        V# u up
i )r}   r6  Nr3  r4  r   )rN   ZReverseChainSingleSubstr   rm   r   r   rQ   rn   r  r  r@   r'  r  r  r%   r   r   r   r   r   Z
Substituter   )rW   rv   rw   r;   r7  r   r*   r   r)   rZ   r   s   &&&        r   parseReverseChainedSubstrA    s   %%'DDKRI
++-

#
#$?
@
@jjl1oA%@!A ABHHJ!R112!R112
 
 	mEuEF&q\D"4#9#9:D&q\D"4#9#9:DG4yA~#t#~$7Q  !W\\^!4d;DM+/==+?+?@+?aqzz+?@DO$//*DOK As   !Gc                 s   V P                  R 4      pVw  rVp\        P                  RWv4       \        P                  ! 4       p\        V 4      w  Vn        p	V	e   Wn        RR^\        3R^\        3R^\        3R^\        3R^\        3R	^\        3R
^\        3/RR^\        3R^\         3R^\"        3R^\$        3R^\&        3R^\(        3R^\*        3R^\,        3R	^\.        3/	/V,          V,          w  Vn        p
V P3                  R4      ;_uu_ 4        . pV P5                  4       '       d   V P3                  R4      ;_uu_ 4        V P5                  4       '       d:   V
! WV4      pVP0                  VP0                  8X  g   Q hVP7                  V4       KO   RRR4       V P9                  4       ^ ,          R9   g   K  \;        V 4       K   RRR4       V P                  R4       XVn        \?        VP<                  4      Vn         VP@                  ^ 8X  d   R# V#   + '       g   i     L; i  + '       g   i     Lj; i)lookupzParsing lookup type %s %sNGSUBZsingleZmultipleZ	alternater   ZcontextZchainedZreversechainedGPOSr   ZkernsetZcursivezmark to basezmark to ligaturezmark to markz
lookup end)
% subtablezsubtable end)!expectr=   r>   rN   Lookuprs   Z
LookupFlagZMarkFilteringSetry   r~   r   r   r=  r?  rA  r   r   r   r   r   r   r   r>  r@  Z
LookupTyper   r   r@   rm   ro   ZSubTablerQ   ZSubTableCount)rW   tableTagrv   rc   rZ   _rd   r   rB  rq   ZparseLookupSubTableZ	subtablesZsubtables   &&&&         r   parseLookuprJ    s   <<!DLASII)35YY[F#3E#: Fy"+q*+M*!^,M*,-,-q":;
 	q.)Q	N<(<(Q0$7 8Q0?+?+

.* +.* +.*F*. 
\	"	"	jjll;<<jjll25	JH!,,0C0CCCC$$X. # =
 {{}Q#AAU  
# 
LLFOv/Fq  M =<	 
#	"s6   H--H-H	9H	!H-=H-H*%H--H=	c                 s  aa \         P                  ! V4      ! 4       p\        4       o\        4       oVR9   g   Q h\        P	                  RV4       \        \        V4      ! 4       pRVn        RRV3R l3RRVV3R l3R	R/pVP                  4        F  w  rg\        WFR
4       K  	  V P                  4       Ee   V P                  4       ^ ,          P                  4       pW9  d2   \        P	                  RV P                  4       4       \        V 4       Ko  WX,          w  rgVR	8X  Ed   VP                  f,   \        P                  ! 4       Vn        . VP                  n        V P                  4       w  rp	\        WVS4      pSe9   V
S9  g   Q RV
,          4       h\!        VP                  P                  4      SV
&   MP\#        V
4      \!        VP                  P                  4      8X  g$   Q RV
\!        VP                  4      3,          4       hVP                  P                  P%                  V4       EK  \        WF4      e   Q V4       h\        WFV! V 4      4       EK  VP                  '       d/   \!        VP                  P                  4      VP                  n        Se   SP)                  4        \*        P,                  P/                  \0        4      '       d   RV9  d   \3        R4      VR&   / VR,          n        VR,          P4                  P7                  \8        / 4      P7                  V/ 4      pSP;                  4        F  w  rRV
R.V\=        V4      &   K  	  SP)                  4        WCn        V# )rC  z
Parsing %s   zscript table beginrO   c                 s   < \        V S4      # r"   )r^   )rW   rX   s   &r   r2   parseGSUBGPOS.<locals>.<lambda>  s    /%<r   zfeature table beginr`   c                 s   < \        V SS4      # r"   )re   )rW   rX   rc   s   &r   r2   rL    s    *5)ZHr   rB  NSkipping %szDuplicate lookup name: %sr_   ZDebgrE   )rC  rD  )
LookupListN) r   getTableClassr7   r=   r>   r   rN   Versionr   rR   r   rn   ro   rN  rG  rJ  rQ   r   r@   rb   rA   osZenvironrp   r	   r   r   r*  r
   r   strtable)rW   rv   rH  	containerr;   fieldsattrparserr   rI  rd   rB  r>   rX   rc   s   &&&          @@r   parseGSUBGPOSrX    s   ##H-/I!I "J''''IIlH%2x "DDL<
 	H 
 	&
F D! (
**,
"jjl1o##%IImUZZ\2K{(?&"$--/)+&JAQ $	BF$9,P.ID.PP,"%doo&<&<"=	$4yC(>(>$?? $L B ? OO""))&14&.44.Du.&)$//*@*@&A#'')::>>.//T!'/V$&V!Vjj!6;Hb) 
 !* 1&($^c&k" !2 	((*Or   c                     \        WR 4      # )rC  rX  rW   rv   r   r   	parseGSUBr\  !      f--r   c                 rY  )rD  rZ  r[  r   r   	parseGPOSr^  %  r]  r   c           	      sZ   / pV P                  R 4      ;_uu_ 4        V  FF  p\        V^ ,          4      pWB9  g   Q V4       hVR,           Uu. uF  p\        V4      NK  	  upW$&   KH  	  RRR4       \        P                  ! W!P                  4       4      # u upi   + '       g   i     L9; i)zattachment listr|   N)rP   r!   r   rt   ZbuildAttachListr   )rW   rv   ZpointsrZ   r   r]      &&    r   parseAttachListr`  )  s    F	(	)	)Dd1g&E&--&-1"X6XSVX6FM  
*
 v'>'>'@AA 7	 
*	)s   0BB
 	BBB*	c           	      s   / pV P                  R 4      ;_uu_ 4        V  Fp  p\        V^ ,          4      pWB9  g   Q V4       h\        V^,          4      pVR,           Uu. uF  p\        V4      NK  	  ppV\        V4      8X  g   Q V4       hWrV&   Kr  	  RRR4       \        P
                  ! V/ VP                  4       4      # u upi   + '       g   i     L;; i)caretsr   N)rP   r!   r   rQ   rt   ZbuildLigCaretListr   )rW   rv   ra  rZ   r   Znumr]   Z
thisCarets   &&      r   parseCaretListrc  3  s    F	x	 	 Dd1g&E&--&d1g,C*.r(3(Q#a&(J3#j/)/4/)&5M  
!   T-D-D-FGG 4 
!	 s   ACC
2!CCC	c                 sB   \         P                  ! 4       p^Vn        ^\        V P	                  4       4      ,           Vn        R.VP
                  ,          Vn        \        V P                  4       4       F'  w  r4\        \        V4      V4      VP                  V&   K)  	  V# r   )rN   MarkGlyphSetsDefZMarkSetTableFormatr   r   ZMarkSetCountr   rV   r   r   r   )setsrv   r;   r   r   s   &&   r   makeMarkFilteringSetsrf  @  sy     DDC		,,DFT...DMtzz|$'A5a %Kr   c                 sP   / pV P                  R 4      ;_uu_ 4        V  F_  p\        V4      ^8X  g   Q V4       h\        V^ ,          4      p\        V^,          4      pWR9  d   . W%&   W%,          P	                  V4       Ka  	  RRR4       \        W!4      #   + '       g   i     L; i)zset definitionN)rP   rQ   r!   r   r@   rf  )rW   rv   re  rZ   r   Zstr_  r   parseMarkFilteringSetsrg  J  s    D	'	(	(Dt9>'4'>d1g&ET!WB~HOOE"  
) !,, 
)	(s   A&BB%	c                 s   \         P                  ! R 4      ! 4       p\        P                  R4       \        P
                  ! 4       pRRR 3RR\        3RR\        3R	R
R 3RR\        3/pVP                  4        F  w  rV\        W5R4       K  	  V P                  4       e   V P                  4       ^ ,          P                  4       pWt9  d$   \        P                  RV4       \        V 4       K`  WG,          w  rV\        W54      e   Q V4       h\        W5V! W4      4       K  VP                  f   RMRVn        W2n        V# )GDEFzParsing GDEFr   GlyphClassDefc                 8    \        W\        P                  R 7      # r   )r   rN   ri  r[  r   r   r2   parseGDEF.<locals>.<lambda>_  s    eAQAQ Rr   zattachment list beginZ
AttachListzcarets beginZLigCaretListz&mark attachment class definition beginMarkAttachClassDefc                 rj  rk  )r   rN   rm  r[  r   r   r2   rl  e  s    eAVAV Wr   zmarkfilter set definition beginrd  NrM  rK  i  )r   rO  r=   r>   rN   rh  r`  rc  rg  r   rR   r   rn   ro   r   rd  rP  rS  )rW   rv   rT  r;   rU  rV  rW  r   rb  r   	parseGDEFrn  X  s    ##F+-IIIn779D R#
 	 ,!@80 W3
 	*,>@V+WF D! (
**,
"jjl1o##%IImS)K{t"*0D0*F5/0!%!6!6!>:JDLOr   c                 sH   \         P                  ! R 4      ! 4       p\        P                  R4       . pV P	                  4       e   V P                  R\        V4      ,          4       R Uu. uF  p\        W4      NK  	  upw  rVrx\        V,          ! V4      p	WYn	        Win
        Wn        / V	n        \        V 4      p
V
^ ,          R8w  d5   V
^,          V	P                  \        V
^ ,          ^4      &   \        V 4      p
KB  VP                  V	4       K  ^ Vn        W2n        V# u upi )cmapzParsing cmapzcmap subtable %dzend subtable)
platformIDZ
encodingIDZformatlanguage)r   rO  r=   r>   r   rF  rQ   parseCmapIdr   rp  Z	platEncIDrq  ro  ro   r   r@   ZtableVersiontables)rW   rv   rT  rs  fieldZplatIdZencIdZfmtZlangrS  rZ   s   &&         r   	parseCmapru  y  s    ##F+-IIInF
**,
"'#f+56 L$
K %K$
 s S!#&!
E{1g'+/7EJJs47B'(;DeI!$
s   *Dc                 sZ    \        V 4      pW^ ,          8X  g   Q h\        V^,          4      # r  )ro   r   )rW   rt  rZ   r+   r   rr  rr    s)    ;DGtAw<r   c                 sB   \         P                  R 4       V P                  4       pRpV^ ,          P                  4       ^ ,          R8X  d    V^ ,          P                  4       ^,          pMPRP	                  V^ ,          P                  4       R,          4      R8X  d   V^ ,          P                  4       ^,          pVe2   \        V 4       VP                  ^4      pVf   TpMW$8X  g	   Q W$34       hVf   Q R4       hR\        R\        R	\        R
\        /V,          ! W4      # )zParsing tableNZFontDamer   :Nr   NzFont Chef Tablez7Don't know what table to parse and data doesn't specifyrC  rD  rh  ro  )r=   r>   rm   r   Zjoinro   Zljustr\  r^  rn  ru  )rW   rv   rH  rZ   tagrx   r   
parseTablerw    s   IIo;;=D
CAw}}qZ'1gmmoa 	$q'--/"%	&*;	;1gmmoa 
UiilH?3XO3? 	A@A 						
 
  r   c                   s   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 t]R 4       t]R 4       tR tR tRtV tR# )	Tokenizeri  c                s    \        V4      p VP                  V n        \        T4      T n        RT n        ^ T n        . T n        R T n        R #    R T n         L9; i)NrE   )Ziterrd   filenamerW   rZ   linenostoppersbuffer)r;   frW   r+   r   r<   ZTokenizer.__init__  sR    Q	!FFDM %[
		! DMs   A 	Ac                s    V # r"   r   r:   r    r   __iter__ZTokenizer.__iter__  s    r   c                s   V ;P                   ^,          un         \        V P                  4      ;qn        VP	                  R4       Uu. uF  q"P                  4       NK  	  pp\        V4      ^8X  d   V^ ,          '       g   V^  V'       d^   VR,          '       gO   \        P                  RV P                   V P                  3,          4       V'       d   VR,          '       g   VR K  V# u upi )r}   Z	z!trailing tab found on line %d: %s)	rz  ro   rW   rZ   r   r   rQ   r=   Zwarning)r;   rZ   r   r   r   
_next_lineZTokenizer._next_line  s    q

++y#'::d#34#3a	#34t9>$q''QRKK;t{{DII>VVWtBxxH 5s   C+c                s     V P                  4       pV'       g   K  V^ ,          '       g   K,  V^ ,          ^ ,          R8w  g   V^ ,          R8X  g   KQ  V# )TZ%rE  )r  r;   rZ   r$   r   _next_nonemptyZTokenizer._next_nonempty  s=    ??$DtQT!WQZ3%6$q'\:Qr   c                sp    V P                   '       d   V P                   pR V n         V# V P                  4       # r"   )r|  r  r;   Zretr$   r   _next_bufferedZTokenizer._next_buffered  s/    ;;;++CDKJ&&((r   c                s    V P                  4       pV^ ,          P                  4       V P                  9   d   Wn        \        hV# r  )r  rn   r{  r|  StopIterationr  r$   r   __next__ZTokenizer.__next__  s6    ""$7==?dmm+Kr   c                s"    V P                  4       # r"   )r  r:   r    r   ro   ZTokenizer.next  s    }}r   c                s    V P                   '       g    V P                  4       V n         V P                   ^ ,          P                  4       V P                  9   d   R # V P                   #   \         d     R # i ; ir"   )r|  r  r  rn   r{  r:   r    r   r   ZTokenizer.peek  s`    {{{"113 ;;q>!T]]2{{	 ! s   A' 'A65A6c                s2    V P                  4       pVe   V# R# )N)rE   )r   r  r$   r   rm   ZTokenizer.peeks  s    iikos050r   c              #  s   "   VR ,           pVR,           pV P                  V4       V P                  P                  V4       Rx  V P                  R V P                  VR,           4       R# 5i)z beginz endNr  )expectendswithr{  r@   rF  )r;   rv  ZstartZend   &&  r   rP   ZTokenizer.between  sV     hFlE"S!MM"C&L!s   A*A,c              #  s   "   \        V4      \        Jd   V3pV P                  P                  V4       R x  V P                  \	        V4      ) R 1 R # 5ir"   )r?   r   r{  ZextendrQ   )r;   Ztagsr   r   r   ZTokenizer.until  sA     :U"7DT"MM3t9*,'s   AAc                sv    \        V 4      pV^ ,          P                  4       pW18X  g   Q RV: RV: R24       hV# )r    z
Expected '', got '')ro   rn   r;   r   rZ   rv  r  r   rF  ZTokenizer.expect
  s3    Dz1gmmox=a==xr   c                s    \        V 4      pV^ ,          P                  4       pVP                  V4      '       g   Q RV: RV: R24       hV# )r    zExpected '*r  r  )ro   rn   r   r  r  r   r  ZTokenizer.expectendswith  s;    Dz1gmmo||AEa EEr   )r|  ry  rZ   rz  rW   r{  N)r   r   r   r   r<   r~  r  r  r  r  ro   r   rm   r   rP   r   rF  r  r   rB   rC   rD   r   rx  rx    si     
)1 " " ( ( r   rx  c                s2    \        V 4      p\        W1VR7      # )a  Convert a Monotype font layout file to an OpenType layout object

A font object must be passed, but this may be a "dummy" font; it is only
used for sorting glyph sets when making coverage tables and to hold the
OpenType layout table while it is being built.

Args:
        f: A file object.
        font (TTFont): A font object.
        tableTag (string): If provided, asserts that the file contains data for the
                given OpenType table.

Returns:
        An object representing the table. (e.g. ``table_G_S_U_B_``)
rH  )rx  rw  )r}  rv   rH  rW   r   r   buildr    s      aLEeH55r   c           	     s"   ^ RI p^ RIHp ^ RIHp V f   VP
                  R,          p V! 4        ^ RIpVP                  R\        P                  R7      pVP                  RRR	R
RR7       VP                  RRRRRR7       VP                  RR	\        RRR7       VP                  V 4      p Vf;   V P                  '       d"   \        P                  ! V P                  4      pMV! 4       pV P                    EF  p\"        P%                  RV4       \'        VRRR7      ;_uu_ 4       p\)        WqV P*                  R7      pRRR4       XP-                  V4      p	VP/                  4       p
V
P1                  W4       ^ RIHp VP*                  pVP7                  VP8                  4      pVP;                  V4       VP=                  4        V
P?                  W4       VPA                  V4       VP=                  4        EK  	  R#   + '       g   i     L; i)zConvert a FontDame OTL file to TTX XML

Writes XML output to stdout.

Args:
        args: Command line arguments (``--font``, ``--table``, input files).
N)configLogger)MockFontr|   zfonttools mtiLib)Zdescriptionz--fontz-fZFILErv   zDInput TTF files (used for glyph classes and sorting coverage tables))metavarZdesthelpz--tablez-tZTABLErH  z7Table to fill (sniffed from input file if not provided)inputsZ+zInput FontDame .txt files)r  r?   Znargsr  zProcessing %sZrtz	utf-8-sig)Zencodingr  )	xmlWriter)!sys	fontToolsr  ZfontTools.misc.testToolsr  ZargvargparseZArgumentParsermainZ__doc__Zadd_argumentrR  Z
parse_argsrv   r   r   r  r=   r>   Zopenr  rH  ZcompileZ	__class__Z	decompileZfontTools.miscr  Z	XMLWriterZstdoutZbegintagZnewlineZtoXMLZendtag)Zargsrv   r  r  r  r  rW  r}  rS  ZblobZ
decompiledr  rv  Zwriters   &&            r   r  r  +  s    &1|xx| N $$LL % F
 S   F   &s#<W   T"D|999<<		*D:D[[		/1%!TK00A!DMM:E 1}}T"__&
T( 	-nn$$SZZ0&c% 00s   %G>>HZ__main__r"   )NN)br  r   ZfontTools.ttLib.tables._c_m_a_pr   ZfontTools.ttLib.tablesr   rN   ZfontTools.ttLib.tables.otBaser   r   ZfontTools.otlLibr   rt   Z
contextlibr   ZfontTools.ttLibr   Z fontTools.feaLib.lookupDebugInfor	   r
   Zoperatorr   rQ  ZloggingZ	Exceptionr   r   r   r   Z	getLoggerr=   r!   r%   r,   r.   r6   r%  r7   r^   re   rs   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   Zobjectr   r   r   r   r   r   r   rS   r   r   r$  r   r&  r	  r   r   r'  r.  r8  r=  r>  r?  r@  rA  rJ  rX  r\  r^  r`  rc  rf  rg  rn  ru  rr  rw  rx  r  r  r   r  r   r   r   r   <module>r     s2    8 1 L + % $ X  	 	) 		[ 		1 		0 	 *+%

$ $d $,9xBB1343I]@" 99 K "05p8 8"z z : AAE@=
K7F K7\ )+  &([[ 0 &([[  &([[ -1:QhJHOM42j@F..B
H-B28` `F6(GT zHHTV r   