+
    i                        ^ RI Ht ^ RIHtHtHtHt ^ RIHt ^ RI	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHt ^ RIHtHt ^ RIHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t. ^ RI/H0t0 ^ RI1H2t2 ^ RI3H4t4 ^ RI5H6t6 ^ RI7H8t8 ^ RI9H:t:H;t; ^ RI<H=t= ^ RI>t>^ RI?t?^ RI@HAtA ^ RIBtB^ RICtC^ RIDtD]BP                  ! ]F4      tGRR ltHRR ltI ! R R]J4      tKR# )    )sstruct)Tagtostr
binary2numsafeEval)FeatureLibError)LookupDebugInfoLOOKUP_DEBUG_INFO_KEYLOOKUP_DEBUG_ENV_VAR)Parser)FeatureFile)VariableScalar)builder)
maxCtxFont)newTablegetTableModule)otBaseotTables)AlternateSubstBuilderChainContextPosBuilderChainContextSubstBuilderLigatureSubstBuilderMultipleSubstBuilderCursivePosBuilderMarkBasePosBuilderMarkLigPosBuilderMarkMarkPosBuilderReverseChainSingleSubstBuilderSingleSubstBuilderClassPairPosSubtableBuilderPairPosBuilderSinglePosBuilderChainContextualRuleAnySubstBuilder)OpenTypeLibError)VarLibError)OnlineVarStoreBuilder)buildVarDevTable)addFeatureVariationsRaw)normalizeValuepiecewiseLinearMap)defaultdictN)StringIOc                @    \        W4      pVP                  W#R7       R# )a  Add features from a file to a font. Note that this replaces any features
currently present.

Args:
    font (feaLib.ttLib.TTFont): The font object.
    featurefile: Either a path or file object (in which case we
        parse it into an AST), or a pre-parsed AST instance.
    tables: If passed, restrict the set of affected tables to those in the
        list.
    debug: Whether to add source debugging information to the font in the
        ``Debg`` table

tablesdebugN)Builderbuild)fontfeaturefiler0   r1   r   s   &&&& x/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/fontTools/feaLib/builder.pyaddOpenTypeFeaturesr7   4   s     d(GMMM-    c                d    \        \        V4      4      pV'       d   W%n        \        WW4R7       R# )a5  Add features from a string to a font. Note that this replaces any
features currently present.

Args:
    font (feaLib.ttLib.TTFont): The font object.
    features: A string containing feature code.
    filename: The directory containing ``filename`` is used as the root of
        relative ``include()`` paths; if ``None`` is provided, the current
        directory is assumed.
    tables: If passed, restrict the set of affected tables to those in the
        list.
    debug: Whether to add source debugging information to the font in the
        ``Debg`` table

r/   N)r-   r   namer7   )r4   featuresfilenamer0   r1   r5   s   &&&&& r6   addOpenTypeFeaturesFromStringr=   F   s%    & 5?+K#&Fr8   c            	       8  a ] tR t^_t o]! R R^ 4       4      tR tR_R ltR tR t	R`R lt
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R  t#R! t$R" t%R# t&RaR$ lt'R% t(RaR& lt)R' t*R( t+R) t,R* t-R+ t.R, t/R- t0R. t1R/ t2R0 t3R1 t4R2 t5R3 t6R4 t7R5 t8. 3R6 lt9R7 t:R8 t;R9 t<RaR: lt=R; t>R< t?R= t@R> tAR? tBR@ tCRA tDRB tERC tFRD tGRE tHRF tIRG tJRH tKRI tLRJ tMRK tNRL tORM tPRN tQRO tRRP tSRQ tTRR tURS tVRT tWRU tXRV tYRW tZRX t[RY t\]]P                   U UUu/ uFF  w  rr VP                  RZ4      '       d   K  V^ ,          P                  4       VR[,          ,           W3bKH  	  uppp taR\ tbR]tcVtdR# u uppp i )br2   c              #  8   "   T F  p\        V4      x  K  	  R # 5iN)r   ).0tags   & r6   	<genexpr>Builder.<genexpr>`   s!       
C 	C
   c                ,   Wn         \        V\        4      '       d   VR uV n        V n        MR VuV n        V n        VP                  4       V n        R V n        RV9   dL   VR,          P                  V n        \        V P                   Uu. uF  q3P                  NK  	  up4      V n        \        4       V n        R V n        ^ V n        R V n        RV n        \        4       V n        RV n        / V n        R V n        R V n        R V n        . V n        R/ R/ /V n        / V n        / V n        / V n        . V n        R V n        / V n        RV n        \        4       V n         / V n!        \        4       V n"        / V n#        / V n$        \K        \L        4      V n'        R V n(        R V n)        . V n*        R V n+        R V n,        / V n-        / V n.        / V n/        / V n0        / V n1        / V n2        / V n3        / V n4        / V n5        / V n6        / V n7        / V n8        / V n9        R # u upi )NfvarFGSUBGPOS):r4   
isinstancer   	parseTreefilegetReverseGlyphMapglyphMapvarstorebuilderaxesr'   axisTagsetdefault_language_systems_script_lookupflag_lookupflag_markFilterSet_use_extension_language_systemsseen_non_DFLT_script_named_lookups_cur_lookup_cur_lookup_name_cur_feature_name_lookups_lookup_locations	features_required_features_feature_variations_aalt_features_aalt_location_aalt_alternates_aalt_use_extension_featureNames_featureNames_ids_cv_parameters_cv_parameters_ids_cv_num_named_params_r,   listcv_characters_size_parameters_fontRevision_names_base_horiz_axis_base_vert_axis_attachPoints_ligCaretCoords_ligCaretPoints_glyphClassDefs_markAttach_markAttachClassID_markFilterSets_os2_hhea_vhea_stat_conditionsets_model_cache)selfr4   r5   axs   &&& r6   __init__Builder.__init__p   s   	 k;//(3T%DNDI(,k%DNDI//1#T>V))DI#8&*ii0ii0$D  *-&)-&# #%*"  $!%!'VR 8"$#%  " "#(  U!#!e"$$&!)$/ $! $#!!!"$!	


  { 1s   
HNc                $  a  S P                   f4   \        S P                  S P                  4      P	                  4       S n         S P                   P                  S 4       Vf   S P                  pMO\        V4      pVS P                  ,
          pV'       d*   RP                  \        V4      4      p\        RV R24      hRV9   d   S P                  4        RV9   d   S P                  4        RV9   d   S P                  4        RV9   d   S P                  4        RV9   d   S P                  4        R	V9   d   S P!                  4        R
V9   d   S P#                  4        R F  pWQ9  d   K  S P%                  V4      pS P&                  '       d   S P)                  We4       VP*                  P,                  ^ 8  g7   VP.                  P0                  ^ 8  g   VP2                  P4                  ^ 8  d#   \7        V4      ;pS P8                  V&   Wgn        K  VS P8                  9   g   K  S P8                  V K  	  \<        ;QJ d    V 3R lR 4       F  '       g   K   RM	  RM! V 3R lR 4       4      '       d=   R	S P8                  9   d,   \?        S P8                  4      S P8                  R	,          n         RV9   dG   S PC                  4       pV'       d   VS P8                  R&   MRS P8                  9   d   S P8                  R RV9   dG   S PE                  4       p	V	'       d   V	S P8                  R&   MRS P8                  9   d   S P8                  R V'       g*   \F        PH                  PK                  \L        4      '       d   S PO                  4        R # R # )N, z9The following tables were requested but are unsupported: .rH   headhheavhear:   OS/2STATc              3   @   <"   T F  qSP                   9   x  K  	  R # 5ir@   )r4   )rA   rB   r   s   & r6   rC    Builder.build.<locals>.<genexpr>   s     <+;Cdii+;   TFGDEFBASErI   rH   )(rK   r   rL   rN   parser3   supportedTables	frozensetjoinsortedNotImplementedErrorbuild_feature_aalt_
build_head
build_hhea
build_vhea
build_name
build_OS_2
build_STAT	makeTablerb   makeFeatureVariations
ScriptListScriptCountFeatureListFeatureCount
LookupListLookupCountr   r4   tableanyr   usMaxContext	buildGDEF	buildBASEosenvirongetr   	buildDebg)
r   r0   r1   unsupportedunsupported_stringrB   r   	fontTablegdefbases
   f&&       r6   r3   Builder.build   s   >>!#DIIt}}=CCEDNT">))Fv&F 4#7#77K%)YYvk/B%C")O)*!-  V$$&VOOVOOVOOVOOVOOVOO#C NN3'E'''**56  ,,q0$$11A5##//!3-5c]:	DIIcN"'		!IIcN $ 3<+;<333<+;<<<499AT-7		-BDIIf*V>>#D$(		&!499$IIf%V>>#D$(		&!499$IIf%BJJNN#788NN 9r8   c                    V! V P                   V4      pV P                  Vn        V P                  Vn        V P
                  Vn        V P                  P                  V4       V# r@   )	r4   rU   
