+
    K<i
                        ^ 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                       ] tR t^tRtR# )MtiLibError N__name__
__module____qualname____firstlineno____static_attributes__r       ;/usr/lib/python3/dist-packages/fontTools/mtiLib/__init__.pyr   r          r   r   c                       ] tR t^tRtR# )ReferenceNotFoundErrorr   Nr   r   r   r   r   r      r   r   r   c                       ] tR t^tRtR# )FeatureNotFoundErrorr   Nr   r   r   r   r   r      r   r   r   c                       ] tR t^ tRtR# )LookupNotFoundErrorr   Nr   r   r   r   r   r       r   r   r   zfontTools.mtiLibc                 6   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   TTFont_makeGlyphNameintfind)ss   &r   	makeGlyphr)   '   s}    u||**3qub>::	
2$S2Z''66#;??;a???###1Hr   c                 B    V  Uu. uF  p\        V4      NK  	  up# u upi N)r)   )lgs   & r   
makeGlyphsr.   1   s    "#$!QIaL!$$$s   c                 n    Ve    W,          pV# \        V 4      pV#   \          d    \        T 4      hi ; ir+   )KeyErrorr   r&   symmappingidxs   && r   	mapLookupr5   5   sI     	+,C
 J #hJ	  	+%c**	+s    4c                      \        V 4      pV#   \         d(     Y,          p T#   \         d    \        T 4      hi ; ii ; ir+   )r&   
ValueErrorr0   r   r1   s   && r   
mapFeaturer8   B   sW    ,#h J  ,	,,C J  	,&s++	,,s    A&=Ac                    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V 4      # r+   r   )ref
collectionkeysetters   &r   <lambda>setReference.<locals>.<lambda>V   s    z3 <r   )r   addDeferredMappingAttributeError)mapperr3   r2   r>   r<   r=   mappedes   &&&fff  r   setReferencerF   O   su    % :sF# " 		"**<c 	 # 	  			s2    AA	A	AAAAAc                   2   a  ] tR t^_t o R tR tR tRtV tR# )DeferredMappingc                    . V n         R # r+   _deferredMappingsselfs   &r   __init__DeferredMapping.__init__`   s
    !#r   c                    \         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   rK   append)rM   r>   r2   rE   s   &&&&r   rA   "DeferredMapping.addDeferredMappingc   s6    		>T!WEUEUV%%vA&67r   c                   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)rK   rQ   rR   rS   r   r0   )rM   r>   r2   rE   rD   s   &    r   applyDeferredMappings%DeferredMapping.applyDeferredMappingsg   sv    "44NFII>T!WEUEU 6NIIk6* 5 "$	  s   A11A?rJ   N)	r   r   r   r   rN   rA   rW   r   __classdictcell____classdict__s   @r   rH   rH   _   s     $8$ $r   rH   c                    \         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#   defaultc                     V P                   # r+   )
