+
    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                 s    V R ,          R9   d1   \         P                  P                  \        V R,          ^4      4      # V R ,          R8X  d   R\        V R,          4      ,          # V # ):N   Nr   NNz# z	glyph%.5d)zU zu )r   TTFontZ_makeGlyphNameint)s   &r   	makeGlyphr    '   sR    u||**3qub>::	
2$S2Z'' 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'   r0   r.   r/   mappedes   &&&fff  r   setReferencer5   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   r8   append)r:   r0   r'   r4   s   &&&&r   r2   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)r8   r<   r=   r>   r   r%   )r:   r0   r'   r4   r3   s   &    r   applyDeferredMappingsZ%DeferredMapping.applyDeferredMappingsg   sv    "44NFII>T!WEUEU 6NIIk6* 5 "$	  s   A11A?r7   N)	r   r   r   r   r;   r2   r@   r   __classdictcell__Z__classdict__   @r   r6   r6   _   s     $8$ $r   r6   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   Zdefaultc                     V P                   # r!   )
LangSysTagrecr   r   r1   !parseScriptList.<locals>.<lambda>   s    r   r/   c                 rG   r!   )	ScriptTagrI   r   r   r1   rK      s    r   )ot
ScriptListbetweenlenr?   r<   r=   ZLangSysZLookupOrderr5   r-   setattrrE   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  F  pVw  rVpVe   \	        VP                  4      W%&    \         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        K  	  RRR4       \	        VP                  4      Vn        V#   \
         d     ELi ; i  + '       g   i     L>; i)zfeature tableN)rN   FeatureListZFeatureRecordrP   rQ   r,   Z
FeatureTagZFeaturer?   ZFeatureParamsrS   LookupListIndexrT   r5   r+   r   LookupCountrU   )rW   	lookupMaprX   r:   rZ   nameZ
featureTagZlookupsZ
featureRecZfeaturer[   r\   r]   r'   s   &&&           r   parseFeatureListrd      s1   >>DD		'	'D(,%Dg%#&t'9'9#:
  ))+J$.!!#J%%j1 ((G$(G!"7+D15T0BBG#g#D/Y	L *"%g&=&=">G/  
(4 D../DK   
(	's*   &E#CE#E 	E#E 	 E##E3	c                 s.   ^ pRp. R	OpV P                  4       ^ ,          P                  4       V9   d   \        V 4      pR^R^R^R^/P                  V^ ,          P                  4       4      pV'       d'   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   K  V^,          p\	        V^,          4      pEK  W3# )
r    NrighttoleftignorebaseglyphsignoreligaturesignoremarksmarkattachmenttypemarkfiltertypeZyes)re   rf   rg   rh   ri   rj   )peekslowernextgetr   )rW   Zflags	filtersetZallFlagsrZ   Zflag   &     r   parseLookupFlagsrq      s    EIH ++-

 
 
"h
.E{6v6	

 #d1gmmo
 	 Aw}}%'7==?22Sa\Q&&E7==?..TMEDGIr   c                 s~    / pV  F   p\        V4      pV^,          W4^ ,          &   K"  	  \        P                  ! V4      #    )r$   otlZbuildSingleSubstSubtablerW   font
