Ë
    ^ãj	4 ã                  óÔ  — d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZmZ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mZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@ d dlAZAd dlBZBd dlCmDZD d dlEZEd dlFZFd dlGZG eEj�                  eI«      ZJdd„ZK	 dd„ZL G d„ deM«      ZNy)é    )Úannotations)Ússtruct)ÚTagÚtostrÚ
binary2numÚsafeEval)ÚFeatureLibError)ÚLookupDebugInfoÚLOOKUP_DEBUG_INFO_KEYÚLOOKUP_DEBUG_ENV_VAR)ÚParser)ÚFeatureFile)ÚVariableScalarÚVariableScalarBuilder)Ú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                óB   — t        | |«      }|j                  ||¬«       y)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Úfeaturefiler2   r3   r   s        úZ/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/feaLib/builder.pyÚaddOpenTypeFeaturesr9   5   s    € ô �d˜KÓ(€GØ‡M�M˜ u€MÕ-ó    c                ó\   — t        t        |«      «      }|r||_        t        | |||¬«       y)ae  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

    r1   N)r/   r   Únamer9   )r6   ÚfeaturesÚfilenamer2   r3   r7   s         r8   ÚaddOpenTypeFeaturesFromStringr?   G   s+   € ô& œ5 ›?Ó+€KÙØ#ˆÔÜ˜˜k°&ÀÖFr:   c            
      ó   — e Zd Z ed„ dD «       «      Zd„ Zdbd„Zd„ Zd„ Zdcd„Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d%„ Z&d&„ Z'ddd'„Z(d(„ Z)ddd)„Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6d6„ Z7d7„ Z8d8„ Z9g fd9„Z:d:„ Z;d;„ Z<d<„ Z=	 ddd=„Z>d>„ Z?d?„ Z@eAd@„ «       ZBdA„ ZCdB„ ZDdC„ ZEdD„ ZFdE„ ZGdF„ ZHdG„ ZIdH„ ZJdI„ ZKdJ„ ZLdK„ ZMdL„ ZNdM„ ZOdN„ ZPdO„ ZQdP„ ZRdQ„ ZSdR„ ZTdS„ ZUdT„ ZVdU„ ZWdV„ ZXdW„ ZYdX„ ZZdY„ Z[dZ„ Z\	 	 	 	 ded[„Z]d\„ Z^d]„ Z_e`jÂ                  D � ���ci c]4  \  }}}}|jÅ                  d^«      s|d_   jÇ                  «       |d`d z   ||f“Œ6 c}}}} Zdda„ Zeyc c}}}} w )fr4   c              #  ó2   K  — | ]  }t        |«      –— Œ y ­w©N)r   )Ú.0Útags     r8   ú	<genexpr>zBuilder.<genexpr>a   s   è ø€ ò  àô 	ˆC�ñ ùs   ‚)
ÚBASEÚGDEFÚGPOSÚGSUBúOS/2ÚheadÚhhear<   ÚvheaÚSTATc                óB  — || _         t        |t        «      r|d c| _        | _        nd |c| _        | _        |j                  «       | _        d | _        d|v r`|d   j                  | _        t        | j                  D �cg c]  }|j                  ‘Œ c}«      | _        t        j                  |«      | _        t        «       | _        d | _        d | _        d| _        d | _        d| _        t        «       | _        d| _        i | _        d | _        d | _        d | _        g | _        i i dœ| _        i | _        i | _        i | _        g | _         d | _!        i | _"        d| _#        t        «       | _$        i | _%        t        «       | _&        i | _'        i | _(        tS        tT        «      | _+        d | _,        d | _-        g | _.        d | _/        d | _0        i | _1        i | _2        i | _3        i | _4        i | _5        i | _6        i | _7        i | _8        i | _9        i | _:        i | _;        i | _<        y c c}w )NÚfvarr   F©rI   rH   )=r6   Ú
isinstancer   Ú	parseTreeÚfileÚgetReverseGlyphMapÚglyphMapÚvarstorebuilderÚaxesr)   ÚaxisTagr   Úfrom_ttfÚscalar_builderÚsetÚdefault_language_systems_Úscript_Ú	language_Ú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_)Úselfr6   r7   Úaxs       r8   Ú__init__zBuilder.__init__q   s  € ØˆŒ	ô �k¤;Ô/Ø(3°TÐ%ˆDŒN˜D�Ià(,¨kÐ%ˆDŒN˜DœIØ×/Ñ/Ó1ˆŒØ#ˆÔØ�T‰>Ø˜V™×)Ñ)ˆDŒIÜ#8Ø&*§i¡iÖ0 �—“Ò0ó$ˆDÔ ô #8×"@Ñ"@ÀÓ"FˆDÔÜ),«ˆÔ&ØˆŒØˆŒØˆÔØ)-ˆÔ&Ø#ˆÔÜ #£ˆÔØ%*ˆÔ"Ø ˆÔØˆÔØ $ˆÔØ!%ˆÔØˆŒØ)+°RÑ 8ˆÔØˆŒØ"$ˆÔØ#%ˆÔ à ˆÔØ"ˆÔØ "ˆÔØ#(ˆÔ ä ›UˆÔØ!#ˆÔä!›eˆÔØ"$ˆÔØ$&ˆÔ!Ü)¬$Ó/ˆÔà $ˆÔà!ˆÔàˆŒà $ˆÔØ#ˆÔàˆÔØ!ˆÔØ!ˆÔØ!ˆÔØˆÔØ"$ˆÔØ!ˆÔàˆŒ	àˆŒ
àˆŒ
àˆŒ
à ˆÕùòw 1s   Á>HNc                óò  ‡ — ‰ j                   €3t        ‰ j                  ‰ j                  «      j	                  «       ‰ _         ‰ j                   j                  ‰ «       |€‰ j                  }nEt        |«      }|‰ j                  z
  }|r)dj                  t        |«      «      }t        d|› d�«      ‚d|v r‰ j                  «        d|v r‰ j                  «        d|v r‰ j                  «        d|v r‰ j                  «        d|v r‰ j                  «        d	|v r‰ j!                  «        d
|v r‰ j#                  «        dD ]¶  }||vrŒ‰ j%                  |«      }‰ j&                  r‰ j)                  ||«       ‰ j+                  |«      \  }}}	|j,                  dkD  s|j.                  dkD  s|	j0                  dkD  r"t3        |«      x}
‰ j4                  |<   ||
_        Œ›|‰ j4                  v sŒª‰ j4                  |= Œ¸ t9        ˆ fd„dD «       «      r5d	‰ j4                  v r't;        ‰ j4                  «      ‰ j4                  d	   _        d|v r=‰ j?                  «       }|r|‰ j4                  d<   nd‰ j4                  v r‰ j4                  d= d|v r=‰ jA                  «       }|r|‰ j4                  d<   nd‰ j4                  v r‰ j4                  d= |s#tB        jD                  jG                  tH        «      r‰ jK                  «        y y )Nú, z9The following tables were requested but are unsupported: ú.rI   rK   rL   rM   r<   rJ   rN   ©rH   rI   r   c              3  ó:   •K  — | ]  }|‰j                   v –— Œ y ­wrB   )r6   )rC   rD   rŠ   s     €r8   rE   z Builder.build.<locals>.<genexpr>é   s   øè ø€ Ò< Cˆs�d—i‘iÔÑ<ùó   ƒrG   rF   )&rS   r   rT   rV   Úparser5   ÚsupportedTablesÚ	frozensetÚjoinÚsortedÚNotImplementedErrorÚbuild_feature_aalt_Ú
build_headÚ
build_hheaÚ
build_vheaÚ
build_nameÚ
build_OS_2Ú
build_STATÚ	makeTablerm   ÚmakeFeatureVariationsÚpromoteLayoutTable_ÚScriptCountÚFeatureCountÚLookupCountr   r6   ÚtableÚanyr   ÚusMaxContextÚ	buildGDEFÚ	buildBASEÚosÚenvironÚgetr   Ú	buildDebg)rŠ   r2   r3   ÚunsupportedÚunsupported_stringrD   r¦   Ú
scriptListÚfeatureListÚ
lookupListÚ	fontTableÚgdefÚbases   `            r8   r5   zBuilder.build»   s¦  ø€ Ø�>‰>Ð!Ü# D§I¡I¨t¯}©}Ó=×CÑCÓEˆDŒNØ�‰×Ñ˜TÔ"àˆ>Ø×)Ñ)‰Fä˜vÓ&ˆFØ  4×#7Ñ#7Ñ7ˆKÙØ%)§Y¡Y¬v°kÓ/BÓ%CÐ"Ü)ØOØ)Ð*¨!ð-óð ð �VÑØ×$Ñ$Ô&Ø�VÑØ�O‰OÔØ�VÑØ�O‰OÔØ�VÑØ�O‰OÔØ�VÑØ�O‰OÔØ�VÑØ�O‰OÔØ�VÑØ�O‰OÔØ#ò 	#ˆCØ˜&Ñ ØØ—N‘N 3Ó'ˆEØ×'Ò'Ø×*Ñ*¨5°#Ô6Ø26×2JÑ2JÈ5Ó2QÑ/ˆJ˜ Zà×&Ñ&¨Ò*Ø×+Ñ+¨aÒ/Ø×)Ñ)¨AÒ-ä-5°c«]Ð:�	˜DŸI™I c™NØ"'�	•Ø˜Ÿ	™	Ò!Ø—I‘I˜c‘Nð	#ô  Ó<Ð+;Ô<Ô<ÀÈ4Ï9É9ÑATÜ-7¸¿	¹	Ó-BˆD�I‰I�fÑÔ*Ø�VÑØ—>‘>Ó#ˆDÙØ$(�—	‘	˜&Ò!Ø˜4Ÿ9™9Ñ$Ø—I‘I˜fÐ%Ø�VÑØ—>‘>Ó#ˆDÙØ$(�—	‘	˜&Ò!Ø˜4Ÿ9™9Ñ$Ø—I‘I˜fÐ%Ù”B—J‘J—N‘NÔ#7Ô8Ø�N‰NÕð 9r:   c                óÈ   —  || j                   |«      }| j                  |_        | j                  |_        | j
                  |_        | j                  j                  |«       |S rB   )	r6   r`   Ú
lookupflagra   ÚmarkFilterSetrb   Ú	extensionri   Úappend)rŠ   ÚlocationÚbuilder_classÚresults       r8   Úget_chained_lookup_zBuilder.get_chained_lookup_ú   sS   € Ù˜tŸy™y¨(Ó3ˆØ ×,Ñ,ˆÔØ#×=Ñ=ˆÔØ×.Ñ.ˆÔØ�‰×Ñ˜VÔ$Øˆr:   c                óŒ   — | j                   D ]5  \  }}|||f}| j                  j                  |g «      j                  |«       Œ7 y rB   )rc   rk   Ú
setdefaultr»   )rŠ   ÚlookupÚfeature_nameÚscriptÚlangÚkeys         r8   Úadd_lookup_to_feature_zBuilder.add_lookup_to_feature_  sF   € Ø ×1Ñ1ò 	>‰LˆF�DØ˜4 Ð.ˆCØ�N‰N×%Ñ% c¨2Ó.×5Ñ5°fÕ=ñ	>r:   c                ób  — | j                   r…t        | j                   «      |k(  rm| j                   j                  | j                  k(  rJ| j                   j                  | j
                  k(  r'| j                   j                  |«      r| j                   S | j                  r| j                   rt        d|«      ‚ || j                  |«      | _         | j                  | j                   _        | j
                  | j                   _        | j                  | j                   _        | j                  j                  | j                   «       | j                  r#| j                   | j                  | j                  <   | j                  r&| j!                  | j                   | j                  «       | j                   S )NúOWithin a named lookup block, all rules must be of the same lookup type and flag)rf   Útyper¸   r`   r¹   ra   Úcan_add_mappingrg   r	   r6   rb   rº   ri   r»   re   rh   rÇ   )rŠ   r¼   r½   Úmappings       r8   Úget_lookup_zBuilder.get_lookup_  sY  € à×ÒÜ�T×%Ñ%Ó&¨-Ò7Ø× Ñ ×+Ñ+¨t×/?Ñ/?Ò?Ø× Ñ ×.Ñ.°$×2PÑ2PÒPØ× Ñ ×0Ñ0°Ô9à×#Ñ#Ð#Ø× Ò  T×%5Ò%5Ü!ð0àóð ñ
 )¨¯©°HÓ=ˆÔØ&*×&6Ñ&6ˆ×ÑÔ#Ø)-×)GÑ)Gˆ×ÑÔ&Ø%)×%8Ñ%8ˆ×ÑÔ"Ø�‰×Ñ˜T×-Ñ-Ô.Ø× Ò à9=×9IÑ9IˆD×Ñ × 5Ñ 5Ñ6Ø×!Ò!ð ×'Ñ'¨×(8Ñ(8¸$×:PÑ:PÔQØ×ÑÐr:   c                ó|  ‡— | j                   s| j                  sy | j                  j                  «       D ��ci c]  \  }}|t        |«      “Œ }}}| j                   dgz   D ]å  \  }}| j                  j                  «       D ����	cg c]  \  \  }}}}	||k(  r||||	f‘Œ c}	}}}}|s!|dk7  rt        j                  |›d|›d�«       Œg|D ]z  \  }}}}	|	D ]n  }
t        |
t        «      s|
g}
|
D ]T  }|j                  «       j                  «       D ]1  \  }}|j                  |g «      Š‰j                  ˆfd„|D «       «       Œ3 ŒV Œp Œ| Œç |j                  «       D ��ci c]  \  }}t        |«      dk(  sŒ||d   “Œ }}}|j                  «       D ��ci c]  \  }}t        |«      dkD  sŒ||“Œ }}}|s|sy | j                  j                  «       D ����	ci c]  \  \  }}}}	|dk7  r|||f|	“Œ c}	}}}| _        | j                  }g | _        | j                  | j                  d| j                  «       |r| j!                  t"        «      }||_        |r| j!                  t&        «      }||_        | j+                  «        | j                  j                  |«       y c c}}w c c}	}}}w c c}}w c c}}w c c}	}}}w )N©NÚaaltrÐ   z
: Feature z has not been definedc              3  ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wrB   © )rC   ÚgÚalts_for_glyphs     €r8   rE   z.Builder.build_feature_aalt_.<locals>.<genexpr>=  s   øè ø€ ò 2Ø&'°1¸NÒ3J¤ñ2ùó   ƒ	�é   r   )rn   rp   Úitemsrw   rk   ÚwarningsÚwarnrR   ÚgetAlternateGlyphsrÁ   ÚextendÚlenri   Ústart_featurero   rq   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                       @r8   r™   zBuilder.build_feature_aalt_$  sÐ  ø€ Ø×"Ò"¨4×+@Ò+@Øð
 .2×-BÑ-B×-HÑ-HÓ-J×K¡T Q¨�aœ˜a›‘jÐKˆ
