
    g                        d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lZd d
lZ G d de      Z G d de      Z G d de      Z G d de      Z ej:                  d      Zd Zd Z d Z!d Z"d Z# G d de$      Z%dWdZ&dXdZ'd Z(dWdZ)dWdZ*dWd Z+dWd!Z,dWd"Z-dWd#Z.dWd$Z/ej`                  fd%Z1dWd&Z2d' Z3d( Z4d) Z5d* Z6 G d+ d,e7      Z8 G d- d.e8      Z9 G d/ d0e8      Z: G d1 d2e8      Z;dWd3Z<dWd4Z=dWd5Z>d6 Z?d7 Z@ G d8 d9e7      ZAdWd:ZBej                  fd;ZDej                  fd<ZFej                  fd=ZGej                  fd>ZHd? ZIdWd@ZJdWdAZKdWdBZLdWdCZMdWdDZNdWdEZOdWdFZPdG ZQdH ZRdI ZSdJ ZTdK ZUdL ZVdM ZWdN ZXdO ZYdP ZZdWdQZ[ G dR dSe7      Z\dWdTZ]dXdUZ^e_dVk(  rd d
l`Z` e`j                   e^              y
y
)Y    )ttLib)cmap_classes)otTables)ValueRecordvalueRecordFormatDict)builder)contextmanager)newTable)LOOKUP_DEBUG_ENV_VARLOOKUP_DEBUG_INFO_KEY)setitemNc                       e Zd Zy)MtiLibErrorN__name__
__module____qualname__     q/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fontTools/mtiLib/__init__.pyr   r          r   r   c                       e Zd Zy)ReferenceNotFoundErrorNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)FeatureNotFoundErrorNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)LookupNotFoundErrorNr   r   r   r   r   r   "   r   r   r   zfontTools.mtiLibc                     | d d dv r,t         j                  j                  t        | dd  d            S | d d dk(  rdt        | dd        z  S | j	                  d      dk  s
J d| z         | sJ d	       | S )
N   )zU zu    z# z	glyph%.5d r   zSpace found in glyph name: %szGlyph name is empty)r   TTFont_makeGlyphNameintfind)ss    r   	makeGlyphr'   )   s    !u||**3qub>::	
2A$S12Z''66#;??;a???###1Hr   c                 >    | D cg c]  }t        |       c}S c c}w N)r'   )lgs     r   
makeGlyphsr,   3   s    "#$QIaL$$$s   c                 `    |	 ||    }|S t        |       }|S # t         $ r t        |       w xY wr)   )KeyErrorr   r$   symmappingidxs      r   	mapLookupr3   7   sK     	+#,C
 J #hJ	  	+%c**	+s    -c                 z    	 t        |       }|S # t        $ r" 	 ||    }Y |S # t        $ r t        |       w xY ww xY wr)   )r$   