_lookupMapr(   rZ      &&&  r   parseSingleSubstry      s>    G$7Q  ''00r   c                 ~    / pV  F   p\        V4      pVR ,          W4^ ,          &   K"  	  \        P                  ! V4      # rs   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  F*  p\        V4      pV^ ,          V\        VR,          4      &   K,  	  \        P                  ! V4      # )r    r|   )r$   tuplert   ZbuildLigatureSubstSubtableru   rx   r   parseLigaturer     sD    G$#'7d2h   ))'22r   c                 s>   / pV  Fr  pV^ ,          P                  4       P                  RR4      p\        V^,          4      p\        V^,          4      pWc9  d   \	        4       W6&   \        W6,          WW4       Kt  	  \        P                  ! W1P                  4       4      # )r    rF   rD   )	titlereplacer    r   r   rR   rt   ZbuildSinglePosSubtablegetReverseGlyphMap)rW   rv   rw   valuesrZ   Zwr"   v   &&&     r   parseSinglePosr     s~    FGMMO##C,d1gQL?#FI	1   %%f.E.E.GHHr   c                 s   \         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F8  pV^ ,          P                  4       ^ ,          P                  4       p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\        WV4       EK;  	  \!        \#        VP%                  4       4      V4      Vn        . Vn        VP&                  P*                   F  p
WZ,          p\         P(                  ! 4       p. ;pVn        \/        VP%                  4       VP0                  R7       Fh  pW,          p\         P,                  ! 4       pVVn        V^ ,          Vn        VP                  '       d
   V^,          MRVn        VP9                  V4       Kj  	  \        VP,                  4      Vn        VP(                  P9                  V4       K  	  \        VP(                  4      Vn        V# VP?                  R4      '       Ede   ^Vn        RR.pV P	                  4       ^ ,          P?                  R4      '       du   V PA                  4       ^ ,          R\        R4      )  P                  4       pR	^ \         PB                  3R
^\         PD                  3/V,          w  pp\G        WVR7      VV&   K  Vw  Vn!        Vn"        R V 4       w  Vn$        Vn%        \M        VPH                  4       Uu. uF  p\         PN                  ! 4       NK  	  upVn'        VPN                   Fq  p\M        VPJ                  4       Uu. uF  p\         PP                  ! 4       NK  	  upVn(        VPP                   F!  p\        4       Vn        \        4       Vn        K#  	  Ks  	  V  EF  pV^ ,          P                  4       ^ ,          P                  4       pV^ ,          \        V4      R P                  4       P                  RR4      p\        V,          ^ ,          p	R VR,           4       w  pppVPN                  V,          PP                  V,          pVR8X  d'   V;P                  V	,          un        VP4                  pM%V;P                  V	,          un        VP6                  p\        WV4       EK  	  VPN                   Ft  pVPP                   Fa  p\        VP                  VP4                  4      Vn        VP                  '       d!   \        VP                  VP6                  4      MRVn        Kc  	  Kv  	  \!        \#        VPB                  PR                  P%                  4       4      V4      Vn        V# V# u upi u upi )r    leftNrF   rD   :rs      NrL   classclass definition beginZfirstZsecondklassc              3   sv   "   T F/  p^\        VP                  P                  4       4      ,           x  K1  	  R# 5irs   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   :rs   i   Nr   Zright)*rN   ZPairPosZValueFormat1ZValueFormat2rk   splitrl   FormatrQ   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7==?1%++-D73t9;'--/77R@D(.q1D'S	2NFQLE#!#F^+*5-)Gv&>&)Dv~!!T)!!W!!T)!!W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
 +5eDIcN)2&.
3<.
*$* 9>d>N>N8OP8O1R__.8OP%%D<A$BRBR<S T<Sq!2<S TD)))m)m * &
 D7==?1%++-D73t9;'--/77R@D(.q1D$?T#Y$?!FFE$$V,99&ADv~!!T)![[!!T)![[Be$   %%D)))$*;*;T[[I (((   1 14;;?  * & %S)A)A)F)F)H%I4P K4KE Q Ts   Z Z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)rk   r   rl   untilr   )rW   rv   rw   r      &&& r   parseKernsetr     sr    
++-

 
 
"1
%
+
+
-C
[[K
 
 U)
 
 U!!	
 
s   A<<B	c                 s    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# )rs   rD   )r   intSplitCommaZXCoordinateZYCoordinaterQ   r   ZAnchorPoint)datar   anchorr*   r   
makeAnchorr     sZ    WFFM-:47-C*F*
4y1}aB a\Mr   c                 s@   / pV  Fs  pR ^ \         P                  3R^\         P                  3/V^ ,          ,          w  rV\        V^,          4      pWs9  d   RR.W7&   \	        VR,          V4      W7,          V&   Ku  	  \
        P                  ! W1P                  4       4      # )ZentryexitNr   )rN   ZEntryAnchorZ