LangSysTagrecs   &r   r?   !parseScriptList.<locals>.<lambda>   s    r   r=   c                     V P                   # r+   )	ScriptTagrb   s   &r   r?   rd      s    r   )ot
ScriptListbetweenlenrT   rQ   rR   LangSysLookupOrderrF   r8   setattrr^   stripSplitCommaFeatureIndex	enumerater   FeatureCountrg   ScriptScriptRecordDefaultLangSysLangSysRecordLangSysCountra   sortedScriptCount)lines
featureMaprM   recordsline	scriptTag
langSysTagdefaultFeaturefeatureslangSyssymstheListir2   r(   script	scriptRec
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                    \         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)rh   FeatureListFeatureRecordrj   rk   r&   r7   
FeatureTagFeaturerT   FeatureParamsro   LookupListIndexrq   rF   r5   r   LookupCountrr   )rz   	lookupMapr{   rM   r}   name
featureTaglookups
featureRecfeaturer   r   r   r2   s   &&&           r   parseFeatureListr      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                    ^ 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)r   r   r   r   r   r   )r   no)peekslowernextgetr&   )rz   flags	filtersetallFlagsr}   flags   &     r   parseLookupFlagsr      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                     / pV  F7  p\        V4      ^8X  g   Q V4       h\        V4      pV^,          W4^ ,          &   K9  	  \        P                  ! V4      # )r!   )rk   r.   otlbuildSingleSubstSubtablerz   font
_lookupMapr3   r}   s   &&&  r   parseSingleSubstr      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.   r   buildMultipleSubstSubtabler   s   &&&  r   parseMultipler      s>    G$8Q  ))'22r   c                 ~    / pV  F   p\        V4      pVR ,          W4^ ,          &   K"  	  \        P                  ! V4      # r   )r.   r   buildAlternateSubstSubtabler   s   &&&  r   parseAlternater     s>    G$8Q  **733r   c                     / 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   )rk   r.   tupler   buildLigatureSubstSubtabler   s   &&&  r   parseLigaturer     sY    G4yA~#t#~$#'7d2h   ))'22r   c                    / 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#   r]   )rk   titlereplacer   r)   r&   r   hasattrrn   r   buildSinglePosSubtablegetReverseGlyphMap)rz   r   r   valuesr}   wr-   vs   &&&     r   parseSinglePosr     s    F4yA~#t#~GMMO##C,))))d1gQL?#FI69a((01&0(	1   %%f.E.E.GHHr   c                 0   \         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#   r]   :r   r   Nre   classclass definition beginfirstsecondklassc              3   v   "   T F/  p^\        VP                  P                  4       4      ,           x  K1  	  R# 5ir   N)max	classDefsr   ).0cs   & 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   xs   & r   r   r   k  s     $?YSVVY   :r      Nr   right)+rh   PairPosValueFormat1ValueFormat2r   splitr   Formatrk   r   r   r   r.   r&   r   r   rn   makeCoveragesetkeysCoveragePairSetglyphsPairValueRecordrx   
getGlyphIDSecondGlyphValue1Value2rT   PairValueCountPairSetCountendswithpeek	ClassDef1	ClassDef2parseClassDefClass1CountClass2CountrangeClass1RecordClass2Recordr   )rz   r   r   rM   typr   r}   sidewhatmaskglyph1glyph2valuerec2vrvalues1pairsetr|   values2pairr   r4   r   r   rec1jclass1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                    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)r   r   r   untilr  )rz   r   r   r   s   &&& r   parseKernsetr    sr    
++-

 
 
"1
%
+
+
-C
[[K
 
 U)
 
 U!!	
 
s   A<<B	c                     \        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!   r]   )rk   r   intSplitCommaXCoordinateYCoordinater&   AnchorPoint)datar   anchors   && r   
makeAnchorr    sj    t9>>WFFM-:47-C*F*
4y1}aB a\Mr   c                    / 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   entryexitNr"   )r   r   )	rk   rh   EntryAnchor
ExitAnchorr)   r  r   buildCursivePosSubtabler   )rz   r   r   r|   r}   r4   r   glyphs   &&&     r   parseCursiver#    s    G4yF"(D("a(Q&
 q'
 $q'""D\GN~c"*8UL8*(b59s  &&w0G0G0IJJr   c                     . pVP                    FJ  pW,          w  rVVP                  4       pWWn        \        WrP                  V4       VP                  V4       KL  	  V# r+   )r   MarkRecordClassClassrn   
MarkAnchorrT   )r  coverager   r|   r"  r   r  records   &&&     r   makeMarkRecordsr*    sR    G""$f-v ! Nr   c                 |   . 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   rk   BaseRecordClassrn   
BaseAnchorrT   itemsgetattr)r  r(  r   
classCountr|   r4   r"  r)  anchorsr   r  s   &&&&       r   makeBaseRecordsr2    s    G
C\
""$&:%g.v ! #'**,U$&,,/~%5~5%	 #/
 Nr   c                    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+   )