ÑKØ"×1Ñ1°^Ð4DÑDò 	‰NˆH�dð 9=¿¹×8LÑ8LÓ8N÷ñ á4Ñ+�V˜T 7¨WØ˜d’?ð ˜˜w¨Ò0õˆGñ ˜t vš~Ü—‘ÂxÒQUÐVÔWØØ29ò 	Ñ.�˜˜g wØ")ò �JÜ% j´$Ô7Ø&0 \˜
Ø",ò ˜Ø+1×+DÑ+DÓ+F×+LÑ+LÓ+Nò ™K˜E 4Ø-7×-BÑ-BÀ5È"Ó-M˜NØ*×1Ñ1ó 2Ø+/ô2õ ññññ	ð	ð* /9×.>Ñ.>Ó.@÷
Ù*˜u dÄCÈÃIÐQRÃNˆE�4˜‘7‰Nð
ˆñ 
ð 1;×0@Ñ0@Ó0B×T¡ ¨ÄcÈ$ÃiÐRSÃm�˜‘ÐTˆÑTÙ™eØð 59·N±N×4HÑ4HÓ4J÷
ñ 
á0Ñ'�˜˜w¨Ø˜&Ò ð �T˜7Ð# WÑ,õ
ˆŒð
 —m‘mˆØˆŒØ×Ñ˜4×.Ñ.°¸×8PÑ8PÔQÙØ ×,Ñ,¨XÔ7IÓJˆMØ$*ˆMÔ!ÙØ×+Ñ+¨HÔ6KÓLˆLØ&+ˆLÔ#Ø×ÑÔØ�‰×Ñ˜[Õ)ùóU Lùõùó&
ùó Uùõ
s)   ¸JÂJ"ÅJ*Å3J*ÆJ0Æ(J0ÇJ6
c                ó  — | j                   sy | j                  j                  d«      }|sRt        d«      x}| j                  d<   |j	                  d| j                  «       d|_        d|_        dx|_        |_        | j                   |_	        y )NrK   s6                                                         g      ð?iõ<_l   ùe )
rz   r6   r­   r   Ú	decompileÚtableVersionÚmagicNumberÚcreatedÚmodifiedÚfontRevision©rŠ   r¦   s     r8   rš   zBuilder.build_headW  sy   € Ø×!Ò!ØØ—	‘	—‘˜fÓ%ˆÙÜ(0°Ó(8Ð8ˆE�D—I‘I˜fÑ%Ø�O‰O˜J¨¯	©	Ô2Ø!$ˆEÔØ *ˆEÔØ-7Ð7ˆEŒM˜EœNØ!×/Ñ/ˆÕr:   c                óä  — | j                   sy | j                  j                  d«      }|s=t        d«      x}| j                  d<   |j	                  d| j                  «       d|_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_	        y y )NrL   ó$                                       é   ÚcaretoffsetÚascenderÚ	descenderÚlinegap)
r†   r6   r­   r   rí   rî   ÚcaretOffsetÚascentÚdescentÚlineGapró   s     r8   r›   zBuilder.build_hheac  sÉ   € Ø�zŠzØØ—	‘	—‘˜fÓ%ˆÙÜ(0°Ó(8Ð8ˆE�D—I‘I˜fÑ%Ø�O‰O˜J¨¯	©	Ô2Ø!+ˆEÔØ˜DŸJ™JÑ&Ø $§
¡
¨=Ñ 9ˆEÔØ˜Ÿ™Ñ#ØŸ:™: jÑ1ˆEŒLØ˜$Ÿ*™*Ñ$Ø ŸJ™J {Ñ3ˆEŒMØ˜Ÿ
™
Ñ"Ø ŸJ™J yÑ1ˆE�Mð #r:   c                ó   — | j                   sy | j                  j                  d«      }|s=t        d«      x}| j                  d<   |j	                  d| j                  «       d|_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        y y )NrM   rõ   i  ÚverttypoascenderÚverttypodescenderÚverttypolinegap)	r‡   r6   r­   r   rí   rî   rü   rý   rþ   ró   s     r8   rœ   zBuilder.build_vheat  s¯   € Ø�zŠzØØ—	‘	—‘˜fÓ%ˆÙÜ(0°Ó(8Ð8ˆE�D—I‘I˜fÑ%Ø�O‰O˜J¨¯	©	Ô2Ø!+ˆEÔØ §¡Ñ+ØŸ:™:Ð&8Ñ9ˆEŒLØ $§*¡*Ñ,Ø ŸJ™JÐ':Ñ;ˆEŒMØ §
¡
Ñ*Ø ŸJ™JÐ'8Ñ9ˆE�Mð +r:   c                ó†   — |j                   D �cg c]  }|j                  ‘Œ }}t        dd«      D ]
  }||vsŒ|c S  y c c}w )Né   iÿ  )ÚnamesÚnameIDÚrange)rŠ   r¦   r<   ÚnameIDsÚuser_name_ids        r8   Úget_user_name_idzBuilder.get_user_name_idƒ  sF   € à+0¯;©;Ö7 4�4—;“;Ð7ˆÐ7Ü! # uÓ-ò 	$ˆLØ 7Ò*Ø#Ò#ñ	$ùò 8s   �>c                ó®  — d}d }|dk(  rft        j                  «       }| j                  \  |_        |_        |_        |_        || j                  v r| j                  |   |_        |S d|_        |S || j                  v rP| j                  s	 |S || j                  v sJ ‚t        j                  «       }d|_        | j                  |   |_        |S || j                  v rùt        j                  «       }d|_        | j                   j#                  |df|«      |_        | j                   j#                  |df|«      |_        | j                   j#                  |df|«      |_        | j*                  j#                  |d«      |_        | j                   j#                  |df|«      |_        t1        | j2                  |   «      |_        | j2                  |   |_        |S )Néÿÿ  Úsizer   ÚFeatUILabelNameIDÚFeatUITooltipTextNameIDÚSampleTextNameIDÚParamUILabelNameID_0)r   ÚFeatureParamsSizery   Ú
DesignSizeÚSubfamilyIDÚ
RangeStartÚRangeEndrs   ÚSubfamilyNameIDrr   ÚFeatureParamsStylisticSetÚVersionÚUINameIDrt   ÚFeatureParamsCharacterVariantsÚFormatru   r­   r  r  r  rv   ÚNumNamedParametersÚFirstParamUILabelNameIDrÜ   rx   Ú	CharCountÚ	Character)rŠ   rD   Ú
NO_NAME_IDÚparamss       r8   ÚbuildFeatureParamszBuilder.buildFeatureParamsŠ  sò  € ð ˆ
ØˆØ�&Š=Ü×/Ñ/Ó1ˆFð ×%Ñ%ñØÔ!ØÔ"ØÔ!Ø”à�d×,Ñ,Ñ,Ø)-×)?Ñ)?ÀÑ)D�Ô&ð< ˆð9 *+�Ô&ð8 ˆð7 �D×&Ñ&Ñ&Ø×)Ò)àð0 ˆð- ˜d×4Ñ4Ñ4Ð4Ð4Ü!×;Ñ;Ó=�Ø!"�”Ø"&×"8Ñ"8¸Ñ"=�”ð& ˆð% �D×'Ñ'Ñ'Ü×<Ñ<Ó>ˆFØˆFŒMØ'+×'>Ñ'>×'BÑ'BØÐ)Ð*¨Jó(ˆFÔ$ð .2×-DÑ-D×-HÑ-HØÐ/Ð0°*ó.ˆFÔ*ð '+×&=Ñ&=×&AÑ&AØÐ(Ð)¨:ó'ˆFÔ#ð )-×(AÑ(A×(EÑ(EÀcÈ1Ó(MˆFÔ%Ø-1×-DÑ-D×-HÑ-HØÐ,Ð-¨zó.ˆFÔ*ô  # 4×#6Ñ#6°sÑ#;Ó<ˆFÔØ#×2Ñ2°3Ñ7ˆFÔØˆr:   c                ó¾  — | j                   sy | j                  j                  d«      }|s!t        d«      x}| j                  d<   g |_        | j                   D ]é  }|\  }}}}}t        |t        «      sº|}|| j                  v rM|| j                  vr/| j                  |«      | j                  |<   | j                  |   €J ‚| j                  |   }n]|d   | j                  v rL|| j                  vr/| j                  |«      | j                  |<   | j                  |   €J ‚| j                  |   }|j                  |||||«       Œë |j                  j                  «        y )Nr<   r   )r{   r6   r­   r   r  rR   Úintrr   rs   r
  rt   ru   ÚsetNameÚsort)	rŠ   r¦   r<   r  Ú
platformIDÚ	platEncIDÚlangIDÚstringrD   s	            r8   r�   zBuilder.build_name¹  s\  € Ø�{Š{ØØ—	‘	—‘˜fÓ%ˆÙÜ(0°Ó(8Ð8ˆE�D—I‘I˜fÑ%ØˆEŒKØ—K‘Kò 	IˆDØ<@Ñ9ˆF�J 	¨6°6ô ˜f¤cÔ*Ø�Ø˜$×,Ñ,Ñ,Ø $×"8Ñ"8Ñ8Ø6:×6KÑ6KÈEÓ6R˜×.Ñ.¨sÑ3Ø#×5Ñ5°cÑ:ÐFÐFÐFØ!×3Ñ3°CÑ8‘FØ˜‘V˜t×2Ñ2Ñ2Ø $×"9Ñ"9Ñ9Ø7;×7LÑ7LÈUÓ7S˜×/Ñ/°Ñ4Ø#×6Ñ6°sÑ;ÐGÐGÐGØ!×4Ñ4°SÑ9�FØ�M‰M˜& &¨*°iÀÕHð!	Ið" 	�‰×ÑÕr:   c                ó:  — | j                   sy | j                  j                  d«      }|sat        d«      x}| j                  d<   dt	        j
                  t        d«      j                  «      z  }|j                  || j                  «       d}d| j                   v r| j                   d   |_	        d| j                   v rlt        d«      j                  «       }| j                   d   \
  |_        |_        |_        |_        |_        |_        |_        |_        |_        |_        ||_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        d	| j                   v r| j                   d	   |_        d
| j                   v r| j                   d
   |_        d| j                   v r4t7        d| j                   d   z   dz   «      }|j9                  d«      |_        d| j                   v r| j                   d   |_        d| j                   v r| j                   d   |_        d| j                   v r|jA                  | j                   d   «       d| j                   v r/| jC                  | j                   d   «      }|\  |_"        |_#        d}d| j                   v r| j                   d   |_$        d}d| j                   v r| j                   d   |_%        d}d| j                   v r| j                   d   |_&        d}d| j                   v r| j                   d   |_'        d}d„ }tQ        ||jR                  «      |_)        |dk\  r	 ||d«       |dk\  r	 ||d«       |dk\  r
 ||d«       y y )NrJ   ó    r   ÚfstypeÚpanoseÚtypoascenderÚtypodescenderÚtypolinegapÚ	winascentÚ