ExitAnchorr    r   rt   ZbuildCursivePosSubtabler   )rW   rv   rw   rY   rZ   r)   r   glyphr   r   parseCursiver     s    G a(Q&
 q'
 $q'""D\GN(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                 sX   . 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        F0  w  w  rip
WEV,          ,          p\        WrP                  4      pWV	&   K2  	  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$&,,/	 #/
 Nr   c                 sJ   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
^,
          ,          P                  p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     s    fs8??++G%hoo6
76DA146C
76:jjl2*wFU$>+-+<+<+>>FSZ($-!DI)DT%UDTqb&8&8&:DT%UF"!11*.*)<& 2 ((15DD! 7C" N' 8 &Vs   D$D 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^,          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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 )rs   ZmarkZ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)!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   r/   r   ZmarkCoverageZ	markArrayZmarkRecordsr   ZbaseCoverageZ	baseArrayZbaseRecordss   &&&                       r   parseMarkToSomethingr     s   668DDKHH,,-,,-X001D
 H1g$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Whatr/   r   r   rp   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   rA   rB   rC   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MGV^8X  d    R p	R p
R pR pR pR pR pR pR pR pM!V^8X  d   R p	R p
R
pR
pR
pR
pR pR pR pR pV'       d%   X
V n	        XV n
        XV n        XV n        XV n        M#X	V n	        XV n
        XV n        XV n        X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ChainrD   LookupRecordc                 rG   r!   r   rr   r   r1   (ContextHelper.__init__.<locals>.<lambda>i      r   c                 rG   r!   r   r   r   r   r1   r   j      ajjr   c                     R# )Nr!   r   r   r   r   r1   r   k  s    Gr   c                 r   )N)NNNr   r   r   r   r1   r   l  s    );r   Nc                     V P                   3# r!   )Inputr   r   r   r1   r   o  
    !''r   c                 H    V P                   V P                  V P                  3# r!   	Backtrackr   	LookAheadr   r   r   r1   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   r1   r     r   r   c                 rG   r!   r   r   r   r   r1   r     r   r   c                 r   r!   ClassDefr   r   r   r1   r     s
    QZZMr   c                 r   r!   BacktrackClassDefInputClassDefLookAheadClassDefr   r   r   r1   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   r1   r     r   r   c                 r   r!   r   r   r   r   r1   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   r1   r     s    Ar   c                 r  r  )InputCoverager   r   r   r1   r     s    aooa&8r   c                 rG   r!   r   r   r   r   r1   r     r   r   c                 s^    V P                   V P                  ,           V P                  ,           # r!   )BacktrackCoverager  LookAheadCoverager   r   r   r1   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   Rule	RuleCountRuleSetRuleSetCountc                 s    W 9   d   V.# . # r!   r   r   r   r   r   r   r1   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   r1   r     s6     !!&, 8%&!Vc&k8148r   r  r  r   r   )r   Z
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( )DM/D"5D)DM/D$DM*D"0D$DM*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   rB   rC   r   r   r   M  s     J7 J7r   r   c           	      s    \        \        V4      p. pV  Fd  pV! 4       p\        V4      p\        V^ ,          4      pV^,
          Vn        \        \        W%^,          \        VR4       VP                  V4       Kf  	  V# )r    r`   )	r   rN   rS   r   ZSequenceIndexr5   r+   rR   r?   )r   r  rb   r   ZlstZitemrJ   r)   r   r   parseLookupRecordsr    sn    B	"E
Cgt$$q'l!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  F)  p\        V^ ,          4      p\        V^,          4      W5&   K+  	  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     s\    I	)	*	*Dd1g&E"47|I  
+
 	// 
+	*s   0A  A0	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           
      s  aa \        \        V4      ! 4       pV P                  4       ^ ,          P                  4       ^ ,          P	                  4       pVR8X  EdU   ^Vn        \        P                  RW$P
                  4       \        W$P
                  4      o. pV  F  p\        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  r\5        WVR7      W&   K  SP7                  WK4       . pV  F  p\        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      o\        V3R lVSP8                  ,          P:                  P=                  4        4       4      p
\!        W4      Vn        \%        VSV\?        \A        S4      ^,           4      4       V# VP)                  R4      '       Ed   ^Vn        \        P                  RW$P
                  4       \        W$P
                  4      o\        ;QJ d'    . R \?        SP                  4       4       F  NK  	  5M ! R \?        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	^ \        PB                  3R^\        PD                  3R
^\        PF                  3//SP                  ,          V,          w  rW,          P                  \I        WVR7      4       K  SPK                  WN4       \M        V 4      p V ^ ,          p\        VR,          SP                  V4      p	\O        VSPP                  R,           \        V	4      4       \O        VSP                  V	4       V# V# )r    r   zParsing %s format %srD   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   r*  r   r"  r+  r#  r   r   r)  Z  s#     Eu)#3qzz?1--ur,  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   rk   r   rl   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   ZlistrR   r   )rW   rv   r   rb   r:   r   r%  rZ   r&  r'  ZfirstGlyphsr   r)   r   	coveragesr   r/  s   &&&&           @@r   parseContextr2  +  s	   2tD
++-

 
 
"1
%
+
+
-C
g~		($<$,D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 +5eDIN	)D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Qx!$r(ANNIFaffw&D	2annd+ K4Kr   c                     \        WR VR7      # )ZContextSubstrb   r2  rW   rv   rb   r   r   parseContextSubstr7    s    ^yIIr   c                 r3  )Z
ContextPosr4  r5  r6  r   r   parseContextPosr8    s    \YGGr   c                 r3  )ZChainContextSubstr4  r5  r6  r   r   parseChainedSubstr9    s    %8INNr   c                 r3  )ZChainContextPosr4  r5  r6  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  F   p	\        V	4      p	V	^,          W^ ,          &   K"  	  \        \!        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 )rs   r0  Nr-  r.  r   )rN   ZReverseChainSingleSubstr   rk   r   r   rQ   rl   r  r  r?   r!  r   r   r$   r   r   r   r   r   Z
Substituter   )rW   rv   rw   r:   r1  r   r)   r   r(   rZ   r   s   &&&        r   parseReverseChainedSubstr;    su   %%'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$7Q  !W\\^!4d;DM+/==+?+?@+?aqzz+?@DO$//*DOK As   
F?c                 sF   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P7                  V4       K2   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   Lookuprq   Z
LookupFlagZMarkFilteringSetry   r}   r~   r   r7  r9  r;  r   r   r   r   r   r   r   r8  r:  Z
LookupTyper   r   r?   rk   rm   ZSubTablerQ   ZSubTableCount)rW   tableTagrv   rb   rZ   _rc   r   r<  ro   ZparseLookupSubTableZ	subtablesZsubtables   &&&&         r   parseLookuprD    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$$X. # =
 {{}Q#AAU  
# 
LLFOv/Fq  M =<	 
#	"s6   H-HG=	G=	:!H H=HHH 	c                 s  aa \         P                  ! V4      ! 4       p\        4       o\        4       o\        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  d   VP                  f,   \        P                  ! 4       Vn        . VP                  n        V P                  4       w  rp	\        WVS4      pSe#   \!        VP                  P                  4      SV
&   VP                  P                  P#                  V4       EK'  \        WFV! V 4      4       EK<  VP                  '       d/   \!        VP                  P                  4      VP                  n        Se   SP'                  4        \(        P*                  P-                  \.        4      '       d   RV9  d   \1        R4      VR&   / VR,          n        VR,          P2                  P5                  \6        / 4      P5                  V/ 4      pSP9                  4        F  w  rRV
R.V\;        V4      &   K  	  SP'                  4        WCn        V# )z
Parsing %s   zscript table beginrO   c                 s   < \        V S4      # r!   )r^   )rW   rX   s   &r   r1   parseGSUBGPOS.<locals>.<lambda>  s    /%<r   zfeature table beginr_   c                 s   < \        V SS4      # r!   )rd   )rW   rX   rb   s   &r   r1   rF    s    *5)ZHr   r<  NSkipping %sZDebgrD   )
LookupListN)r   getTableClassr6   r<   r=   r   rN   Versionr   rR   r   rl   rm   rH  rA  rD  rQ   r?   ra   r@   osZenvironrn   r	   r   r   r$  r
   r   strtable)rW   rv   rB  	containerr:   fieldsattrparserr   rC  rc   r<  r=   rX   rb   s   &&&          @@r   parseGSUBGPOSrR    sL   ##H-/I!I "JIIlH%2x "DDL<
 	H 
 	&