rk   r   rq   r.  rh   LigatureAttachComponentCountr   ComponentRecordLigatureAnchor)r  r(  r   r0  r|   r   r-   r4   r"  r   compIdx	compCountr  r)  compRecr1  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           	      <   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   8   "   T F  p\        V4      x  K  	  R # 5ir+   r   r   r   s   & r   r   'parseMarkToSomething.<locals>.<genexpr>  s     @'?!s1vv'?r   Nc              3   8   "   T F  w  rV^,          x  K  	  R# 5ir   r   )r   kr   s   &  r   r   rB    s     4WFVdaQqTTFVr   Ligature)r=  r>  r?  )!Typer   MarkAnchorClassBaseAnchorClassr)   r   r&   r  r   r   r   r   MarkCoverageClassMarkArrayClassr*  rn   
MarkRecord	MarkCountrk   MarkCoverage	MarkArray
ClassCountr.  r0  BaseCoverageClassBaseArrayClassBaser;  r2  
BaseRecord	BaseCountBaseCoverage	BaseArray)rz   r   r   rM   markDatabaseDataDatamaxKlassr}   r   r"  r  anchorClass
extraItemsextrasr   r  r=   r  markCoverage	markArraymarkRecordsrD  baseCoverage	baseArraybaseRecordss   &&&                       r   parseMarkToSomethingrd    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                   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CountLigatureRecordr4  r&  N)rh  rR  )r   Arrayri  RecordAnchor)ri  rl  rm  )r/  rn   rh   )rM   WhichWhatr=   r  r   s   &     r   rN   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   rN   r   rY   rZ   s   @r   rf  rf    s     8 8r   rf  c                   6    ] tR tRtRtRt]P                  tRt	R# )MarkToBaseHelperi&  rh  rR  r   N)
r   r   r   r   rh  rR  rh   MarkBasePosrF  r   r   r   r   rs  rs  &  s    DD>>Dr   rs  c                   6    ] tR tRtRtRt]P                  tRt	R# )MarkToMarkHelperi,  Mark1Mark2r   N)
r   r   r   r   rh  rR  rh   MarkMarkPosrF  r   r   r   r   rv  rv  ,  s    DD>>Dr   rv  c                   6    ] tR tRtRtRt]P                  tRt	R# )MarkToLigatureHelperi2  rh  rE  r   N)
r   r   r   r   rh  rR  rh   
MarkLigPosrF  r   r   r   r   r{  r{  2  s    DD==Dr   r{  c                 *    \        W\        4       4      # r+   )rd  rs  rz   r   r   s   &&&r   parseMarkToBaser  8      -=-?@@r   c                 *    \        W\        4       4      # r+   )rd  rv  r~  s   &&&r   parseMarkToMarkr  <  r  r   c                 *    \        W\        4       4      # r+   )rd  r{  r~  s   &&&r   parseMarkToLigaturer  @  s    -A-CDDr   c                 |    V '       d/   V P                  R 4       Uu. uF  qP                  4       NK  	  up# . # u upi ,)r   strip)r}   r(   s   & r   ro   ro   D  s-    37tzz#/!GGI/?R?/s   9c                 t    V '       d+   V P                  R 4       Uu. uF  p\        V4      NK  	  up# . # u upi r  )r   r&   )r}   r   s   & r   r  r  H  s-    04DJJsO,OqCFO,<"<,s   5c                   &   a  ] tR tRt o R tRtV tR# )ContextHelperiM  c                   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
# ).SubstSubPosChainr]   LookupRecordc                     V P                   # r+   r   rs   &r   r?   (ContextHelper.__init__.<locals>.<lambda>i      r   c                     V P                   # r+   r  r  s   &r   r?   r  j      ajjr   c                     R# )Nr+   r   r  s   &r   r?   r  k  s    Gr   c                     R# )N)NNNr   r  s   &r   r?   r  l  s    );r   Nc                     V P                   3# r+   )Inputr  s   &r   r?   r  o  
    !''r   c                 H    V P                   V P                  V P                  3# r+   	Backtrackr  	LookAheadr  s   &r   r?   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   rk   r   s   & r   r   >ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>t       "9q!3q6A::q   !N)r  
GlyphCountr  ds   &&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  rk   BacktrackGlyphCountInputGlyphCountLookAheadGlyphCountr  s   &&r   ChainSetRuleData0ContextHelper.__init__.<locals>.ChainSetRuleDatav  P    673agq{
 1YAaD	As1Q4y	)%)r   c                     V P                   # r+   r  r  s   &r   r?   r    r  r   c                     V P                   # r+   r  r  s   &r   r?   r    r  r   c                     V P                   3# r+   ClassDefr  s   &r   r?   r    s
    QZZMr   c                 H    V P                   V P                  V P                  3# r+   BacktrackClassDefInputClassDefLookAheadClassDefr  s   &r   r?   r    s     ####*r   c                     Vw  V n         R # r+   r  r  s   &&r   SetContextData.ContextHelper.__init__.<locals>.SetContextData  s     !r   c                 0    Vw  V n         V n        V n        R # r+   r  r  s   &&r   SetChainContextData3ContextHelper.__init__.<locals>.SetChainContextData  s    NOK$aoq7Jr   c                     V P                   3# r+   )r&  r  s   &r   r?   r    r  r   c                 H    V P                   V P                  V P                  3# r+   r  r  s   &r   r?   r    r  r   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   r  r   s   & r   r   r    r  r  N)r&  r  r  s   &&r   r  r    r  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  r  r  s   &&r   r  r    r  r   c                 (    V P                   ^ ,          # r   r  r  s   &r   r?   r    s    Ar   c                 (    V P                   ^ ,          # r  )InputCoverager  s   &r   r?   r    s    aooa&8r   c                     V P                   # r+   r  r  s   &r   r?   r    r  r   c                 ^    V P                   V P                  ,           V P                  ,           # r+   )BacktrackCoverager  LookAheadCoverager  s   &r   r?   r    s    ##aoo58K8KKr   c                 8    Vw  V n         R  V 4       w  V n        R# )c              3   8   "   T F  p\        V4      x  K  	  R # 5ir+   r  r   s   & r   r   r    s     "51a3q661r   N)r   r  r  s   &&r   r  r    s     !"51"5r   c                 h    Vw  V n         V n        V n        R  V 4       w  V n        V n        V n        R# )c              3   8   "   T F  p\        V4      x  K  	  R # 5ir+   r  r   s   & r   r   CContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>  s     'QSVVQr   N)r  r  r  r  r  r  r  s   &&r   r  r    s7    NOK$aoq7J
 (Q'	)%)r   zunknown format: %sRule	RuleCountRuleSetRuleSetCountc                     W 9   d   V.# . # r+   r   r   r   r  s   &&&r   r?   r    s    1#2L"2Lr   	ClassRuleClassRuleCountClassSetClassSetCountc                 l    V'       d   VP                  W4      # V^ 8X  d   \        V 4      # \        4       # r  )intersect_classr   r  s   &&&r   r?   r    s6     !!&, 8%&!Vc&k8148r   r  r  r  r&  )r   
startswithTyprF  r  ChainTypInputIdxDataLenr  r   ContextDatar  RuleDatar  r  r  r  r  	Intersectr  ClassDefIndexr  )rM   	klassNamer   r  rF  r  r  r  r  r   ChainCoverager  ChainContextDatar  r  r  ChainRuleDatar  r  s   &&&                r   rN   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  rF  Nrq  rZ   s   @r   r  r  M  s     J7 J7r   r  c           	      H   \        \        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!   r   )
r/  rh   ro   rk   r&   SequenceIndexrF   r5   rn   rT   )r.  r  r   r   lstitemrc   r4   s   &&&     r   parseLookupRecordsr    s    B	"E
Cgt$4yA~#t#~$q'lQww!GY	7GSBST