ValueErrorr.   r   r/   s      r   
mapFeaturer6   D   sY    ,#h J  ,	,#,C J  	,&s++	,,s    	:!6:c                     	  | ||      } |       y # t         $ r6}	 ||j                  fd||       Y d }~y 	  # t        $ r Y  w xY wd }~ww xY w)Nc                      |       S r)   r   )ref
collectionkeysetters    r   <lambda>zsetReference.<locals>.<lambda>X   s    z3 < r   )r   addDeferredMappingAttributeError)mapperr1   r0   r<   r:   r;   mappedes      ```  r   setReferencerC   Q   sy    W% :sF# " 		"**<c1 	 # 	  			s2   	 	AAA	AAAAAc                       e Zd Zd Zd Zd Zy)DeferredMappingc                     g | _         y r)   )_deferredMappingsselfs    r   __init__zDeferredMapping.__init__b   s
    !#r   c                     t         j                  d|t        |      j                         | j                  j                  |||f       y )Nz*Adding deferred mapping for symbol '%s' %s)logdebugtyper   rG   append)rI   r<   r0   rB   s       r   r>   z"DeferredMapping.addDeferredMappinge   s8    		>T!WEUEUV%%vsA&67r   c                     | j                   D ]T  \  }}}t        j                  d|t        |      j                         	 | |   } ||       t        j                  d|       V g | _         y # t
        $ r |w xY w)Nz,Applying deferred mapping for symbol '%s' %sz	Set to %s)rG   rL   rM   rN   r   r.   )rI   r<   r0   rB   rA   s        r   applyDeferredMappingsz%DeferredMapping.applyDeferredMappingsi   s    "44 		+NFCII>T!WEUEUc 6NIIk6*		+ "$	  s   A,,A8N)r   r   r   rJ   r>   rQ   r   r   r   rE   rE   a   s    $8$r   rE   c                    t        j                         }g }| j                  d      5  | D ]  }t        |      dk  r |j	                  d       t        |      dk  r |\  }}}}t
        j                  d||       t        j                         }	d |	_        |rt        t        ||t        |	d       nd|	_        t        |      }
dgt        |
      z  x|	_        }t        |
      D ]  \  }}t        t        ||t         ||        t        |	j                        |	_        |D cg c]  }|j$                  |k(  s| }}|r|d   j&                  }nxt        j(                         }|d	dt        |      z
  z  z   |_        t        j&                         |_        |j	                  |       |j&                  }d |_        g |_        d|_        |d
k(  r	|	|_        t        j,                         }|d	dt        |      z
  z  z   |_        |	|_        |j,                  j	                  |       t        |j,                        |_         	 d d d        |D ]3  }t3        |j&                  j,                  d       |j&                  _        5 t3        |d       |_        t        |j(                        |_        |S c c}w # 1 sw Y   uxY w)Nzscript table    z#Adding script %s language-system %sReqFeatureIndexi     r   r!   defaultc                     | j                   S r)   )
LangSysTagrecs    r   r=   z!parseScriptList.<locals>.<lambda>   s
     r   r;   c                     | j                   S r)   )	ScriptTagrZ   s    r   r=   z!parseScriptList.<locals>.<lambda>   s
     r   )ot
ScriptListbetweenlenrO   rL   rM   LangSysLookupOrderrC   r6   setattrrU   stripSplitCommaFeatureIndex	enumerater   FeatureCountr^   ScriptScriptRecordDefaultLangSysLangSysRecordLangSysCountrY   sortedScriptCount)lines
featureMaprI   recordsline	scriptTag
langSysTagdefaultFeaturefeatureslangSyssymstheListir0   r&   script	scriptRec
langSysRecs                     r   parseScriptListr   w   s   ==?DG	~	& .@ -	@Dd)a-B d)a->B;Iz>8II;Y
SjjlG"&G"% +1'"8,D./S3t9_<G 7#D/ O3ZS'7ANO#&w';';#<G !(EAAKK9,DaEF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+   4J6CJ6"J17J1;DJ61J66J?c                 ^   t        j                         }g |_        | j                  d      5  | D ];  }|\  }}}|&||vs
J d|z         t	        |j                        ||<   	 t        |      t	        |j                        k(  sJ d|t	        |j                        fz         	 t        j                         }||_        t        j                         |_        |j                  j                  |       |j                  }	d |	_
        t        |      }
d gt	        |
      z  x|	_        }t        |
      D ]  \  }}t        t        ||t         ||        t	        |	j                        |	_        > 	 d d d        t	        |j                        |_        |S # t        $ r Y w xY w# 1 sw Y   4xY w)Nzfeature tablezDuplicate feature name: %s%d %d)r_   FeatureListFeatureRecordra   rb   r$   r5   
FeatureTagFeaturerO   FeatureParamsrf   LookupListIndexrh   rC   r3   r   LookupCountri   )rq   	lookupMaprr   rI   rt   name
featureTaglookups
featureRecfeaturerz   r{   r|   r0   s                 r   parseFeatureListr      s   >>DD		' ? 	?D(,%D*g%:-R/Kd/RR-#&t'9'9#:
4 4yC(:(:$;; W**+H > ; ))+J$.J!!#J%%j1 ((G$(G!"7+D15T0BBG#g#D/ M3Y	3!LM"%g&=&=">G/	??4 D../DK  ? ?s1   5F##A F#CF#	F F#F  F##F,c                 .   d}d }g d}| j                         d   j                         |v rt        |       }dddddj                  |d   j                               }|r;|d   j                         dv s
J |d          |d   j                         d	k(  r||z  }|d   j                         d
k(  r|t	        |d         dz  z  }|d   j                         dk(  r|dz  }t	        |d         }| j                         d   j                         |v r||fS )Nr   )righttoleftignorebaseglyphsignoreligaturesignoremarksmarkattachmenttypemarkfiltertype   r   rS      )r   r   r   r   )yesnor   r   r   r    )peekslowernextgetr$   )rq   flags	filtersetallFlagsrt   flags         r   parseLookupFlagsr      s+   EIH ++-

 
 
"h
.E{! &%!	

 #d1gmmo
 	 7==?m3<T!W<3Aw}}%'7==?22Sa\Q&&E7==?..TMEDGI% ++-

 
 
"h
.& )r   c                     i }| D ]-  }t        |      dk(  sJ |       t        |      }|d   ||d   <   / t        j                  |      S )Nr   r   r   )rb   r,   otlbuildSingleSubstSubtablerq   font
_lookupMapr1   rt   s        r   parseSingleSubstr      sZ    G #4yA~#t#~$7Q# ''00r   c                 j    i }| D ]  }t        |      }|dd  ||d   <    t        j                  |      S Nr   r   )r,   r   buildMultipleSubstSubtabler   s        r   parseMultipler      sG    G $$8Q$ ))'22r   c                 j    i }| D ]  }t        |      }|dd  ||d   <    t        j                  |      S r   )r,   r   buildAlternateSubstSubtabler   s        r   parseAlternater     sG    G $$8Q$ **733r   c                     i }| D ]6  }t        |      dk\  sJ |       t        |      }|d   |t        |dd        <   8 t        j                  |      S )Nr   r   r   )rb   r,   tupler   buildLigatureSubstSubtabler   s        r   parseLigaturer     s`    G +4yA~#t#~$#'7d12h + ))'22r   c                    i }| D ]  }t        |      dk(  sJ |       |d   j                         j                  dd      }|t        v sJ t	        |d         }t        |d         }||vrt               ||<   t        ||   |      r	J ||f       t        ||   ||        t        j                  ||j                               S )NrV   r   r!   rT   r   r   )rb   titlereplacer   r'   r$   r   hasattrre   r   buildSinglePosSubtablegetReverseGlyphMap)rq   r   r   valuesrt   wr+   vs           r   parseSinglePosr     s    F 	!4yA~#t#~GMMO##C,))))d1gQLF?#F1I6!9a(01a&0(q	1a 	! %%fd.E.E.GHHr   c                    t        j                         }dx|_        |_        | j	                         d   j                         d   j                         }|dv rxd|_        i }| D ]/  }t        |      dk(  sJ |       |d   j                         d   j                         }|dv sJ |       |d   t        |      d  j                         j                  dd      }t        |   d   }	t        |dd       \  }
}t        |d         }|
|vri ||
<   |||
   vrt               t               f||
   |<   ||
   |   }|dk(  r|xj                  |	z  c_        |d   }n|xj                  |	z  c_        |d   }t        ||      r	J ||f       t!        |||       2 t#        t%        |j'                               |      |_        g |_        |j(                  j,                  D ]  }
||
   }t        j*                         }g x}|_        t1        |j'                         |j2                  	      D ]U  }||   }t        j.                         }||_        |d   |_        |j                  r|d   nd |_        |j;                  |       W t        |j.                        |_        |j*                  j;                  |        t        |j*                        |_        |S |jA                  d
      rpd|_        d d g}| j	                         d   jA                  d      r| jC                         d   d t        d        j                         }dt         jD                  fdt         jF                  fd|   \  }}||   J tI        | ||      ||<   | j	                         d   jA                  d      r|\  |_"        |_#        d |D        \  |_%        |_&        tO        |jJ                        D cg c]  }t        jP                          c}|_(        |jP                  D ]k  }tO        |jL                        D cg c]  }t        jR                          c}|_)        |jR                  D ]   }t               |_        t               |_        " m | D ]  }t        |      dk(  sJ |       |d   j                         d   j                         }|dv sJ |       |d   t        |      d  j                         j                  dd      }t        |   d   }	d |dd D        \  }}}|jP                  |   jR                  |   }|dk(  r"|xj                  |	z  c_        |j6                  }n!|xj                  |	z  c_        |j8                  }t        ||      r	J ||f       t!        |||        |jP                  D ]k  }|jR                  D ]Z  }t        |j                  |j6                        |_        |j                  r t        |j                  |j8                        nd |_        \ m t#        t%        |jD                  jT                  j'                               |      |_        |S J |       c c}w c c}w )Nr   leftrightr   rS   r!   rT   rV   r   r\   classr   class definition begin)firstsecondklassc              3   h   K   | ]*  }d t        |j                  j                               z    , ywr   N)max	classDefsr   ).0cs     r   	<genexpr>zparsePair.<locals>.<genexpr>^  s,      .
./AAKK&&()).
s   02c              3   2   K   | ]  }t        |        y wr)   r$   r   xs     r   r   zparsePair.<locals>.<genexpr>m  s     $?SV$?   )+r_   PairPosValueFormat1ValueFormat2r   splitr   Formatrb   r   r   r   r,   r$   r   r   re   makeCoveragesetkeysCoveragePairSetglyphsPairValueRecordro   
getGlyphIDSecondGlyphValue1Value2rO   PairValueCountPairSetCountendswithpeek	ClassDef1	ClassDef2parseClassDefClass1CountClass2CountrangeClass1RecordClass2Recordr   )rq   r   r   rI   typr   rt   sidewhatmaskglyph1glyph2valuerec2vrvalues1pairsetrs   values2pairr   r2   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'Qq	2NFFQLEV#!#vVF^+*5-)Gvv&&>&)Dv~!!T)!!W!!T)!!Wr4(42t*4(Be$)	%* %S%7>mm** 	)FVnGjjlG022Gg- T__E %!&/))+#) %aj,0,=,=gaj4t$% &))@)@%AG"LL(	)  -d Kc 
g	4L	kkmA''(@A**,q/"BS)A%B$BCIIKCR\\*bll+ JC S>)))*5$eDIcN kkmA''(@A *3&.
3<.
*$* 9>d>N>N8OP1R__.P%% 	,D<A$BRBR<S Tq!2 TD)) ,)m)m,	,
  	%Dt9>'4'>7==?1%++-D,,2d2,73t9;'--/77R@D(.q1D$?T!AY$?!FFE$$V,99&ADv~!!T)![[!!T)![[r4(42t*4(Be$	%  %% 	D)) )$*;*;T[[I ((   1 14;;? 	 %S)A)A)F)F)H%I4P K 	#qC Q Ts   !Y*Y c                     | j                         d   j                         d   j                         }|dv r'| j                  d      5  t	        | |      cd d d        S t	        | |      S # 1 sw Y   xY w)Nr   r   )zfirstclass definition beginzsecondclass definition begin)r   r   r   untilr  )rq   r   r   r   s       r   parseKernsetr    sv    