F D! (
**,
"jjl1o##%IImUZZ\2K{(?&"$--/)+&JAQ $	BF$"%doo&<&<"=	$ OO""))&1 Du.&)$//*@*@&A#'')::>>.//T!'/V$&V!Vjj!6;Hb) 
 !* 1&($^c&k" !2 	((*Or   c                     \        WR 4      # )r=  rR  rW   rv   r   r   	parseGSUBrV  !      f--r   c                 rS  )r>  rT  rU  r   r   	parseGPOSrX  %  rW  r   c           	      s@   / pV P                  R 4      ;_uu_ 4        V  F9  p\        V^ ,          4      pVR,           Uu. uF  p\        V4      NK  	  upW$&   K;  	  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   parseAttachListrZ  )  s|    F	(	)	)Dd1g&E-1"X6XSVX6FM  
*
 v'>'>'@AA 7	 
*	)s   #BB
	BBB	c           	      sj   / pV P                  R 4      ;_uu_ 4        V  FL  p\        V^ ,          4      p\        V^,          4      pVR,           Uu. uF  p\        V4      NK  	  ppWrV&   KN  	  RRR4       \        P                  ! V/ VP                  4       4      # u upi   + '       g   i     L;; i)caretsr   N)rP   r    r   rt   ZbuildLigCaretListr   )rW   rv   r[  rZ   r   Znumr]   Z