3  Jr   c                 H    V '       g   R # V! 4       p\        V 4      Vn        V# r+   )dictr   )r   r   r   rM   s   &&& r   makeClassDefr    s    7D)_DNKr   c                     / 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)rj   r)   r&   r  )rz   r   r   r   r}   r"  s   &&&   r   r   r     sm    I	)	*	*Dd1g&E)050)"47|I  
+
 	// 
+	*s   =A--A=	c                     V '       g   R # \        V \        4      '       d   \        V 4      p V! 4       p\        \        V 4      VP                  R7      Vn        V# )Nre   )
isinstancer   rx   r   r   )r   r   r   r(  s   &&& r   r   r     s@    &#wHS[doo>HOOr   c           	          . 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)rj   rT   r)   r   )rz   r   r   r   r}   s   &&&  r   parseCoverager    sS    F	,	-	-DMM)DG,-  
. e,, 
.	-s   +AA+	c           	        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   V   <"   T F  w  rY!SP                   8X  d   ^M^ R x  K   	  R# 5ir   r  )r   r   r(   r   s   &  r   r   !bucketizeRules.<locals>.<genexpr>  s%     O1qzz/Qq23s   &)Nri  )
setdefaultr  rT   r   rq   r/  rh   r  r  rn   rF  rk   r  r  r  r  )rM   r   rules
bucketKeysbucketsseqrecsrulesets
firstGlyph	thisRulesrule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           
      N  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 %sr]   c              3   J   "   T F  p\        \        V4      4      x  K  	  R # 5ir+   )r.   ro   rA  s   & 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   s   &  r   r   r  ;  s#     De#ajj/!,,e   ),r   r   	backtrack	lookaheadr   c              3   8   "   T F  p\        V4      x  K  	  R # 5ir+   )r  rA  s   & r   r   r  W  s     J2IQa((2Ir   c              3   \   <"   T F!  w  rVSP                   ,          ^ ,          x  K#  	  R# 5ir  r  r  s   &  r   r   r  Z  s#     Eu)#3qzz?1--ur  c              3   >   <"   T F  w  rVS9   g   K  Vx  K  	  R # 5ir+   r   )r   r-   r   firstClassess   &  r   r   r  [  s       