lookupflagrV   markFilterSetrW   	extensionr^   append)r   locationbuilder_classresults   &&& r6   get_chained_lookup_Builder.get_chained_lookup_   sS    tyy(3 ,,#==..V$r8   c                    V P                    F4  w  r4W4V3pV P                  P                  V. 4      P                  V4       K6  	  R # r@   )rX   r`   
setdefaultr   )r   lookupfeature_namescriptlangkeys   &&&   r6   add_lookup_to_feature_Builder.add_lookup_to_feature_  s=     11LF.CNN%%c2.55f= 2r8   c                   V P                   '       d   \        V P                   4      V8X  dx   V P                   P                  V P                  8X  dS   V P                   P                  V P
                  8X  d.   V P                   P                  V4      '       d   V P                   # V P                  '       d   V P                   '       d   \        R V4      hV! V P                  V4      V n         V P                  V P                   n        V P
                  V P                   n        V P                  V P                   n        V P                  P                  V P                   4       V P                  '       d$   V P                   V P                  V P                  &   V P                  '       d'   V P!                  V P                   V P                  4       V P                   # )OWithin a named lookup block, all rules must be of the same lookup type and flag)r[   typer   rU   r   rV   can_add_mappingr\   r   r4   rW   r   r^   r   rZ   r]   r   )r   r   r   mappings   &&&&r6   get_lookup_Builder.get_lookup_  sk   T%%&-7  ++t/?/??  ..$2P2PP  0099###   T%5%5%5!0 
 )H=&*&6&6#)-)G)G&%)%8%8"T--.   9=9I9ID 5 56!!! ''(8(8$:P:PQr8   c                $  a V P                   '       g   V P                  '       g   R # V P                  P                  4        UUu/ uF  w  rV\        V4      bK  	  pppV P                   R.,            F  w  rEV P                  P                  4        UUUU	u. uF  w  w  rgrW8X  g   K  WgW3NK  	  up	ppppV'       g(   VR8w  d!   \
        P                  ! V: RV: R24       Ks  V F  w  rgrV	 Fy  p