thisCarets   &&      r   parseCaretListr]  3  s    F	x	 	 Dd1g&Ed1g,C*.r(3(Q#a&(J3&5M  
!   T-D-D-FGG 4 
!	 s   5B"B
%
B"B""B2	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   makeMarkFilteringSetsr`  @  sy     DDC		,,DFT...DMtzz|$'A5a %Kr   c                 s"   / pV P                  R 4      ;_uu_ 4        V  FH  p\        V^ ,          4      p\        V^,          4      pWR9  d   . W%&   W%,          P                  V4       KJ  	  RRR4       \	        W!4      #   + '       g   i     L; i)zset definitionN)rP   r    r   r?   r`  )rW   rv   r_  rZ   r   ZstrY  r   parseMarkFilteringSetsra  J  sq    D	'	(	(Dd1g&ET!WB~HOOE"  
) !,, 
)	(s   AA>>B	c                 sX   \         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       em   V P                  4       ^ ,          P                  4       pWt9  d$   \        P                  RV4       \        V 4       K`  WG,          w  rV\        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   rc  rU  r   r   r1   parseGDEF.<locals>.<lambda>_  s    eAQAQ Rr   zattachment list beginZ
AttachListzcarets beginZLigCaretListz&mark attachment class definition beginMarkAttachClassDefc                 rd  re  )r   rN   rg  rU  r   r   r1   rf  e  s    eAVAV Wr   zmarkfilter set definition beginr^  NrG  rE  i  )r   rI  r<   r=   rN   rb  rZ  r]  ra  r   rR   r   rl   rm   r^  rJ  rM  )rW   rv   rN  r:   rO  rP  rQ  r   r\  r   	parseGDEFrh  X  s
   ##F+-IIIn779D R#
 	 ,!@80 W3
 	*,>@V+WF D! (
**,
"jjl1o##%IImS)K{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   rI  r<   r=   r   r@  rQ   parseCmapIdr   rj  Z	platEncIDrk  ri  rm   r   r?   ZtableVersiontables)rW   rv   rN  rm  fieldZplatIdZencIdZfmtZlangrM  rZ   s   &&         r   	parseCmapro  y  s    ##F+-IIInF
**,
"'#f+56 L$
K %K$
 s S!#&!
E{1g'+/7EJJs47B'(;DeI!$
s   *Dc                 s<    \        V 4      p\        V^,          4      # rr   )rm   r   )rW   rn  rZ   r*   r   rl  rl    s    ;DtAw<r   c                 s   \         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e#   \        V 4       VP                  ^4      pVf   TpR\        R\        R\        R	\        /V,          ! W4      # )
zParsing tableNZFontDamerF   :Nr   NzFont Chef Tabler=  r>  rb  ri  )r<   r=   rk   r   Zjoinrm   ZljustrV  rX  rh  ro  )rW   rv   rB  rZ   tagrx   r   
parseTablerq    s    IIo;;=D
CAw}}qZ'1gmmoa 	$q'--/"%	&*;	;1gmmoa 
UiilH 						
 
  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)NrD   )Ziterrc   filenamerW   rZ   linenostoppersbuffer)r:   frW   r*   r   r;   ZTokenizer.__init__  sR    Q	!FFDM %[
		! DMs   A 	Ac                s    V # r!   r   r9   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 )rs   Z	z!trailing tab found on line %d: %s)	rt  rm   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%r?  )rz  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!   )rv  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~  rl   ru  rv  StopIterationr{  r#   r   __next__ZTokenizer.__next__  s6    ""$7==?dmm+Kr   c                s"    V P                  4       # r!   )r  r9   r   r   rm   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!   )rv  r|  r  rl   ru  r9   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)rD   )r   r}  r#   r   rk   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 endNry  )expectendswithru  r?   r@  )r:   rp  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   ru  ZextendrQ   )r:   Ztagsr   r   r   ZTokenizer.until  sA     :U"7DT"MM3t9*,'s   AAc                J    \        V 4      pV^ ,          P                  4       pV# r  rm   rl   r:   r   rZ   rp  r  r   r@  ZTokenizer.expect
      Dz1gmmor   c                r  r  r  r  r  r   r  ZTokenizer.expectendswith  r  r   )rv  rs  rZ   rt  rW   ru  N)r   r   r   r   r;   rx  rz  r|  r~  r  rm   r   rk   r   rP   r   r@  r  r   rA   rB   rC   r   rr  rr    si     
)1 " " ( ( r   rr  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_``)
rB  )rr  rq  )rw  rv   rB  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TABLErB  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_argumentrL  Z
parse_argsrv   r   r   r  r<   r=   Zopenr  rB  ZcompileZ	__class__Z	decompileZfontTools.miscr  Z	XMLWriterZstdoutZbegintagZnewlineZtoXMLZendtag)Zargsrv   r  r  r  r  rQ  rw  rM  ZblobZ
decompiledr  rp  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   rK  ZloggingZ	Exceptionr   r   r   r   Z	getLoggerr<   r    r$   r+   r-   r5   r  r6   r^   rd   rq   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(  r2  r7  r8  r9  r:  r;  rD  rR  rV  rX  rZ  r]  r`  ra  rh  ro  rl  rq  rr  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   