A$!Q,EVAAAs   
r(  c              3   &   "   T F  p. x  K	  	  R # 5ir+   r   rA  s   & r   r   r  d  s     7&6"&6s   coverage definition begininputr   ri  )*r/  rh   r   r   r   r   rQ   rR   r  rk   r  rT   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  listrn   rF  )rz   r   rF  r   rM   r   r  r}   r
  r  firstGlyphsr   r4   r   	coveragesr   r  s   &&&&           @@r   parseContextr$  +  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      # )ContextSubstr   r$  rz   r   r   s   &&&r   parseContextSubstr*    s    ^yIIr   c                     \        WR VR7      # )
ContextPosr'  r(  r)  s   &&&r   parseContextPosr-    s    \YGGr   c                     \        WR VR7      # )ChainContextSubstr'  r(  r)  s   &&&r   parseChainedSubstr0    s    %8INNr   c                     \        WR VR7      # )ChainContextPosr'  r(  r)  s   &&&r   parseChainedPosr3    s    %6)LLr   c                    \         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   r  Nr  r  r   )rh   ReverseChainSingleSubstr   r   r   r   rk   r   r  r  rT   r  r  r  r.   r   r   r   r   r   
Substituter  )rz   r   r   rM   r#  r   r4   r   r3   r}   rD  s   &&&        r   parseReverseChainedSubstr7    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                    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GSUBsinglemultiple	alternater?  contextchainedreversechainedGPOSr  kernsetcursivezmark to basezmark to ligaturezmark to markz
lookup end)
% subtablezsubtable end)!expectrQ   rR   rh   Lookupr   
LookupFlagMarkFilteringSetr   r   r   r   r*  r0  r7  r   r  r  r#  r  r  r  r-  r3  
LookupTyper  r   rT   r   r   SubTablerk   SubTableCount)rz   tableTagr   r   r}   _r   r   r9  r   parseLookupSubTable	subtablessubtables   &&&&         r   parseLookuprQ    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                   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# )r:  z
Parsing %s   zscript table beginri   c                    < \        V S4      # r+   )r   )rz   r{   s   &r   r?   parseGSUBGPOS.<locals>.<lambda>  s    /%<r   zfeature table beginr   c                    < \        V SS4      # r+   )r   )rz   r{   r   s   &r   r?   rU    s    *5)ZHr   r9  NSkipping %szDuplicate lookup name: %sr   Debgr]   )r:  rA  )
LookupListN) r   getTableClassrH   rQ   rR   r/  rh   Versionr   rn   r   r   r   rY  rF  rQ  rk   r&   rT   r   rW   osenvironr   r   r
   r  r  r   r.  strtable)rz   r   rL  	containerrM   fieldsattrparserr   rM  r   r9  rR   r{   r   s   &&&          @@r   parseGSUBGPOSrd    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      # )r:  rd  rz   r   s   &&r   	parseGSUBrh  !      f--r   c                     \        WR 4      # )rA  rf  rg  s   &&r   	parseGPOSrk  %  ri  r   c           	      Z   / 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)rj   r)   r&   r   buildAttachListr   )rz   r   pointsr}   r"  r   s   &&    r   parseAttachListro  )  s    F	(	)	)Dd1g&E&--&-1"X6XSVX6FM  
*
 v'>'>'@AA 7	 
*	)s   0BB
 	BBB*	c           	         / 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)rj   r)   r&   rk   r   buildLigCaretListr   )rz   r   rq  r}   r"  numr   