\        V
\        4      '       g   V
.p
V
 FW  pVP                  4       P                  4        F2  w  rVP                  V. 4      oSP                  V3R lV 4       4       K4  	  KY  	  K{  	  K  	  EK  	  VP                  4        UUu/ uF   w  r\        V4      ^8X  g   K  W^ ,          bK"  	  pppVP                  4        UUu/ uF  w  r\        V4      ^8  g   K  WbK  	  pppV'       g   V'       g   R # V P                  P                  4        UUUU	u/ uF  w  w  rgrVR8w  g   K  WgV3V	bK  	  up	pppV n        V P                  p. V n        V P                  V P                  RV P                  4       V'       d   V P!                  X\"        4      pVVn        V'       d   V P!                  X\&        4      pVVn        V P+                  4        V P                  P                  V4       R # u uppi u up	pppi u uppi u uppi u up	pppi )Naaltz
: Feature z has not been definedc              3   8   <"   T F  qS9  g   K  Vx  K  	  R # 5ir@    )rA   galts_for_glyphs   & r6   rC   .Builder.build_feature_aalt_.<locals>.<genexpr>=  s      2+/aN3J4   
)Nr   )rc   re   itemsrl   r`   warningswarnrJ   getAlternateGlyphsr   extendlenr^   start_featurerd   rf   r   r   r   r   
alternatesend_feature)r   r   ar   r   r:   r   r   featurelookups
lookuplistr   glyphaltsreplsinglemultiold_lookupssingle_lookupmulti_lookupr   s   &                   @r6   r   Builder.build_feature_aalt_$  s   """4+@+@+@
 .2-B-B-H-H-JK-JTQaaj-J
K"11^4DDDNH 9=8L8L8N8N4+V7? 1w08NG tv~xQUVW29.g")J%j$77&0\
",+1+D+D+F+L+L+NKE-7-B-B5"-MN*11 2+/2  ,O #- #* 3: E* /9.>.>.@
.@{uCIQRNNE7N.@ 	 
 1;0@0@0BT0Bc$iRSm0BTe 59NN4H4H4J
4J0'w&  -V7#W,4J

 mm4..8P8PQ ,,X7IJM$*M!++H6KLL&+L#[)U L&
 U
s6   K0K6)K6	K>"K>LLL

+	L

c                8   V P                   '       g   R # V P                  P                  R4      pV'       gR   \        R4      ;qP                  R&   VP	                  RV P                  4       RVn        RVn        R;Vn        Vn        V P                   Vn	        R # )Nr   g      ?i<_l   e s6                                                         )
ro   r4   r   r   	decompiletableVersionmagicNumbercreatedmodifiedfontRevisionr   r   s   & r6   r   Builder.build_headW  sz    !!!		f%(0(88EIIf%OOJ		2!$E *E-77EMEN!//r8   c                8   V P                   '       g   R # V P                  P                  R4      pV'       g=   \        R4      ;qP                  R&   VP	                  RV P                  4       RVn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn	        R # R # )Nr      caretoffsetascender	descenderlinegap$                                       )
r{   r4   r   r   r   r   caretOffsetascentdescentlineGapr   s   & r6   r   Builder.build_hheac  s    zzz		f%(0(88EIIf%OOJ		2!+EDJJ& $

= 9E#::j1EL$**$ JJ{3EM

" JJy1EM #r8   c                   V P                   '       g   R # V P                  P                  R4      pV'       g=   \        R4      ;qP                  R&   VP	                  RV P                  4       RVn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        R # R # )Nr   i  verttypoascenderverttypodescenderverttypolinegapr   )	r|   r4   r   r   r   r   r   r   r  r   s   & r6   r   Builder.build_vheat  s    zzz		f%(0(88EIIf%OOJ		2!+E+::&89EL$**, JJ':;EM

* JJ'89EM +r8   c                    VP                    Uu. uF  q"P                  NK  	  pp\        R R4       F  pWC9  g   K  Vu # 	  R# u upi )   i  N)namesnameIDrange)r   r   r:   nameIDsuser_name_ids   &&   r6   get_user_name_idBuilder.get_user_name_id  s>    +0;;7;4;;;7!#u-L*## . 8s   Ac                   R pVR8X  do   \         P                  ! 4       pV P                  w  Vn        Vn        Vn        Vn        WP                  9   d   V P                  V,          Vn        V# ^ Vn         V# WP                  9   d_   V P                  '       g    V# WP                  9   g   Q h\         P                  ! 4       p^ Vn        V P                  V,          Vn         V# WP                  9   Ed   \         P                  ! 4       p^ Vn        V P                   P#                  VR3^ 4      Vn        V P                   P#                  VR3^ 4      Vn        V P                   P#                  VR3^ 4      Vn        V P*                  P#                  V^ 4      Vn        V P                   P#                  VR3^ 4      Vn        \1        V P2                  V,          4      Vn        V P2                  V,          Vn        V# )NsizeFeatUILabelNameIDFeatUITooltipTextNameIDSampleTextNameIDParamUILabelNameID_0)r   FeatureParamsSizern   
DesignSizeSubfamilyID
RangeStartRangeEndrh   SubfamilyNameIDrg   FeatureParamsStylisticSetVersionUINameIDri   FeatureParamsCharacterVariantsFormatrj   r   r  r  r  rk   NumNamedParametersFirstParamUILabelNameIDr   rm   	CharCount	Character)r   rB   paramss   && r6   buildFeatureParamsBuilder.buildFeatureParams  s   &=//1F %%!"!,,,)-)?)?)D&< 9 *+&8 7 &&&)))0 - 44444!;;=!""&"8"8"=& % '''<<>FFM'+'>'>'B'B)*A(F$ .2-D-D-H-H/0!.F* '+&=&=&A&A()1'F# )-(A(A(E(Ec1(MF%-1-D-D-H-H,-q.F*  #4#6#6s#;<F#2237Fr8   c                &   V P                   '       g   R # V P                  P                  R4      pV'       g!   \        R4      ;qP                  R&   . Vn        V P                    EF  pVw  r4rVp\        V\        4      '       g   TpWP                  9   dZ   WP                  9  d6   V P                  V4      V P                  V&   V P                  V,          f   Q hV P                  V,          pMpV^ ,          V P                  9   dY   WP                  9  d6   V P                  V4      V P                  V&   V P                  V,          f   Q hV P                  V,          pVP                  WsWEV4       EK  	  VP                  P                  4        R # )Nr:   )rp   r4   r   r   r
  rJ   intrg   rh   r  ri   rj   setNamesort)	r   r   r:   r  
platformID	platEncIDlangIDstringrB   s	   &        r6   r   Builder.build_name  sJ   {{{		f%(0(88EIIf%EKKKD<@9F	6 fc**,,,"8"886:6K6KE6R..s3#55c:FFF!33C8FVt222"9"997;7L7LU7S//4#66s;GGG!44S9FMM&*H!  " 	r8   c                4   V P                   '       g   R # V P                  P                  R4      pV'       ge   \        R4      ;qP                  R&   R\        P
                  ! \        R4      P                  4      ,          pVP                  W P                  4       ^ pRV P                   9   d   V P                   R,          Vn	        RV P                   9   dp   \        R4      P                  4       pV P                   R,          w
  Vn        Vn        Vn        Vn        Vn        Vn        Vn        Vn        Vn        Vn        WAn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        R	V P                   9   d   V P                   R	,          Vn        R
V P                   9   d0   \7        RV P                   R
,          ,           R,           4      Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d   V P                   R,          Vn        RV P                   9   d#   VP?                  V P                   R,          4       RV P                   9   d4   V PA                  V P                   R,          4      pVw  Vn!        Vn"        ^pRV P                   9   d   V P                   R,          Vn#        ^pRV P                   9   d   V P                   R,          Vn$        ^pRV P                   9   d   V P                   R,          Vn%        ^pRV P                   9   d   V P                   R,          Vn&        ^pR p\O        W1PP                  4      Vn(        V^8  d
   V! VR4       V^8  d
   V! VR4       V^8  d   V! VR4       R # R # )Nr       fstypepanosetypoascendertypodescendertypolinegap	winascent
windescentvendorz'''weightclass
widthclassunicoderangecodepagerangexheight	capheightloweropsizeupperopsizec                 V    V F"  p\        W4      '       d   K  \        W^ 4       K$  	  R# )r   N)hasattrsetattr)r   attrsattrs   && r6   	checkattr%Builder.build_OS_2.<locals>.checkattr  s!    u++E+ r8   )ulCodePageRange1ulCodePageRange2)sxHeight
sCapHeightusDefaultCharusBreakCharr   )usLowerOpticalPointSizeusUpperOpticalPointSize))rz   r4   r   r   r   calcsizer   OS2_format_0r   fsTypePanosebFamilyTypebSerifStylebWeightbProportion	bContrastbStrokeVariation	bArmStylebLetterFormbMidlinebXHeightr5  sTypoAscendersTypoDescendersTypoLineGapusWinAscentusWinDescentr   	achVendIDusWeightClassusWidthClasssetUnicodeRangesbuild_codepages_rK  rL  rM  rN  rQ  rR  maxversion)r   r   datarl  r5  pagesrI  s   &      r6   r   Builder.build_OS_2  s-   yyy		f%(0(88EIIf%7++N6,B,O,OPPDOOD)),tyy 99X.ELtyy #F+224F 		(#""" ' "!LTYY&"&))N";Edii'#'99_#=E DII%!%=!9E$))# $		+ 6E499$!%<!8Etyy &utyy/B'BU'JKEODII%"&))M":E499$!%<!8ETYY&""499^#<=dii'))$))O*DEE=B:E"E$:G		!!YYy1ENG$))##yy5EGDII%,0IIm,DE)GDII%,0IIm,DE)G	,
 G]]3a<eEFa<	 a<eST r8   c                    R F"  pW0P                   9   g   K  \        V R2V4      h	  \        V\        4      '       d   WP                   R&   R# \        V\        4      '       d   WP                   R &   R# \        V4      h)ElidedFallbackNameElidedFallbackNameIDz is already set.N)rq  rr  )r}   r   rJ   r*  rl   AssertionError)r   valuer   tokens   &&& r6   setElidedFallbackNameBuilder.setElidedFallbackName#  sv     DE

"%g-.  D eS!!16JJ-.t$$/4JJ+, ''r8   c                   R V P                   9  d   . V P                   R &   VP                  R V P                   R ,           4       9   d   \        RVP                   R2V4      hVP                  R V P                   R ,           4       9   d   \        RVP                   R2V4      hV P                   R ,          P	                  V4       R# )
DesignAxesc              3   8   "   T F  qP                   x  K  	  R # 5ir@   )rB   rA   rs   & r6   rC   (Builder.addDesignAxis.<locals>.<genexpr>6  s     F-Eee-ErE   z$DesignAxis already defined for tag "z".c              3   8   "   T F  qP                   x  K  	  R # 5ir@   )	axisOrderr{  s   & r6   rC   r}  ;  s     #R9QAKK9QrE   z+DesignAxis already defined for axis number r   N)r}   rB   r   r  r   )r   
designAxisr   s   &&&r6   addDesignAxisBuilder.addDesignAxis3  s    tzz)')DJJ|$>>FTZZ-EFF!6z~~6FbI  #RL9Q#RR!=j>R>R=SSTU  	

< ''
3r8   c                   R V P                   9  d   . V P                   R &   V P                   R ,           F  pVP                   Uu0 uF  qDP                  4       kK  	  upVP                   Uu0 uF  qDP                  4       kK  	  up8X  g   KZ  VP                   Uu0 uF  qDP                  4       kK  	  upVP                   Uu0 uF  qDP                  4       kK  	  up8X  g   K  VP                  VP                  8X  g   K  \        RV4      h	  V P                   R ,          P                  V4       R# u upi u upi u upi u upi )AxisValueRecordsz8An AxisValueRecord with these values is already defined.N)r}   r
  asFea	locationsflagsr   r   )r   axisValueRecordr   record_ns   &&&  r6   addAxisValueRecordBuilder.addAxisValueRecordB  s    TZZ/-/DJJ)*zz"455G$+MM2MqM2'6'<'<='<!GGI'<=>(/(9(9:(91WWY(9:'6'@'@A'@!GGI'@ABMM_%:%::%N  6 	

%&--o> 3=:As   D4-D9D>Ec                   V P                   '       g   R # V P                   P                  R4      pV'       g   \        RR 4      hV P                   P                  R4      p/ p. pV F  p. W5P                  &   K  	  VEe   V EF  p/ pVP                  ^ 8  d   VP                  VR&   \        VP                  4      ^8X  d   VP                  ^ ,          pVP                  p	\        V	4      ^8X  d'   VP                  RV	^ ,          RVP                  /4       \        V	4      ^8X  d0   VP                  RV	^ ,          RV	^,          RVP                  /4       \        V	4      ^8X  d)   V	w  rpVP                  RV
R	VR
VRVP                  /4       W8P                  ,          P                  V4       EK0  TP                  RVP                   Uu/ uF   qP                  VP                  ^ ,          bK"  	  upRVP                  /4       VP                  V4       EK  	  V Uu. uF;  pRVP                  RVP                  RVP                  RW>P                  ,          /NK=  	  ppV P                  P                  R4      pV'       g"   \        R4      ;pV P                  R&   . Vn	        RV P                   9   d>   V P                   R,          pVP                  V4      pV'       g   \        RV R2R 4      hM$RV P                   9   d   V P                   R,          p\        P                   ! V P                  VVXR7       R # u upi u upi )Nry  zDesignAxes not definedr  r  rt  r:   linkedValuenominalValuerangeMinValuerangeMaxValuer   orderingrB   valuesrr  zElidedFallbackNameID z; points to a nameID that does not exist in the "name" tablerq  )r  elidedFallbackName)r}   r   r   rB   r  r   r  r  updater
  r   r  r4   r   getDebugNameotlbuildStatTable)r   rP   axisValueRecords
axisValuesformat4_locationsrB   avr
valuesDictr   r  nominalminValmaxValir   
designAxes	nameTabler  r:   s   &                  r6   r   Builder.build_STATT  s   zzzzz~~l+!":DAA::>>*<=
C"$Jww ''
99q=*-))Jw's}}%*"}}Q/H%__F6{a'"))7F1Ivsyy*QR6{a'")) ' -vay &		 6{a'28/")) . / / &			 ||,33J?%%&S]](S]);](S"CII &,,Z8G (X 
  AKKquu*UU+	  	 
 IIMM&)	,4V,<<I		&) IO!TZZ/ZZ 67F))&1D%+F8 4# # 	   "TZZ/ZZ 45FII'%		
E )T
s   &L>AMc                >   / R ^ bR^bR^bR^bR^bR^bR^bR^bR^bR	^bR
^bR^bR^bR^bR^bR^0bR^1bR^2R^3R^4R^5R^6R^7R^8R^9R^:R^;R^<R^=R^>R^?/CpV Uu. uF  q3V9   g   K  W#,          NK  	  pp. p\        ^4       Fl  pVP                  R4       \        V^ ,          V^,           ^ ,          4       F3  pWd9   d   W;;,          R ,          uu&   K  W;;,          R!,          uu&   K5  	  Kn  	  V Uu. uF  p\        VR"R"R#1,          4      NK  	  up# u upi u upi )$i  i  i  i  i  i  i  i  i  ij  i  i  i  i  iQ  ie  ib  ia  i`  i_  i^  i]  i\  iY  iW  iT  i  i  i  iR  i   10N)r  r   r   )r   rn  
pages2bitspbitsr  js   &&     r6   rj  Builder.build_codepages_  s    
! 
! 
 ! 
 !	 

 ! 
 ! 
 ! 
 ! 
 ! 
  
  
  
  
  
 " 
  ! 
" # 
$ ? 