++-

 
 
"1
%
+
+
-C
[[K
 	* UD)	* 	* UD!!		* 	*s   A**A3c                     t        |       dk  sJ  |       }d|_        t        | d         \  |_        |_        t        |       dkD  r"| d   dk7  rd|_        t        | d         |_        |S )Nr   r   r   rT   )rb   r   intSplitCommaXCoordinateYCoordinater$   AnchorPoint)datar   anchors      r   
makeAnchorr    sj    t9>>WFFM-:47-C*F*
4y1}aB a\Mr   c                 ^   i }| D ]  }t        |      dv sJ |       dt        j                  fdt        j                  fd|d      \  }}t	        |d         }||vrd d g||<   ||   |   	J ||f       t        |dd  |      ||   |<    t        j                  ||j                               S )N)rV   rS   r   r   )entryexitr   )	rb   r_   EntryAnchor
ExitAnchorr'   r  r   buildCursivePosSubtabler   )rq   r   r   rs   rt   r2   r   glyphs           r   parseCursiver    s    G 
:4yF"(D("(&
 q'
U $q'""D\GENu~c"*8UCL8*(ab59s
: &&w0G0G0IJJr   c                     g }|j                   D ]I  }| |   \  }}|j                         }||_        t        ||j                  |       |j                  |       K |S r)   )r   MarkRecordClassClassre   
MarkAnchorrO   )r  coverager   rs   r  r   r  records           r   makeMarkRecordsr    s_    G Uv""$f-v Nr   c                 `   g }i }|j                   D ]N  }t        |      ||<   |j                         }d g|z  }t        ||j                  |       |j                  |       P | j                         D ]9  \  \  }}	}
|||      }t        ||j                        }||	   	J ||	f       |
||	<   ; |S r)   )r   rb   BaseRecordClassre   
BaseAnchorrO   itemsgetattr)r  r  r   
classCountrs   r2   r  r  anchorsr   r  s              r   makeBaseRecordsr&    s    G
C \E
""$&:%g.v #'**,  U$&!,,/u~%5u~5%	 
 Nr   c                 p   d gt        |j                        z  }t        |j                        D ci c]  \  }}||
 }}}| j                         D ]  \  \  }}	}
}}|||      }|ot	        j
                         x}|||   <   ||_        t        |      D cg c]  }t	        j                          c}|_        |j                  D ]  }d g|z  |_	         |j                  |k(  sJ ||j                  |f       |j                  |
dz
     j                  }||	   
J ||
|	f       |||	<    |S c c}}w c c}w Nr   )
rb   r   rh   r"  r_   LigatureAttachComponentCountr   ComponentRecordLigatureAnchor)r  r  r   r$  rs   r|   r+   r2   r  r   compIdx	compCountr  r  compRecr%  s                   r   makeLigatureRecordsr0    s\   fs8??++G%hoo6
7DAq1a4
7C
76:jjl  2*w	FU$>+-+<+<+>>FWSZ($-F!DI)DT%Uqb&8&8&:%UF"!11 =*.*)<&=$$	1 	
!!4
 	
1 ((15DDu~%>w'>>%! " N' 8 &Vs   D-D3c           	         |j                         }d|_        i }i }||j                  f||j                  f||j                  fd}d}| D ]  }|d   }	|	dv sJ t	        |d         }
||	   \  }}|	dk(  rdnd}t        d |dd|z    D              }t        |d|z            }t        |d|z   d  |      }|	dk(  r|
||f}}n	|
|f|z   |}}||vsJ |       |||<   t        ||      } t        t        |j                               ||j                        }|j                         }t        |||      }t        ||j                   |       t        ||j"                  t%        |             t        ||j&                  |       t        ||j(                  |       |dz   |_        |sdn"dt        d	 |j-                         D              z   |_        t        t        |j                         D cg c]  }|d   	 c}      ||j0                        }|j3                         }|j4                  d
k(  rt7        ||||j.                        }nt9        ||||j.                        }t        ||j:                  |       t        ||j<                  t%        |             t        ||j>                  |       t        ||j@                  |       |S c c}w )Nr   )markbaseligaturer   r4  r   c              3   2   K   | ]  }t        |        y wr)   r   r   r|   s     r   r   z'parseMarkToSomething.<locals>.<genexpr>  s     @!s1v@r   rV   r2  c              3   ,   K   | ]  \  }}|d      ywr   r   )r   kr   s      r   r   z'parseMarkToSomething.<locals>.<genexpr>  s     4WdaQqT4Ws   Ligature)!Typer   MarkAnchorClassBaseAnchorClassr'   r   r$   r  r   r   r   r   MarkCoverageClassMarkArrayClassr  re   
MarkRecord	MarkCountrb   MarkCoverage	MarkArray
ClassCountr"  r$  BaseCoverageClassBaseArrayClassBaser0  r&  
BaseRecord	BaseCountBaseCoverage	BaseArray)rq   r   r   rI   markDatabaseDataDatamaxKlassrt   r   r  r  anchorClass
extraItemsextrasr   r  r;   r   markCoverage	markArraymarkRecordsr8  baseCoverage	baseArraybaseRecordss                             r   parseMarkToSomethingrX    s   668DDKHH1,,-1,,-q001D
 H (1g2222$q'" Ik+Q
@tAJ'?@@DZ()DZ!12K@&=C %.61FC$##S	x'($  HMMO 4dA<O<OPL  "I!(L!<KIq||[1Iq{{C$45D!..,/D!++y)lDO  (aQ4WhnnFV4W1W-WDO8==?+aQqT+,dA4G4GL   "Ivv)(L!T__U%haQIq||[1Iq{{C$45D!..,/D!++y)K ,s   'Kc                       e Zd Zd Zy)
MarkHelperc                     dD ]c  }dD ]\  }||z   }|dk(  r|dv r|}nt        | |      |z   }|dk(  rd}t        | ||       |dk7  s=t        t        |      }t        | |dz   |       ^ e y )	N)MarkrF  )r   ArrayCountRecordAnchorr\  )r^  r_  r`  LigatureRecordr)  r^  r  )r#  re   r_   )rI   WhichWhatr;   r   r   s         r   rJ   zMarkHelper.__init__  s    % 	8EJ 8dlF?t/L'LE#D%047E,,,Ec5)7?#B.ED#-78	8r   Nr   r   r   rJ   r   r   r   rZ  rZ    s    8r   rZ  c                   ,    e Zd ZdZdZej                  Zy)MarkToBaseHelperr\  rF  N)r   r   r   r\  rF  r_   MarkBasePosr:  r   r   r   rf  rf  (  s    DD>>Dr   rf  c                   ,    e Zd ZdZdZej                  Zy)MarkToMarkHelperMark1Mark2N)r   r   r   r\  rF  r_   MarkMarkPosr:  r   r   r   ri  ri  .  s    DD>>Dr   ri  c                   ,    e Zd ZdZdZej                  Zy)MarkToLigatureHelperr\  r9  N)r   r   r   r\  rF  r_   
MarkLigPosr:  r   r   r   rn  rn  4  s    DD==Dr   rn  c                 ,    t        | |t                     S r)   )rX  rf  rq   r   r   s      r   parseMarkToBaserr  :      t-=-?@@r   c                 ,    t        | |t                     S r)   )rX  ri  rq  s      r   parseMarkToMarkru  >  rs  r   c                 ,    t        | |t                     S r)   )rX  rn  rq  s      r   parseMarkToLigaturerw  B  s    t-A-CDDr   c                 n    | r-| j                  d      D cg c]  }|j                          c}S g S c c}w N,)r   strip)rt   r&   s     r   rf   rf   F  s+    37tzz#/!AGGI/?R?/s   2c                 d    | r(| j                  d      D cg c]  }t        |       c}S g S c c}w ry  )r   r$   )rt   r|   s     r   r	  r	  J  s)    04DJJsO,qCF,<"<,s   -c                       e Zd Zd Zy)ContextHelperc                 r   |j                  d      rd}d}nd}d}|j                  d      rd}d}d}nd}d}d}||z   }|| _        || _        || _        || _        || _        || _        |d	z   | _        |dk(  rd
 }	d }