thisCaretss   &&      r   parseCaretListru  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                 B   \         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   )rh   MarkGlyphSetsDefMarkSetTableFormatr   r   MarkSetCountr   rx   r.  r   r   )setsr   rM   rD  r   s   &&   r   makeMarkFilteringSetsr{  @  sy     DDC		,,DFT...DMtzz|$'A5a %Kr   c                 P   / 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)rj   rk   r)   r&   rT   r{  )rz   r   rz  r}   r"  sts   &&    r   parseMarkFilteringSetsr~  J  s    D	'	(	(Dt9>'4'>d1g&ET!WB~HOOE"  
) !,, 
)	(s   A&BB%	c                    \         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   rh   r  rg  s   &&r   r?   parseGDEF.<locals>.<lambda>_  s    eAQAQ Rr   zattachment list begin
AttachListzcarets beginLigCaretListz&mark attachment class definition beginMarkAttachClassDefc                 8    \        W\        P                  R 7      # r  )r   rh   r  rg  s   &&r   r?   r  e  s    eAVAV Wr   zmarkfilter set definition beginrw  NrW  rS  i  )r   rZ  rQ   rR   rh   r  ro  ru  r~  r   rn   r   r   r   r/  rw  r[  r_  )rz   r   r`  rM   ra  rb  rc  r   s   &&      r   	parseGDEFr  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                 H   \         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)
platformID
encodingIDformatlanguage)r   rZ  rQ   rR   r   rE  rk   parseCmapIdr   r  	platEncIDr  r  r   r&   rT   tableVersiontables)rz   r   r`  r  fieldplatIdencIdfmtlangr_  r}   s   &&         r   	parseCmapr  y  s    ##F+-IIInF
**,
"'#f+56 L$
K %K$
 s S!#&!
E{1g'+/7EJJs47B'(;DeI!$
s   *Dc                 Z    \        V 4      pW^ ,          8X  g   Q h\        V^,          4      # r  )r   r&   )rz   r  r}   s   && r   r  r    s)    ;DGtAw<r   c                 B   \         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 tableNFontDamer#   :Nr   NzFont Chef Tablez7Don't know what table to parse and data doesn't specifyr:  rA  r  r  )rQ   rR   r   r   joinr   ljustrh  rk  r  r  )rz   r   rL  r}   tags   &&&  r   
parseTabler    s   IIo;;=D
CAw}}qZ'1gmmoa 	$q'--/"%	&*;	;1gmmoa 
UiilH?3XO3? 	A@A 						
 
  r   c                      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                    \        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)Nr]   )iterr   filenamerz   r}   linenostoppersbuffer)rM   frz   s   && r   rN   Tokenizer.__init__  sR    Q	!FFDM %[
		! DMs   A 	Ac                    V # r+   r   rL   s   &r   __iter__Tokenizer.__iter__  s    r   c                   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!trailing tab found on line %d: %s)	r  r   rz   r}   r   r  rk   rQ   warning)rM   r}   r(   s   &  r   
_next_line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                     V P                  4       pV'       g   K  V^ ,          '       g   K,  V^ ,          ^ ,          R8w  g   V^ ,          R8X  g   KQ  V# )T%rD  )r  rM   r}   s   & r   _next_nonemptyTokenizer._next_nonempty  s=    ??$DtQT!WQZ3%6$q'\:Qr   c                p    V P                   '       d   V P                   pR V n         V# V P                  4       # r+   )r  r  rM   rets   & r   _next_bufferedTokenizer._next_buffered  s/    ;;;++CDKJ&&((r   c                    V P                  4       pV^ ,          P                  4       V P                  9   d   Wn        \        hV# r  )r  r   r  r  StopIterationr  s   & r   __next__Tokenizer.__next__  s6    ""$7==?dmm+Kr   c                "    V P                  4       # r+   )r  rL   s   &r   r   Tokenizer.next  s    }}r   c                    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  r   r  rL   s   &r   r   Tokenizer.peek  s`    {{{"113 ;;q>!T]]2{{	 ! s   A' 'A65A6c                2    V P                  4       pVe   V# R# )N)r]   )r   r  s   & r   r   Tokenizer.peeks  s    iikos050r   c              #     "   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  rT   rE  )rM   r  startends   &&  r   rj   Tokenizer.between  sV     hFlE"S!MM"C&L!s   A*A,c              #     "   \        V4      \        Jd   V3pV P                  P                  V4       R x  V P                  \	        V4      ) R 1 R # 5ir+   )rS   r   r  extendrk   )rM   tagss   &&r   r  Tokenizer.until  sA     :U"7DT"MM3t9*,'s   AAc                v    \        V 4      pV^ ,          P                  4       pW18X  g   Q RV: RV: R24       hV# )r   z
Expected '', got '')r   r   rM   r(   r}   r  s   &&  r   rE  Tokenizer.expect
  s3    Dz1gmmox=a==xr   c                    \        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  )r   r   r   r  s   &&  r   r  Tokenizer.expectendswith  s;    Dz1gmmo||AEa EEr   )r  r  r}   r  rz   r  N)r   r   r   r   rN   r  r  r  r  r  r   r   r   r	   rj   r  rE  r  r   rY   rZ   s   @r   r  r    si     
)1 " " ( ( r   r  c                2    \        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_``)
rL  )r  r  )r  r   rL  rz   s   &&& r   buildr    s      aLEeH55r   c           	     "   ^ 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)descriptionz--fontz-fFILEr   zDInput TTF files (used for glyph classes and sorting coverage tables))metavardesthelpz--tablez-tTABLErL  z7Table to fill (sniffed from input file if not provided)inputs+zInput FontDame .txt files)r  rS   nargsr  zProcessing %srtz	utf-8-sig)encodingr  )	xmlWriter)!sys	fontToolsr  fontTools.misc.testToolsr  argvargparseArgumentParsermain__doc__add_argumentr^  
parse_argsr   r   r$   r  rQ   rR   openr  rL  compile	__class__	decompilefontTools.miscr  	XMLWriterstdoutbegintagnewlinetoXMLendtag)argsr   r  r  r  r  rc  r  r_  blob
decompiledr  r  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__main__r+   )NN)br  r   fontTools.ttLib.tables._c_m_a_pr   fontTools.ttLib.tablesr   rh   fontTools.ttLib.tables.otBaser   r   fontTools.otlLibr   r   
contextlibr	   fontTools.ttLibr
    fontTools.feaLib.lookupDebugInfor   r   operatorr   r\  logging	Exceptionr   r   r   r   	getLoggerrQ   r)   r.   r5   r8   rF   r  rH   r   r   r   r   r   r   r   r   r  r  rm  r  r#  r*  r2  r;  rd  objectrf  rs  rv  r{  r  r  r  ro   r  r  r  r   r  r  r   r   r  r  r$  r*  r-  r0  r3  r7  rQ  rd  rh  rk  ro  ru  r{  r~  r  r  r  r  r  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   