B (-@u!Z
u@qALL1r6AER<09HOHHOH	 1  .33U
1TrT7#U33 A 4s   D%D4Dc                ,   V P                   '       g   V P                  '       g   R # \        P                  ! 4       pRVn        V P                  V P                   4      Vn        V P                  V P                  4      Vn        \        R4      pWn	        V# )Nr   r   )
rq   rr   r   r   r  buildBASEAxis	HorizAxisVertAxisr   r   )r   r   r   s   &  r6   r   Builder.buildBASE  sr    $$$T-A-A-A}}!++D,A,AB**4+?+?@&!r8   c                J    \         P                  ! 4       p^Vn        Wn        V#    )r   	BaseCoordr!  
Coordinate)r   ccoords   && r6   buildBASECoordBuilder.buildBASECoord  s"    ""$r8   c                z   V'       g   R # Vw  r#p\         P                  ! 4       p\         P                  ! 4       Vn        W!P                  n        \	        V4      VP                  n        \         P                  ! 4       Vn        . VP                  n        \	        V4      VP                  n        \        V4       EFx  pV Uu. uF"  qf^ ,          V^ ,          8X  g   K  VR,          NK$  	  pp\         P                  ! 4       pV^ ,          Vn
        \         P                  ! 4       Vn        \         P                  ! 4       VP                  n        VP                  V^,          4      VP                  P                  n        . VP                  P                  n        \	        V^,          4      VP                  P                  n        . VP                  n        V^,           FA  pVP                  P                  P                  P%                  V P'                  V4      4       KC  	  \        V4       F  w  rp\         P(                  ! 4       pV P'                  V
4      Vn        V P'                  V4      Vn        ^ Vn        V	R8X  d   WP                  n        Kg  \         P"                  ! 4       pWn        Wn        VP                  P"                  P%                  V4       K  	  \	        VP                  P"                  4      VP                  n        VP                  P                  P%                  V4       EK{  	  V# u upi )Nr  NNdflt)r   AxisBaseTagListBaselineTagr   BaseTagCountBaseScriptListBaseScriptRecordBaseScriptCountr   BaseScriptTag
BaseScript
BaseValuesindexDefaultIndexr  BaseCoordCountBaseLangSysRecordr   r  MinMaxMinCoordMaxCoordFeatMinMaxCountDefaultMinMaxBaseLangSysTagBaseLangSysCount)r   axisbasesscriptsminmaxr   recordminmax_for_scriptr  language	min_coord	max_coordminmax_recordlang_records   &&            r6   r  Builder.buildBASEAxis  s   !%}}#//1',$(+E
%&557/1,.1'l+WoF)/!)/v!9q	3I
r

  ! ..0F#)!9F  ( 3 3 5F+3+>+>+@F(8=F1I8NF((557F((2:=fQi.F((724F/AYY!!,,66==d>Q>QRS>TU 289J2K.Y ( 1)-)<)<Y)G&)-)<)<Y)G&01-v%6C%%3"*"<"<">K19.)6&%%77>>{K 3L 25!!332F. 0077?= &> =!s   L8L8c                   \         P                  ! 4       pV P                  4       Vn        \        P
                  ! V P                  V P                  4      Vn        \        P                  ! V P                  V P                  V P                  4      Vn        V P                  4       Vn        V P                  4       Vn        VP                   '       d   R MRVn        V P$                  '       d   V P$                  P'                  4       pV'       dl   RVn        W!n        VP+                  4       pVP-                  V4       RV P.                  9   d-   V P.                  R,          P0                  P-                  V4       V P2                  P5                  4        \7        VP                  VP                  VP                  VP                  VP                   34      '       g   \9        VR4      '       d   \;        R4      pWn        V# R# )i  r   i  rI   VarStorer   N)r   r   buildGDEFGlyphClassDef_GlyphClassDefr  buildAttachListrs   rN   
AttachListbuildLigCaretListrt   ru   LigCaretListbuildGDEFMarkAttachClassDef_MarkAttachClassDefbuildGDEFMarkGlyphSetsDef_MarkGlyphSetsDefr  rO   finishr  optimizeremap_device_varidxesr4   r   r   clearr   rE  r   )r   r   store
varidx_mapr   s   &    r6   r   Builder.buildGDEF  s   }}!99;--d.@.@$--P11  $"6"6
 #'"C"C"E $ ? ? A%)%:%:%:z