d }d }d }d }d }d }d }d }nN|dk(  rd }	d }
d }d }d }d }d }d }d }d }n*|dk(  rd }	d }
d }d }d }d }d }d  }d! }d" }n
J d#|z         |r$|
| _	        || _
        || _        || _        || _        n#|	| _	        || _
        || _        || _        || _        |dk(  r1|d$z   | _        |d%z   | _        |d&z   | _        |d'z   | _        d( | _        y |dk(  rR|d)z   | _        |d*z   | _        |d+z   | _        |d,z   | _        d- | _        |rd.nd/| _        |rdnd| _        |rd0nd1| _        y y )2NSubstSubPosChainr   rV   rT   r   LookupRecordc                     | j                   S r)   r   rs    r   r=   z(ContextHelper.__init__.<locals>.<lambda>k  
     r   c                     | j                   S r)   r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>l  
    ajj r   c                      y)Nr)   r   r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>m      r   c                      y)N)NNNr   r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>n  r  r   c                     | j                   fS r)   )Inputr  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>q      !'' r   c                 H    | j                   | j                  | j                  fS r)   	Backtrackr  	LookAheadr  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>r      q{{AGGQ[[&I r   c                 6    |\  | _         d |D        \  | _        y )Nc              3   8   K   | ]  }t        |      d z     ywr   rb   r   s     r   r   z>ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>v       "9!3q6A:"9   )r  
GlyphCountr  ds     r   SetRuleDataz+ContextHelper.__init__.<locals>.SetRuleDatat      
"9q"9r   c                     |\  | _         | _        | _        t        |d         t        |d         dz   t        |d         c| _        | _        | _        y Nr   r   r   r  r  r  rb   BacktrackGlyphCountInputGlyphCountLookAheadGlyphCountr  s     r   ChainSetRuleDataz0ContextHelper.__init__.<locals>.ChainSetRuleDatax  P    673agq{
 1YAaD	As1Q4y	)%)r   r   c                     | j                   S r)   r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  r  r   c                     | j                   S r)   r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  r  r   c                     | j                   fS r)   ClassDefr  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s    QZZM r   c                 H    | j                   | j                  | j                  fS r)   BacktrackClassDefInputClassDefLookAheadClassDefr  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s"    ####* r   c                     |\  | _         y r)   r  r  s     r   SetContextDataz.ContextHelper.__init__.<locals>.SetContextData  s     !r   c                 .    |\  | _         | _        | _        y r)   r  r  s     r   SetChainContextDataz3ContextHelper.__init__.<locals>.SetChainContextData  s    NOK$aoq7Jr   c                     | j                   fS r)   )r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  r  r   c                 H    | j                   | j                  | j                  fS r)   r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  r  r   c                 6    |\  | _         d |D        \  | _        y )Nc              3   8   K   | ]  }t        |      d z     ywr   r  r   s     r   r   z>ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>  r  r  )r  r  r  s     r   r  z+ContextHelper.__init__.<locals>.SetRuleData  r  r   c                     |\  | _         | _        | _        t        |d         t        |d         dz   t        |d         c| _        | _        | _        y r  r  r  s     r   r  z0ContextHelper.__init__.<locals>.ChainSetRuleData  r  r   c                      | j                   d   S Nr   r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s    A r   c                      | j                   d   S r  )InputCoverager  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s    aooa&8 r   c                     | j                   S r)   r  r  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  r  r   c                 N    | j                   | j                  z   | j                  z   S r)   )BacktrackCoverager  LookAheadCoverager  s    r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s$    ##aoo58K8KK r   c                 6    |\  | _         d |D        \  | _        y )Nc              3   2   K   | ]  }t        |        y wr)   r  r   s     r   r   z>ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>  s     "5a3q6"5r   )r   r  r  s     r   r  z+ContextHelper.__init__.<locals>.SetRuleData  s     !"51"5r   c                 f    |\  | _         | _        | _        d |D        \  | _        | _        | _        y )Nc              3   2   K   | ]  }t        |        y wr)   r  r   s     r   r   zCContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>  s     'SV'r   )r  r  r  r  r  r  r  s     r   r  z0ContextHelper.__init__.<locals>.ChainSetRuleData  s7    NOK$aoq7J
 (Q'	)%)r   zunknown format: %sRule	RuleCountRuleSetRuleSetCountc                     || v r|gS g S r)   r   r   r   r  s      r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s    f1# " r   	ClassRuleClassRuleCountClassSetClassSetCountc                 ^    |r|j                  | |      S |dk(  rt        |       S t               S r  )intersect_classr   r  s      r   r=   z(ContextHelper.__init__.<locals>.<lambda>  s<     !!&!,  &'!Vc&k  25 r   r  r  r  r  )r   