windescentÚvendorz'''é   ÚweightclassÚ
widthclassÚunicoderangeÚcodepagerangerÖ   Úxheighté   Ú	capheightÚloweropsizeé   Úupperopsizec                óF   — |D ]  }t        | |«      rŒt        | |d«       Œ y )Nr   )ÚhasattrÚsetattr)r¦   ÚattrsÚattrs      r8   Ú	checkattrz%Builder.build_OS_2.<locals>.checkattr  s'   € Øò ,�Ü˜u dÕ+Ü˜E 4¨Õ+ñ,r:   )ÚulCodePageRange1ÚulCodePageRange2)ÚsxHeightÚ
sCapHeightÚusDefaultCharÚusBreakCharr¨   )ÚusLowerOpticalPointSizeÚusUpperOpticalPointSize)*r…   r6   r­   r   r   Úcalcsizer   ÚOS2_format_0rí   ÚfsTypeÚPanoseÚbFamilyTypeÚbSerifStyleÚbWeightÚbProportionÚ	bContrastÚbStrokeVariationÚ	bArmStyleÚbLetterFormÚbMidlineÚbXHeightr/  ÚsTypoAscenderÚsTypoDescenderÚsTypoLineGapÚusWinAscentÚusWinDescentr   ÚljustÚ	achVendIDÚusWeightClassÚusWidthClassÚsetUnicodeRangesÚbuild_codepages_rG  rH  rI  rJ  rM  rN  ÚmaxÚversion)rŠ   r¦   Údatari  r/  r5  ÚpagesrF  s           r8   rž   zBuilder.build_OS_2Ó  s@  € Ø�yŠyØØ—	‘	—‘˜fÓ%ˆÙÜ(0°Ó(8Ð8ˆE�D—I‘I˜fÑ%Øœ7×+Ñ+¬N¸6Ó,B×,OÑ,OÓPÑPˆDØ�O‰O˜D $§)¡)Ô,ØˆØ�t—y‘yÑ ØŸ9™9 XÑ.ˆEŒLØ�t—y‘yÑ Ü# FÓ+×2Ñ2Ó4ˆFð —	‘	˜(Ñ#ñØÔ"ØÔ"Ø”ØÔ"ØÔ ØÔ'ØÔ ØÔ"Ø”Ø”à!ˆEŒLØ˜TŸY™YÑ&Ø"&§)¡)¨NÑ";ˆEÔØ˜dŸi™iÑ'Ø#'§9¡9¨_Ñ#=ˆEÔ Ø˜DŸI™IÑ%Ø!%§¡¨=Ñ!9ˆEÔØ˜$Ÿ)™)Ñ#Ø $§	¡	¨+Ñ 6ˆEÔØ˜4Ÿ9™9Ñ$Ø!%§¡¨<Ñ!8ˆEÔØ�t—y‘yÑ ä˜e d§i¡i°Ñ&9Ñ9¸EÑAÓBˆFØ$Ÿl™l¨1›oˆEŒOØ˜DŸI™IÑ%Ø"&§)¡)¨MÑ":ˆEÔØ˜4Ÿ9™9Ñ$Ø!%§¡¨<Ñ!8ˆEÔØ˜TŸY™YÑ&Ø×"Ñ" 4§9¡9¨^Ñ#<Ô=Ø˜dŸi™iÑ'Ø×)Ñ)¨$¯)©)°OÑ*DÓEˆEØ=BÑ:ˆEÔ" EÔ$:ØˆGØ˜Ÿ	™	Ñ!Ø!ŸY™Y yÑ1ˆEŒNØˆGØ˜$Ÿ)™)Ñ#Ø#Ÿy™y¨Ñ5ˆEÔØˆGØ˜DŸI™IÑ%Ø,0¯I©I°mÑ,DˆEÔ)ØˆGØ˜DŸI™IÑ%Ø,0¯I©I°mÑ,DˆEÔ)ØˆGò	,ô
 ˜G U§]¡]Ó3ˆŒà�aŠ<Ù�eÐEÔFØ�aŠ<ÙØðô	ð �aŠ<Ù�eÐSÕTð r:   c                óà   — dD ]  }|| j                   v sŒt        |› d�|«      ‚ t        |t        «      r|| j                   d<   y t        |t        «      r|| j                   d<   y t        |«      ‚)N)ÚElidedFallbackNameÚElidedFallbackNameIDz is already set.rn  rm  )rˆ   r	   rR   r%  rw   ÚAssertionError)rŠ   Úvaluer¼   Útokens       r8   ÚsetElidedFallbackNamezBuilder.setElidedFallbackName)  sz   € ð Dò 	ˆEØ˜Ÿ
™
Ò"Ü%Ø�gÐ-Ð.Øóð ð	ô �eœSÔ!Ø16ˆD�J‰JÐ-Ò.Ü˜œtÔ$Ø/4ˆD�J‰JÐ+Ò,ä  Ó'Ð'r:   c                ój  — d| j                   vrg | j                   d<   |j                  d„ | j                   d   D «       v rt        d|j                  › d�|«      ‚|j                  d„ | j                   d   D «       v rt        d|j                  › d�|«      ‚| j                   d   j	                  |«       y )NÚ
DesignAxesc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrB   )rD   ©rC   Úrs     r8   rE   z(Builder.addDesignAxis.<locals>.<genexpr><  s   è ø€ ÒF¨˜aŸe�eÑFùó   ‚z$DesignAxis already defined for tag "z".c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrB   )Ú	axisOrderrv  s     r8   rE   z(Builder.addDesignAxis.<locals>.<genexpr>A  s   è ø€ Ò#R°A A§K¥KÑ#Rùrx  z+DesignAxis already defined for axis number r�   )rˆ   rD   r	   rz  r»   )rŠ   Ú
designAxisr¼   s      r8   ÚaddDesignAxiszBuilder.addDesignAxis9  s´   € Ø˜tŸz™zÑ)Ø')ˆD�J‰J�|Ñ$Ø�>‰>ÑF¨T¯Z©Z¸Ñ-EÔFÑFÜ!Ø6°z·~±~Ð6FÀbÐIØóð ð ×ÑÑ#R¸¿¹ÀLÑ9QÔ#RÑRÜ!Ø=¸j×>RÑ>RÐ=SÐSTÐUØóð ð 	�
‰
�<Ñ ×'Ñ'¨
Õ3r:   c                ó\  — d| j                   vrg | j                   d<   | j                   d   D ]Ë  }|j                  D �ch c]  }|j                  «       ’Œ c}|j                  D �ch c]  }|j                  «       ’Œ c}k(  sŒU|j                  D �ch c]  }|j                  «       ’Œ c}|j                  D �ch c]  }|j                  «       ’Œ c}k(  sŒ§|j                  |j                  k(  sŒÁt        d|«      ‚ | j                   d   j                  |«       y c c}w c c}w c c}w c c}w )NÚAxisValueRecordsz8An AxisValueRecord with these values is already defined.)rˆ   r  ÚasFeaÚ	locationsÚflagsr	   r»   )rŠ   ÚaxisValueRecordr¼   Úrecord_Úns        r8   ÚaddAxisValueRecordzBuilder.addAxisValueRecordH  sô   € Ø T§Z¡ZÑ/Ø-/ˆD�J‰JÐ)Ñ*à—z‘zÐ"4Ñ5ò 	ˆGà$+§M¡MÖ2˜q�—‘•Ò2Ø'6×'<Ñ'<Ö= !�A—G‘G•IÒ=ó>à(/×(9Ñ(9Ö: 1�Q—W‘W•YÒ:Ø'6×'@Ñ'@ÖA !�A—G‘G•IÒAóBà—M‘M _×%:Ñ%:Ó:ä%ØNØóð ð	ð 	�
‰
Ð%Ñ&×-Ñ-¨oÕ>ùò 3ùÚ=ùÚ:ùÚAs   ¾DÁ%DÂD$Â7D)c           	     óê  — | j                   sy | j                   j                  d«      }|st        dd «      ‚| j                   j                  d«      }i }g }|D ]  }g ||j                  <   Œ |��q|D �]k  }i }|j                  dkD  r|j                  |d<   t        |j                  «      dk(  rÑ|j                  d   }|j                  }	t        |	«      dk(  r!|j                  |	d   |j                  dœ«       t        |	«      dk(  r%|j                  |	d   |	d   |j                  d	œ«       t        |	«      d
k(  r&|	\  }
}}|j                  |
|||j                  dœ«       ||j                     j                  |«       �Œ|j                  |j                  D �ci c]  }|j                  |j                  d   “Œ c}|j                  dœ«       |j                  |«       �Œn |D �cg c]4  }|j                  |j                  |j                  ||j                     dœ‘Œ6 }}| j                  j                  d«      }|s!t        d«      x}| j                  d<   g |_	        d| j                   v r2| j                   d   }|j                  |«      }|s:t        d|› d�d «      ‚d| j                   v r| j                   d   }nt        dd «      ‚t        j                   | j                  |||¬«       y c c}w c c}w )Nrt  zDesignAxes not definedr~  r   r�  rÖ   )rp  r<   r<  )rp  ÚlinkedValuer<   é   )ÚnominalValueÚrangeMinValueÚrangeMaxValuer<   )r¼   r<   )ÚorderingrD   r<   Úvaluesr<   rn  zElidedFallbackNameID z; points to a nameID that does not exist in the "name" tablerm  zASTAT table requires an ElidedFallbackName or ElidedFallbackNameID)r€  ÚelidedFallbackName)rˆ   r­   r	   rD   r�  rÜ   r€  r�  Úupdater  r»   rz  r6   r   ÚgetDebugNameÚotlÚbuildStatTable)rŠ   rX   ÚaxisValueRecordsÚ
axisValuesÚformat4_locationsrD   ÚavrÚ
valuesDictr¼   r�  ÚnominalÚminValÚmaxValÚirà   Ú
designAxesÚ	nameTabler  r<   s                      r8   rŸ   zBuilder.build_STATZ  sí  € Ø�zŠzØà�z‰z�~‰~˜lÓ+ˆÙÜ!Ð":¸DÓAÐAØŸ:™:Ÿ>™>Ð*<Ó=ÐØˆ
ØÐØò 	%ˆCØ"$ˆJ�s—w‘wÒð	%àÑ'Ø'ó #9�Ø�
Ø—9‘9˜q’=Ø*-¯)©)�J˜wÑ'Ü�s—}‘}Ó%¨Ò*Ø"Ÿ}™}¨QÑ/�HØ%Ÿ_™_�FÜ˜6“{ aÒ'Ø"×)Ñ)°F¸1±IÀsÇyÁyÑ*QÔRÜ˜6“{ aÒ'Ø"×)Ñ)à)/°©Ø/5°a©yØ(+¯	©	ñôô ˜6“{ aÒ'Ø28Ñ/˜ ¨Ø"×)Ñ)à07Ø17Ø17Ø(+¯	©	ñ	ôð ˜xŸ|™|Ñ,×3Ñ3°JÖ?à×%Ñ%àEHÇ]Á]Ö(SÀ¨¯©°·±¸±Ñ);Ò(SØ$'§I¡Iñôð &×,Ñ,¨ZÖ8ðG#9ðX ö
ð ð ŸK™KØ—u‘uØŸ™Ø$ Q§U¡UÑ+ó	ð
ˆ
ð 
ð —I‘I—M‘M &Ó)ˆ	ÙÜ,4°VÓ,<Ð<ˆI˜Ÿ	™	 &Ñ)Ø ˆIŒOà! T§Z¡ZÑ/Ø—Z‘ZÐ 6Ñ7ˆFØ×)Ñ)¨&Ó1ˆDÙÜ%Ø+¨F¨8ð 4#ð #ð ó	ð ð " T§Z¡ZÑ/Ø—Z‘ZÐ 4Ñ5‰Fä!ØSØóð ô
 	×ÑØ�I‰IØØ'Ø%ö		
ùòO )Tùò
s   Æ!K+
Ç$9K0c                óÆ  — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1œ¥}|D �cg c]  }||v sŒ||   ‘Œ }}g }t        d«      D ]L  }|j                  d2«       t        |d3z  |dz   d3z  «      D ]!  }||v r||xx   d4z  cc<   Œ||xx   d5z  cc<   Œ# ŒN |D �cg c]  }t        |d d d6…   «      ‘Œ c}S c c}w c c}w )7Niä  r   iâ  rÖ   iã  r<  iå  rˆ  iæ  r6  iç  r?  iè  é   ié  é   iê  é   ij  é   i¤  é   i¨  é   iµ  é   i¶  é   iQ  é   ie  é0   ib  é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   )ia  i`  i_  i^  i]  i\  iY  iW  iT  i  iá  iÄ  iR  iµ  Ú é    Ú1Ú0éÿÿÿÿ)r  r»   r   )rŠ   rk  Ú
pages2bitsÚpÚbitsr›  Újs          r8   rg  zBuilder.build_codepages_´  s´  € ð 
Ø�!ð 
à�!ð 
ð �!ð 
ð �!ð	 
ð
 �!ð 
ð �!ð 
ð �!ð 
ð �!ð 
ð �!ð 
ð �ð 
ð �ð 
ð �ð 
ð �ð 
ð �ð 
ð �"ð 
ð  �ð! 
ð" �ð# 
ð$ ØØØØØØØØØØØØØò? 
ˆ
ðB (-Ö@ !°°Z²�
˜1“Ð@ˆÐ@ØˆÜ�q“ò 	$ˆAØ�L‰L˜ÔÜ˜1˜r™6 A¨¡E¨R¡<Ó0ò $�Ø˜‘9Ø˜!“H ‘O”Hà˜!“H ‘O”Hñ	$ð	$ð .3Ö3¨”
˜1™T˜r˜T™7Õ#Ò3Ð3ùò Aùò 4s   Á	CÁCÂ>Cc                ó  — | j                   s| j                  sy t        j                  «       }d|_        | j                  | j                   «      |_        | j                  | j                  «      |_        t        d«      }||_	        |S )Nrö   rF   )
r|   r}   r   rF   r  ÚbuildBASEAxisÚ	HorizAxisÚVertAxisr   r¦   )rŠ   r¶   r¾   s      r8   rª   zBuilder.buildBASEá  sn   € Ø×$Ò$¨T×-AÒ-AØÜ�}‰}‹ˆØ!ˆŒØ×+Ñ+¨D×,AÑ,AÓBˆŒØ×*Ñ*¨4×+?Ñ+?Ó@ˆŒä˜&Ó!ˆØˆŒØˆr:   c                óJ   — t        j                  «       }d|_        ||_        |S ©NrÖ   )r   Ú	BaseCoordr  Ú
Coordinate)rŠ   ÚcÚcoords      r8   ÚbuildBASECoordzBuilder.buildBASECoordí  s$   € Ü×"Ñ"Ó$ˆØˆŒØˆÔØˆr:   c                ó  — |sy |\  }}}t        j                  «       }t        j                  «       |_        ||j                  _        t	        |«      |j                  _        t        j                  «       |_        g |j                  _        t	        |«      |j                  _        t        |«      D �]O  }|D �cg c]  }|d   |d   k(  sŒ|dd  ‘Œ }}t        j                  «       }|d   |_
        t        j                  «       |_        t        j                  «       |j                  _        |j                  |d   «      |j                  j                  _        g |j                  j                  _        t	        |d   «      |j                  j                  _        g |j                  _        |d   D ]@  }|j                  j                  j                  j%                  | j'                  |«      «       ŒB t        |«      D ]«  \  }	}
}t        j(                  «       }| j'                  |
«      |_        | j'                  |«      |_        d|_        |	dk(  r||j                  _        Œet        j"                  «       }|	|_        ||_        |j                  j"                  j%                  |«       Œ­ t	        |j                  j"                  «      |j                  _        |j                  j                  j%                  |«       �ŒR |S c c}w )Nr   rÖ   r<  Ú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                 r8   rÂ  zBuilder.buildBASEAxisó  sœ  € ÙØØ!%Ñˆˆw˜Ü�}‰}‹ˆÜ#×/Ñ/Ó1ˆÔØ',ˆ×ÑÔ$Ü(+¨E«
ˆ×ÑÔ%Ü&×5Ñ5Ó7ˆÔØ/1ˆ×ÑÔ,Ü.1°'«lˆ×ÑÔ+Ü˜W“oó 	@ˆFà)/ö!Ø%°6¸!±9ÀÀqÁ	Ó3I��q�r’
ð!Ðð !ô ×.Ñ.Ó0ˆFØ#)¨!¡9ˆFÔ Ü (× 3Ñ 3Ó 5ˆFÔÜ+3×+>Ñ+>Ó+@ˆF×ÑÔ(Ø8=¿¹ÀFÈ1ÁIÓ8NˆF×Ñ×(Ñ(Ô5Ø57ˆF×Ñ×(Ñ(Ô2Ü:=¸fÀQ¹i».ˆF×Ñ×(Ñ(Ô7Ø24ˆF×ÑÔ/à˜A‘Yò V�Ø×!Ñ!×,Ñ,×6Ñ6×=Ñ=¸d×>QÑ>QÐRSÓ>TÕUðVä28Ð9JÓ2Kò LÑ.�˜) YÜ (§¡Ó 1�Ø)-×)<Ñ)<¸YÓ)G�Ô&Ø)-×)<Ñ)<¸YÓ)G�Ô&Ø01�Ô-Ø˜vÒ%Ø6C�F×%Ñ%Õ3ä"*×"<Ñ"<Ó">�KØ19�KÔ.Ø)6�KÔ&Ø×%Ñ%×7Ñ7×>Ñ>¸{ÕKðLô 25Ø×!Ñ!×3Ñ3ó2ˆF×ÑÔ.ð ×Ñ×0Ñ0×7Ñ7¸Ö?ð=	@ð> ˆùò=!s   Â9LÃ
Lc                ó  — t        j                  «       }| j                  «       |_        t	        j
                  | j                  | j                  «      |_        t	        j                  | j                  | j                  | j                  «      |_        | j                  «       |_        | j                  «       |_        |j                   rdnd|_        | j$                  r—| j$                  j'                  «       }|r{d|_        ||_        |j+                  «       }t-        «       }|j/                  ||¬«       dD ];  }|| j0                  v sŒ| j0                  |   j2                  j/                  ||¬«       Œ= t5        |j                  |j                  |j                  |j                  |j                   f«      xs t7        |d«      }|r?| j0                  j9                  «       r| j;                  |«       t=        d«      }||_        |S y )Né  rö   i  )ÚdonerQ   ÚVarStorerG   )r   rG   ÚbuildGDEFGlyphClassDef_ÚGlyphClassDefr‘  ÚbuildAttachListr~   rV   Ú
AttachListÚbuildLigCaretListr   r€   ÚLigCaretListÚbuildGDEFMarkAttachClassDef_ÚMarkAttachClassDefÚbuildGDEFMarkGlyphSetsDef_ÚMarkGlyphSetsDefr  rW   Úfinishrñ  Úoptimizer\   Úremap_device_varidxesr6   r¦   r§   rB  ÚhasExtendedGlyphIDsÚpromoteGDEF_r   )rŠ   rµ   ÚstoreÚ
varidx_maprð  rD   Úhas_datar¾   s           r8   r©   zBuilder.buildGDEF  s½  € Ü�}‰}‹ˆØ!×9Ñ9Ó;ˆÔÜ×-Ñ-¨d×.@Ñ.@À$Ç-Á-ÓPˆŒÜ×1Ñ1Ø× Ñ  $×"6Ñ"6¸¿¹ó
ˆÔð #'×"CÑ"CÓ"EˆÔØ $× ?Ñ ?Ó AˆÔØ%)×%:Ò%:‘zÀ
ˆŒØ×ÒØ×(Ñ(×/Ñ/Ó1ˆEÙØ)�”Ø %�”Ø"Ÿ^™^Ó-�
ä“u�Ø×*Ñ*¨:¸DÐ*ÔAØ+ò �CØ˜dŸi™iÒ'ØŸ	™	 #™×,Ñ,×BÑBØ&¨Tð Cõ ðô
 à×"Ñ"Ø—‘Ø×!Ñ!Ø×'Ñ'Ø×%Ñ%ðó
ò 'ô �T˜:Ó&ð 	ñ Ø�y‰y×,Ñ,Ô.Ø×!Ñ! $Ô'Ü˜fÓ%ˆFØˆFŒLØˆMàr:   c                ó  — d|_         |j                  d c|_        |_        |j                  d c|_        |_        |j
                  d c|_        |_        |j                  d c|_        |_        |j                  d c|_
        |_	        y )Ni  )r  ró  ÚGlyphClassDef2rõ  ÚAttachList2r÷  ÚLigCaretList2rù  ÚMarkAttachClassDef2rû  ÚMarkGlyphSetsDef2)rŠ   rµ   s     r8   r   zBuilder.promoteGDEF_I  sƒ   € Ø!ˆŒØ26×2DÑ2DÀdÐ/ˆÔ˜TÔ/Ø,0¯O©O¸TÐ)ˆÔ˜$œ/Ø04×0AÑ0AÀ4Ð-ˆÔ˜DÔ-à×#Ñ#Øð 	:ˆÔ  $Ô"9ð 9=×8MÑ8MÈtÐ5ˆÔ Õ 5r:   c                óÚ  — | j                   r3| j                   j                  «       D ���ci c]  \  }\  }}||“Œ }}}}n†i }| j                  D ]!  }|j                  |j	                  «       «       Œ# | j
                  j                  j                  «       D ]-  }|j                  D ]  }|j                  «       D ]  }d||<   Œ	 Œ Œ/ |rt        j                  «       }	||	_        |	S y c c}}}w )Nrˆ  )r�   r×   ri   r�  ÚinferGlyphClassesrS   ÚmarkClassesr�  ÚdefinitionsÚglyphSetr   ró  Ú	classDefs)
rŠ   rÓ   rÉ  Ú_ÚclassesrÂ   Ú	markClassÚmarkClassDefrä   r¾   s
             r8   rò  zBuilder.buildGDEFGlyphClassDef_T  sê   € Ø×ÒØ/3×/CÑ/C×/IÑ/IÓ/K×LÐL¡ ¡F Q¨�q˜!‘tÐLˆGÓLàˆGØŸ-™-ò ;�Ø—‘˜v×7Ñ7Ó9Õ:ð;à!Ÿ^™^×7Ñ7×>Ñ>Ó@ò +�	Ø$-×$9Ñ$9ò +�LØ!-×!6Ñ!6Ó!8ò +˜Ø)*˜ šñ+ñ+ð+ñ Ü×+Ñ+Ó-ˆFØ&ˆFÔØˆMàùô Ms   «C&c                ó´   — | j                   j                  «       D ���ci c]  \  }\  }}||“Œ }}}}|sy t        j                  «       }||_        |S c c}}}w rB   )r‚   r×   r   rù  r  )rŠ   rÓ   rÉ  r  r  r¾   s         r8   rø  z$Builder.buildGDEFMarkAttachClassDef_f  sZ   € Ø+/×+;Ñ+;×+AÑ+AÓ+C×DÐD™i˜a¡ ! Q�Q˜‘TÐDˆ	ÒDÙØÜ×,Ñ,Ó.ˆØ$ˆÔØˆùô Es   ŸAc                óÄ   — g }t        | j                  j                  «       d„ ¬«      D ]  \  }}|j                  |«       Œ t	        j
                  || j                  «      S )Nc                ó   — | d   S rÆ  rÒ   )Úitems    r8   ú<lambda>z4Builder.buildGDEFMarkGlyphSetsDef_.<locals>.<lambda>q  s
   € ¸4À¹7€ r:   ©rÆ   )r—   r„   r×   r»   r‘  ÚbuildMarkGlyphSetsDefrV   )rŠ   ÚsetsÚglyphsÚid_s       r8   rú  z"Builder.buildGDEFMarkGlyphSetsDef_n  s[   € ØˆÜ!Ø× Ñ ×&Ñ&Ó(Ñ.Bô
ò 	 ‰KˆF�Cð �K‰K˜Õð	 ô ×(Ñ(¨¨t¯}©}Ó=Ð=r:   c                óÌ   — d| j                   vr,t        d«      | j                   d<   i | j                   d   _        | j                  | j                   d   j                  t        <   y )NÚDebg)r6   r   rj  rj   r   ©rŠ   s    r8   r®   zBuilder.buildDebgv  sR   € Ø˜Ÿ™Ñ"Ü (¨Ó 0ˆD�I‰I�fÑØ%'ˆD�I‰I�fÑÔ"Ø8<×8MÑ8Mˆ�	‰	�&Ñ×ÑÔ4Ò5r:   c                ó:  — |dv sJ |«       ‚| j                   D ]	  }d |_        Œ g }| j                   D ]»  }|j                  |k7  rŒ| j                  |«      }|j	                  |d u¬«      }|€t        d|j                  «      ‚|D ]g  }t        |«      |_        t        t        |j                  «      |d ¬«      | j                  |   t        |j                  «      <   |j                  |«       Œi Œ½ g }|D ]"  }	 |j                  |j                  «       «       Œ$ |S # t        $ r%}t        t        |«      |j                  «      |‚d }~wt        $ rJ}| j                  |   t        |j                  «         j                  }	t        t        |«      |	«      |‚d }~ww xY w)Nr�   )Úis_named_lookuprÉ   )r¼   r<   rá   )ri   Úlookup_indexr¦   Úget_lookup_name_Úpromote_lookup_typer	   r¼   rÜ   r
   Ústrrj   r»   r5   r'   Ú	Exception)
rŠ   rD   rÂ   râ   r<   ÚresolvedÚlÚ	otLookupsÚer¼   s
             r8   ÚbuildLookups_zBuilder.buildLookups_|  s£  € ØÐ&Ñ&Ð+¨Ó+Ð&Ø—m‘mò 	'ˆFØ"&ˆFÕð	'àˆØ—m‘mò 	"ˆFØ�|‰|˜sÒ"ØØ×(Ñ(¨Ó0ˆDØ×1Ñ1À$ÈdÐBRÐ1ÓSˆHØÐÜ%ð4à—O‘Oóð ð
 ò "�Ü&)¨'£l�Ô#ÜGVÜ  §¡Ó1ØØ ôH�×%Ñ% cÑ*¬3¨v×/BÑ/BÓ+CÑDð
 —‘˜qÕ!ñ"ð	"ð& ˆ	Øò 	?ˆAð?Ø× Ñ  §¡£Õ+ð	?ð Ðøô $ò AÜ%¤c¨!£f¨a¯j©jÓ9¸qÐ@ûÜò ?Ø×0Ñ0°Ñ5´c¸!¿.¹.Ó6IÑJ×SÑS�Ü%¤c¨!£f¨hÓ7¸QÐ>ûð?ús%   Ã8DÄ	FÄ$ EÅFÅAFÆFc                ó&  —  t        t        |d «      «       }d|_        t        j                  «       |_        g |j                  _        t        j
                  «       |_        g |j
                  _        t        j                  «       |_        | j                  |«      |j                  _	        i }i }i }d„ }t        | j                  j                  «       |¬«      D �]û  \  }}|\  }	}
}t        t        j                  d„ |D «       «      «      }t!        |«      }|dk(  xr |dk(  }| j#                  ||«      }t%        |«      dk(  r|s|sŒn|D ]G  }	 | j&                  |   t)        |«         j+                  |¬«      | j&                  |   t)        |«      <   ŒI ||f}|j3                  |«      }|€Ñt%        |j
                  j                  «      }t        j                  «       }||_        t        j6                  «       |_        | j9                  |«      |j6                  _        t=        |«      |j6                  _        t%        |«      |j6                  _         |j
                  j                  jC                  |«       |||<   |jE                  |	i «      jE                  |
g «      jC                  |«       | jF                  j3                  |	|
f«      |k(  s�Œõ|||	|
f<   �Œþ t        |j                  «       «      D �]è  \  }	}t        j                  «       }|	|_$        t        jJ                  «       |_%        d |jJ                  _&        g |jJ                  _'        t        |j                  «       «      D �]  \  }
}t        jN                  «       }t        jP                  «       |_(        d |jP                  _)        |j3                  |	|
f«      }|€d
|jP                  _*        n||jP                  _*        |D �cg c]
  }||k7  sŒ	|‘Œ c}|jP                  _+        t%        |jP                  jV                  «      |jP                  _,        |
dk(  r|jP                  |jJ                  _&        Œñ|
|_-        |jJ                  jN                  jC                  |«       �Œ t%        |jJ                  jN                  «      |jJ                  _.        |j                  j                  jC                  |«       �Œë t%        |j                  j                  «      |j                  _/        t%        |j
                  j                  «      |j
                  _,        t%        |j                  j                  «      |j                  _         |S # t,        $ r t/        j0                  d	«       Y �ŒAw xY wc c}w )Nrö   c                ó8   — | d   d   | d   d   | d   d   | d   fS )Nr   r<  rÖ   rÒ   )Úfs    r8   r  z#Builder.makeTable.<locals>.<lambda>°  s+   €  A a¡D¨¡G¨Q¨q©T°!©W°a¸±d¸1±g¸qÀ¹tÐ#D€ r:   r  c              3  óN   K  — | ]  }|j                   €Œ|j                   –— Œ y ­wrB   )r#  )rC   r)  s     r8   rE   z$Builder.makeTable.<locals>.<genexpr>º  s"   è ø€ ò Ø'(°q·~±~Ñ7Q�A—N•Nñùs   ‚%”%rH   r  r   )rá   zWfeaLib.Builder subclass needs upgrading to stash debug information. See fonttools#2065.r  rÍ  )0Úgetattrr   r  Ú
ScriptListÚScriptRecordÚFeatureListÚFeatureRecordÚ
LookupListr,  ÚLookupr—   rk   r×   ÚtupleÚdictÚfromkeysr•   Úany_feature_variationsrÜ   rj   r&  Ú_replaceÚKeyErrorrØ   rÙ   r­   Ú
FeatureTagÚFeaturer#  ÚFeatureParamsrw   ÚLookupListIndexr¥   r»   rÁ   rl   Ú	ScriptTagÚScriptÚDefaultLangSysÚLangSysRecordÚLangSysÚLookupOrderÚReqFeatureIndexÚFeatureIndexr¤   Ú
LangSysTagÚLangSysCountr£   )rŠ   rD   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                            r8   r    zBuilder.makeTableŸ  sº  € Ø,”œ # tÓ,Ó.ˆØ"ˆŒÜ#×.Ñ.Ó0ˆÔØ(*ˆ×ÑÔ%Ü$×0Ñ0Ó2ˆÔØ*,ˆ×ÑÔ'Ü#×.Ñ.Ó0ˆÔØ"&×"4Ñ"4°SÓ"9ˆ×ÑÔð ˆØ#%Ð Øˆñ EˆÜ" 4§>¡>×#7Ñ#7Ó#9¸~ÔNó 1	I‰LˆC�Ø(+Ñ%ˆF�D˜+ô #Ü—‘ñ Ø,3ôó óˆNô # >Ó2ˆJà &™=ÒB¨[¸FÑ-BˆLØ ×7Ñ7¸ÀSÓIˆMÜ�>Ó" aÒ'±Á]Øà$ò 	�ðØ:>×:OÑ:OÐPSÑ:TÜ˜B›ñ;ç‘h s�hÓ+ð ×)Ñ)¨#Ñ.¬s°2«wÒ7ð	ð '¨
Ð3ˆKØ+×/Ñ/°Ó<ˆMØÐ$Ü # E×$5Ñ$5×$CÑ$CÓ D�Ü×-Ñ-Ó/�Ø"-�”Ü'×/Ñ/Ó1�”Ø-1×-DÑ-DÀ[Ó-Q�—‘Ô*Ü/3°NÓ/C�—‘Ô,Ü+.¨~Ó+>�—‘Ô(Ø×!Ñ!×/Ñ/×6Ñ6°tÔ<Ø/<� Ñ,Ø×Ñ˜v rÓ*×5Ñ5°d¸BÓ?×FÑFÀ}ÔUØ×&Ñ&×*Ñ*¨F°D¨>Ó:¸kÔIØ;HÐ(¨&°$¨Ó8ðc1	Iôh &,¨G¯M©M«OÓ%<ó 	7Ñ!ˆF�MÜ×(Ñ(Ó*ˆDØ#ˆDŒNÜ"Ÿ/™/Ó+ˆDŒKØ)-ˆD�K‰KÔ&Ø(*ˆD�K‰KÔ%Ü)/°×0CÑ0CÓ0EÓ)Fó >Ñ%��oÜ"×0Ñ0Ó2�Ü"*×"2Ñ"2Ó"4�”Ø.2�—‘Ô+à$<×$@Ñ$@À&È$ÀÓ$PÐ!Ø$Ð,Ø6<�G—O‘OÕ3à6G�G—O‘OÔ3ð  /ö0Ø°!Ð7HÓ2H’Aò0�—‘Ô,ô 03°7·?±?×3OÑ3OÓ/P�—‘Ô,à˜6’>Ø18·±�D—K‘KÕ.à)-�GÔ&Ø—K‘K×-Ñ-×4Ñ4°WÖ=ð)>ô* (+¨4¯;©;×+DÑ+DÓ'EˆD�K‰KÔ$Ø×Ñ×)Ñ)×0Ñ0°Ö6ð9	7ô< (+¨5×+;Ñ+;×+HÑ+HÓ'Iˆ×ÑÔ$Ü),¨U×->Ñ->×-LÑ-LÓ)Mˆ×ÑÔ&Ü'*¨5×+;Ñ+;×+BÑ+BÓ'Cˆ×ÑÔ$Øˆøôq  ò Ü—M‘MðG÷ðüòP0s   ÅAU)Ï(
VÏ3VÕ)VÖ
Vc                óæ  — | j                   j                  «       s#|j                  |j                  |j                  fS d|_        |j                  d c|_        |_        |j                  d c|_        |_        t        j                  «       |_	        |j                  j                  j                  |j                  j                  «       d |_        |j                  |j                  |j                  fS )Nrï  )r6   rÿ  r2  r4  r6  r  ÚScriptList2ÚFeatureList2r   ÚLookupList2Ú__dict__r�  ró   s     r8   r¢   zBuilder.promoteLayoutTable_  sÆ   € Ø�y‰y×,Ñ,Ô.Ø×#Ñ# U×%6Ñ%6¸×8HÑ8HÐHÐHà"ˆŒØ.3×.>Ñ.>ÀÐ+ˆÔ˜5Ô+Ø05×0AÑ0AÀ4Ð-ˆÔ˜EÔ-Ü$×0Ñ0Ó2ˆÔØ×Ñ×"Ñ"×)Ñ)¨%×*:Ñ*:×*CÑ*CÔDØˆÔØ× Ñ  %×"4Ñ"4°e×6GÑ6GÐGÐGr:   c                óÊ  — i }d}| j                   j                  «       D ]�  \  \  }}}}g ||<   |j                  «       D ]n  \  }}	| j                  |   }
g }|	D ]=  }|j                  |k7  rŒ|j                  €J ‚|j                  |j                  «       d}Œ? ||   j                  |
|f«       Œp Œ‘ |r1|j                  «       D ]  \  }}t        | j                  |||«       Œ y y )NFT)rm   r×   r‰   r¦   r#  r»   r+   r6   )rŠ   r¦   Ú	table_tagÚfeature_varsÚhas_any_variationsr  rO  Ú
variationsÚconditionsetÚbuildersÚraw_conditionsetÚindicesÚbÚconditions_and_lookupss                 r8   r¡   zBuilder.makeFeatureVariations  s  € ØˆØ"Ðà/3×/GÑ/G×/MÑ/MÓ/Oò 	NÑ+ÑˆQ��; Ø(*ˆL˜Ñ%Ø*4×*:Ñ*:Ó*<ò 	NÑ&�˜hØ#'×#6Ñ#6°|Ñ#DÐ Ø�Ø!ò .�AØ—w‘w )Ò+Ø ØŸ>™>Ð5Ð5Ð5Ø—N‘N 1§>¡>Ô2Ø)-Ñ&ð.ð ˜[Ñ)×0Ñ0Ð2BÀGÐ1LÕMñ	Nð	Nñ Ø7C×7IÑ7IÓ7Kò Ñ3�Ð3Ü'Ø—I‘I˜uÐ&<¸kõñð r:   c                ó¼   ‡— | j                   j                  «       D ]>  \  \  }}}}||k7  rŒ|j                  «       D ]  \  }}t        ˆfd„|D «       «      sŒ  y Œ@ y)Nc              3  ó<   •K  — | ]  }|j                   ‰k(  –— Œ y ­wrB   )r¦   )rC   rj  rb  s     €r8   rE   z1Builder.any_feature_variations.<locals>.<genexpr>0  s   øè ø€ Ò>°�q—w‘w )Õ+Ñ>ùs   ƒTF)rm   r×   r§   )rŠ   rO  rb  r  rá   re  rf  rg  s     `     r8   r;  zBuilder.any_feature_variations+  sj   ø€ Ø+/×+CÑ+C×+IÑ+IÓ+Kò 	 Ñ'‰OˆQ��7˜ZØ˜+Ò%ØØ*4×*:Ñ*:Ó*<ò  Ñ&�˜hÜÓ>°XÔ>Õ>Úñ ð	 ð r:   c                ó|   — | j                   j                  «       D ��ci c]  \  }}||“Œ
 }}}||v r||   S y c c}}w rB   )re   r×   )rŠ   rÂ   ÚkÚvÚrevs        r8   r$  zBuilder.get_lookup_name_4  sE   € Ø $× 3Ñ 3× 9Ñ 9Ó ;×<™˜˜1ˆq�!‰tÐ<ˆÑ<Ø�S‰=Ø�v‘;ÐØùó =s   ž8c                óH  — |dk(  r|dk(  r| j                   rt        d|«      ‚|dk(  r| j                  rt        d|«      ‚d| _        ||f| j                   v r/t        d|j                  «       ›d|j                  «       ›d�|«      ‚| j                   j	                  ||f«       y )	NÚ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 specified)r]   r	   rd   ÚstripÚadd)rŠ   r¼   rÄ   ré  s       r8   Úadd_language_systemzBuilder.add_language_system:  sµ   € à�VÒ ¨FÒ 2°t×7UÒ7UÜ!ð=àóð ð
 �VÒØ×)Ò)Ü%ð8àóð ð *.ˆDÔ&Ø�HÐ ×!?Ñ!?Ñ?Ý!à—<‘<•> 8§>¡>Õ#3ð5àóð ð
 	×&Ñ&×*Ñ*¨F°HÐ+=Õ>r:   c                ó\   — | j                   rt        | j                   «      S t        dh«      S )N)rs  rÍ  )r]   r•   r   s    r8   Úget_default_language_systems_z%Builder.get_default_language_systems_S  s-   € ð ×)Ò)Ü˜T×;Ñ;Ó<Ð<äÐ.Ð/Ó0Ð0r:   c                ó  — |r|dk7  rt        d|«      ‚| j                  «       | _        t        | j                  «      \  | _        | _        d | _        || _        d| _        d | _	        || _
        |dk(  r|| _        || _        y y )NrÐ   zL'useExtension' keyword for feature blocks is allowed only for 'aalt' featurer   )r	   ry  rc   Úminr^   r_   rf   rh   r`   ra   rb   ro   rq   ©rŠ   r¼   r<   Úuse_extensions       r8   rÝ   zBuilder.start_feature^  s�   € Ù˜T Vš^Ü!Ø^Øóð ð !%× BÑ BÓ DˆÔô (+¨4×+@Ñ+@Ó'AÑ$ˆŒ�d”nØˆÔØ!%ˆÔØˆÔØ)-ˆÔ&Ø+ˆÔØ�6Š>Ø"*ˆDÔØ'4ˆDÕ$ð r:   c                ó�   — | j                   €J ‚d | _         d | _        d | _        d | _        d | _        d| _        d | _        d| _        y )Nr   F)rh   rc   r^   r_   rf   r`   ra   rb   r   s    r8   rß   zBuilder.end_featurer  sR   € Ø×%Ñ%Ð1Ð1Ð1Ø!%ˆÔØ $ˆÔØˆŒØˆŒØˆÔØˆÔØ)-ˆÔ&Ø#ˆÕr:   c                óò   — || j                   v rt        d|z  |«      ‚| j                  dk(  rt        d|«      ‚|| _        d | j                   |<   d | _        || _        | j                  €d| _        d | _        y y )Nz$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 statementr   )re   r	   rh   rg   rf   rb   r`   ra   r|  s       r8   Ústart_lookup_blockzBuilder.start_lookup_block}  s˜   € Ø�4×&Ñ&Ñ&Ü!Ø6¸Ñ=¸xóð ð ×!Ñ! VÒ+Ü!ðLàóð ð
 !%ˆÔØ$(ˆ×Ñ˜DÑ!ØˆÔØ+ˆÔØ×!Ñ!Ð)Ø ˆDÔØ-1ˆDÕ*ð *r:   c                ó€   — | j                   €J ‚d | _         d | _        d| _        | j                  €d| _        d | _        y y )NFr   )rg   rf   rb   rh   r`   ra   r   s    r8   Úend_lookup_blockzBuilder.end_lookup_block�  sM   € Ø×$Ñ$Ð0Ð0Ð0Ø $ˆÔØˆÔØ#ˆÔØ×!Ñ!Ð)Ø ˆDÔØ-1ˆDÕ*ð *r:   c                ó˜   — || j                   v sJ |«       ‚d | _        | j                   |   }|�| j                  || j                  «       y y rB   )re   rf   rÇ   rh   )rŠ   Úlookup_namerÂ   s      r8   Úadd_lookup_callzBuilder.add_lookup_call™  sT   € Ø˜d×1Ñ1Ñ1Ð>°;Ó>Ð1ØˆÔØ×$Ñ$ [Ñ1ˆØÐØ×'Ñ'¨°×0FÑ0FÕGð r:   c                ó   — || _         y rB   )rz   )rŠ   r¼   Úrevisions      r8   Úset_font_revisionzBuilder.set_font_revision   s
   € Ø%ˆÕr:   c           
     ód  ‡ — t        |t        «      r|g}nt        |«      }|rt        d„ |D «       «      sJ ‚t        t        j                  |«      «      }‰ j                  dv rt        d‰ j                  z  |«      ‚‰ j                  €t        d|«      ‚d ‰ _        |rz|D ]u  }‰ j                  |f}|‰ j                  vrŒ t        d|j                  «       ›d‰ j                  j                  «       ›d‰ j                  |   j                  «       ›d�|«      ‚ |D ]Ò  }‰ j                  |‰ j                  f}‰ j                  j                  |d	   d
|d   fg «      }‰ j                  j                  |g «      }|d
k(  s|r%|j                  |D �	cg c]	  }	|	|vsŒ|	‘Œ c}	«       n"|D �	cg c]	  }	|	|vsŒ|	‘Œ c}	‰ j                  |<   |sŒ®‰ j                  ‰ j                  ‰ j                  |f<   ŒÔ t!        ˆ fd„|D «       «      ‰ _        t%        |«      dk(  r|d	   ‰ _        y d ‰ _        y c c}	w c c}	w )Nc              3  ó8   K  — | ]  }t        |«      d k(  –— Œ y­w)r6  N)rÜ   )rC   ré  s     r8   rE   z'Builder.set_language.<locals>.<genexpr>¨  s   è ø€ Ò N¸¤ X£°!Õ!3Ñ Nùs   ‚©rÐ   r  z7Language statements are not allowed within "feature %s"zCLanguage statements are not allowed within standalone lookup blocksz	Language z	 (script z ) has already specified feature z as its required featurer   rÍ  r<  c              3  ó:   •K  — | ]  }‰j                   |f–— Œ y ­wrB   )r^   )rC   ré  rŠ   s     €r8   rE   z'Builder.set_language.<locals>.<genexpr>Ü  s   øè ø€ ò *
Ø)1ˆT�\‰\˜8Ô$ñ*
ùr’   rÖ   )rR   r&  rw   Úallr9  r:  rh   r	   rf   r^   rl   ru  rk   r­   rÁ   rÛ   r•   rc   rÜ   r_   )
rŠ   r¼   ré  Úinclude_defaultÚrequiredÚ	languagesrÆ   râ   Úcur_lookupsÚxs
   `         r8   Úset_languagezBuilder.set_language£  s8  ø€ Ü�h¤Ô$Ø!˜
‰Iä˜X›ˆIÙœSÑ NÀIÔ NÔNÐNÐNô œŸ™ yÓ1Ó2ˆ	Ø×!Ñ!Ð%5Ñ5Ü!ð&Ø(,×(>Ñ(>ñ?àóð ð
 ×!Ñ!Ð)Ü!ð2àóð ð
  ˆÔáØ%ò �Ø—|‘| XÐ.�Ø˜d×5Ñ5Ñ5ØÝ%ð !Ÿ™Õ(ØŸ™×*Ñ*Õ,Ø×/Ñ/°Ñ4×:Ñ:Õ<ðð ó	ð 	ð	ð "ò 	ˆHØ—<‘< ¨4×+AÑ+AÐBˆCØ—n‘n×(Ñ(¨#¨a©&°&¸#¸a¹&Ð)AÀ2ÓFˆGð
 Ÿ.™.×3Ñ3°C¸Ó<ˆKØ˜6Ò!¡_Ø×"Ñ"¨wÖ#O¨!¸!À;Ò:N¢AÒ#OÕPà2=Ö&R¨QÀÈ'ÒAQ¢qÒ&R�—‘˜sÑ#âà×*Ñ*ð ×'Ñ'¨¯©°xÐ(@ÒAð	ô$ !*ó *
Ø5>ô*
ó !
ˆÔô *-¨Y«¸1Ò)<˜ 1™ˆ�À$ˆ�ùò $Pùâ&Rs   Æ	H(
ÆH(
Æ&	H-Æ0H-c                ó<  — t        |«      }| j                  j                  |«      }|�|S t        | j                  «      dz   }|| j                  |<   |D ]E  }|| j                  v r$| j                  |   \  }}t        d|›d|›�|«      ‚||f| j                  |<   ŒG |S )NrÖ   úGlyph z3 already has been assigned a MarkAttachmentType at )r•   rƒ   r­   rÜ   r‚   r	   )rŠ   r¼   r  r  rä   r  Úlocs          r8   ÚgetMarkAttachClass_zBuilder.getMarkAttachClass_á  sº   € Ü˜6Ó"ˆØ×%Ñ%×)Ñ)¨&Ó1ˆØˆ?ØˆJÜ�$×)Ñ)Ó*¨QÑ.ˆØ*-ˆ×Ñ Ñ'Øò 	6ˆEØ˜×(Ñ(Ñ(Ø×)Ñ)¨%Ñ0‘��3Ý%â49¹3ð@àóð ð
 (+¨H oˆD×Ñ˜UÒ#ð	6ð ˆ
r:   c                ó¢   — t        |«      }| j                  j                  |«      }|�|S t        | j                  «      }|| j                  |<   |S rB   )r•   r„   r­   rÜ   )rŠ   r¼   r  r  s       r8   ÚgetMarkFilterSet_zBuilder.getMarkFilterSet_ó  sQ   € Ü˜6Ó"ˆØ×"Ñ"×&Ñ& vÓ.ˆØˆ?ØˆJÜ�$×&Ñ&Ó'ˆØ'*ˆ×Ñ˜VÑ$Øˆ
r:   c                ó²   — |dz  }|�| j                  ||«      }||dz  z  }|�&| j                  ||«      }|dz  }|| _        || _        y d | _        || _        y )Néÿ   r¡  r¢  )r—  r™  ra   r`   )rŠ   r¼   rp  Ú
markAttachÚ
markFilterÚmarkAttachClassr¹   s          r8   Úset_lookup_flagzBuilder.set_lookup_flagü  sw   € Ø˜‘ˆØÐ!Ø"×6Ñ6°xÀÓLˆOØ˜_°Ñ1Ñ2ˆEØÐ!Ø ×2Ñ2°8¸ZÓHˆMØ˜D‘LˆEØ-:ˆDÔ*ð !ˆÕð .2ˆDÔ*Ø ˆÕr:   c                óL  — | j                   dv rt        d| j                   z  |«      ‚| j                   €t        d|«      ‚|| j                  k(  r%| j                  dk(  r| j	                  |ddd¬«       y d | _        || _        d| _        d | _        | j	                  |ddd¬«       y )	Nr‹  z5Script statements are not allowed within "feature %s"zAScript statements are not allowed within standalone lookup blocksrÍ  TF)rŽ  r�  r   )rh   r	   r^   r_   r“  rf   r`   ra   )rŠ   r¼   rÄ   s      r8   Ú
set_scriptzBuilder.set_script	  sÀ   € Ø×!Ñ!Ð%5Ñ5Ü!ð&Ø(,×(>Ñ(>ñ?àóð ð
 ×!Ñ!Ð)Ü!ØVØóð ð �T—\‘\Ò! d§n¡n¸Ò&>ð ×Ñ˜h¨ÀÈuÐÔUØØˆÔØˆŒØˆÔØ)-ˆÔ&Ø×Ñ˜( F¸DÈ5ÐÕQr:   c           	     óÎ   — g }|D ]X  }|�C|j                  |D �cg c]'  }| j                  j                  |j                  «      ‘Œ) c}«       ŒH|j                  d«       ŒZ |S c c}w )zÓHelper 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»   re   r­   r<   )rŠ   râ   Úlookup_buildersrã   r)  s        r8   Úfind_lookup_builders_zBuilder.find_lookup_builders_#  sm   € ð ˆØ!ò 	-ˆJØÐ%Ø×&Ñ&Ø>HÖI¸�T×(Ñ(×,Ñ,¨Q¯V©VÕ4ÒIõð  ×&Ñ& tÕ,ð	-ð Ðùò	 Js   ™,A"
c                óx   — |D ]5  }| j                   j                  |t        «       «      j                  |«       Œ7 y rB   )r~   rÁ   r\   r�  )rŠ   r¼   r  ÚcontourPointsrä   s        r8   Úadd_attach_pointszBuilder.add_attach_points3  s6   € Øò 	NˆEØ×Ñ×)Ñ)¨%´³Ó7×>Ñ>¸}ÕMñ	Nr:   c                ót   — | j                   dk7  rt        d|«      ‚| j                  j                  ||f«       y )NrÐ   z9Feature references are only allowed inside "feature aalt")rh   r	   rn   r»   )rŠ   r¼   ÚfeatureNames      r8   Úadd_feature_referencezBuilder.add_feature_reference7  s=   € Ø×!Ñ! VÒ+Ü!ØKÈXóð ð 	×Ñ×"Ñ" H¨kÐ#:Õ;r:   c                ó:   — | j                   j                  |«       y rB   )rr   rv  ©rŠ   rD   s     r8   Úadd_featureNamezBuilder.add_featureName>  s   € Ø×Ñ×Ñ˜sÕ#r:   c                ó:   — | j                   j                  |«       y rB   )rt   rv  r¬  s     r8   Úadd_cv_parameterzBuilder.add_cv_parameterA  s   € Ø×Ñ×Ñ Õ$r:   c                ón   — || j                   v r| j                   |xx   dz  cc<   yd| j                   |<   y)zbAdds new items to ``self.cv_num_named_params_``
        or increments the count of existing items.rÖ   N)rv   r¬  s     r8   Úadd_to_cv_num_named_paramsz"Builder.add_to_cv_num_named_paramsD  s8   € ð �$×+Ñ+Ñ+Ø×%Ñ% cÓ*¨aÑ/Ô*à-.ˆD×%Ñ% cÒ*r:   c                ó@   — | j                   |   j                  |«       y rB   )rx   r»   )rŠ   Ú	characterrD   s      r8   Úadd_cv_characterzBuilder.add_cv_characterL  s   € Ø×Ñ˜CÑ ×'Ñ'¨	Õ2r:   c                ó2   — |r|||f| _         y |||f| _        y rB   )r}   r|   )rŠ   rä  rå  Úverticalræ  s        r8   Úset_base_axiszBuilder.set_base_axisO  s#   € ÙØ$)¨7°FÐ#;ˆDÕ à%*¨G°VÐ$<ˆDÕ!r:   c                óè   — | j                   dk7  rt        d| j                   z  |«      ‚||||g| _        | j                  D ]0  \  }}||| j                   f}| j                  j                  |g «       Œ2 y )Nr  z9Parameters statements are not allowed within "feature %s")rh   r	   ry   rc   rk   rÁ   )	rŠ   r¼   r  r  r  r  rÄ   rÅ   rÆ   s	            r8   Úset_size_parameterszBuilder.set_size_parametersU  s‡   € ð ×!Ñ! VÒ+Ü!ð&Ø(,×(>Ñ(>ñ?àóð ð
 ",¨[¸*ÀhÐ OˆÔØ ×1Ñ1ò 	/‰LˆF�DØ˜4 ×!7Ñ!7Ð8ˆCØ�N‰N×%Ñ% c¨2Õ.ñ	/r:   c                ól  — | j                  |t        |¬«      }|j                  «       D ]‰  \  }}||j                  v rg||j                  |   k(  r7t        j                  ddj                  |«      dj                  |«      |«       nt        ddj                  |«      z  |«      ‚||j                  |<   Œ‹ y )N)rÌ   z7Removing duplicate substitution from "%s" to "%s" at %srŽ   z%Already defined substitution for "%s")rÍ   r&   r×   rÌ   ÚlogÚinfor–   r	   )rŠ   r¼   rÌ   rÂ   rÆ   rp  s         r8   Úadd_any_subst_zBuilder.add_any_subst_e  sª   € Ø×!Ñ! (¬OÀWÐ!ÓMˆØ!Ÿ-™-›/ò 	(‰JˆC�Ø�f—n‘nÑ$Ø˜FŸN™N¨3Ñ/Ò/Ü—H‘HØQØŸ	™	 #›ØŸ	™	 %Ó(Ø õ	ô *Ø?À$Ç)Á)ÈCÃ.ÑPØ óð ð #(ˆF�N‰N˜3Òñ	(r:   c           	     óf  — | j                   dk(  rK|j                  «       D ]7  \  }}| j                  j                  |g «      }||vsŒ'|j	                  |«       Œ9 y |s|s|r| j                  ||||«       y | j                  ||j                  «       D �	�
ci c]
  \  }	}
|	f|
f“Œ c}
}	«       y c c}
}	w rÏ   )rh   r×   rp   rÁ   r»   Úadd_single_subst_chained_r½  )rŠ   r¼   ÚprefixÚsuffixrÌ   Ú
forceChainÚ
from_glyphÚto_glyphrå   rÆ   rp  s              r8   Úadd_single_substzBuilder.add_single_substx  s®   € Ø×!Ñ! VÒ+Ø(/¯©«ò *Ñ$�
˜HØ×,Ñ,×7Ñ7¸
ÀBÓG�Ø 4Ò'Ø—K‘K Õ)ð*ð Ù‘V™zØ×*Ñ*¨8°V¸VÀWÔMØà×ÑØØ07·±³×@¡* # uˆcˆV�e�XÑÓ@õ	
ùã@s   ÂB-c                óx   — |s|s|r| j                  |||||«       y | j                  ||ft        |«      i«       y rB   )Úadd_multi_subst_chained_r½  r8  )rŠ   r¼   rÀ  rä   rÁ  ÚreplacementsrÂ  s          r8   Úadd_multiple_substzBuilder.add_multiple_subst‰  sD   € ñ ‘V™zØ×)Ñ)¨(°F¸EÀ6È<ÔXØØ×ÑØØˆX”u˜\Ó*Ð+õ	
r:   c                óÎ  ‡— | j                   dk(  r7| j                  j                  |g «      Š‰j                  ˆfd„|D «       «       y |s|rX| j	                  |t
        «      }|j                  |«      }|€| j                  |t        «      }| j                  |||hg||g«       n| j	                  |t        «      }||j                  v rt        d|z  |«      ‚||j                  |<   y )NrÐ   c              3  ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wrB   rÒ   )rC   rÓ   rå   s     €r8   rE   z.Builder.add_alternate_subst.<locals>.<genexpr>˜  s   øè ø€ Ò@˜a°!¸4²-œÑ@ùrÕ   z)Already defined alternates for glyph "%s")rh   rp   rÁ   rÛ   rÍ   r   Úfind_chainable_alternate_substr¿   r   Ú_add_contextual_rulerÞ   r	   )	rŠ   r¼   rÀ  rä   rÁ  ÚreplacementÚchainrÂ   rå   s	           @r8   Úadd_alternate_substzBuilder.add_alternate_subst•  sä   ø€ Ø×!Ñ! VÒ+Ø×(Ñ(×3Ñ3°E¸2Ó>ˆDØ�K‰KÓ@ ;Ô@Ô@ØÙ‘VØ×$Ñ$ XÔ/GÓHˆEØ×9Ñ9¸%Ó@ˆFØˆ~Ø×1Ñ1°(Ô<QÓR�Ø×%Ñ% e¨V°u°g°YÀÈÈÕQà×%Ñ% hÔ0EÓFˆFØ�F×%Ñ%Ñ%Ü!Ø;¸eÑCÀXóð ð $/ˆ×Ñ˜%Ò r:   c                óØ   — |s|s|r| j                  |||||«       y t        |«      st        d|«      ‚| j                  |t	        j
                  |Ž D �ci c]  }||f“Œ c}«       y c c}w ©Nz!Empty glyph class in substitution)Úadd_ligature_subst_chained_r�  r	   r½  Ú	itertoolsÚproduct)rŠ   r¼   rÀ  r  rÁ  rÎ  rÂ  rÓ   s           r8   Úadd_ligature_substzBuilder.add_ligature_substª  st   € ñ ‘V™zØ×,Ñ,Ø˜& &¨&°+ôð Ü�6Œ{Ü!Ð"EÀxÓPÐPð 	×ÑØÜ(1×(9Ñ(9¸6Ð(BÖC 1ˆQ��ÑÒCõ	
ùâCs   ÁA'
c                ó(  — t        |«      dk(  rÝ| j                  rÑ| j                  d   j                  s¸| j                  d   }t        |j                  «      dk(  r‘|j                  |k(  r‚|j
                  |k(  rs|j                  |k(  rdt        |j                  d   t        «      s%t        |j                  d   «      |j                  d<   |j                  d   j                  |d   «       y| j                  j                  t        ||||«      «       y)a4  Add a contextual rule, merging with the last rule if possible.

        Consecutive rules that share the same prefix, suffix, lookups, and have
        a single input position can be merged into one rule with broader input
        coverage. This produces more compact binary tables (often Format 3).
        rÖ   r¼  r   N)rÜ   ÚrulesÚis_subtable_breakr  rÀ  rÁ  râ   rR   r\   r�  r»   r%   )rÏ  rÀ  r  rÁ  râ   Úlasts         r8   rÍ  zBuilder._add_contextual_rule¿  sÏ   € ô ˆv‹;˜!Ò §¢°E·K±KÀ±O×4UÒ4UØ—;‘;˜r‘?ˆDä�D—K‘KÓ  AÒ%Ø—K‘K 6Ò)Ø—K‘K 6Ò)Ø—L‘L GÒ+ä! $§+¡+¨a¡.´#Ô6Ü%(¨¯©°Q©Ó%8�D—K‘K ‘NØ—‘˜A‘×%Ñ% f¨Q¡iÔ0ØØ�‰×ÑÔ.¨v°v¸vÀwÓOÕPr:   c                óÖ   — t        |«      rt        |«      rt        |«      st        d|«      ‚| j                  |t        «      }| j	                  |«      }| j                  |||||«       y ©Nú,Empty glyph class in contextual substitution)r�  r	   rÍ   r   r¤  rÍ  ©rŠ   r¼   rÀ  r  rÁ  râ   rÂ   r(  s           r8   Úadd_chain_context_substzBuilder.add_chain_context_substÖ  sb   € Ü�6Œ{¤# f¤+´S¸´[Ü!Ø>Àóð ð ×!Ñ! (Ô,DÓEˆØ×-Ñ-¨gÓ6ˆØ×!Ñ! &¨&°&¸&À(ÕKr:   c                ój  — |rt        |«      rt        |«      st        d|«      ‚| j                  |t        «      }|j	                  |t
        «      }|€| j                  |t
        «      }|j                  j                  |«       t        |j                  «       «      }| j                  |||g||g«       y rÜ  )r�  r	   rÍ   r   Úfind_chainable_substr!   r¿   rÌ   r�  r\   ÚkeysrÍ  )rŠ   r¼   rÀ  rÁ  rÌ   rÏ  Úsubrâ  s           r8   r¿  z!Builder.add_single_subst_chained_ß  sŸ   € Ùœc &œk´°V´Ü!Ø>Àóð ð
 × Ñ  Ô+CÓDˆØ×(Ñ(¨Ô2DÓEˆØˆ;Ø×*Ñ*¨8Ô5GÓHˆCØ�‰×Ñ˜7Ô#Ü�7—<‘<“>Ó"ˆØ×!Ñ! %¨°$°¸À#ÀÕGr:   c                ó"  — t        |«      rt        |«      st        d|«      ‚| j                  |t        «      }|j	                  ||it
        «      }|€| j                  |t
        «      }||j                  |<   | j                  |||hg||g«       y rÜ  )	r�  r	   rÍ   r   rá  r   r¿   rÌ   rÍ  )rŠ   r¼   rÀ  rä   rÁ  rÈ  rÏ  rã  s           r8   rÇ  z Builder.add_multi_subst_chained_î  s�   € Ü�6Œ{¤# f¤+Ü!Ø>Àóð ð × Ñ  Ô+CÓDˆØ×(Ñ(¨%°Ð)>Ô@TÓUˆØˆ;Ø×*Ñ*¨8Ô5IÓJˆCØ)ˆ�‰�EÑà×!Ñ! %¨°5°'°¸FÀSÀEÕJr:   c           
     óÒ  — t        |«      rt        |«      st        d|«      ‚| j                  |t        «      }|j	                  ||«      }|€| j                  |t        «      }t        j                  |Ž D ]H  }|j                  j                  ||«      }	|	|k7  rt        d|› d|	› d|› d�|«      ‚||j                  |<   ŒJ |j                  j                  t        ||||g«      «       y )NrÝ  z!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
             r8   rÓ  z#Builder.add_ligature_subst_chained_ü  s÷   € ô �6Œ{¤# f¤+Ü!Ø>Àóð ð × Ñ  Ô+CÓDˆØ×1Ñ1°&¸+ÓFˆØˆ;Ø×*Ñ*¨8Ô5IÓJˆCä×"Ñ" FÐ+ò 	+ˆAØ—}‘}×(Ñ(¨¨KÓ8ˆHØ˜;Ò&Ü%Ø7¸°s¸+ÀhÀZÈwÐWbÐVcÐcdÐeØóð ð
  +ˆC�M‰M˜!Òð	+ð 	�‰×ÑÔ.¨v°v¸vÈÀuÓMÕNr:   c                óˆ   — |st        d|«      ‚| j                  |t        «      }|j                  j	                  |||f«       y rÒ  )r	   rÍ   r    rØ  r»   )rŠ   r¼   Ú
old_prefixÚ
old_suffixrÌ   rÂ   s         r8   Úadd_reverse_chain_single_substz&Builder.add_reverse_chain_single_subst  s?   € ÙÜ!Ð"EÀxÓPÐPØ×!Ñ! (Ô,JÓKˆØ�‰×Ñ˜Z¨°WÐ=Õ>r:   c                óV  — |s|s|r| j                  ||||«       y | j                  |t        «      }|D ]B  \  }}|st        d|«      ‚| j	                  ||d¬«      }	|D ]  }
	 |j                  ||
|	«       Œ ŒD y # t        $ r%}t        t        |«      |j                  «      |‚d }~ww xY w)Nú%Empty glyph class in positioning ruleF©ÚpairPosContext)	Úadd_single_pos_chained_rÍ   r$   r	   ÚmakeOpenTypeValueRecordÚadd_posr'   r&  r¼   )rŠ   r¼   rÀ  rÁ  ÚposrÂ  rÂ   r  rp  ÚotValueRecordrä   r+  s               r8   Úadd_single_poszBuilder.add_single_pos  sÌ   € Ù‘V™zØ×(Ñ(¨°6¸6À3ÕGà×%Ñ% hÔ0@ÓAˆFØ!$ò I‘�˜ÙÜ)Ø?Àóð ð !%× <Ñ <Ø˜e°Eð !=ó !�ð $ò I�EðIØŸ™ x°¸ÕFñIñIøô ,ò IÜ-¬c°!«f°a·j±jÓAÀqÐHûðIús   Á"A:Á:	B(Â B#Â#B(c                ó>  — |r|st        d|«      ‚| j                  |t        «      }| j                  ||d¬«      }| j                  ||d¬«      }t	        t        t        |«      «      «      }	t	        t        t        |«      «      «      }
|j                  ||	||
|«       y ©Nrï  Trð  )r	   rÍ   r#   ró  r8  r—   r\   ÚaddClassPair)rŠ   r¼   Úglyphclass1Úvalue1Úglyphclass2Úvalue2rÂ   Úv1Úv2Úcls1Úcls2s              r8   Úadd_class_pair_poszBuilder.add_class_pair_pos3  s“   € Ù¡+Ü!Ð"IÈ8ÓTÐTØ×!Ñ! (¬NÓ;ˆØ×)Ñ)¨(°FÈ4Ð)ÓPˆØ×)Ñ)¨(°FÈ4Ð)ÓPˆÜ”VœC Ó,Ó-Ó.ˆÜ”VœC Ó,Ó-Ó.ˆØ×Ñ˜H d¨B°°bÕ9r:   c                óÊ   — |r|st        d|«      ‚| j                  |t        «      }| j                  ||d¬«      }| j                  ||d¬«      }|j	                  |||||«       y rù  )r	   rÍ   r#   ró  ÚaddGlyphPair)	rŠ   r¼   Úglyph1rü  Úglyph2rþ  rÂ   rÿ  r   s	            r8   Úadd_specific_pair_poszBuilder.add_specific_pair_pos=  sk   € Ù™VÜ!Ð"IÈ8ÓTÐTØ×!Ñ! (¬NÓ;ˆØ×)Ñ)¨(°FÈ4Ð)ÓPˆØ×)Ñ)¨(°FÈ4Ð)ÓPˆØ×Ñ˜H f¨b°&¸"Õ=r:   c           	     ó´   — |st        d|«      ‚| j                  |t        «      }|j                  ||| j	                  ||«      | j	                  ||«      «       y ©Nrï  )r	   rÍ   r   Úadd_attachmentÚmakeOpenTypeAnchor)rŠ   r¼   Ú
glyphclassÚentryAnchorÚ
exitAnchorrÂ   s         r8   Úadd_cursive_poszBuilder.add_cursive_posF  sZ   € ÙÜ!Ð"IÈ8ÓTÐTØ×!Ñ! (Ô,=Ó>ˆØ×ÑØØØ×#Ñ# H¨kÓ:Ø×#Ñ# H¨jÓ9õ		
r:   c                ó
  — | j                  |t        «      }| j                  |||«       |st        d|«      ‚|D ]G  \  }}| j	                  ||«      }|D ]+  }||j
                  j                  |i «      |j                  <   Œ- ŒI y r
  )rÍ   r   Ú
add_marks_r	   r  rä  rÁ   r<   )	rŠ   r¼   rä  Úmarksr   Ú
baseAnchorr  ÚotBaseAnchorr¶   s	            r8   Úadd_mark_base_poszBuilder.add_mark_base_posR  sŽ   € Ø×"Ñ" 8Ô-?Ó@ˆØ�‰˜ '¨5Ô1ÙÜ!Ð"IÈ8ÓTÐTØ%*ò 	RÑ!ˆJ˜	Ø×2Ñ2°8¸ZÓHˆLØò R�ØEQ�—‘×(Ñ(¨¨rÓ2°9·>±>ÒBñRñ	Rr:   c                ó(  — | j                  |t        «      }g }|st        d|«      ‚|D ]Q  }i }| j                  |||«       |D ]$  \  }}	| j	                  ||«      ||	j
                  <   Œ& |j                  |«       ŒS |D ]  }
||j                  |
<   Œ y r
  )rÍ   r   r	   r  r  r<   r»   rè  )rŠ   r¼   rè  Ú
componentsr   ÚcomponentAnchorsr  ÚanchorsÚ	ligAnchorr  rä   s              r8   Úadd_mark_lig_poszBuilder.add_mark_lig_pos]  s°   € Ø×"Ñ" 8Ô->Ó?ˆØÐÙÜ!Ð"IÈ8ÓTÐTØò 	-ˆEØˆGØ�O‰O˜H g¨uÔ5Ø(-ò WÑ$�	˜9Ø*.×*AÑ*AÀ(ÈIÓ*V�˜	Ÿ™Ò'ðWà×#Ñ# GÕ,ð	-ð ò 	8ˆEØ'7ˆG×Ñ˜eÒ$ñ	8r:   c                ó
  — | j                  |t        «      }| j                  |||«       |st        d|«      ‚|D ]G  \  }}| j	                  ||«      }|D ]+  }||j
                  j                  |i «      |j                  <   Œ- ŒI y r
  )rÍ   r   r  r	   r  Ú	baseMarksrÁ   r<   )	rŠ   r¼   r  r  r   r  r  r  ÚbaseMarks	            r8   Úadd_mark_mark_poszBuilder.add_mark_mark_posl  s”   € Ø×"Ñ" 8Ô-?Ó@ˆØ�‰˜ '¨5Ô1ÙÜ!Ð"IÈ8ÓTÐTØ%*ò 	!Ñ!ˆJ˜	Ø×2Ñ2°8¸ZÓHˆLØ%ò !�ð !ð ×!Ñ!×,Ñ,¨X°rÓ:Ø—N‘Nòñ!ñ	!r:   c                óÖ   — t        |«      rt        |«      rt        |«      st        d|«      ‚| j                  |t        «      }| j	                  |«      }| j                  |||||«       y )Nú0Empty glyph class in contextual positioning rule)r�  r	   rÍ   r   r¤  rÍ  rÞ  s           r8   Úadd_chain_context_poszBuilder.add_chain_context_posy  sb   € Ü�6Œ{¤# f¤+´S¸´[Ü!ØBÀHóð ð ×!Ñ! (Ô,BÓCˆØ×-Ñ-¨gÓ6ˆØ×!Ñ! &¨&°&¸&À(ÕKr:   c                óž  — |rt        |«      rt        |«      st        d|«      ‚| j                  |t        «      }g }|j                  D ]  \  }}}}|j                  |«       Œ g }	|D ]”  \  }
}|€|	j                  d «       Œ| j                  ||d¬«      }|j                  ||
|«      }|€'| j                  |t        «      }|j                  |«       |
D ]  }|j                  |||«       Œ |	j                  |«       Œ– t        |«      t        |	«      k(  s	J ||	f«       ‚|D ��cg c]  \  }}|‘Œ	 }
}}| j                  |||
||	«       y c c}}w )Nr"  Frð  )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  rp  ÚotValuerã  rä   rÓ   rp  s                    r8   rò  zBuilder.add_single_pos_chained_‚  se  € Ùœ#˜fœ+¬S°¬[Ü!ØBÀHóð ð × Ñ  Ô+AÓBˆØˆØ %§¡ò 	$ÑˆAˆq�!�WØ�N‰N˜7Õ#ð	$àˆØ ò 	‰MˆF�EØˆ}Ø—‘˜DÔ!ØØ×2Ñ2Ø˜%°ð 3ó ˆGð ×1Ñ1°'¸6À7ÓKˆCØˆ{Ø×.Ñ.¨xÔ9IÓJ�Ø—‘˜sÔ#Øò 6�Ø—‘˜H e¨WÕ5ð6à�K‰K˜Õð	ô �3‹xœ3˜t›9Ò$Ð1 s¨D kÓ1Ð$Ø #×$™˜˜1’!Ð$ˆÑ$Ø×!Ñ! %¨°¸ÀÕFùó %s   Ä$E	c                óV  — t        «       }|D ]G  \  }}|j                  |v rt        d|j                  z  |«      ‚|j                  |j                  «       ŒI |D ]Î  \  }}|j                  D ]º  }|j
                  j                  «       D ]›  }||j                  vrK| j                  |t        j                  |j                  «      «      }	|j                  |	f|j                  |<   Œ\|j                  |   d   }
|j                  |
k7  sŒ~t        d|›d|
›d|j                  ›�|«      ‚ Œ¼ ŒÐ y)z)Helper for add_mark_{base,liga,mark}_pos.z:Mark class @%s used more than once in the same anchor listr   r•  z cannot be in both @z and @N)r\   r<   r	   rv  r  r  r  r  r  ÚcopyÚdeepcopyÚanchor)rŠ   r¼   ÚlookupBuilderr  ÚseenMarkClassesr  r  r  ÚmarkÚotMarkAnchorÚexistingMarkClasss              r8   r  zBuilder.add_marks_Ÿ  s5  € ä›%ˆØ!ò 	0‰LˆAˆyØ�~‰~ Ñ0Ü%ØPØ—n‘nñ%àóð ð
 ×Ñ 	§¡Õ/ð	0ð "ò 	‰LˆAˆyØ )× 5Ñ 5ò �Ø(×/Ñ/×8Ñ8Ó:ò �DØ =×#6Ñ#6Ñ6Ø'+×'>Ñ'>Ø$¤d§m¡m°L×4GÑ4GÓ&Hó(˜ð 6?·^±^À\Ð4R˜×+Ñ+¨DÒ1à,9×,?Ñ,?ÀÑ,EÀaÑ,HÐ)Ø$Ÿ>™>Ð->Ó>Ý"1â#'Ò):¸I¿NºNð!Là (ó#ð ñññ	r:   c                ó:   — | j                   j                  |«       y rB   )rf   Úadd_subtable_break)rŠ   r¼   s     r8   r3  zBuilder.add_subtable_break»  s   € Ø×Ñ×+Ñ+¨HÕ5r:   c                ó–   — | j                   j                  |d«      \  }}|r||k7  rt        d|›d|›�|«      ‚||f| j                   |<   y )N©NNr•  z& was assigned to a different class at )r�   r­   r	   )rŠ   r¼   rä   Ú
glyphClassÚoldClassÚoldLocations         r8   ÚsetGlyphClass_zBuilder.setGlyphClass_¾  sZ   € Ø $× 4Ñ 4× 8Ñ 8¸ÀÓ MÑˆ�+Ù˜ JÒ.Ý!â™+ð'àóð ð
 (2°8Ð&<ˆ×Ñ˜UÒ#r:   c                óÔ   — |D ]  }| j                  ||d«       Œ |D ]  }| j                  ||d«       Œ |D ]  }| j                  ||d«       Œ |D ]  }| j                  ||d«       Œ y )NrÖ   r<  rˆ  r6  )r9  )rŠ   r¼   Ú
baseGlyphsÚligatureGlyphsÚ
markGlyphsÚcomponentGlyphsrä   s          r8   Úadd_glyphClassDefzBuilder.add_glyphClassDefÈ  sˆ   € ð  ò 	4ˆEØ×Ñ ¨%°Õ3ð	4à#ò 	4ˆEØ×Ñ ¨%°Õ3ð	4àò 	4ˆEØ×Ñ ¨%°Õ3ð	4à$ò 	4ˆEØ×Ñ ¨%°Õ3ñ	4r:   c                óN   — |D ]   }|| j                   vsŒ|| j                   |<   Œ" y rB   )r€   )rŠ   r¼   r  Úcaretsrä   s        r8   Úadd_ligatureCaretByIndex_z!Builder.add_ligatureCaretByIndex_Ô  s/   € Øò 	5ˆEØ˜D×0Ñ0Ò0Ø.4�×$Ñ$ UÒ+ñ	5r:   c                ó`   — t        |t        «      s|S | j                  ||«      \  }}|�||fS |S rB   )rR   r   ÚmakeVariablePos)rŠ   r¼   ÚcaretÚdefaultÚdevices        r8   ÚmakeLigCaretzBuilder.makeLigCaretÙ  s=   € Ü˜%¤Ô0ØˆLØ×.Ñ.¨x¸Ó?‰ˆ�ØÐØ˜VÐ$Ð$Øˆr:   c                ó–   — |D �cg c]  }| j                  ||«      ‘Œ }}|D ]   }|| j                  vsŒ|| j                  |<   Œ" y c c}w rB   )rH  r   )rŠ   r¼   r  rA  rE  rä   s         r8   Úadd_ligatureCaretByPos_zBuilder.add_ligatureCaretByPos_á  sU   € ØBHÖI¸�$×#Ñ# H¨eÕ4ÐIˆÐIØò 	5ˆEØ˜D×0Ñ0Ò0Ø.4�×$Ñ$ UÒ+ñ	5ùò Js   …Ac                óD   — | j                   j                  |||||g«       y rB   )r{   r»   )rŠ   r¼   r  r(  r)  r*  r+  s          r8   Úadd_name_recordzBuilder.add_name_recordç  s   € Ø�‰×Ñ˜F J°	¸6À6ÐJÕKr:   c                ó"   — || j                   |<   y rB   )r…   ©rŠ   rÆ   rp  s      r8   Úadd_os2_fieldzBuilder.add_os2_fieldê  s   € Øˆ�	‰	�#Šr:   c                ó"   — || j                   |<   y rB   )r†   rN  s      r8   Úadd_hhea_fieldzBuilder.add_hhea_fieldí  ó   € Øˆ�
‰
�3Šr:   c                ó"   — || j                   |<   y rB   )r‡   rN  s      r8   Úadd_vhea_fieldzBuilder.add_vhea_fieldð  rR  r:   c                óˆ  ‡‡
— d| j                   vrt        d|«      ‚|| j                  v rt        d|› d�|«      ‚| j                  D �ci c]0  }|j                  |j
                  |j                  |j                  f“Œ2 }}|j                  «       D ���ci c]'  \  }\  }}|t        |||   «      t        |||   «      f“Œ) }}}}d| j                   v rP| j                   d   j                  Š
|j                  «       D �‡�	ci c]  \  Š}	‰t        ˆˆ
fd„|	D «       «      “Œ }}}	|| j                  |<   y c c}w c c}}}w c c}	}w )NrP   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  óH   •K  — | ]  }‰‰v rt        |‰‰   «      n|–— Œ y ­wrB   )r-   )rC   rp  rã  rÌ   s     €€r8   rE   z+Builder.add_conditionset.<locals>.<genexpr>  s2   øè ø€ ò àð =AÀG¹OÔ& q¨'°$©-Ô8ÐQRÓRñùs   ƒ")r6   r	   r‰   rX   rY   ÚminValueÚdefaultValueÚmaxValuer×   r,   Úsegmentsr8  )rŠ   r¼   rÆ   rp  rã  ÚaxisMaprD   ÚbottomÚtopÚcondition_rangerÌ   s       `     @r8   Úadd_conditionsetzBuilder.add_conditionsetó  sv  ù€ Ø˜Ÿ™Ñ"Ü!ØQØóð ð
 �$×%Ñ%Ñ%Ü!Ø! # Ð&UÐVØóð ð Ÿ	™	ö
àð �L‰L˜4Ÿ=™=¨$×*;Ñ*;¸T¿]¹]ÐKÑKð
ˆð 
ð ',§k¡k£m÷
ð 
ñ
 #�‘]�f˜cð	 Ü˜v w¨s¡|Ó4Ü˜s G¨C¡LÓ1ðñ ð
ˆò 
ð �T—Y‘YÑØ—i‘i Ñ'×0Ñ0ˆGð .3¯[©[«]÷ð ñ
 *�D˜/ð	 ”eô à,ôó ñ ðˆEñ ð $)ˆ×Ñ˜CÒ ùò5
ùô

ùós   Á	5D2Â,D7Ã? D>c                ó\  — | j                   �| j                  €t        d|«      ‚|j                  s| j                  j	                  |«      dfS 	 | j                  j                  || j                   «      \  }}d}|�|dk7  rt        |«      }||fS # t        $ r}t        d|«      |‚d}~ww xY w)z«Make a pos statement from a VariableScalar, returning the default
        value, and optionally the variation index if the scalar genuinely
        requires variation too.Nz5Can't define a variable scalar in a non-variable fontz,Failed to compute deltas for variable scalarl   ÿÿ )rW   r[   r	   Ú	does_varyÚdefault_valueÚadd_to_variation_storer(   r*   )rŠ   r¼   Ú	varscalarrF  rØ  r+  rG  s          r8   rD  zBuilder.makeVariablePos  sÍ   € ð ×ÑÐ'¨4×+>Ñ+>Ð+FÜ!ØGÈóð ð ×"Ò"Ø×&Ñ&×4Ñ4°YÓ?ÀÐEÐEð	Ø!×0Ñ0×GÑGØ˜4×/Ñ/ó‰NˆG�Uð ˆØÐ ¨*Ò!4Ü% eÓ,ˆFà˜ˆÐøô ò 	Ü!Ø>Àóàðûð	ús   Á)B Â	B+ÂB&Â&B+c                óÀ   — d }t        |t        «      s$|�t        j                  t	        |«      «      }||fS | j                  ||«      \  }}|�|�t        d|«      ‚||fS )Nú4Can't define a device coordinate and variable scalar)rR   r   r‘  ÚbuildDevicer9  rD  r	   )rŠ   re  ÚdeviceTabler¼   rG  rF  s         r8   ÚmakeAnchorPoszBuilder.makeAnchorPos;  st   € ØˆÜ˜)¤^Ô4ØÐ&ÜŸ™¬¨kÓ):Ó;�Ø˜fÐ$Ð$Ø×.Ñ.¨x¸ÓC‰ˆ�ØÐ +Ð"9Ü!ØFÈóð ð ˜ˆÐr:   c                óÔ  — |€yd\  }}|j                   �(t        j                  t        |j                   «      «      }|j                  �(t        j                  t        |j                  «      «      }| j                  |j                  |j                   |«      \  }}| j                  |j                  |j                  |«      \  }}t        j                  |||j                  ||«      }|S )zast.Anchor --> otTables.AnchorNr5  )
ÚxDeviceTabler‘  rh  r9  ÚyDeviceTablerj  r’  ÚyÚbuildAnchorÚcontourpoint)rŠ   r¼   r,  ÚdeviceXÚdeviceYr’  rn  Ú	otlanchors           r8   r  zBuilder.makeOpenTypeAnchorH  sÄ   € àˆ>ØØ%Ñˆ�Ø×ÑÐ*Ü—o‘o¤d¨6×+>Ñ+>Ó&?Ó@ˆGØ×ÑÐ*Ü—o‘o¤d¨6×+>Ñ+>Ó&?Ó@ˆGØ×'Ñ'¨¯©°&×2EÑ2EÀxÓP‰
ˆˆ7Ø×'Ñ'¨¯©°&×2EÑ2EÀxÓP‰
ˆˆ7Ü—O‘O A q¨&×*=Ñ*=¸wÈÓPˆ	ØÐr:   ÚReservedr   rÖ   c                óú  — |syi }| j                   j                  «       D ]«  \  }\  }}t        ||d«      }|sŒ|r"t        j                  t        |«      «      ||<   Œ=t        |t        «      rZ|dd dz   }	|	d   j                  «       |	dd z   }
t        ||
«      rt        d|«      ‚| j                  ||«      \  ||<   }|€Œ¡|||	<   Œ§|||<   Œ­ |r|s|j                  rddinddi}t        j                  |«      }|S )	z&ast.ValueRecord --> otBase.ValueRecordNr   r6  ÚDevicerÖ   rg  ÚYAdvanceÚXAdvance)Ú_VALUEREC_ATTRSr×   r1  r‘  rh  r9  rR   r   Úlowerr	   rD  r¶  Ú
buildValue)rŠ   r¼   rp  rñ  ÚvrÚastNameÚotNameÚisDeviceÚvalÚotDeviceNameÚfeaDeviceNamerG  ÚvalRecs                r8   ró  zBuilder.makeOpenTypeValueRecord\  s  € áØàˆØ+/×+?Ñ+?×+EÑ+EÓ+Gò 	!Ñ'ˆGÑ'�f˜hÜ˜!˜W dÓ+ˆCÙØÙÜ Ÿ_™_¬T°#«YÓ7��6’
Ü˜C¤Ô0Ø% a¨˜{¨XÑ5�Ø ,¨Q¡× 5Ñ 5Ó 7¸,ÀqÀrÐ:JÑ J�Ü˜1˜mÔ,Ü)ØNÐPXóð ð &*×%9Ñ%9¸(ÀCÓ%HÑ"��6‘
˜FØÑ%Ø'-�B�|Ò$à ��6’
ð#	!ñ& ¡"Ø$%§J¢J�*˜a‘°ZÀ°OˆBÜ—‘ Ó#ˆØˆr:   ©NFrB   )F)re  r   Úreturnztuple[int, int | None])fÚ__name__Ú
__module__Ú__qualname__r•   r”   rŒ   r5   r¿   rÇ   rÍ   r™   rš   r›   rœ   r
  r#  r�   rž   rr  r|  r…  rŸ   rg  rª   rË  rÂ  r©   r   rò  rø  rú  r®   r,  r    r¢   r¡   r;  r$  rw  ry  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Ö  ÚstaticmethodrÍ  rß  r¿  rÇ  rÓ  rí  r÷  r  r  r  r  r  r   r#  rò  r  r3  r9  r?  rB  rH  rJ  rL  rO  rQ  rT  r`  rD  rj  r  r   ÚvalueRecordFormatÚ
startswithrz  ry  ró  )rC   r  r<   r  s   0000r8   r4   r4   `   s�  „ Ùñ  ð
ô ó €Oò H!óT=ò~ò>ó
 ò:1*òf
0ò2ò":ò$ò-ò^ò4TUòl(ò 4ò?ò$X
òt+4òZ
òò*òX(òT	Tòò$ò>òNò!òFgòR
Hòò.òò?ò2	1ó5ò(	$ó2ò&2òHò&ò<Gò|ò$ò!òRò4ò Nò<ò$ò%ò/ò3ð >@ó =ò/ò (ò&
ð$ INó	
ò/ò*
ð* ñQó ðQò,LòHòKòOò4?òIò(:ò>ò	
òRò8ò
!òLòGò:ò86ò=ò
4ò5ò
ò5òLòò ò ò()ðTØ#1ðà	óò<òð  %+×$<Ñ$<÷ñ á ˆAˆt�X˜qØ�‰˜zÔ*ð 	ˆQ‰�‰‹˜$˜q˜r˜(Ñ" T¨8Ð$4Ñ4õ€Oóùõs   Å9F
r4   r„  )NNF)OÚ
__future__r   Ú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   r   Ú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»  r9   r?   Úobjectr4   rÒ   r:   r8   ú<module>r¤     s§   ðÝ "å "ß EÓ EÝ 2÷ñ õ
 +Ý ,ß QÝ +Ý 6ß 4ß 3÷÷ ÷ ÷ ó õ$ 4Ý /Ý ;Ý 5Ý @ß FÝ #Û Û Ý Û Û Û 	à€g×Ñ˜Ó!€ó.ð& 7<óGô2Xˆfõ Xr:   