((//1E) %"^^-
**:6TYY&IIf%++AA*M""$""!!''%%
 
 T:&&f%FLMr8   c                   V P                   '       d4   V P                   P                  4        UUUu/ uF
  w  pw  r#WbK  	  ppppM/ pV P                   F"  pVP                  VP	                  4       4       K$  	  V P
                  P                  P                  4        F1  pVP                   F  pVP                  4        F  p^WH&   K	  	  K   	  K3  	  V'       d   \        P                  ! 4       p	WIn        V	# R# u upppi )   N)rv   r   r^   r  inferGlyphClassesrK   markClassesr  definitionsglyphSetr   r  	classDefs)
r   r   r  _classesr   	markClassmarkClassDefr   r   s
   &         r6   r  Builder.buildGDEFGlyphClassDef_8  s    /3/C/C/I/I/KL/KFQqt/KGLGG--v779: (!^^77>>@	$-$9$9L!-!6!6!8)* "9 %: A ++-F&M Ms   C:c                    V P                   P                  4        UUUu/ uF
  w  pw  r#WbK  	  ppppV'       g   R # \        P                  ! 4       pWEn        V# u upppi r@   )rw   r   r   r  r  )r   r   r  r  r  r   s   &     r6   r  $Builder.buildGDEFMarkAttachClassDef_J  sT    +/+;+;+A+A+CD+Cia!QT+C	D,,.$ Es   Ac                    . p\        V P                  P                  4       R  R7       F  w  r#VP                  V4       K  	  \        P
                  ! WP                  4      # )c                     V ^,          # r  r   )items   &r6   <lambda>4Builder.buildGDEFMarkGlyphSetsDef_.<locals>.<lambda>U  s    47r8   r   )r   ry   r   r   r  buildMarkGlyphSetsDefrN   )r   setsglyphsid_s   &   r6   r  "Builder.buildGDEFMarkGlyphSetsDef_R  sR    !  &&(.B
KF KK
 ((}}==r8   c                    R V P                   9  d1   \        R 4      V P                   R &   / V P                   R ,          n        V P                  V P                   R ,          P                  \        &   R# )DebgN)r4   r   rm  r_   r
   r   s   &r6   r   Builder.buildDebgZ  sR    " ( 0DIIf%'DIIf"8<8M8M		&45r8   c                z   VR9   g   Q V4       hV P                    F
  pRVn        K  	  . pV P                    F  pVP                  V8w  d   K  V P                  V4      pVP	                  VRJR7      pVf   \        RVP                  4      hV Fl  p\        V4      Vn        \        \        VP                  4      VRR7      V P                  V,          \        VP                  4      &   VP                  V4       Kn  	  K  	  . pV F#  p VP                  VP                  4       4       K%  	  V#   \         d&   p\        \        T4      TP                  4      ThRp?i\         dS   pT P                  T,          \        TP                  4      ,          P                  p	\        \        T4      T	4      ThRp?ii ; i)rI   N)is_named_lookupr   )r   r:   r   r   )r^   lookup_indexr   get_lookup_name_promote_lookup_typer   r   r   r	   strr_   r   r3   r%   	Exception)
r   rB   r   r   r:   resolvedl	otLookupser   s
   &&        r6   buildLookups_Builder.buildLookups_`  s   &&++&mmF"&F $mmF||s"((0D11$dBR1SH%4OO 
 &)'l#GV 1 H%%c*3v/B/B+CD
 q!  $& 	A?  +   $ A%c!fajj9q@ ?005c!..6IJSS%c!fh7Q>?s+   
D//F:: EF:'F:(AF55F:c                   \        \        VR 4      ! 4       pRVn        \        P                  ! 4       Vn        . VP                  n        \        P
                  ! 4       Vn        . VP
                  n        \        P                  ! 4       Vn        V P                  V4      VP                  n	        / p/ p/ pR p\        V P                  P                  4       VR7       EF   w  rxVw  rp\        \        P                  R V 4       4      4      p\!        V4      pVR8H  ;'       d    VR8H  pV P#                  W4      p\%        V4      ^ 8X  d   V'       g   V'       g   K  V FT  p V P&                  V,          \)        V4      ,          P+                  VR7      V P&                  V,          \)        V4      &   KV  	  W3pVP3                  V4      pVf   \%        VP
                  P                  4      p\        P                  ! 4       pVVn        \        P6                  ! 4       Vn        V P9                  V4      VP6                  n        \=        V4      VP6                  n        \%        V4      VP6                  n         VP
                  P                  PC                  V4       VVV&   VPE                  V	/ 4      PE                  V
. 4      PC                  V4       V PF                  P3                  W34      V8X  g   EK  VWIV
3&   EK#  	  \        VP                  4       4       EF  w  p	p\        P                  ! 4       pV	Vn$        \        PJ                  ! 4       Vn%        R VPJ                  n&        . VPJ                  n'        \        VP                  4       4       EF'  w  r\        PN                  ! 4       p\        PP                  ! 4       Vn(        R VPP                  n)        VP3                  W34      pVf   R	VPP                  n*        MVVPP                  n*        V Uu. uF  pVV8w  g   K  VNK  	  upVPP                  n+        \%        VPP                  PV                  4      VPP                  n,        V
R
8X  d   VPP                  VPJ                  n&        K  V
Vn-        VPJ                  PN                  PC                  V4       EK*  	  \%        VPJ                  PN                  4      VPJ                  n.        VP                  P                  PC                  V4       EK  	  \%        VP                  P                  4      VP                  n/        \%        VP
                  P                  4      VP
                  n,        \%        VP                  P                  4      VP                  n         V#   \,         d    \.        P0                  ! R4        EKi  i ; iu upi )Nr   c                 p    V ^ ,          ^,          V ^ ,          ^,          V ^ ,          ^ ,          V ^,          3# )r   r   )fs   &r6   r  #Builder.makeTable.<locals>.<lambda>  s)    AaDGQqT!Wad1gqt#Dr8   r  c              3   X   "   T F   qP                   f   K  VP                   x  K"  	  R # 5ir@   )r  )rA   r  s   & r6   rC   $Builder.makeTable.<locals>.<genexpr>  s      ,3q~~NANNGs   **rI   r  )r   zWfeaLib.Builder subclass needs upgrading to stash debug information. See fonttools#2065.i  r  )0getattrr   r  r   ScriptRecordr   FeatureRecordr   r  Lookupr   r`   r   tupledictfromkeysr   any_feature_variationsr   r_   r  _replaceKeyErrorr   r   r   
FeatureTagFeaturer'  FeatureParamsrl   LookupListIndexr   r   r   ra   	ScriptTagScriptDefaultLangSysLangSysRecordLangSysLookupOrderReqFeatureIndexFeatureIndexr   
LangSysTagLangSysCountr   )r   rB   r   feature_indicesrequired_feature_indicesr  sortFeatureTagr   r   r   r   feature_taglookup_indices
lookup_keysize_featureforce_featureixfeature_keyfeature_indexfreclang_featuressreclangrecreq_feature_indexr  s   &&                       r6   r   Builder.makeTable  s   #t,."#..0(*%$002*,'#..0"&"4"4S"9 #%  E"4>>#7#7#9~NNLC(+%F+ # ,3 N #>2J&=BB[F-BL 77IM>"a']$:>:O:OPS:TB;hsh+ ))#.s2w7 % '3K+//<M$ #E$5$5$C$C D--/"-'//1-1-D-D[-Q*/3N/C,+.~+>(!!//66t</<,vr*55dB?FF}U&&**F>:kI;H($8c Oh &,GMMO%<!FM((*D#DN"//+DK)-DKK&(*DKK%)/0C0C0E)F%"002"*"2"2"4.2+$<$@$@&$P!$,6<GOO36GGOO3  /0.!!7H2HAA0, 037??3O3O/P,6>18DKK.)-G&KK--44W=) *G* (+4;;+D+D'EDKK$))0069 &=< (+5+;+;+H+H'I$),U->->-L-L)M&'*5+;+;+B+B'C$q   MMG P0s   "AV"	W#W"!WWc                   / pR pV P                   P                  4        F  w  w   rVp. W6&   VP                  4        F{  w  rV P                  V,          p
. pV	 FC  pVP                  V8w  d   K  VP                  f   Q hVP                  VP                  4       RpKE  	  W6,          P                  W34       K}  	  K  	  V'       d3   VP                  4        F  w  rm\        V P                  WV4       K  	  R# R# )FNT)rb   r   r~   r   r  r   r)   r4   )r   r   	table_tagfeature_varshas_any_variationsr  r?  
variationsconditionsetbuildersraw_conditionsetindicesbconditions_and_lookupss   &&&           r6   r   Builder.makeFeatureVariations  s    "/3/G/G/M/M/O+Q(*L%*4*:*:*<&#'#6#6|#D !Aww)+ >>555NN1>>2)-& " )002B1LM += 0P 7C7I7I7K3'IIuk 8L r8   c                   a V P                   P                  4        Fn  w  w   r4pWA8w  d   K  VP                  4        FI  w  rg\        ;QJ d    V3R  lV 4       F  '       g   K   RM	  RM! V3R  lV 4       4      '       g   KG    R# 	  Kp  	  R# )c              3   @   <"   T F  qP                   S8H  x  K  	  R # 5ir@   )r   )rA   rV  rN  s   & r6   rC   1Builder.any_feature_variations.<locals>.<genexpr>  s     >Xww)+Xr   TF)rb   r   r   )r   r?  rN  r  r   rQ  rR  rS  s   &&f     r6   r+  Builder.any_feature_variations  sn    +/+C+C+I+I+K'OQZ%*4*:*:*<&3>X>333>X>>> += ,L r8   c                    V P                   P                  4        UUu/ uF  w  r#W2bK	  	  pppW9   d	   WA,          # R # u uppi r@   )rZ   r   )r   r   kvrevs   &&   r6   r  Builder.get_lookup_name_  s@     $ 3 3 9 9 ;< ;qt ;<=; =s   >c                v   VR 8X  d&   VR8X  d   V P                   '       d   \        RV4      hVR 8X  d    V P                  '       d   \        RV4      hMRV n        W#3V P                   9   d2   \        RVP                  4       : RVP                  4       : R2V4      hV P                   P	                  W#34       R# )	DFLTr  z_If "languagesystem DFLT dflt" is present, it must be the first of the languagesystem statementszRlanguagesystems using the "DFLT" script tag must precede all other languagesystemsTz"languagesystem  z" has already been specifiedN)rS   r   rY   stripadd)r   r   r   r  s   &&&&r6   add_language_systemBuilder.add_language_system  s    VF 2t7U7U7U!= 
 V)))%8  * *.D&!?!??!<<>8>>#35 
 	&&**F+=>r8   c                h    V P                   '       d   \        V P                   4      # \        R04      # )rc  )rc  r  )rS   r   r  s   &r6   get_default_language_systems_%Builder.get_default_language_systems_+  s0     )))T;;<<./00r8   c                    V'       d   VR 8w  d   \        RV4      hV P                  4       V n        RV n        RV n        W n        ^ V n        RV n        W0n        VR 8X  d   Wn	        W0n
        R# R# )r   zL'useExtension' keyword for feature blocks is allowed only for 'aalt' featurerc  N)r   rj  rX   rT   r[   r]   rU   rV   rW   rd   rf   r   r   r:   use_extensions   &&&&r6   r   Builder.start_feature6  st    TV^!^  !% B B D!%)-&+6>"*'4$ r8   c                z    V P                   f   Q hR V n         R V n        R V n        ^ V n        R V n        RV n        R # NF)r]   rX   r[   rU   rV   rW   r  s   &r6   r   Builder.end_featureG  sD    %%111!% $)-&#r8   c                   W P                   9   d   \        R V,          V4      hV P                  R8X  d   \        RV4      hW n        RV P                   V&   RV n        W0n        V P                  f   ^ V n        RV n        R# R# )z$Lookup "%s" has already been definedr   zpLookup blocks cannot be placed inside 'aalt' features; move it out, and then refer to it with a lookup statementN)rZ   r   r]   r\   r[   rW   rU   rV   rm  s   &&&&r6   start_lookup_blockBuilder.start_lookup_blockP  s    &&&!6=x  !!V+!L 
 !%$(D!+!!) D-1D* *r8   c                    V P                   f   Q hR V n         R V n        RV n        V P                  f   ^ V n        R V n        R # R # rq  )r\   r[   rW   r]   rU   rV   r  s   &r6   end_lookup_blockBuilder.end_lookup_blockc  sM    $$000 $#!!) D-1D* *r8   c                    WP                   9   g   Q V4       hR V n        V P                   V,          pVe   V P                  W P                  4       R # R # r@   )rZ   r[   r   r]   )r   lookup_namer   s   && r6   add_lookup_callBuilder.add_lookup_calll  sP    111>;>1$$[1''0F0FG r8   c                    W n         R # r@   )ro   )r   r   revisions   &&&r6   set_font_revisionBuilder.set_font_revisions  s    %r8   c           	        \        V4      ^8X  g   Q hV P                  R