startswithTypr:  r  ChainTypInputIdxDataLenr  r   ContextDatar  RuleDatar  r  r  r  r  	Intersectr  ClassDefIndexr  )rI   	klassNamer   r  r:  r  r  r  r  r   ChainCoverager  ChainContextDatar  r  r  ChainRuleDatar  r  s                      r   rJ   zContextHelper.__init__P  sV   g&CDCD(EHGEHG3;	
   >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)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   Nrd  r   r   r   r~  r~  O  s    J7r   r~  c           	      &   t        t        |      }g }| D ]y  } |       }t        |      }t        |      dk(  sJ |       t	        |d         }|dkD  sJ |       |dz
  |_        t        t        ||d   t        |d       |j                  |       { |S )Nr   r   r   r   )
r#  r_   rf   rb   r$   SequenceIndexrC   r3   re   rO   )r"  r  r   r   lstitemr[   r2   s           r   parseLookupRecordsr    s    B	"E
C gt$4yA~#t#~$q'lQww!GY	47GSBST

3 Jr   c                 :    | sy  |       }t        |       |_        |S r)   )dictr   )r   r   r   rI   s       r   makeClassDefr    s    7D)_DNKr   c                     i }| j                  d      5  | D ],  }t        |d         }||vsJ |       t        |d         ||<   . 	 d d d        t        |||      S # 1 sw Y   xY w)Nzclass definitionr   r   )ra   r'   r$   r  )rq   r   r   r   rt   r  s         r   r   r     s|    I	)	* , 	,Dd1g&E	)050)"47|Ie	,,
 	4//, ,s   2AA%c                     | sy t        | t              rt        |       }  |       }t        t        |       |j                        |_        |S )Nr\   )
isinstancer   ro   r   r   )r   r   r   r  s       r   r   r     s=    &#wHS[doo>HOOr   c                     g }| j                  d      5  | D ]  }|j                  t        |d                ! 	 d d d        t        |||      S # 1 sw Y   xY w)Nzcoverage definitionr   )ra   rO   r'   r   )rq   r   r   r   rt   s        r   parseCoverager    s^    F	,	- . 	.DMM)DG,-	.. e,,. .s   %AAc           	      N   i }|D ]S  \  }}|j                  |j                     d   g       j                  t        fdt	        |      D              |f       U g }|D ]  }||vr|j                  d        g }	||   D ]  \  }} t        t        j                               }
j                  |
|       t        |
j                  dz   t        |             t        |
j                  |       |	j                  |
         t        t        j                               }t        |j                  |	       t        |j                  t        |	             |j                  |        t        | j                  |       t        | j                  t        |             y )Nr   c              3   P   K   | ]  \  }}||j                   k(  rd ndd   yw)r   r   Nr  )r   r|   r&   r   s      r   r   z!bucketizeRules.<locals>.<genexpr>  s)     O11!qzz/Qq23Os   #&r^  )