9   d   \        RV P                  ,          V4      hV P                  f   \        RV4      hRV n        V P                  W P                  3pV P
                  P                  V^ ,          RV^,          34      pVR8X  g	   V'       d    V'       d   VR,          V P
                  V&   MCV P
                  P                  V. 4      pV Uu. uF  qV9  g   K  VNK  	  upV P
                  V&   \        V P                  V3.4      V n        V'       d   V P                  V3pWPP                  9   d_   \        RVP                  4       : RV P                  P                  4       : RV P                  V,          P                  4       : R	2V4      hV P                  V P                  V&   R# R# u upi )   z7Language statements are not allowed within "feature %s"NzCLanguage statements are not allowed within standalone lookup blocksr  :NNNz	Language z	 (script z ) has already specified feature z as its required featurer   r  )r   r]   r   r[   rT   r`   r   r   rX   ra   re  )	r   r   r  include_defaultrequiredr   r   cur_lookupsxs	   &&&&&    r6   set_languageBuilder.set_languagev  s   8}!!!!!%55!&(,(>(>? 
 !!)!2 
  ||X'='=>..$$c!ffc!f%=>/w")!*DNN3 ..,,S"5K.9"Nkg=M11k"NDNN3 )DLL(+C*D E<<*C---% !(**,//4::< 	 	 ,0+A+AD##C(  #Os   4GGc                V   \        V4      pV P                  P                  V4      pVe   V# \        V P                  4      ^,           pW0P                  V&   V FL  pW@P                  9   d*   V P                  V,          w  rV\        RV: RV: 2V4      hW13V P                  V&   KN  	  V# )NGlyph z3 already has been assigned a MarkAttachmentType at )r   rx   r   r   rw   r   )r   r   r
  r  r   r  locs   &&&    r6   getMarkAttachClass_Builder.getMarkAttachClass_  s    6"%%))&1?J$))*Q.*-'E((())%0%493@ 
 (+oDU#  
r8   c                    \        V4      pV P                  P                  V4      pVe   V# \        V P                  4      pW0P                  V&   V# r@   )r   ry   r   r   )r   r   r
  r  s   &&& r6   getMarkFilterSet_Builder.getMarkFilterSet_  sO    6"""&&v.?J$&&''*V$
r8   c                    V^,          pVe!   V P                  W4      pW%^,          ,          pVe"   V P                  W4      pV^,          pW`n        MRV n        W n        R# )   N)r  r  rV   rU   )r   r   rt  
markAttach
markFiltermarkAttachClassr   s   &&&&&  r6   set_lookup_flagBuilder.set_lookup_flag  sa    !"66xLO12E! 228HMDLE-:*-1D* r8   c                "   V P                   R9   d   \        RV P                   ,          V4      hV P                   f   \        RV4      hV P                  VR308X  d   R# RV n        W n        ^ V n        RV n        V P                  VRRRR7       R# )	r   z5Script statements are not allowed within "feature %s"NzAScript statements are not allowed within standalone lookup blocksr  TF)r  r  r  )r]   r   rX   r[   rT   rU   rV   r  )r   r   r   s   &&&r6   
set_scriptBuilder.set_script  s    !!%55!&(,(>(>? 
 !!)!V    ff%5$66)-&(FD5Qr8   c           	         . pV F]  pVeF   TP                  V Uu. uF'  q@P                  P                  VP                  4      NK)  	  up4       KL  VP                  R4       K_  	  V# u upi )zHelper for building chain contextual substitutions

Given a list of lookup names, finds the LookupBuilder for each name.
If an input name is None, it gets mapped to a None LookupBuilder.
N)r   rZ   r   r:   )r   r   lookup_buildersr   r  s   &&   r6   find_lookup_builders_Builder.find_lookup_builders_  sj     !J%&&>HIj((,,QVV4jI  &&t, " 	 Js   -A(
c                ~    V F6  pV P                   P                  V\        4       4      P                  V4       K8  	  R # r@   )rs   r   rR   r  )r   r   r
  contourPointsr   s   &&&& r6   add_attach_pointsBuilder.add_attach_points  s/    E))%7>>}M r8   c                x    V P                   R 8w  d   \        RV4      hV P                  P                  W34       R# )r   z9Feature references are only allowed inside "feature aalt"N)r]   r   rc   r   )r   r   featureNames   &&&r6   add_feature_referenceBuilder.add_feature_reference  s;    !!V+!KX  	""H#:;r8   c                <    V P                   P                  V4       R # r@   )rg   rf  r   rB   s   &&r6   add_featureNameBuilder.add_featureName  s    s#r8   c                <    V P                   P                  V4       R # r@   )ri   rf  r  s   &&r6   add_cv_parameterBuilder.add_cv_parameter  s    $r8   c                    WP                   9   d"   V P                   V;;,          ^,          uu&   R# ^V P                   V&   R# )zZAdds new items to ``self.cv_num_named_params_``
or increments the count of existing items.N)rk   r  s   &&r6   add_to_cv_num_named_params"Builder.add_to_cv_num_named_params  s6     +++%%c*a/*-.D%%c*r8   c                J    V P                   V,          P                  V4       R # r@   )rm   r   )r   	characterrB   s   &&&r6   add_cv_characterBuilder.add_cv_character	  s    C ''	2r8   c                >    V'       d   WV3V n         R # WV3V n        R # r@   )rr   rq   )r   r  r  verticalr  s   &&&&&r6   set_base_axisBuilder.set_base_axis  s    $)F#;D %*V$<D!r8   c                    V P                   R 8w  d   \        RV P                   ,          V4      hW#WE.V n        V P                   F/  w  rgWgV P                   3pV P                  P                  V. 4       K1  	  R# )r  z9Parameters statements are not allowed within "feature %s"N)r]   r   rn   rX   r`   r   )	r   r   r  r  r  r  r   r   r   s	   &&&&&&   r6   set_size_parametersBuilder.set_size_parameters  sz     !!V+!&(,(>(>? 
 ",* O 11LF!7!78CNN%%c2. 2r8   c                   V P                  V\        VR 7      pVP                  4        F  w  rEWCP                  9   dq   WSP                  V,          8X  d8   \        P                  RRP                  V4      RP                  V4      V4       M"\        RRP                  V4      ,          V4      hWSP                  V&   K  	  R# ))r   z7Removing duplicate substitution from "%s" to "%s" at %sr   z%Already defined substitution for "%s"N)r   r$   r   r   loginfor   r   )r   r   r   r   r   rt  s   &&&   r6   add_any_subst_Builder.add_any_subst_"  s    !!(OW!M!--/JCnn$NN3//HHQ		#		%( 	 *?$))C.P   #(NN3 *r8   c           	        V P                   R 8X  dQ   VP                  4        F:  w  rgV P                  P                  V. 4      pWx9  g   K)  VP	                  V4       K<  	  R# V'       g   V'       g	   V'       d   V P                  WW44       R# T P                  TVP                  4        U	U
u/ uF
  w  rV	3V
3bK  	  up
p	4       R# u up
p	i )r   N)r]   r   re   r   r   add_single_subst_chained_r  )r   r   prefixsuffixr   
forceChain
from_glyphto_glyphr   r   rt  s   &&&&&&     r6   add_single_substBuilder.add_single_subst5  s    !!V+(/$
,,77
BG'KK) )8 Vz**8VM07@*#cVeX@	
@s   -Cc                    V'       g   V'       g	   V'       d   V P                  WW4V4       R # V P                  VV3\        V4      /4       R # r@   )add_multi_subst_chained_r  r(  )r   r   r  r   r  replacementsr  s   &&&&&&&r6   add_multiple_substBuilder.add_multiple_substF  s@     Vz))(E<XXu\*+	
r8   c                  a V P                   R 8X  d:   V P                  P                  V. 4      oSP                  V3R lV 4       4       R# V'       g	   V'       dV   V P	                  V\
        4      pV P                  V\        4      pVP                  P                  \        W#0.WG.4      4       MV P	                  V\        4      pW7P                  9   d   \        RV,          V4      hWWP                  V&   R# )r   c              3   8   <"   T F  qS9  g   K  Vx  K  	  R # 5ir@   r   )rA   r   r   s   & r6   rC   .Builder.add_alternate_subst.<locals>.<genexpr>U  s     @;a4-;r   Nz)Already defined alternates for glyph "%s")r]   re   r   r   r   r   r   r   rulesr   r#   r   r   )	r   r   r  r   r  replacementchainr   r   s	   &&&&&&  @r6   add_alternate_substBuilder.add_alternate_substR  s    !!V+((33E2>DKK@;@@V$$X/GHE--h8MNFKK26G9fhWX%%h0EFF%%%!;eCX  $/% r8   c                   V'       g   V'       g	   V'       d   V P                  WW4V4       R # \        V4      '       g   \        RV4      hT P                  T\        P
                  ! V!   Uu/ uF  qwV3bK  	  up4       R # u upi )N!Empty glyph class in substitution)add_ligature_subst_chained_allr   r  	itertoolsproduct)r   r   r  r
  r  r  r  r   s   &&&&&&& r6   add_ligature_substBuilder.add_ligature_subste  sv     Vz,,&+ 6{{!"ExPP 	(1(9(96(BC(B1(BC	
Cs   -B
c           
        \        V4      '       d#   \        V4      '       d   \        V4      '       g   \        R V4      hV P                  V\        4      pVP                  P                  \        W#W@P                  V4      4      4       R# ,Empty glyph class in contextual substitutionN)r  r   r   r   r  r   r#   r  r   r   r  r
  r  r   r   s   &&&&&& r6   add_chain_context_substBuilder.add_chain_context_subst{  sl    6{{#f++S[[!>  !!(,DE(B(B7(K	
r8   c           	        V'       d#   \        V4      '       d   \        V4      '       g   \        R V4      hV P                  V\        4      pVP	                  V\
        4      pVf   V P                  V\
        4      pVP                  P                  V4       VP                  P                  \        V\        VP                  4       4      .W6.4      4       R# r  )r  r   r   r   find_chainable_substr   r   r   r  r  r   r#   rl   keys)r   r   r  r  r   r  subs   &&&&&  r6   r  !Builder.add_single_subst_chained_  s    c&kkV!> 
   +CD((2DE;**85GHC7#glln)=(>N	
r8   c                \   \        V4      '       d   \        V4      '       g   \        R V4      hV P                  V\        4      pVP	                  W5/\
        4      pVf   V P                  V\
        4      pWWP                  V&   VP                  P                  \        W#0.WG.4      4       R# r  )r  r   r   r   r  r   r   r   r  r   r#   )r   r   r  r   r  r  r  r  s   &&&&&&  r6   r   Builder.add_multi_subst_chained_  s    6{{#f++!>    +CD((%)>@TU;**85IJC)E.vy&%PQr8   c           
        \        V4      '       d   \        V4      '       g   \        R V4      hV P                  V\        4      pVP	                  W54      pVf   V P                  V\        4      p\        P                  ! V!   FH  pVP                  P                  W4      p	W8w  d   \        RV RV	 RV R2V4      hWWP                  V&   KJ  	  VP                  P                  \        W#WG.4      4       R# )r  Nz!Conflicting ligature sub rules: 'z' maps to 'z' and '')r  r   r   r   find_chainable_ligature_substr   r   r  r  	ligaturesr   r  r   r#   )
r   r   r  r
  r  r  r  r  r   existings
   &&&&&&    r6   r  #Builder.add_ligature_subst_chained_  s     6{{#f++!>    +CD11&F;**85IJC""F+A}}((8H&%7s+hZwWbVccde 
  +MM! , 	.vvuMNr8   c                    V'       g   \        R V4      hV P                  V\        4      pVP                  P	                  W#V34       R# )r  N)r   r   r   r  r   )r   r   
old_prefix
old_suffixr   r   s   &&&&& r6   add_reverse_chain_single_subst&Builder.add_reverse_chain_single_subst  s=    !"ExPP!!(,JKZW=>r8   c                   V'       g   V'       g	   V'       d   V P                  WW44       R# V P                  V\        4      pV FH  w  rxV'       g   \        R V4      hV P	                  WRR7      p	V F  p
 VP                  WV	4       K  	  KJ  	  R#   \         d&   p\        \        T4      TP                  4      ThRp?ii ; i)%Empty glyph class in positioning ruleFpairPosContextN)	add_single_pos_chained_r   r"   r   makeOpenTypeValueRecordadd_posr%   r  r   )r   r   r  r  posr  r   r
  rt  otValueRecordr   r  s   &&&&&&      r6   add_single_posBuilder.add_single_pos  s    Vz((6G%%h0@AF!$)?  !% < <E != ! $EIxF $ "% , I-c!fajjAqHIs   7BC B>>Cc                P   V'       d	   V'       g   \        R V4      hV P                  V\        4      pV P                  WRR7      pV P                  WRR7      p\	        \        \        V4      4      4      p	\	        \        \        V4      4      4      p
VP                  WWzV4       R# r  Tr  N)r   r   r!   r  r(  r   rR   addClassPair)r   r   glyphclass1value1glyphclass2value2r   v1v2cls1cls2s   &&&&&&     r6   add_class_pair_posBuilder.add_class_pair_pos  s    +!"I8TT!!(N;))(4)P))(4)PVC,-.VC,-.HBb9r8   c                    V'       d	   V'       g   \        R V4      hV P                  V\        4      pV P                  WRR7      pV P                  WRR7      pVP	                  WWtV4       R# r  )r   r   r!   r  addGlyphPair)	r   r   glyph1r  glyph2r	  r   r
  r  s	   &&&&&&   r6   add_specific_pair_posBuilder.add_specific_pair_pos  sc    V!"I8TT!!(N;))(4)P))(4)PHb"=r8   c           	         V'       g   \        R V4      hV P                  V\        4      pVP                  VVV P	                  W4      V P	                  W4      4       R# r  N)r   r   r   add_attachmentmakeOpenTypeAnchor)r   r   
glyphclassentryAnchor
exitAnchorr   s   &&&&& r6   add_cursive_posBuilder.add_cursive_pos  sV    !"I8TT!!(,=>##H:##H9		
r8   c                   V P                  V\        4      pV P                  WV4       V'       g   \        R V4      hV FG  w  rVV P	                  W4      pV F+  pWtP
                  P                  V/ 4      VP                  &   K-  	  KI  	  R# r  )r   r   
add_marks_r   r  r  r   r:   )	r   r   r  marksr   
baseAnchorr  otBaseAnchorr   s	   &&&&     r6   add_mark_base_posBuilder.add_mark_base_pos  sx    ""8-?@51!"I8TT%*!J228HLEQ((r29>>B  &+r8   c                8   V P                  V\        4      p. pV'       g   \        R V4      hV FP  p/ pV P                  WV4       V F"  w  rV P	                  W4      WyP
                  &   K$  	  VP                  V4       KR  	  V F  p
WTP                  V
&   K  	  R# r  )r   r   r   r   r  r:   r   r  )r   r   r  
componentsr   componentAnchorsr!  anchors	ligAnchorr  r   s   &&&&       r6   add_mark_lig_posBuilder.add_mark_lig_pos  s    ""8->?!"I8TTEGOOHu5(-$	*.*A*A(*V' ).##G,   E'7e$ r8   c                   V P                  V\        4      pV P                  WV4       V'       g   \        R V4      hV FH  w  rVV P	                  W4      pV F,  pVVP
                  P                  V/ 4      VP                  &   K.  	  KJ  	  R# r  )r   r   r   r   r  	baseMarksr   r:   )	r   r   r.  r!  r   r"  r  r#  baseMarks	   &&&&     r6   add_mark_mark_posBuilder.add_mark_mark_pos  s    ""8-?@51!"I8TT%*!J228HL% ! !!,,Xr:NN & &+r8   c           
        \        V4      '       d#   \        V4      '       d   \        V4      '       g   \        R V4      hV P                  V\        4      pVP                  P                  \        W#W@P                  V4      4      4       R# )0Empty glyph class in contextual positioning ruleN)r  r   r   r   r  r   r#   r  r  s   &&&&&& r6   add_chain_context_posBuilder.add_chain_context_pos!  sl    6{{#f++S[[!BH  !!(,BC(B(B7(K	
r8   c                   V'       d#   \        V4      '       d   \        V4      '       g   \        R V4      hV P                  V\        4      p. pVP                   F  w    rxVP                  V4       K  	  . p	V F  w  rVf   V	P                  R4       K  V P                  WRR7      pVP                  WjV4      pVf(   V P                  V\        4      pVP                  V4       V
 F  pVP                  WV4       K  	  V	P                  V4       K  	  \        V4      \        V	4      8X  g	   Q WI34       hVP                  P                  \        Y$ UUu. uF  w  ppVNK
  	  uppW94      4       R# u uppi )r3  NFr  )r  r   r   r   r  r   r   r  find_chainable_single_posr   r"   r  r   r#   )r   r   r  r  r  r  targetsr  r   subsr
  rt  otValuer  r   r   r_  s   &&&&&            r6   r  Builder.add_single_pos_chained_-  sP   #f++S[[!BH    +AB %Aq!NN7# !, MF}D!22 3 G 11'7KC{..x9IJs#HW5  KK ! 3x3t9$1sk1$s(;stq!s(;VJ	
(;s   E4c                   V F  w  rEVP                    F  pVP                  P                  4        F  pWrP                  9  dN   V P	                  V\
        P                  ! VP                  4      4      pVP                  V3VP                  V&   K`  VP                  V,          ^ ,          p	VP                  V	8w  g   K  \        RV: RV	: RVP                  : 2V4      h	  K  	  K  	  R# )z)Helper for add_mark_{base,liga,mark}_pos.r  z cannot be in both @z and @N)
r  r
  r  r!  r  copydeepcopyanchorr:   r   )
r   r   lookupBuilderr!  r  r  r  markotMarkAnchorexistingMarkClasss
   &&&&      r6   r   Builder.add_marks_K  s    !LA ) 5 5(//88:D#6#66'+'>'>$dmmL4G4G&H( 6?^^\4R++D1,9,?,?,Ea,H)$>>->>"1#'):INN!L (#  ; !6 "r8   c                <    V P                   P                  V4       R # r@   )r[   add_subtable_break)r   r   s   &&r6   rF  Builder.add_subtable_break^  s    ++H5r8   c                    V P                   P                  VR4      w  rEV'       d   WC8w  d   \        RV: RV: 2V4      hW13V P                   V&   R # )Nr  z& was assigned to a different class at )NN)rv   r   r   )r   r   r   
glyphClassoldClassoldLocations   &&&&  r6   setGlyphClass_Builder.setGlyphClass_a  sT     $ 4 4 8 8 M.!+' 
 (2&<U#r8   c                    V F  pV P                  W^4       K  	  V F  pV P                  W^4       K  	  V F  pV P                  W^4       K  	  V F  pV P                  W^4       K  	  R# )r  N)rL  )r   r   
baseGlyphsligatureGlyphs
markGlyphscomponentGlyphsr   s   &&&&&& r6   add_glyphClassDefBuilder.add_glyphClassDefk  sl      E3  #E3 $E3  $E3 %r8   c                X    V F#  pW@P                   9  g   K  W0P                   V&   K%  	  R # r@   )ru   )r   r   r
  caretsr   s   &&&& r6   add_ligatureCaretByIndex_!Builder.add_ligatureCaretByIndex_w  s&    E000.4$$U+ r8   c                j    \        V\        4      '       g   V# V P                  W4      w  r4Ve   W43# V# r@   )rJ   r   makeVariablePos)r   r   caretdefaultdevices   &&&  r6   makeLigCaretBuilder.makeLigCaret|  s:    %00L..x?$$r8   c                    V Uu. uF  q@P                  W4      NK  	  ppV F#  pWPP                  9  g   K  W0P                  V&   K%  	  R # u upi r@   )r^  rt   )r   r   r
  rV  r[  r   s   &&&&  r6   add_ligatureCaretByPos_Builder.add_ligatureCaretByPos_  sI    BHI&##H4&IE000.4$$U+  Js   Ac                B    V P                   P                  W#WEV.4       R # r@   )rp   r   )r   r   r  r-  r.  r/  r0  s   &&&&&&&r6   add_name_recordBuilder.add_name_record  s    F	6JKr8   c                "    W P                   V&   R # r@   )rz   r   r   rt  s   &&&r6   add_os2_fieldBuilder.add_os2_field  s    		#r8   c                "    W P                   V&   R # r@   )r{   rg  s   &&&r6   add_hhea_fieldBuilder.add_hhea_field      

3r8   c                "    W P                   V&   R # r@   )r|   rg  s   &&&r6   add_vhea_fieldBuilder.add_vhea_field  rm  r8   c                  aa
 R V P                   9  d   \        RV4      hW P                  9   d   \        RV R2V4      hV P                   Uu/ uF1  pVP                  VP
                  VP                  VP                  3bK3  	  ppVP                  4        UUUu/ uF-  w  pw  rxV\        WuV,          4      \        WV,          4      3bK/  	  ppppRV P                   9   dv   V P                   R,          P                  o
VP                  4        UaU	u/ uF;  w  op	S\        ;QJ d    . VV
3R lV	 4       F  NK  	  5M! VV
3R lV	 4       4      bK=  	  ppp	W0P                  V&   R# u upi u upppi u up	pi )rG   z?Cannot add feature variations to a font without an 'fvar' tablezCondition set 'z/' has the same name as a previous condition setavarc              3   \   <"   T F!  pSS9   d   \        VSS,          4      MTx  K#  	  R # 5ir@   )r+   )rA   r_  r  r   s   & r6   rC   +Builder.add_conditionset.<locals>.<genexpr>  s1      , =AGO&q'$-8QRR,s   ),N)r4   r   r~   rP   rQ   minValuedefaultValuemaxValuer   r*   segmentsr(  )r   r   r   rt  r  axisMaprB   bottomtopcondition_ranger   s   &&&&`     @r6   add_conditionsetBuilder.add_conditionset  s   "!Q 
 %%%!!#&UV  		
! LL4==$*;*;T]]KK! 	 
 ',kkm

 '4"]f	 vs|4sCL1  '4 	 
 TYYii'00G .3[[]
 .;)D/	 ee ,ee ,   .;   $)C 5


s   7E(3E-E4(-E4c                   V P                   '       g   \        R V4      hV P                  Vn        VP                  '       g   VP                  R3#  VP                  V P                   V P                  V P                  P                  R4      4      w  r4RpTe   TR8w  d   \        T4      pY63#   \         d   p\        RT4      ThRp?ii ; i)z5Can't define a variable scalar in a non-variable fontNrr  z,Failed to compute deltas for variable scalarl    )rO   r   rP   	does_varyr\  add_to_variation_storer   r4   r   r&   r(   )r   r   	varscalarr\  r  r  r]  s   &&&    r6   rZ  Builder.makeVariablePos  s    ###!G  	"""$$d**	&==$$d&6&6		f8MNG *!4%e,F  	!>	s   AB. .C9CCc                    R p\        V\        4      '       g'   Ve    \        P                  ! \	        V4      4      pW3# V P                  W14      w  rTVe   Ve   \        RV4      hWT3# )N4Can't define a device coordinate and variable scalar)rJ   r   r  buildDevicer)  rZ  r   )r   r  deviceTabler   r]  r\  s   &&&&  r6   makeAnchorPosBuilder.makeAnchorPos  so    )^44&k):;$$..xC+"9!F  r8   c                   Vf   R# RRrCVP                   e*   \        P                  ! \        VP                   4      4      pVP                  e*   \        P                  ! \        VP                  4      4      pV P                  VP                  VP                   V4      w  rSV P                  VP                  VP                  V4      w  rd\        P                  ! WVVP                  W44      pV# )zast.Anchor --> otTables.AnchorN)
xDeviceTabler  r  r)  yDeviceTabler  r  ybuildAnchorcontourpoint)r   r   r?  deviceXdeviceYr  r  	otlanchors   &&&     r6   r  Builder.makeOpenTypeAnchor  s    >*ood6+>+>&?@G*ood6+>+>&?@G''&2E2ExP
''&2E2ExP
OOA&*=*=wP	r8   Reservedr  c                   V'       g   R# / pV P                   P                  4        F  w  pw  rg\        W%R4      pV'       g   K  V'       d$   \        P                  ! \        V4      4      WF&   KI  \        V\        4      '       du   VR,          R,           p	V	^ ,          P                  4       V	R,          ,           p
\        W*4      '       d   \        RV4      hV P                  W4      w  WF&   pVe   WV	&   K  K  WV&   K  	  V'       d#   V'       g   VP                  '       d   R^ /MR^ /p\        P                  ! V4      pV# )z&ast.ValueRecord --> otBase.ValueRecordN:r   r  NDevicer  r  YAdvanceXAdvance)_VALUEREC_ATTRSr   r$  r  r  r)  rJ   r   lowerr   rZ  r  
buildValue)r   r   r_  r  vrastNameotNameisDevicevalotDeviceNamefeaDeviceNamer]  valRecs   &&&&         r6   r  Builder.makeOpenTypeValueRecord  s   +/+?+?+E+E+G'G'f!d+C __T#Y7
C00%c{X5 ,Q 5 5 7,r:J J1,,)NPX  &*%9%9(%H"
F%'-|$ & !6
# ,H& "$%JJJ*aZOB#r8   )2re   rc   rd   rf   rs   rP   rq   rr   r~   r]   r[   r\   rm   rk   ri   rj   rS   rg   rh   rb   r`   rL   r4   ro   rv   rN   r{   rX   rt   ru   r_   rU   rV   r^   rx   rw   ry   r   rZ   rp   rz   rK   ra   rT   rY   rn   r}   rW   rO   r|   )
r   r   rI   rH   r   r   r   r:   r   r   rq  r@   )F)e__name__
__module____qualname____firstlineno__r   r   r   r3   r   r   r   r   r   r   r   r  r'  r   r   rv  r  r  r   rj  r   r  r  r   r  r  r  r   r  r   r   r+  r  rg  rj  r   r   rt  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r+  r0  r4  r  r   rF  rL  rS  rW  r^  ra  rd  rh  rk  ro  r}  rZ  r  r  r   valueRecordFormat
startswithr  r  r  __static_attributes____classdictcell__)r  r:   r  __classdict__s   000@r6   r2   r2   _   sU      
  O JX<|>
 :1*f