setdefaultr  rO   r   rh   r#  r_   r  r  re   r:  rb   r  r  r  r  )rI   r   rules
bucketKeysbucketsseqrecsrulesets
firstGlyph	thisRulesrulerulesets    `          r   bucketizeRulesr    sl   G 
	T3qzz?1-r299O	#OOQUV	


 H  !
W$OOD!	 , 	#IC&72qvv&(DMM$$D!&&7*CI6D!..$/T"	# )'"aii(*+c)n5 !" D!))X&D!..#h-0r   c           
          t        t        |             }| j                         d   j                         d   j	                         }|dk(  rTd|_        t        j                  d||j
                         t        ||j
                        g }| D ]  }|d   j	                         dk(  s
J |d          t        |      dj                  z   k  r-|j                  d       t        |      dj                  z   k  r-t        d |ddj                  z    D              }t        |dj                  z   d  j                  |      }	|j                  ||	f        t        fd|D              }
t!        |
|      |_        t%        |||j"                  j&                         |S |j)                  d      rd	|_        t        j                  d||j
                         t        ||j
                        d gj                  z  }| j                         d   j)                  d
      r| j+                         d   d t        d
        j	                         }ddt        j,                  fidt        j.                  fdt        j0                  fd	t        j2                  fddj                     |   \  }}||   J |       t5        | ||      ||<   | j                         d   j)                  d
      r̉j7                  ||       g }| D ]  }|d   j	                         j9                  d      s
J |d          t        |      dj                  z   k  r-|j                  d       t        |      dj                  z   k  r-t        d |ddj                  z    D              }t        |dj                  z   d  j                  |      }	|j                  ||	f        t        fd|D              t        fd|j:                     j<                  j?                         D              }
t!        |
|      |_        t%        ||tA        tC              dz                |S |j)                  d      rd|_        t        j                  d||j
                         t        ||j
                        t        d tA        j                        D              }| j                         d   j)                  d      r| j+                         d   d t        d        j	                         }ddt        j"                  fidt        jD                  fdt        jF                  fd	t        jH                  fddj                     |   \  }}||   j                  tK        | ||             | j                         d   j)                  d      rωjM                  ||       tO        |       } t        |       dk(  sJ | d   }|d   j	                         dk(  s
J |d          t        |dd  j                  |      }	tQ        |jR                  dz   t        |	             tQ        |j                  |	       |S J |       )Nr   r  r   zParsing %s format %srT   c              3   D   K   | ]  }t        t        |              y wr)   )r,   rf   r6  s     r   r   zparseContext.<locals>.<genexpr>9  s     X1
?1#56Xs    c              3   H   K   | ]  \  }}|j                      d      ywr   Nr  r   r  r  r   s      r   r   zparseContext.<locals>.<genexpr>=  s"     Dd#ajj/!,D   "r   r   r   )	backtrackrT   	lookahead)r   rV   r   c              3   2   K   | ]  }t        |        y wr)   )r	  r6  s     r   r   zparseContext.<locals>.<genexpr>Y  s     JQa(Jr   c              3   H   K   | ]  \  }}|j                      d      ywr   r  r  s      r   r   zparseContext.<locals>.<genexpr>\  s"     E)#t3qzz?1-Er  c              3   2   K   | ]  \  }}|v s|  y wr)   r   )r   r+   r   firstClassess      r   r   zparseContext.<locals>.<genexpr>]  s!      
!QQ,EVA
s   r  rV   c              3       K   | ]  }g   y wr)   r   r6  s     r   r   zparseContext.<locals>.<genexpr>f  s     7"7s   coverage definition begin)r  inputr  r^  )*r#  r_   r   r   r   r   rL   rM   r~  rb   r  rO   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  listre   r:  )rq   r   r:  r   rI   r   r  rt   r  r  firstGlyphsr   r2   r   	coveragesr   r  s                  @@r   parseContextr  -  s   72tD
++-

 
 
"1
%
+
+
-C
g~		($<$, 	&D7==?g-6tAw6-d)a!))m+B d)a!))m+XQQYY@WXXC%d1qyy=?&;Q^^YWDLL#t%	& DeDD$[$7tQt}}';';<~ K} 
g			($<$,FQYY&	kkmA''(@A**,q/"BS)A%B$BCIIKC BKK( #$R%9%9!:B,,-"#R%9%9!:		 ii	 	JC S>).3.)*5$eDIcN kkmA''(@A 	
y) 	&D7==?--g6?Q?6d)a!))m+B d)a!))m+J$q1qyy=2IJJC%d1qyy=?&;Q^^YWDLL#t%	& EuEE 
#AJJ/99??A
 
 %[$7tQuS->-B'CD: K9 
j	!		($<$,7eAII&677	kkmA''(CD**,q/"ES)D%E$EFLLNC BKK( #$R%9%9!:!1!12"#R%9%9!:		 ii	 	JC cN!!-t5"IJ kkmA''(CD 	
dI&U5zQQxAw}}*,5d1g5,!$qr(ANNIFaffw&D	2annd+ K 	#qr   c                      t        | |d|      S )NContextSubstr   r  rq   r   r   s      r   parseContextSubstr    s    t^yIIr   c                      t        | |d|      S )N
ContextPosr  r  r  s      r   parseContextPosr    s    t\YGGr   c                      t        | |d|      S )NChainContextSubstr  r  r  s      r   parseChainedSubstr    s    t%8INNr   c                      t        | |d|      S )NChainContextPosr  r  r  s      r   parseChainedPosr    s    t%6)LLr   c                    t        j                         }d|_        g g f}| j                         d   j	                  d      r| j                         d   d t        d        j                         }dt         j                  fdt         j                  fd|   \  }}||   j                  t        | ||             | j                         d   j	                  d      r|d   |_        t        |j                        |_        |d   |_	        t        |j                        |_        i }| D ]-  }	t        |	      dk(  sJ |	       t        |	      }	|	d   ||	d   <   / t        t!        |j#                               |      |_        |j$                  j&                  D 
cg c]  }
||
   	 c}
|_        t        |j(                        |_        |S c c}
w )Nr   r   r
  )r  r  r   r   )r_   ReverseChainSingleSubstr   r   r   r   rb   r   r  r  rO   r  r  r  r,   r   r   r   r   r   
Substituter  )rq   r   r   rI   r  r   r2   r   r1   rt   r8  s              r   parseReverseChainedSubstr"    s   %%'DDKRI
++-

#
#$?
@jjl1oA%@!A ABHHJR112R112
 
U 	#mE4uEF ++-

#
#$?
@ 'q\D"4#9#9:D&q\D"4#9#9:DG #4yA~#t#~$7Q# !W\\^!4d;DM+/==+?+?@awqz@DO$//*DOK As   G
c                    | j                  d      }|\  }}}t        j                  d||       t        j                         }t        |       \  |_        }	|	|	|_        dt        fdt        fdt        fdt        fdt        fdt        fd	t        fd
dt        fdt         fdt"        fdt$        fdt&        fdt(        fdt*        fdt,        fd	t.        fd	d|   |   \  |_        }
| j3                  d      5  g }| j5                         r| j3                  d      5  | j5                         rG |
| ||      }|j0                  |j0                  k(  sJ |j7                  |       | j5                         rGd d d        | j9                         d   dv rt;        |        | j5                         rd d d        | j                  d       |_        t?        |j<                        |_         |j@                  dk(  ry |S # 1 sw Y   xY w# 1 sw Y   YxY w)NlookupzParsing lookup type %s %sr   r   rV   rS         r   )singlemultiple	alternater4  contextchainedreversechained   )	r'  r   kernsetcursivezmark to basezmark to ligaturezmark to markr*  r+  GSUBGPOSz
lookup end)
% subtablezsubtable endr   )!expectrL   rM   r_   Lookupr   
LookupFlagMarkFilteringSetr   r   r   r   r  r  r"  r   r  r  r  rr  rw  ru  r  r  
LookupTyper  r   rO   r   r   SubTablerb   SubTableCount)rq   tableTagr   r   rt   _r   r   r$  r   parseLookupSubTable	subtablessubtables                r   parseLookupr@    s   <<!DLAtSII)35YY[F#3E#: Fy"+ *+M*^,M*,-,- ":;
 .)	N<(<(0!"$7 80?+?+

.* +.* +.*F*. 
\	" 
	jjl;< /jjl25$	JH!,,0C0CCCC$$X. jjl/
 {{}Q#AAU jjl
 
LLFOv/Fq  M/ /	
 
s%   5$HAG618H6G?	;HHc                     t        j                  |             }t               t               |dv sJ t        j	                  d|        t        t        |             }d|_        dfdfdfdfdd	}|j                         D ]  \  }}t        ||d         | j                         | j                         d
   j                         }||vr0t        j	                  d| j                                t        |        f||   \  }}|dk(  r|j                  *t        j                         |_        g |j                  _        | j                         \  }	}
}	t        | ||      }1|
vs
J d|
z         t!        |j                  j                        |
<   nJt#        |
      t!        |j                  j                        k(  sJ d|
t!        |j                        fz         |j                  j                  j%                  |       n&t        ||      J |       t        || ||              | j                         |j                  r.t!        |j                  j                        |j                  _        j)                          t*        j,                  j/                  t0              rxd|vrt3        d      |d<   i |d   _        |d   j4                  j7                  t8        i       j7                  |i       }j;                         D ]  \  }
}d|
dg|t=        |      <    j)                          ||_        |S )Nr0  z
Parsing %s   r`   c                     t        |       S r)   )r   )rq   rr   s    r   r=   zparseGSUBGPOS.<locals>.<lambda>  s    /%< r   r   c                     t        |       S r)   )r   )rq   rr   r   s    r   r=   zparseGSUBGPOS.<locals>.<lambda>  s    *5)ZH r   )
LookupListN)zscript table beginzfeature table beginr$  r   Skipping %sr$  zDuplicate lookup name: %sr   DebgrT   ) r   getTableClassrE   rL   rM   r#  r_   Versionr   re   r   r   r   rE  r5  r@  rb   r$   rO   r   rQ   osenvironr   r   r
   r  r  r   r"  strtable)rq   r   r;  	containerrI   fieldsattrparserr   r<  r   r$  rM   rr   r   s                @@r   parseGSUBGPOSrR    s   -##H-/I!I "J''''IIlH% 72x "DDL <

 H 
 '
F  "fdD!"
**,
"jjl1o##%fIImUZZ\2Kc{f(?&"$--/)+&JAtQ $	BF$9,P.ID.PP,"%doo&<&<"=	$4yC(>(>$?? $L B ? OO""))&14&.44.D$u.1 **,
"2 &)$//*@*@&A#'')::>>./T!'/V$&V!Vjj!6;Hb) 
 !* 1 4f&($^c&k"4 	((*IOr   c                     t        | |d      S )Nr1  rR  rq   r   s     r   	parseGSUBrV  #      f--r   c                     t        | |d      S )Nr2  rT  rU  s     r   	parseGPOSrY  '  rW  r   c                 $   i }| j                  d      5  | D ]:  }t        |d         }||vsJ |       |dd  D cg c]  }t        |       c}||<   < 	 d d d        t        j                  ||j                               S c c}w # 1 sw Y   2xY w)Nzattachment listr   r   )ra   r'   r$   r   buildAttachListr   )rq   r   pointsrt   r  r|   s         r   parseAttachListr]  +  s    F	(	) 7 	7Dd1g&E&--&-1!"X6SV6F5M	77
 vt'>'>'@AA 7	7 7s   &BBBBBc                 n   i }| j                  d      5  | D ]^  }t        |d         }||vsJ |       t        |d         }|dd  D cg c]  }t        |       }}|t        |      k(  sJ |       |||<   ` 	 d d d        t	        j
                  |i |j                               S c c}w # 1 sw Y   3xY w)Ncaretsr   r   r   )ra   r'   r$   rb   r   buildLigCaretListr   )rq   r   r_  rt   r  numr|   
thisCaretss           r   parseCaretListrc  5  s    F	x	  ' 	'Dd1g&E&--&d1g,C*.qr(3Q#a&3J3#j/)/4/)&F5M	''   T-D-D-FGG 4' 's   4B+B&B+&B++B4c                 .   t        j                         }d|_        dt        | j	                               z   |_        d g|j
                  z  |_        t        | j                               D ]'  \  }}t        t        |      |      |j                  |<   ) |S r(  )r_   MarkGlyphSetsDefMarkSetTableFormatr   r   MarkSetCountr   ro   r"  r   r   )setsr   rI   r8  r   s        r   makeMarkFilteringSetsri  B  s     DDC		,,DFT...DMtzz|$ 61'A5a6Kr   c                    i }| j                  d      5  | D ]P  }t        |      dk(  sJ |       t        |d         }t        |d         }||vrg ||<   ||   j	                  |       R 	 d d d        t        ||      S # 1 sw Y   xY w)Nzset definitionr   r   r   )ra   rb   r'   r$   rO   ri  )rq   r   rh  rt   r  sts         r   parseMarkFilteringSetsrl  L  s    D	'	( # 	#Dt9>'4'>d1g&ET!WB~RHOOE"	## !t,,# #s   AA??Bc                 |    t        j                  d             }t        j                  d       t	        j
                         }dd fdt        fdt        fdd fd	t        fd
}|j                         D ]  \  }}t        ||d         | j                         | j                         d   j                         }||vr"t        j                  d|       t        |        W||   \  }}t        ||      J |       t        || || |             | j                         |j                  dnd|_        ||_        |S )NGDEFzParsing GDEFGlyphClassDefc                 :    t        | |t        j                        S Nr   )r   r_   ro  rU  s     r   r=   zparseGDEF.<locals>.<lambda>a  s    eTAQAQ R r   
AttachListLigCaretListMarkAttachClassDefc                 :    t        | |t        j                        S rq  )r   r_   rt  rU  s     r   r=   zparseGDEF.<locals>.<lambda>g  s    eTAVAV W r   re  )r   zattachment list beginzcarets beginz&mark attachment class definition beginzmarkfilter set definition beginr   rF  rB  i  )r   rH  rL   rM   r_   rn  r]  rc  rl  r   re   r   r   r   r#  re  rI  rM  )rq   r   rN  rI   rO  rP  rQ  r   s           r   	parseGDEFrv  Z  s>   +##F+-IIIn779D R#
 #/!@'8 W3
 -?@V+WF  "fdD!"
**,
"jjl1o##%fIImS)Kc{ftT"*0D0*dF5$/0 **,
" "&!6!6!>:JDLIOr   c                 J    t        j                  d             }t        j                  d       g }| j	                         | j                  dt        |      z         dD cg c]  }t        | |       c}\  }}}}t        |   |      }	||	_	        ||	_
        ||	_        i |	_        t        |       }
|
d   dk7  r3|
d   |	j                  t        |
d   d      <   t        |       }
|
d   dk7  r3|j                  |	       | j	                         d|_        ||_        |S c c}w )	NcmapzParsing cmapzcmap subtable %d)
platformID
encodingIDformatlanguager   zend subtabler   r    )r   rH  rL   rM   r   r4  rb   parseCmapIdr   ry  	platEncIDr|  rx  r   r$   rO   tableVersiontables)rq   r   rN  r  fieldplatIdencIdfmtlangrM  rt   s              r   	parseCmapr  {  s%   +##F+-IIInF
**,
"'#f+56 L$
 u%$
 sD S!#&!
E{1g'+/7EJJs47B'(;D 1g' 	e **,
"  II!$
s   #D c                 H    t        |       }||d   k(  sJ t        |d         S )Nr   r   )r   r$   )rq   r  rt   s      r   r}  r}    s+    ;DDGtAw<r   c                    t         j                  d       | j                         }d }|d   j                         d   dk(  r|d   j                         d   }n>dj	                  |d   j                         d d       dk(  r|d   j                         d   }|/t        |        |j                  d      }||}n||k(  s	J ||f       |J d	       	 t        t        t        t        d
|   | |      S )NzParsing tabler   FontDamer   r!   rV   zFont Chef TablerS   z7Don't know what table to parse and data doesn't specify)r1  r2  rn  rx  )rL   rM   r   r   joinr   ljustrV  rY  rv  r  )rq   r   r;  rt   tags        r   
parseTabler    s   IIo;;=D
CAw}}qZ'1gmmoa 	$q'--/"1%	&*;	;1gmmoa 
UiilHs?3XsO3? 	A@A	
 
 t r   c                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zed
        Zed        Zd Zd Zy)	Tokenizerc                     t        |      }	 |j                  | _        t        |      | _        d| _        d| _        g | _        d | _        y #  d | _        Y 8xY w)NrT   r   )iterr   filenamerq   rt   linenostoppersbuffer)rI   frq   s      r   rJ   zTokenizer.__init__  sR    Q	!FFDM %[
		! DMs   A 	Ac                     | S r)   r   rH   s    r   __iter__zTokenizer.__iter__  s    r   c                    | xj                   dz  c_         t        | j                        x}| _        |j	                  d      D cg c]  }|j                          }}t        |      dk(  r|d   s|d= |rE|d   s@t        j                  d| j                   | j                  fz         |r|d   s|d= |r|d   s|S c c}w )Nr   	r   z!trailing tab found on line %d: %s)	r  r   rq   rt   r   r{  rb   rL   warning)rI   rt   r&   s      r   
_next_linezTokenizer._next_line  s    q

++ty#'::d#34a	44t9>$q'QRKK;t{{DII>VVWtBxH tBx 5s   B=c                 ^    	 | j                         }|r|d   r|d   d   dk7  s|d   dk(  r|S -)Nr   %r3  )r  rI   rt   s     r   _next_nonemptyzTokenizer._next_nonempty  s>    ??$DQT!WQZ3%6$q'\:Q	 r   c                 d    | j                   r| j                   }d | _         |S | j                         S r)   )r  r  rI   rets     r   _next_bufferedzTokenizer._next_buffered  s-    ;;++CDKJ&&((r   c                 ~    | j                         }|d   j                         | j                  v r|| _        t        |S r  )r  r   r  r  StopIterationr  s     r   __next__zTokenizer.__next__  s8    ""$7==?dmm+DKr   c                 "    | j                         S r)   )r  rH   s    r   r   zTokenizer.next  s    }}r   c                     | j                   s	 | j                         | _         | j                   d   j                         | j                  v ry | j                   S # t        $ r Y y w xY wr  )r  r  r  r   r  rH   s    r   r   zTokenizer.peek  s^    {{"113 ;;q>!T]]2{{	 ! s   A 	A%$A%c                 .    | j                         }||S dS )N)rT   )r   r  s     r   r   zTokenizer.peeks  s    iikos050r   c              #      K   |dz   }|dz   }| j                  |       | j                  j                  |       d  | j                  d= | j                  |dz          y w)Nz beginz endr  )expectendswithr  rO   r4  )rI   r  startends       r   ra   zTokenizer.between  sW     hFlE"S!MM"C&L!s   AAc              #      K   t        |      t        ur|f}| j                  j                  |       d  | j                  t	        |       d = y wr)   )rN   r   r  extendrb   )rI   tagss     r   r  zTokenizer.until  sB     :U"7DT"MM3t9*,'s   AAc                 h    t        |       }|d   j                         }||k(  sJ d|d|d       |S )Nr   z
Expected '', got '')r   r   rI   r&   rt   r  s       r   r4  zTokenizer.expect  s5    Dz1gmmoax=a==xr   c                     t        |       }|d   j                         }|j                  |      sJ d|d|d       |S )Nr   zExpected '*r  r  )r   r   r   r  s       r   r  zTokenizer.expectendswith  s9    Dz1gmmo||AEa EEr   N)r   r   r   rJ   r  r  r  r  r  r   r   r   r	   ra   r  r4  r  r   r   r   r  r    sa    
)1 " " ( (r   r  c                 4    t        |       }t        |||      S )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_``)
    r;  )r  r  )r  r   r;  rq   s       r   buildr    s      aLEeTH55r   c                    ddl }ddlm} ddlm} | |j
                  dd }  |        ddl}|j                  dt        j                        }|j                  dd	d
dd       |j                  ddddd       |j                  dd
t        dd       |j                  |       } |3| j                  r t        j                  | j                        }n |       }| j                   D ]  }t"        j%                  d|       t'        |dd      5 }t)        ||| j*                        }ddd       j-                  |      }	|j/                         }
|
j1                  |	|       ddlm} |j*                  }|j7                  |j8                        }|j;                  |       |j=                          |
j?                  ||       |jA                  |       |j=                           y# 1 sw Y   xY w)zConvert a FontDame OTL file to TTX XML

    Writes XML output to stdout.

    Args:
            args: Command line arguments (``--font``, ``--table``, input files).
    r   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TABLEr;  z7Table to fill (sniffed from input file if not provided)inputs+zInput FontDame .txt files)r  rN   nargsr  zProcessing %srtzutf-8)encodingr  )	xmlWriter)!sys	fontToolsr  fontTools.misc.testToolsr  argvargparseArgumentParsermain__doc__add_argumentrL  
parse_argsr   r   r"   r  rL   rM   openr  r;  compile	__class__	decompilefontTools.miscr  	XMLWriterstdoutbegintagnewlinetoXMLendtag)argsr   r  r  r  r  rQ  r  rM  blob
decompiledr  r  writers                 r   r  r  -  s    &1|xx| N $$LL % F
 S   F   &s#<W   T"D|99<<		*D:D[[ 		/1%!TG, 	;!TDMM:E	;}}T"__&
T4( 	-nn$$SZZ0&c%	; 	;s   G%%G.	__main__r)   )NN)br  r   fontTools.ttLib.tables._c_m_a_pr   fontTools.ttLib.tablesr   r_   fontTools.ttLib.tables.otBaser   r   fontTools.otlLibr   r   
contextlibr	   fontTools.ttLibr
    fontTools.feaLib.lookupDebugInfor   r   operatorr   rJ  logging	Exceptionr   r   r   r   	getLoggerrL   r'   r,   r3   r6   rC   r  rE   r   r   r   r   r   r   r   r   r  r  r`  r  r  r  r&  r0  rX  objectrZ  rf  ri  rn  rr  ru  rw  rf   r	  r~  r  r   r  r  r   r   r  r  r  r  r  r  r  r"  r@  rR  rV  rY  r]  rc  ri  rl  rv  r  r}  r  r  r  r  r   r  r  r   r   r   <module>r     s6    8 1 L + % $ X  	 	) 		[ 		1 		0 	 g*+%

$ $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CHHTV r   