02":$)V4RUh( 4?$S
j+4Z
*X"H$>N!FgR.?2	15"$2&2H&+BZ$!R* N<$%/3 >@ =/ (&
"	
/&
,


 RO4?I(:>	
R8
!


<&6=
45
5L  ()T2  %+$<$<$< AXz* 	5Q$r("T$44$<O s   ;F+Fr2   rq  )NNF)LfontTools.miscr   fontTools.misc.textToolsr   r   r   r   fontTools.feaLib.errorr    fontTools.feaLib.lookupDebugInfor	   r
   r   fontTools.feaLib.parserr   fontTools.feaLib.astr   fontTools.feaLib.variableScalarr   fontTools.otlLibr   r  fontTools.otlLib.maxContextCalcr   fontTools.ttLibr   r   fontTools.ttLib.tablesr   r   fontTools.otlLib.builderr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   fontTools.otlLib.errorr%   fontTools.varLib.errorsr&   fontTools.varLib.varStorer'   fontTools.varLib.builderr(   fontTools.varLib.featureVarsr)   fontTools.varLib.modelsr*   r+   collectionsr,   r=  r  ior-   loggingr   r   	getLoggerr  r  r7   r=   objectr2   r   r8   r6   <module>r     s    " E E 2 
 + , : + 6 4 3    $ 4 / ; 5 @ F #      	 !.$G2wf wr8   