§
    ÛóÉjº, ã                  óØ  — 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 eEjH        eI¦  «        ZJdd„ZK	 dd„ZL G d„ deM¦  «        ZNdS )é    )Ú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)ÚStringIOFc                óT   — t          | |¦  «        }|                     ||¬¦  «         dS )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        ú}/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib64/python3.11/site-packages/fontTools/feaLib/builder.pyÚaddOpenTypeFeaturesr9   5   s/   € õ �d˜KÑ(Ô(€GØ‡M‚M˜ u€MÑ-Ô-Ð-Ð-Ð-ó    c                óv   — t          t          |¦  «        ¦  «        }|r||_        t          | |||¬¦  «         dS )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   sD   € õ& �5 ™?œ?Ñ+Ô+€KØð $Ø#ˆÔÝ˜˜k°&ÀÐFÑFÔFÐFÐFÐFr:   c                  ó’  — e Zd Z ed„ dD ¦   «         ¦  «        Zd„ Zdcd„Zd„ Zd„ Zddd	„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%ded&„Z&d'„ Z'ded(„Z(d)„ Z)d*„ Z*d+„ Z+d,„ Z,d-„ Z-d.„ Z.d/„ Z/d0„ Z0d1„ Z1d2„ Z2d3„ Z3d4„ Z4d5„ Z5d6„ Z6d7„ Z7g fd8„Z8d9„ Z9d:„ Z:d;„ Z;	 ded<„Z<d=„ Z=d>„ Z>e?d?„ ¦   «         Z@d@„ ZAdA„ ZBdB„ ZCdC„ ZDdD„ ZEdE„ ZFdF„ ZGdG„ ZHdH„ ZIdI„ ZJdJ„ ZKdK„ ZLdL„ ZMdM„ ZNdN„ ZOdO„ ZPdP„ ZQdQ„ ZRdR„ ZSdS„ ZTdT„ ZUdU„ ZVdV„ ZWdW„ ZXdX„ ZYdY„ ZZdfd^„Z[d_„ Z\d`„ Z]da„ e^j_        D ¦   «         Z`db„ ZadS )gr4   c              #  ó4   K  — | ]}t          |¦  «        V — Œd S ©N)r   )Ú.0Útags     r8   ú	<genexpr>zBuilder.<genexpr>a   s<   è è € ð  ð  àõ 	ˆC‰Œð ð  ð  ð  ð  ð  r:   )
ÚBASEÚGDEFÚGPOSÚGSUBúOS/2ÚheadÚhhear<   ÚvheaÚSTATc                óR  — || _         t          |t          ¦  «        r|d c| _        | _        nd |c| _        | _        |                     ¦   «         | _        d | _        d|v rN|d         j        | _        t          d„ | j        D ¦   «         ¦  «        | _        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 | _'        tQ          tR          ¦  «        | _*        d | _+        d | _,        g | _-        d | _.        d | _/        i | _0        i | _1        i | _2        i | _3        i | _4        i | _5        i | _6        i | _7        i | _8        i | _9        i | _:        i | _;        d S )NÚfvarc                ó   — g | ]	}|j         ‘Œ
S © )ÚaxisTag)rC   Úaxs     r8   ú
<listcomp>z$Builder.__init__.<locals>.<listcomp>~   s   € Ð0Ð0Ð0 �”Ð0Ð0Ð0r:   r   F)rI   rH   )<r6   Ú
isinstancer   Ú	parseTreeÚfileÚgetReverseGlyphMapÚglyphMapÚvarstorebuilderÚaxesr)   r   Ú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   s      r8   Ú__init__zBuilder.__init__q   s(  € ØˆŒ	õ �k¥;Ñ/Ô/ð 	:Ø(3°TÐ%ˆDŒN˜DœI˜Ià(,¨kÐ%ˆDŒN˜DœIØ×/Ò/Ñ1Ô1ˆŒØ#ˆÔØ�Tˆ>ˆ>Ø˜VœÔ)ˆDŒIÝ#8Ø0Ð0 d¤iÐ0Ñ0Ô0ñ$ô $ˆDÔ õ #8Ô"@ÀÑ"FÔ"FˆDÔÝ),©¬ˆÔ&ØˆŒØˆŒØˆÔØ)-ˆÔ&Ø#ˆÔÝ #¡¤ˆÔØ%*ˆÔ"Ø ˆÔØˆÔØ $ˆÔØ!%ˆÔØˆŒØ)+°RÐ 8Ð 8ˆÔØˆŒØ"$ˆÔØ#%ˆÔ à ˆÔØ"ˆÔØ "ˆÔØ#(ˆÔ å ™UœUˆÔØ!#ˆÔå!™eœeˆÔØ"$ˆÔØ$&ˆÔ!Ý)­$Ñ/Ô/ˆÔà $ˆÔà!ˆÔàˆŒà $ˆÔØ#ˆÔàˆÔØ!ˆÔØ!ˆÔØ!ˆÔØˆÔØ"$ˆÔØ!ˆÔàˆŒ	àˆŒ
àˆŒ
àˆŒ
à ˆÔÐÐr:   NFc                óÌ  ‡ — ‰ j         €1t          ‰ j        ‰ j        ¦  «                             ¦   «         ‰ _         ‰ j                              ‰ ¦  «         |€‰ j        }nPt          |¦  «        }|‰ j        z
  }|r5d                     t          |¦  «        ¦  «        }t          d|› d�¦  «        ‚d|v r‰                      ¦   «          d|v r‰                      ¦   «          d|v r‰                      ¦   «          d|v r‰                      ¦   «          d|v r‰                      ¦   «          d	|v r‰                      ¦   «          d
|v r‰                      ¦   «          dD ]›}||vrŒ‰                      |¦  «        }‰ j        r‰                      ||¦  «         |j        j        dk    s |j        j        dk    s|j        j        dk    r!t7          |¦  «        x}‰ j        |<   ||_        ŒŠ|‰ j        v r‰ j        |= Œœt=          ˆ fd„dD ¦   «         ¦  «        r-d	‰ j        v r$t?          ‰ j        ¦  «        ‰ j        d	         _         d|v r2‰  !                    ¦   «         }|r|‰ j        d<   nd‰ j        v r‰ j        d= d|v r2‰  "                    ¦   «         }	|	r|	‰ j        d<   nd‰ j        v r‰ j        d= |s$tF          j$         %                    tL          ¦  «        r‰  '                    ¦   «          d S d S )Nú, z9The following tables were requested but are unsupported: ú.rI   rK   rL   rM   r<   rJ   rN   ©rH   rI   r   c              3  ó*   •K  — | ]}|‰j         v V — Œd S rB   )r6   )rC   rD   r�   s     €r8   rE   z Builder.build.<locals>.<genexpr>è   s*   øè è € Ð<Ð< Cˆs�d”iÐÐ<Ð<Ð<Ð<Ð<Ð<r:   rG   rF   )(rW   r   rX   rZ   Úparser5   ÚsupportedTablesÚ	frozensetÚjoinÚsortedÚNotImplementedErrorÚbuild_feature_aalt_Ú
build_headÚ
build_hheaÚ
build_vheaÚ
build_nameÚ
build_OS_2Ú
build_STATÚ	makeTablerp   ÚmakeFeatureVariationsÚ
ScriptListÚScriptCountÚFeatureListÚFeatureCountÚ
LookupListÚLookupCountr   r6   ÚtableÚanyr   ÚusMaxContextÚ	buildGDEFÚ	buildBASEÚosÚenvironÚgetr   Ú	buildDebg)
r�   r2   r3   ÚunsupportedÚunsupported_stringrD   r©   Ú	fontTableÚgdefÚbases
   `         r8   r5   zBuilder.build»   sI  ø€ ØŒ>Ð!Ý# D¤I¨t¬}Ñ=Ô=×CÒCÑEÔEˆDŒNØŒ×Ò˜TÑ"Ô"Ð"àˆ>ØÔ)ˆFˆFå˜vÑ&Ô&ˆFØ  4Ô#7Ñ7ˆKØð Ø%)§Y¢Y­v°kÑ/BÔ/BÑ%CÔ%CÐ"Ý)ð-Ø)ð-ð -ð -ñô ð ð �VÐÐØ×$Ò$Ñ&Ô&Ð&Ø�VÐÐØ�OŠOÑÔÐØ�VÐÐØ�OŠOÑÔÐØ�VÐÐØ�OŠOÑÔÐØ�VÐÐØ�OŠOÑÔÐØ�VÐÐØ�OŠOÑÔÐØ�VÐÐØ�OŠOÑÔÐØ#ð 	#ð 	#ˆCØ˜&Ð Ð ØØ—N’N 3Ñ'Ô'ˆEØÔ'ð 7Ø×*Ò*¨5°#Ñ6Ô6Ð6àÔ Ô,¨qÒ0Ð0ØÔ$Ô1°AÒ5Ð5ØÔ#Ô/°!Ò3Ð3å-5°c©]¬]Ð:�	˜DœI c™NØ"'�	”�Ø˜œ	Ð!Ð!Ø”I˜c�NøÝÐ<Ð<Ð<Ð<Ð+;Ð<Ñ<Ô<Ñ<Ô<ð 	CÀÈ4Ì9ÐATÐATÝ-7¸¼	Ñ-BÔ-BˆDŒI�fÔÔ*Ø�VÐÐØ—>’>Ñ#Ô#ˆDØð &Ø$(�”	˜&Ñ!Ð!Ø˜4œ9Ð$Ð$Ø”I˜fÐ%Ø�VÐÐØ—>’>Ñ#Ô#ˆDØð &Ø$(�”	˜&Ñ!Ð!Ø˜4œ9Ð$Ð$Ø”I˜fÐ%Øð 	•B”J—N’NÕ#7Ñ8Ô8ð 	Ø�NŠNÑÔÐÐÐð	ð 	r:   c                ó¤   —  || j         |¦  «        }| j        |_        | j        |_        | j        |_        | j                             |¦  «         |S rB   )	r6   rc   Ú
lookupflagrd   ÚmarkFilterSetre   Ú	extensionrl   Úappend)r�   ÚlocationÚbuilder_classÚresults       r8   Úget_chained_lookup_zBuilder.get_chained_lookup_ù   sQ   € Ø�˜tœy¨(Ñ3Ô3ˆØ Ô,ˆÔØ#Ô=ˆÔØÔ.ˆÔØŒ×Ò˜VÑ$Ô$Ð$Øˆr:   c                ó†   — | j         D ]8\  }}|||f}| j                             |g ¦  «                             |¦  «         Œ9d S rB   )rf   rn   Ú
setdefaultr»   )r�   ÚlookupÚfeature_nameÚscriptÚlangÚkeys         r8   Úadd_lookup_to_feature_zBuilder.add_lookup_to_feature_  sW   € Ø Ô1ð 	>ð 	>‰LˆF�DØ˜4 Ð.ˆCØŒN×%Ò% c¨2Ñ.Ô.×5Ò5°fÑ=Ô=Ð=Ð=ð	>ð 	>r:   c                ót  — | j         rct          | j         ¦  «        |k    rK| j         j        | j        k    r6| j         j        | j        k    r!| j                              |¦  «        r| j         S | j        r| j         rt          d|¦  «        ‚ || j	        |¦  «        | _         | j        | j         _        | j        | j         _        | j
        | j         _        | j                             | j         ¦  «         | j        r| j         | j        | j        <   | j        r |                      | j         | j        ¦  «         | j         S )NúOWithin a named lookup block, all rules must be of the same lookup type and flag)ri   Útyper¸   rc   r¹   rd   Úcan_add_mappingrj   r	   r6   re   rº   rl   r»   rh   rk   rÇ   )r�   r¼   r½   Úmappings       r8   Úget_lookup_zBuilder.get_lookup_  sL  € àÔð	$å�TÔ%Ñ&Ô&¨-Ò7Ð7ØÔ Ô+¨tÔ/?Ò?Ð?ØÔ Ô.°$Ô2PÒPÐPØÔ ×0Ò0°Ñ9Ô9ð Qð Ô#Ð#ØÔ ð 	 TÔ%5ð 	Ý!ð0àñô ð ð
 )˜=¨¬°HÑ=Ô=ˆÔØ&*Ô&6ˆÔÔ#Ø)-Ô)GˆÔÔ&Ø%)Ô%8ˆÔÔ"ØŒ×Ò˜TÔ-Ñ.Ô.Ð.ØÔ ð 	Jà9=Ô9IˆDÔ Ô 5Ñ6ØÔ!ð 	Rð ×'Ò'¨Ô(8¸$Ô:PÑQÔQÐQØÔÐr:   c           	     ó^  ‡‡— | j         s	| j        sd S d„ | j                             ¦   «         D ¦   «         }| j         dgz   D ]Ü\  }Šˆfd„| j                             ¦   «         D ¦   «         }|s!‰dk    rt	          j        |›d‰›d�¦  «         ŒM|D ]Œ\  }}}}|D ]‚}t          |t          ¦  «        s|g}|D ]e}|                     ¦   «                              ¦   «         D ]<\  }	}
| 	                    |	g ¦  «        Š‰ 
                    ˆfd„|
D ¦   «         ¦  «         Œ=ŒfŒƒŒ�ŒÝd„ |                     ¦   «         D ¦   «         }d	„ |                     ¦   «         D ¦   «         }|s|sd S d
„ | j                             ¦   «         D ¦   «         | _        | j        }g | _        |                      | j        d| j        ¦  «         |r"|                      |t           ¦  «        }||_        |r"|                      |t$          ¦  «        }||_        |                      ¦   «          | j         
                    |¦  «         d S )Nc                ó4   — i | ]\  }}|t          |¦  «        “ŒS rR   )rz   )rC   ÚgÚas      r8   ú
<dictcomp>z/Builder.build_feature_aalt_.<locals>.<dictcomp>*  s$   € ÐKÐKÐK¡T Q¨�a�˜a™œÐKÐKÐKr:   )NÚaaltc                ó6   •— g | ]\  \  }}}}|‰k    ¯||||f‘ŒS rR   rR   )rC   rÄ   rÅ   ÚfeatureÚlookupsr<   s        €r8   rU   z/Builder.build_feature_aalt_.<locals>.<listcomp>,  s>   ø€ ð ð ð á4Ñ+�V˜T 7¨WØ˜d’?�?ð ˜˜w¨Ð0à"�?�?r:   rÓ   z
: Feature z has not been definedc              3  ó$   •K  — | ]
}|‰v¯|V — Œd S rB   rR   )rC   rÐ   Úalts_for_glyphs     €r8   rE   z.Builder.build_feature_aalt_.<locals>.<genexpr><  s6   øè è € ð 2ð 2Ø&'°1¸NÐ3JÐ3J Ð3JÐ3JÐ3JÐ3Jð2ð 2r:   c                óL   — i | ]!\  }}t          |¦  «        d k    ¯||d         “Œ"S )é   r   ©Úlen©rC   ÚglyphÚrepls      r8   rÒ   z/Builder.build_feature_aalt_.<locals>.<dictcomp>?  s5   € ð 
ð 
ð 
Ù*˜u dÅCÈÁIÄIÐQRÂNÀNˆE�4˜”7ÀNÀNÀNr:   c                ó@   — i | ]\  }}t          |¦  «        d k    ¯||“ŒS )rÚ   rÛ   rÝ   s      r8   rÒ   z/Builder.build_feature_aalt_.<locals>.<dictcomp>B  s*   € ÐTÐTÐT¡ ¨ÅcÈ$ÁiÄiÐRSÂmÀm�˜ÀmÀmÀmr:   c                ó4   — i | ]\  \  }}}}|d k    ¯|||f|“ŒS )rÓ   rR   )rC   rÄ   rÅ   rÕ   rÖ   s        r8   rÒ   z/Builder.build_feature_aalt_.<locals>.<dictcomp>E  sA   € ð 
ð 
ð 
á0Ñ'�˜˜w¨Ø˜&Ò Ð ð �T˜7Ð# Wà Ð Ð r:   )rq   rs   Úitemsrn   ÚwarningsÚwarnrV   rz   ÚgetAlternateGlyphsrÁ   Úextendrl   Ústart_featurerr   rt   rÍ   r!   rÌ   r   Ú
alternatesÚend_feature)r�   rè   r¼   rÕ   rÄ   rÅ   rÖ   Ú
lookuplistrÂ   rÞ   ÚaltsÚsingleÚmultiÚold_lookupsÚsingle_lookupÚmulti_lookuprØ   r<   s                   @@r8   rš   zBuilder.build_feature_aalt_#  sè  øø€ ØÔ"ð 	¨4Ô+@ð 	ØˆFð
 LÐK¨TÔ-B×-HÒ-HÑ-JÔ-JÐKÑKÔKˆ
Ø"Ô1°^Ð4DÑDð 	ð 	‰NˆH�dðð ð ð à8<¼×8LÒ8LÑ8NÔ8Nðñ ô ˆGð ð ˜t vš~˜~Ý”ÀxÀxÀxÐQUÐQUÐQUÐVÑWÔWÐWØØ29ð 	ð 	Ñ.�˜˜g wØ")ð ð �JÝ% jµ$Ñ7Ô7ð 2Ø&0 \˜
Ø",ð ð ˜Ø+1×+DÒ+DÑ+FÔ+F×+LÒ+LÑ+NÔ+Nð ð ™K˜E 4Ø-7×-BÒ-BÀ5È"Ñ-MÔ-M˜NØ*×1Ò1ð 2ð 2ð 2ð 2Ø+/ð2ñ 2ô 2ñ ô ð ð ðððð	ð
ð 
Ø.8×.>Ò.>Ñ.@Ô.@ð
ñ 
ô 
ˆð UÐT°
×0@Ò0@Ñ0BÔ0BÐTÑTÔTˆØð 	˜eð 	ØˆFð
ð 
à48´N×4HÒ4HÑ4JÔ4Jð
ñ 
ô 
ˆŒð
 ”mˆØˆŒØ×Ò˜4Ô.°¸Ô8PÑQÔQÐQØð 	+Ø ×,Ò,¨XÕ7IÑJÔJˆMØ$*ˆMÔ!Øð 	,Ø×+Ò+¨HÕ6KÑLÔLˆLØ&+ˆLÔ#Ø×ÒÑÔÐØŒ×Ò˜[Ñ)Ô)Ð)Ð)Ð)r:   c                ó  — | j         sd S | j                             d¦  «        }|sPt          d¦  «        x}| j        d<   |                     d| j        ¦  «         d|_        d|_        dx|_        |_        | j         |_	        d S )NrK   s6                                                         g      ð?iõ<_l   ùe )
r}   r6   r°   r   Ú	decompileÚtableVersionÚmagicNumberÚcreatedÚmodifiedÚfontRevision©r�   r©   s     r8   r›   zBuilder.build_headV  s‹   € ØÔ!ð 	ØˆFØ”	—’˜fÑ%Ô%ˆØð 	8Ý(0°Ñ(8Ô(8Ð8ˆE�D”I˜fÑ%Ø�OŠO˜J¨¬	Ñ2Ô2Ð2Ø!$ˆEÔØ *ˆEÔØ-7Ð7ˆEŒM˜EœNØ!Ô/ˆÔÐÐr:   c                ó¢  — | j         sd S | j                             d¦  «        }|s;t          d¦  «        x}| j        d<   |                     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         |_	        d S d S )NrL   ó$                                       é   ÚcaretoffsetÚascenderÚ	descenderÚlinegap)
r‰   r6   r°   r   rò   ró   ÚcaretOffsetÚascentÚdescentÚlineGaprø   s     r8   rœ   zBuilder.build_hheab  sÜ   € ØŒzð 	ØˆFØ”	—’˜fÑ%Ô%ˆØð 	,Ý(0°Ñ(8Ô(8Ð8ˆE�D”I˜fÑ%Ø�OŠO˜J¨¬	Ñ2Ô2Ð2Ø!+ˆEÔØ˜DœJÐ&Ð&Ø $¤
¨=Ô 9ˆEÔØ˜œÐ#Ð#Øœ: jÔ1ˆEŒLØ˜$œ*Ð$Ð$Ø œJ {Ô3ˆEŒMØ˜œ
Ð"Ð"Ø œJ yÔ1ˆEŒMˆMˆMð #Ð"r:   c                ól  — | j         sd S | j                             d¦  «        }|s;t          d¦  «        x}| j        d<   |                     d| j        ¦  «         d|_        d| j         v r| j         d         |_        d| j         v r| j         d         |_        d| j         v r| j         d         |_        d S d S )NrM   rú   i  ÚverttypoascenderÚverttypodescenderÚverttypolinegap)	rŠ   r6   r°   r   rò   ró   r  r  r  rø   s     r8   r�   zBuilder.build_vheas  sÃ   € ØŒzð 	ØˆFØ”	—’˜fÑ%Ô%ˆØð 	,Ý(0°Ñ(8Ô(8Ð8ˆE�D”I˜fÑ%Ø�OŠO˜J¨¬	Ñ2Ô2Ð2Ø!+ˆEÔØ ¤Ð+Ð+Øœ:Ð&8Ô9ˆEŒLØ $¤*Ð,Ð,Ø œJÐ':Ô;ˆEŒMØ ¤
Ð*Ð*Ø œJÐ'8Ô9ˆEŒMˆMˆMð +Ð*r:   c                ó^   — d„ |j         D ¦   «         }t          dd¦  «        D ]
}||vr|c S Œd S )Nc                ó   — g | ]	}|j         ‘Œ
S rR   )ÚnameID)rC   r<   s     r8   rU   z,Builder.get_user_name_id.<locals>.<listcomp>„  s   € Ð7Ð7Ð7 4�4”;Ð7Ð7Ð7r:   é   iÿ  )ÚnamesÚrange)r�   r©   ÚnameIDsÚuser_name_ids       r8   Úget_user_name_idzBuilder.get_user_name_id‚  sV   € à7Ð7¨5¬;Ð7Ñ7Ô7ˆÝ! # uÑ-Ô-ð 	$ð 	$ˆLØ 7Ð*Ð*Ø#Ð#Ð#Ð#ð +ð	$ð 	$r:   c                óX  — d}d }|dk    rYt          j        ¦   «         }| j        \  |_        |_        |_        |_        || j        v r| j        |         |_        �nOd|_        �nF|| j	        v rA| j        s�n4|| j        v sJ ‚t          j
        ¦   «         }d|_        | j        |         |_        nü|| j        v rót          j        ¦   «         }d|_        | j                             |df|¦  «        |_        | j                             |df|¦  «        |_        | j                             |df|¦  «        |_        | j                             |d¦  «        |_        | j                             |df|¦  «        |_        t1          | j        |         ¦  «        |_        | j        |         |_        |S )Néÿÿ  Úsizer   ÚFeatUILabelNameIDÚFeatUITooltipTextNameIDÚSampleTextNameIDÚParamUILabelNameID_0)r   ÚFeatureParamsSizer|   Ú
DesignSizeÚSubfamilyIDÚ
RangeStartÚRangeEndrv   ÚSubfamilyNameIDru   ÚFeatureParamsStylisticSetÚVersionÚUINameIDrw   ÚFeatureParamsCharacterVariantsÚFormatrx   r°   r  r  r  ry   ÚNumNamedParametersÚFirstParamUILabelNameIDrÜ   r{   Ú	CharCountÚ	Character)r�   rD   Ú
NO_NAME_IDÚparamss       r8   ÚbuildFeatureParamszBuilder.buildFeatureParams‰  sÖ  € ð ˆ
ØˆØ�&Š=ˆ=ÝÔ/Ñ1Ô1ˆFð Ô%ñØÔ!ØÔ"ØÔ!Ø”à�dÔ,Ð,Ð,Ø)-Ô)?ÀÔ)D�Ô&Ñ&à)*�Ô&Ñ&Ø�DÔ&Ð&Ð&ØÔ)ð >áà˜dÔ4Ð4Ð4Ð4Ð4Ý!Ô;Ñ=Ô=�Ø!"�”Ø"&Ô"8¸Ô"=�”�Ø�DÔ'Ð'Ð'ÝÔ<Ñ>Ô>ˆFØˆFŒMØ'+Ô'>×'BÒ'BØÐ)Ð*¨Jñ(ô (ˆFÔ$ð .2Ô-D×-HÒ-HØÐ/Ð0°*ñ.ô .ˆFÔ*ð '+Ô&=×&AÒ&AØÐ(Ð)¨:ñ'ô 'ˆFÔ#ð )-Ô(A×(EÒ(EÀcÈ1Ñ(MÔ(MˆFÔ%Ø-1Ô-D×-HÒ-HØÐ,Ð-¨zñ.ô .ˆFÔ*õ  # 4Ô#6°sÔ#;Ñ<Ô<ˆFÔØ#Ô2°3Ô7ˆFÔØˆr:   c                ó€  — | j         sd S | j                             d¦  «        }|s t          d¦  «        x}| j        d<   g |_        | j         D ]×}|\  }}}}}t          |t          ¦  «        sŸ|}|| j        v rC|| j        vr,|  	                    |¦  «        | j        |<   | j        |         €J ‚| j        |         }nQ|d         | j
        v rB|| j        vr,|  	                    |¦  «        | j        |<   | j        |         €J ‚| j        |         }|                     |||||¦  «         ŒØ|j                             ¦   «          d S )Nr<   r   )r~   r6   r°   r   r  rV   Úintru   rv   r  rw   rx   ÚsetNameÚsort)	r�   r©   r<   r
  Ú
platformIDÚ	platEncIDÚlangIDÚstringrD   s	            r8   rž   zBuilder.build_name¸  su  € ØŒ{ð 	ØˆFØ”	—’˜fÑ%Ô%ˆØð 	Ý(0°Ñ(8Ô(8Ð8ˆE�D”I˜fÑ%ØˆEŒKØ”Kð 	Ið 	IˆDØ<@Ñ9ˆF�J 	¨6°6õ ˜f¥cÑ*Ô*ð :Ø�Ø˜$Ô,Ð,Ð,Ø $Ô"8Ð8Ð8Ø6:×6KÒ6KÈEÑ6RÔ6R˜Ô.¨sÑ3Ø#Ô5°cÔ:ÐFÐFÐFØ!Ô3°CÔ8�F�FØ˜”V˜tÔ2Ð2Ð2Ø $Ô"9Ð9Ð9Ø7;×7LÒ7LÈUÑ7SÔ7S˜Ô/°Ñ4Ø#Ô6°sÔ;ÐGÐGÐGØ!Ô4°SÔ9�FØ�MŠM˜& &¨*°iÀÑHÔHÐHÐHØŒ×ÒÑÔÐÐÐr:   c                óh  — | j         sd S | j                             d¦  «        }|s]t          d¦  «        x}| j        d<   dt	          j        t          d¦  «        j        ¦  «        z  }|                     || j        ¦  «         d}d| j         v r| j         d         |_	        d| j         v rrt          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	         |_        d
| j         v r| j         d
         |_        d| j         v r%t7          d| j         d         z   dz   ¦  «        |_        d| j         v r| j         d         |_        d| j         v r| j         d         |_        d| j         v r |                     | j         d         ¦  «         d| j         v r1|                       | 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„ }tO          ||j(        ¦  «        |_(        |dk    r ||d¦  «         |dk    r ||d¦  «         |dk    r ||d¦  «         d S d S )NrJ   ó    r   ÚfstypeÚpanoseÚtypoascenderÚtypodescenderÚtypolinegapÚ	winascentÚ
windescentÚvendorz'''ÚweightclassÚ
widthclassÚunicoderangeÚcodepagerangerÚ   Úxheighté   Ú	capheightÚloweropsizeé   Úupperopsizec                óR   — |D ]#}t          | |¦  «        st          | |d¦  «         Œ$d S )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ÚbXHeightr5  ÚsTypoAscenderÚsTypoDescenderÚsTypoLineGapÚusWinAscentÚusWinDescentr   Ú	achVendIDÚusWeightClassÚusWidthClassÚsetUnicodeRangesÚbuild_codepages_rL  rM  rN  rO  rR  rS  ÚmaxÚversion)r�   r©   Údatarm  r5  ÚpagesrK  s          r8   rŸ   zBuilder.build_OS_2Ò  sz  € ØŒyð 	ØˆFØ”	—’˜fÑ%Ô%ˆØð 	-Ý(0°Ñ(8Ô(8Ð8ˆE�D”I˜fÑ%Ø�7Ô+­N¸6Ñ,BÔ,BÔ,OÑPÔPÑPˆDØ�OŠO˜D $¤)Ñ,Ô,Ð,ØˆØ�t”yÐ Ð Øœ9 XÔ.ˆEŒLØ�t”yÐ Ð Ý# FÑ+Ô+×2Ò2Ñ4Ô4ˆFð ”	˜(Ô#ñØÔ"ØÔ"Ø”ØÔ"ØÔ ØÔ'ØÔ ØÔ"Ø”Ø”à!ˆEŒLØ˜TœYÐ&Ð&Ø"&¤)¨NÔ";ˆEÔØ˜dœiÐ'Ð'Ø#'¤9¨_Ô#=ˆEÔ Ø˜DœIÐ%Ð%Ø!%¤¨=Ô!9ˆEÔØ˜$œ)Ð#Ð#Ø $¤	¨+Ô 6ˆEÔØ˜4œ9Ð$Ð$Ø!%¤¨<Ô!8ˆEÔØ�t”yÐ Ð Ý& u¨t¬y¸Ô/BÑ'BÀUÑ'JÑKÔKˆEŒOØ˜DœIÐ%Ð%Ø"&¤)¨MÔ":ˆEÔØ˜4œ9Ð$Ð$Ø!%¤¨<Ô!8ˆEÔØ˜TœYÐ&Ð&Ø×"Ò" 4¤9¨^Ô#<Ñ=Ô=Ð=Ø˜dœiÐ'Ð'Ø×)Ò)¨$¬)°OÔ*DÑEÔEˆEØ=BÑ:ˆEÔ" EÔ$:ØˆGØ˜œ	Ð!Ð!Ø!œY yÔ1ˆEŒNØˆGØ˜$œ)Ð#Ð#Ø#œy¨Ô5ˆEÔØˆGØ˜DœIÐ%Ð%Ø,0¬I°mÔ,DˆEÔ)ØˆGØ˜DœIÐ%Ð%Ø,0¬I°mÔ,DˆEÔ)ØˆGð	,ð 	,ð 	,õ
 ˜G U¤]Ñ3Ô3ˆŒà�aŠ<ˆ<ØˆI�eÐEÑFÔFÐFØ�aŠ<ˆ<ØˆIØðñ	ô 	ð 	ð �aŠ<ˆ<ØˆI�eÐSÑTÔTÐTÐTÐTð ˆ<r:   c                óæ   — dD ]}|| j         v rt          |› d�|¦  «        ‚Œt          |t          ¦  «        r|| j         d<   d S t          |t          ¦  «        r|| j         d<   d S t          |¦  «        ‚)N)ÚElidedFallbackNameÚElidedFallbackNameIDz is already set.rr  rq  )r‹   r	   rV   r+  rz   ÚAssertionError)r�   Úvaluer¼   Útokens       r8   ÚsetElidedFallbackNamezBuilder.setElidedFallbackName&  s¡   € ð Dð 	ð 	ˆEØ˜œ
Ð"Ð"Ý%ØÐ.Ð.Ð.Øñô ð ð #õ
 �e�SÑ!Ô!ð 	(Ø16ˆDŒJÐ-Ñ.Ð.Ð.Ý˜�tÑ$Ô$ð 	(Ø/4ˆDŒJÐ+Ñ,Ð,Ð,å  Ñ'Ô'Ð'r:   c                óH  — 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                              |¦  «         d S )NÚ
DesignAxesc              3  ó$   K  — | ]}|j         V — Œd S rB   )rD   ©rC   Úrs     r8   rE   z(Builder.addDesignAxis.<locals>.<genexpr>9  s$   è è € ÐFÐF¨˜aœeÐFÐFÐFÐFÐFÐFr:   z$DesignAxis already defined for tag "z".c              3  ó$   K  — | ]}|j         V — Œd S rB   )Ú	axisOrderrz  s     r8   rE   z(Builder.addDesignAxis.<locals>.<genexpr>>  s$   è è € Ð#RÐ#R°A A¤KÐ#RÐ#RÐ#RÐ#RÐ#RÐ#Rr:   z+DesignAxis already defined for axis number r‘   )r‹   rD   r	   r}  r»   )r�   Ú
designAxisr¼   s      r8   ÚaddDesignAxiszBuilder.addDesignAxis6  sÒ   € Ø˜tœzÐ)Ð)Ø')ˆDŒJ�|Ñ$ØŒ>ÐFÐF¨T¬Z¸Ô-EÐFÑFÔFÐFÐFÝ!ØI°z´~ÐIÐIÐIØñô ð ð ÔÐ#RÐ#R¸¼ÀLÔ9QÐ#RÑ#RÔ#RÐRÐRÝ!ØU¸jÔ>RÐUÐUÐUØñô ð ð 	Œ
�<Ô ×'Ò'¨
Ñ3Ô3Ð3Ð3Ð3r:   c                ó\  — d| j         vr
g | j         d<   | j         d         D ]j}d„ |j        D ¦   «         d„ |j        D ¦   «         k    rDd„ |j        D ¦   «         d„ |j        D ¦   «         k    r |j        |j        k    rt	          d|¦  «        ‚Œk| j         d                              |¦  «         d S )NÚAxisValueRecordsc                ó6   — h | ]}|                      ¦   «         ’ŒS rR   ©ÚasFea©rC   Úns     r8   ú	<setcomp>z-Builder.addAxisValueRecord.<locals>.<setcomp>K  s    € Ð2Ð2Ð2˜q�—’‘”Ð2Ð2Ð2r:   c                ó6   — h | ]}|                      ¦   «         ’ŒS rR   rƒ  r…  s     r8   r‡  z-Builder.addAxisValueRecord.<locals>.<setcomp>L  s    € Ð=Ð=Ð= !�A—G’G‘I”IÐ=Ð=Ð=r:   c                ó6   — h | ]}|                      ¦   «         ’ŒS rR   rƒ  r…  s     r8   r‡  z-Builder.addAxisValueRecord.<locals>.<setcomp>M  s    € Ð:Ð:Ð: 1�Q—W’W‘Y”YÐ:Ð:Ð:r:   c                ó6   — h | ]}|                      ¦   «         ’ŒS rR   rƒ  r…  s     r8   r‡  z-Builder.addAxisValueRecord.<locals>.<setcomp>N  s    € ÐAÐAÐA !�A—G’G‘I”IÐAÐAÐAr:   z8An AxisValueRecord with these values is already defined.)r‹   r  Ú	locationsÚflagsr	   r»   )r�   ÚaxisValueRecordr¼   Úrecord_s       r8   ÚaddAxisValueRecordzBuilder.addAxisValueRecordE  så   € Ø T¤ZÐ/Ð/Ø-/ˆDŒJÐ)Ñ*à”zÐ"4Ô5ð 	ð 	ˆGà2Ð2 G¤MÐ2Ñ2Ô2Ø=Ð= Ô'<Ð=Ñ=Ô=ò>ð >à:Ð:¨Ô(9Ð:Ñ:Ô:ØAÐA Ô'@ÐAÑAÔAòBð Bà”M _Ô%:Ò:Ð:å%ØNØñô ð øð 	Œ
Ð%Ô&×-Ò-¨oÑ>Ô>Ð>Ð>Ð>r:   c                ó"  ‡— | j         sd S | j                              d¦  «        }|st          dd ¦  «        ‚| j                              d¦  «        }i Šg }|D ]}g ‰|j        <   Œ|��X|D �]T}i }|j        dk    r
|j        |d<   t          |j        ¦  «        dk    rá|j        d         }|j        }t          |¦  «        dk    r#|                     |d         |j	        dœ¦  «         t          |¦  «        dk    r*|                     |d         |d         |j	        d	œ¦  «         t          |¦  «        d
k    r%|\  }	}
}|                     |	|
||j	        dœ¦  «         ‰|j                  
                    |¦  «         �Œ|                     d„ |j        D ¦   «         |j	        dœ¦  «         | 
                    |¦  «         �ŒVˆfd„|D ¦   «         }| j                             d¦  «        }|s t          d¦  «        x}| j        d<   g |_	        d| j         v r9| j         d         }|                     |¦  «        }|st          d|› d�d ¦  «        ‚n'd| j         v r| j         d         }nt          dd ¦  «        ‚t          j        | j        |||¬¦  «         d S )Nrx  zDesignAxes not definedr�  r   rŒ  rÚ   )rt  r<   rA  )rt  ÚlinkedValuer<   é   )ÚnominalValueÚrangeMinValueÚrangeMaxValuer<   c                ó4   — i | ]}|j         |j        d          “ŒS )r   )rD   Úvalues)rC   Úis     r8   rÒ   z&Builder.build_STAT.<locals>.<dictcomp>ƒ  s"   € Ð(SÐ(SÐ(SÀ¨¬°´¸´Ð(SÐ(SÐ(Sr:   )r¼   r<   c                óR   •— g | ]#}|j         |j        |j        ‰|j                 d œ‘Œ$S ))ÚorderingrD   r<   r—  )r}  rD   r  )rC   rÑ   Ú
axisValuess     €r8   rU   z&Builder.build_STAT.<locals>.<listcomp>‰  sK   ø€ ð 
ð 
ð 
ð ð œKØ”uØœØ$ Q¤UÔ+ð	ð ð
ð 
ð 
r:   r<   rr  zElidedFallbackNameID z; points to a nameID that does not exist in the "name" tablerq  zASTAT table requires an ElidedFallbackName or ElidedFallbackNameID)r‹  ÚelidedFallbackName)r‹   r°   r	   rD   rŒ  rÜ   r‹  r—  Úupdater  r»   r6   r   ÚgetDebugNameÚotlÚbuildStatTable)r�   r\   ÚaxisValueRecordsÚformat4_locationsrD   ÚavrÚ
valuesDictr¼   r—  ÚnominalÚminValÚmaxValÚ
designAxesÚ	nameTabler
  r<   r›  s                   @r8   r    zBuilder.build_STATW  sI  ø€ ØŒzð 	ØˆFàŒz�~Š~˜lÑ+Ô+ˆØð 	BÝ!Ð":¸DÑAÔAÐAØœ:Ÿ>š>Ð*<Ñ=Ô=ÐØˆ
ØÐØð 	%ð 	%ˆCØ"$ˆJ�s”wÑÐØÑ'Ø'ð #9ñ #9�Ø�
Ø”9˜q’=�=Ø*-¬)�J˜wÑ'Ý�s”}Ñ%Ô%¨Ò*Ð*Ø"œ}¨QÔ/�HØ%œ_�FÝ˜6‘{”{ aÒ'Ð'Ø"×)Ò)°F¸1´IÀsÄyÐ*QÐ*QÑRÔRÐRÝ˜6‘{”{ aÒ'Ð'Ø"×)Ò)à)/°¬Ø/5°a¬yØ(+¬	ðð ñô ð õ ˜6‘{”{ aÒ'Ð'Ø28Ñ/˜ ¨Ø"×)Ò)à07Ø17Ø17Ø(+¬	ð	ð ñô ð ð ˜xœ|Ô,×3Ò3°JÑ?Ô?Ð?Ñ?à×%Ò%à(SÐ(SÀSÄ]Ð(SÑ(SÔ(SØ$'¤Iðð ñô ð ð &×,Ò,¨ZÑ8Ô8Ð8Ñ8ð
ð 
ð 
ð 
ð ð
ñ 
ô 
ˆ
ð ”I—M’M &Ñ)Ô)ˆ	Øð 	!Ý,4°VÑ,<Ô,<Ð<ˆI˜œ	 &Ñ)Ø ˆIŒOà! T¤ZÐ/Ð/Ø”ZÐ 6Ô7ˆFØ×)Ò)¨&Ñ1Ô1ˆDØð Ý%ð#¨Fð #ð #ð #ð ñ	ô ð ðð " T¤ZÐ/Ð/Ø”ZÐ 4Ô5ˆFˆFå!ØSØñô ð õ
 	ÔØŒIØØ'Ø%ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r:   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œ¥Šˆfd2„|D ¦   «         }g }t          d¦  «        D ]X}|                     d3¦  «         t          |d4z  |dz   d4z  ¦  «        D ]'}||v r||xx         d5z  cc<   Œ||xx         d6z  cc<   Œ(ŒYd7„ |D ¦   «         S )8Niä  r   iâ  rÚ   iã  rA  iå  r’  iæ  é   iç  rD  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µ  c                ó(   •— g | ]}|‰v ¯‰|         ‘ŒS rR   rR   )rC   ÚpÚ
pages2bitss     €r8   rU   z,Builder.build_codepages_.<locals>.<listcomp>Ó  s"   ø€ Ð@Ð@Ð@ !°°Z°°�
˜1”°°°r:   Ú é    Ú1Ú0c                ó>   — g | ]}t          |d d d…         ¦  «        ‘ŒS )Néÿÿÿÿ)r   )rC   rÆ  s     r8   rU   z,Builder.build_codepages_.<locals>.<listcomp>Ü  s*   € Ð3Ð3Ð3¨•
˜1˜T˜T˜r˜Tœ7Ñ#Ô#Ð3Ð3Ð3r:   )r  r»   )r�   ro  Úbitsr˜  ÚjrÇ  s        @r8   rk  zBuilder.build_codepages_±  sÍ  ø€ ð 
Ø�!ð 
à�!ð 
ð �!ð 
ð �!ð	 
ð
 �!ð 
ð �!ð 
ð �!ð 
ð �!ð 
ð �!ð 
ð �ð 
ð �ð 
ð �ð 
ð �ð 
ð �ð 
ð �"ð 
ð  �ð! 
ð" �ð# 
ð$ ØØØØØØØØØØØØØð? 
ð  
ð  
ˆ
ðB AÐ@Ð@Ð@ uÐ@Ñ@Ô@ˆØˆÝ�q‘”ð 	$ð 	$ˆAØ�LŠL˜ÑÔÐÝ˜1˜r™6 A¨¡E¨R¡<Ñ0Ô0ð $ð $�Ø˜�9�9Ø˜!�H�H”H ‘O�H�H‘H�Hà˜!�H�H”H ‘O�H�H‘H�Hð	$ð
 4Ð3¨UÐ3Ñ3Ô3Ð3r:   c                ó  — | j         s	| j        sd S t          j        ¦   «         }d|_        |                      | 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Þ  sw   € ØÔ$ð 	¨TÔ-Að 	Ø�4ÝŒ}‰ŒˆØ!ˆŒØ×+Ò+¨DÔ,AÑBÔBˆŒØ×*Ò*¨4Ô+?Ñ@Ô@ˆŒå˜&Ñ!Ô!ˆØˆŒØˆr:   c                óH   — t          j        ¦   «         }d|_        ||_        |S ©NrÚ   )r   Ú	BaseCoordr"  Ú
Coordinate)r�   ÚcÚcoords      r8   ÚbuildBASECoordzBuilder.buildBASECoordê  s$   € ÝÔ"Ñ$Ô$ˆØˆŒØˆÔØˆr:   c                óp  ‡— |sd S |\  }}}t          j        ¦   «         }t          j        ¦   «         |_        ||j        _        t	          |¦  «        |j        _        t          j        ¦   «         |_        g |j        _        t	          |¦  «        |j        _        t          |¦  «        D �]Šˆfd„|D ¦   «         }t          j        ¦   «         }‰d         |_
        t          j        ¦   «         |_        t          j        ¦   «         |j        _        |                     ‰d         ¦  «        |j        j        _        g |j        j        _        t	          ‰d         ¦  «        |j        j        _        g |j        _        ‰d         D ]9}|j        j        j                             |                      |¦  «        ¦  «         Œ:t          |¦  «        D ]§\  }}	}
t          j        ¦   «         }|                      |	¦  «        |_        |                      |
¦  «        |_        d|_        |dk    r||j        _        Œgt          j        ¦   «         }||_        ||_        |j        j                             |¦  «         Œ¨t	          |j        j        ¦  «        |j        _        |j        j                             |¦  «         �Œ|S )Nc                óH   •— g | ]}|d          ‰d          k    ¯|dd…         ‘ŒS )r   rÚ   NrR   )rC   ÚrecordrÄ   s     €r8   rU   z)Builder.buildBASEAxis.<locals>.<listcomp>ü  s:   ø€ ð !ð !ð !Ø%°6¸!´9ÀÀqÄ	Ò3IÐ3I��q�r�r”
Ð3IÐ3IÐ3Ir:   r   rÚ   rA  Ú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ÚminmaxÚminmax_for_scriptrÝ  rØ  ÚlanguageÚ	min_coordÚ	max_coordÚminmax_recordÚlang_recordrÄ   s                @r8   rÑ  zBuilder.buildBASEAxisð  s�  ø€ Øð 	ØˆFØ!%Ñˆˆw˜ÝŒ}‰ŒˆÝ#Ô/Ñ1Ô1ˆÔØ',ˆÔÔ$Ý(+¨E©
¬
ˆÔÔ%Ý&Ô5Ñ7Ô7ˆÔØ/1ˆÔÔ,Ý.1°'©l¬lˆÔÔ+Ý˜W‘o”oð 	@ñ 	@ˆFð!ð !ð !ð !Ø)/ð!ñ !ô !Ðõ Ô.Ñ0Ô0ˆFØ#)¨!¤9ˆFÔ Ý (Ô 3Ñ 5Ô 5ˆFÔÝ+3Ô+>Ñ+@Ô+@ˆFÔÔ(Ø8=¿ºÀFÈ1ÄIÑ8NÔ8NˆFÔÔ(Ô5Ø57ˆFÔÔ(Ô2Ý:=¸fÀQ¼i¹.¼.ˆFÔÔ(Ô7Ø24ˆFÔÔ/à˜A”Yð Vð V�ØÔ!Ô,Ô6×=Ò=¸d×>QÒ>QÐRSÑ>TÔ>TÑUÔUÐUÐUÝ28Ð9JÑ2KÔ2Kð Lð LÑ.�˜) YÝ (¤Ñ 1Ô 1�Ø)-×)<Ò)<¸YÑ)GÔ)G�Ô&Ø)-×)<Ò)<¸YÑ)GÔ)G�Ô&Ø01�Ô-Ø˜vÒ%Ð%Ø6C�FÔ%Ô3Ð3å"*Ô"<Ñ">Ô">�KØ19�KÔ.Ø)6�KÔ&ØÔ%Ô7×>Ò>¸{ÑKÔKÐKÐKÝ14ØÔ!Ô3ñ2ô 2ˆFÔÔ.ð ÔÔ0×7Ò7¸Ñ?Ô?Ð?Ñ?Øˆr:   c                ó6  — t          j        ¦   «         }|                      ¦   «         |_        t	          j        | j        | j        ¦  «        |_        t	          j	        | j
        | j        | j        ¦  «        |_        |                      ¦   «         |_        |                      ¦   «         |_        |j        rdnd|_        | j        r€| j                             ¦   «         }|red|_        ||_        |                     ¦   «         }|                     |¦  «         d| j        v r%| j        d         j                             |¦  «         t3          |j        |j        |j        |j        |j        f¦  «        st5          |d¦  «        rt7          d¦  «        }||_        |S d S )Ni  rû   i  rH   ÚVarStorerG   )r   rG   ÚbuildGDEFGlyphClassDef_ÚGlyphClassDefrŸ  ÚbuildAttachListr�   rZ   Ú
AttachListÚbuildLigCaretListr‚   rƒ   ÚLigCaretListÚbuildGDEFMarkAttachClassDef_ÚMarkAttachClassDefÚbuildGDEFMarkGlyphSetsDef_ÚMarkGlyphSetsDefr  r[   Úfinishrÿ  ÚoptimizeÚremap_device_varidxesr6   r©   rª   rG  r   )r�   rµ   ÚstoreÚ
varidx_mapr¾   s        r8   r¬   zBuilder.buildGDEF  sˆ  € ÝŒ}‰ŒˆØ!×9Ò9Ñ;Ô;ˆÔÝÔ-¨dÔ.@À$Ä-ÑPÔPˆŒÝÔ1ØÔ  $Ô"6¸¼ñ
ô 
ˆÔð #'×"CÒ"CÑ"EÔ"EˆÔØ $× ?Ò ?Ñ AÔ AˆÔØ%)Ô%:ÐJ�z�zÀ
ˆŒØÔð 		NØÔ(×/Ò/Ñ1Ô1ˆEØð NØ)�”Ø %�”Ø"Ÿ^š^Ñ-Ô-�
à×*Ò*¨:Ñ6Ô6Ð6Ø˜TœYÐ&Ð&Ø”I˜fÔ%Ô+×AÒAÀ*ÑMÔMÐMÝàÔ"Ø”ØÔ!ØÔ'ØÔ%ðñ
ô 
ð 	õ �T˜:Ñ&Ô&ð	õ ˜fÑ%Ô%ˆFØˆFŒLØˆMà�4r:   c                óŒ  — | j         r$d„ | j                              ¦   «         D ¦   «         }nzi }| j        D ])}|                     |                     ¦   «         ¦  «         Œ*| j        j                             ¦   «         D ](}|j        D ]}| 	                    ¦   «         D ]}d||<   ŒŒŒ)|rt          j        ¦   «         }||_        |S d S )Nc                ó    — i | ]\  }\  }}||“ŒS rR   rR   ©rC   rÐ   rØ  Ú_s       r8   rÒ   z3Builder.buildGDEFGlyphClassDef_.<locals>.<dictcomp>A  s"   € ÐLÐLÐL¡ ¡F Q¨�q˜!ÐLÐLÐLr:   r’  )r„   râ   rl   r�  ÚinferGlyphClassesrW   ÚmarkClassesr—  ÚdefinitionsÚglyphSetr   r  Ú	classDefs)r�   ÚclassesrÂ   Ú	markClassÚmarkClassDefrÞ   r¾   s          r8   r   zBuilder.buildGDEFGlyphClassDef_?  sô   € ØÔð 		+ØLÐL¨tÔ/C×/IÒ/IÑ/KÔ/KÐLÑLÔLˆGˆGàˆGØœ-ð ;ð ;�Ø—’˜v×7Ò7Ñ9Ô9Ñ:Ô:Ð:Ð:Ø!œ^Ô7×>Ò>Ñ@Ô@ð +ð +�	Ø$-Ô$9ð +ð +�LØ!-×!6Ò!6Ñ!8Ô!8ð +ð +˜Ø)*˜ ™˜ð+ð+ð ð 	ÝÔ+Ñ-Ô-ˆFØ&ˆFÔØˆMà�4r:   c                óˆ   — d„ | j                              ¦   «         D ¦   «         }|sd S t          j        ¦   «         }||_        |S )Nc                ó    — i | ]\  }\  }}||“ŒS rR   rR   r  s       r8   rÒ   z8Builder.buildGDEFMarkAttachClassDef_.<locals>.<dictcomp>R  s"   € ÐDÐDÐD™i˜a¡ ! Q�Q˜ÐDÐDÐDr:   )r…   râ   r   r  r  )r�   r  r¾   s      r8   r  z$Builder.buildGDEFMarkAttachClassDef_Q  sL   € ØDÐD¨4Ô+;×+AÒ+AÑ+CÔ+CÐDÑDÔDˆ	Øð 	Ø�4ÝÔ,Ñ.Ô.ˆØ$ˆÔØˆr:   c                óÂ   — g }t          | j                             ¦   «         d„ ¬¦  «        D ]\  }}|                     |¦  «         Œt	          j        || j        ¦  «        S )Nc                ó   — | d         S rÕ  rR   )Úitems    r8   ú<lambda>z4Builder.buildGDEFMarkGlyphSetsDef_.<locals>.<lambda>\  s
   € ¸4À¼7€ r:   ©rÆ   )r˜   r‡   râ   r»   rŸ  ÚbuildMarkGlyphSetsDefrZ   )r�   ÚsetsÚglyphsÚid_s       r8   r  z"Builder.buildGDEFMarkGlyphSetsDef_Y  sm   € ØˆÝ!ØÔ ×&Ò&Ñ(Ô(Ð.BÐ.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          <   d S )NÚDebg)r6   r   rn  rm   r   ©r�   s    r8   r±   zBuilder.buildDebga  sP   € Ø˜œÐ"Ð"Ý (¨Ñ 0Ô 0ˆDŒI�fÑØ%'ˆDŒI�fÔÔ"Ø8<Ô8MˆŒ	�&ÔÔÕ4Ñ5Ð5Ð5r:   c                óR  — |dv s
J |¦   «         ‚| j         D ]	}d |_        Œ
g }| j         D ]Ä}|j        |k    rŒ|                      |¦  «        }|                     |d u¬¦  «        }|€t          d|j        ¦  «        ‚|D ]o}t          |¦  «        |_        t          t          |j        ¦  «        |d ¬¦  «        | j
        |         t          |j        ¦  «        <   |                     |¦  «         ŒpŒÅg }|D ]´}	 |                     |                     ¦   «         ¦  «         Œ+# t          $ r(}t          t          |¦  «        |j        ¦  «        |‚d }~wt          $ rM}| j
        |         t          |j        ¦  «                 j        }	t          t          |¦  «        |	¦  «        |‚d }~ww xY w|S )Nr’   )Úis_named_lookuprÉ   )r¼   r<   rÕ   )rl   Úlookup_indexr©   Úget_lookup_name_Úpromote_lookup_typer	   r¼   rÜ   r
   Ústrrm   r»   r5   r'   Ú	Exception)
r�   rD   rÂ   rÖ   r<   ÚresolvedÚlÚ	otLookupsÚer¼   s
             r8   ÚbuildLookups_zBuilder.buildLookups_g  sö  € ØÐ&Ð&Ð&Ð&¨Ñ&Ô&Ð&Ø”mð 	'ð 	'ˆFØ"&ˆFÔÐØˆØ”mð 	"ð 	"ˆFØŒ|˜sÒ"Ð"ØØ×(Ò(¨Ñ0Ô0ˆDØ×1Ò1À$ÈdÐBRÐ1ÑSÔSˆHØÐÝ%ð4à”Oñô ð ð
 ð "ð "�Ý&)¨'¡l¤l�Ô#ÝGVÝ  ¤Ñ1Ô1ØØ ðHñ Hô H�Ô% cÔ*­3¨vÔ/BÑ+CÔ+CÑDð
 —’˜qÑ!Ô!Ð!Ð!ð"ð ˆ	Øð 	?ð 	?ˆAð?Ø× Ò  §¢¡¤Ñ+Ô+Ð+Ð+øÝ#ð Að Að AÝ%¥c¨!¡f¤f¨a¬jÑ9Ô9¸qÐ@øøøøÝð ?ð ?ð ?ØÔ0°Ô5µc¸!¼.Ñ6IÔ6IÔJÔS�Ý%¥c¨!¡f¤f¨hÑ7Ô7¸QÐ>øøøøð?øøøð Ðs%   Ã5'DÄ
F$Ä'#E
Å
F$ÅAFÆF$c                ó€
  ‡—  t          t          |d ¦  «        ¦   «         }d|_        t          j        ¦   «         |_        g |j        _        t          j        ¦   «         |_        g |j        _        t          j        ¦   «         |_        |                      |¦  «        |j        _	        i }i }i }d„ }t          | j                             ¦   «         |¬¦  «        D �]>\  }}|\  }	}
}t          t                               d„ |D ¦   «         ¦  «        ¦  «        }t!          |¦  «        }|dk    o|dk    }|                      ||¦  «        }t%          |¦  «        dk    r|s|sŒ†|D ]v}	 | j        |         t)          |¦  «                                      |¬¦  «        | j        |         t)          |¦  «        <   ŒS# t,          $ r t/          j        d	¦  «         Y Œsw xY w||f}|                     |¦  «        }|€Àt%          |j        j        ¦  «        }t          j        ¦   «         }||_        t          j        ¦   «         |_        |                      |¦  «        |j        _        t=          |¦  «        |j        _        t%          |¦  «        |j        _         |j        j         !                    |¦  «         |||<   | "                    |	i ¦  «         "                    |
g ¦  «         !                    |¦  «         | j#                             |	|
f¦  «        |k    r|||	|
f<   �Œ@t          |                     ¦   «         ¦  «        D �]›\  }	}t          j        ¦   «         }|	|_$        t          j%        ¦   «         |_%        d |j%        _&        g |j%        _'        t          |                     ¦   «         ¦  «        D ]ç\  }
}t          j'        ¦   «         }t          j(        ¦   «         |_(        d |j(        _)        |                     |	|
f¦  «        Š‰€d
|j(        _*        n‰|j(        _*        ˆfd„|D ¦   «         |j(        _+        t%          |j(        j+        ¦  «        |j(        _,        |
dk    r|j(        |j%        _&        ŒÁ|
|_-        |j%        j'         !                    |¦  «         Œèt%          |j%        j'        ¦  «        |j%        _.        |j        j         !                    |¦  «         �Œ�t%          |j        j        ¦  «        |j        _/        t%          |j        j        ¦  «        |j        _,        t%          |j        j	        ¦  «        |j        _         |S )Nrû   c                ób   — | d         d         | d         d         | d         d         | d         fS )Nr   rA  rÚ   rR   )Ú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  ó2   K  — | ]}|j         ®	|j         V — Œd S rB   )r+  )rC   r1  s     r8   rE   z$Builder.makeTable.<locals>.<genexpr>¥  s4   è è € ð ð Ø'(°q´~Ð7Q�A”NÐ7QÐ7QÐ7QÐ7Qðð r:   rH   r  r   )rÕ   zWfeaLib.Builder subclass needs upgrading to stash debug information. See fonttools#2065.r  c                ó    •— g | ]
}|‰k    ¯|‘ŒS rR   rR   )rC   r˜  Úreq_feature_indexs     €r8   rU   z%Builder.makeTable.<locals>.<listcomp>á  s+   ø€ ð 0ð 0ð 0Ø°!Ð7HÒ2HÐ2H�AÐ2HÐ2HÐ2Hr:   rÞ  )0Úgetattrr   r  r£   ÚScriptRecordr¥   ÚFeatureRecordr§   r4  ÚLookupr˜   rn   râ   ÚtupleÚdictÚfromkeysr–   Úany_feature_variationsrÜ   rm   r.  Ú_replaceÚKeyErrorrã   rä   r°   Ú
FeatureTagÚFeaturer)  ÚFeatureParamsrz   ÚLookupListIndexr¨   r»   rÁ   ro   Ú	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Úlangrecr:  s                          @r8   r¡   zBuilder.makeTableŠ  s  ø€ Ø,•� # tÑ,Ô,Ñ.Ô.ˆØ"ˆŒÝ#Ô.Ñ0Ô0ˆÔØ(*ˆÔÔ%Ý$Ô0Ñ2Ô2ˆÔØ*,ˆÔÔ'Ý#Ô.Ñ0Ô0ˆÔØ"&×"4Ò"4°SÑ"9Ô"9ˆÔÔð ˆØ#%Ð Øˆð EÐDˆÝ" 4¤>×#7Ò#7Ñ#9Ô#9¸~ÐNÑNÔNð 1	Iñ 1	I‰LˆC�Ø(+Ñ%ˆF�D˜+õ #Ý—’ð ð Ø,3ðñ ô ñ ô ñô ˆNõ # >Ñ2Ô2ˆJà &š=ÐB¨[¸FÒ-BˆLØ ×7Ò7¸ÀSÑIÔIˆMÝ�>Ñ"Ô" aÒ'Ð'°Ð'À]Ð'Øà$ð 	ð 	�ðØ:>Ô:OÐPSÔ:TÝ˜B™œô;ç’h s�hÑ+Ô+ð Ô)¨#Ô.­s°2©w¬wÑ7Ð7øõ  ð ð ð Ý”MðGñô ð ð ð ðøøøð '¨
Ð3ˆKØ+×/Ò/°Ñ<Ô<ˆMØÐ$Ý # EÔ$5Ô$CÑ DÔ D�ÝÔ-Ñ/Ô/�Ø"-�”Ý'Ô/Ñ1Ô1�”Ø-1×-DÒ-DÀ[Ñ-QÔ-Q�”Ô*Ý/3°NÑ/CÔ/C�”Ô,Ý+.¨~Ñ+>Ô+>�”Ô(ØÔ!Ô/×6Ò6°tÑ<Ô<Ð<Ø/<� Ñ,Ø×Ò˜v rÑ*Ô*×5Ò5°d¸BÑ?Ô?×FÒFÀ}ÑUÔUÐUØÔ&×*Ò*¨F°D¨>Ñ:Ô:¸kÒIÐIØ;HÐ(¨&°$¨Ñ8ùõ &,¨G¯MªM©O¬OÑ%<Ô%<ð 	7ñ 	7Ñ!ˆF�MÝÔ(Ñ*Ô*ˆDØ#ˆDŒNÝ"œ/Ñ+Ô+ˆDŒKØ)-ˆDŒKÔ&Ø(*ˆDŒKÔ%Ý)/°×0CÒ0CÑ0EÔ0EÑ)FÔ)Fð >ð >Ñ%��oÝ"Ô0Ñ2Ô2�Ý"*Ô"2Ñ"4Ô"4�”Ø.2�”Ô+à$<×$@Ò$@À&È$ÀÑ$PÔ$PÐ!Ø$Ð,Ø6<�G”OÔ3Ð3à6G�G”OÔ3ð0ð 0ð 0ð 0Ø.ð0ñ 0ô 0�”Ô,õ 03°7´?Ô3OÑ/PÔ/P�”Ô,à˜6’>�>Ø18´�D”KÔ.Ð.à)-�GÔ&Ø”KÔ-×4Ò4°WÑ=Ô=Ð=Ð=Ý'*¨4¬;Ô+DÑ'EÔ'EˆDŒKÔ$ØÔÔ)×0Ò0°Ñ6Ô6Ð6Ñ6å'*¨5Ô+;Ô+HÑ'IÔ'IˆÔÔ$Ý),¨UÔ->Ô-LÑ)MÔ)MˆÔÔ&Ý'*¨5Ô+;Ô+BÑ'CÔ'CˆÔÔ$Øˆs   Å"AF2Æ2GÇGc                óÀ  — i }d}| j                              ¦   «         D ]Š\  \  }}}}g ||<   |                     ¦   «         D ]g\  }}	| j        |         }
g }|	D ]3}|j        |k    rŒ|j        €J ‚|                     |j        ¦  «         d}Œ4||                              |
|f¦  «         ŒhŒ‹|r1|                     ¦   «         D ]\  }}t          | j        |||¦  «         Œd S d S )NFT)rp   râ   rŒ   r©   r+  r»   r+   r6   )r�   r©   Ú	table_tagÚfeature_varsÚhas_any_variationsr  rV  Ú
variationsÚconditionsetÚbuildersÚraw_conditionsetÚindicesÚbÚconditions_and_lookupss                 r8   r¢   zBuilder.makeFeatureVariationsó  sL  € ØˆØ"Ðà/3Ô/G×/MÒ/MÑ/OÔ/Oð 	Nð 	NÑ+ÑˆQ��; Ø(*ˆL˜Ñ%Ø*4×*:Ò*:Ñ*<Ô*<ð 	Nð 	NÑ&�˜hØ#'Ô#6°|Ô#DÐ Ø�Ø!ð .ð .�AØ”w )Ò+Ð+Ø Øœ>Ð5Ð5Ð5Ø—N’N 1¤>Ñ2Ô2Ð2Ø)-Ð&Ð&Ø˜[Ô)×0Ò0Ð2BÀGÐ1LÑMÔMÐMÐMð	Nð ð 	Ø7C×7IÒ7IÑ7KÔ7Kð ð Ñ3�Ð3Ý'Ø”I˜uÐ&<¸kñô ð ð ð	ð 	ðð r:   c                óÎ   ‡— | j                              ¦   «         D ]I\  \  }}}}||k    rŒ|                     ¦   «         D ]$\  }}t          ˆfd„|D ¦   «         ¦  «        r  dS Œ%ŒJdS )Nc              3  ó.   •K  — | ]}|j         ‰k    V — Œd S rB   )r©   )rC   rk  rc  s     €r8   rE   z1Builder.any_feature_variations.<locals>.<genexpr>  s*   øè è € Ð>Ð>°�q”w )Ò+Ð>Ð>Ð>Ð>Ð>Ð>r:   TF)rp   râ   rª   )r�   rV  rc  r  rÕ   rf  rg  rh  s     `     r8   rB  zBuilder.any_feature_variations
  s™   ø€ Ø+/Ô+C×+IÒ+IÑ+KÔ+Kð 	 ð 	 Ñ'‰OˆQ��7˜ZØ˜+Ò%Ð%ØØ*4×*:Ò*:Ñ*<Ô*<ð  ð  Ñ&�˜hÝÐ>Ð>Ð>Ð>°XÐ>Ñ>Ô>Ñ>Ô>ð  Ø˜4˜4˜4ð ð ð ˆur:   c                ód   — d„ | j                              ¦   «         D ¦   «         }||v r||         S d S )Nc                ó   — i | ]\  }}||“Œ	S rR   rR   )rC   ÚkÚvs      r8   rÒ   z,Builder.get_lookup_name_.<locals>.<dictcomp>  s   € Ð<Ð<Ð<™˜˜1ˆq�!Ð<Ð<Ð<r:   )rh   râ   )r�   rÂ   Úrevs      r8   r,  zBuilder.get_lookup_name_  s<   € Ø<Ð< Ô 3× 9Ò 9Ñ ;Ô ;Ð<Ñ<Ô<ˆØ�Sˆ=ˆ=Ø�v”;ÐØˆtr:   c                óZ  — |dk    r|dk    r| j         rt          d|¦  «        ‚|dk    r| j        rt          d|¦  «        ‚nd| _        ||f| j         v r;t          d|                     ¦   «         ›d|                     ¦   «         ›d�|¦  «        ‚| j                              ||f¦  «         d S )	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	   rg   ÚstripÚadd)r�   r¼   rÄ   rù  s       r8   Úadd_language_systemzBuilder.add_language_system  sî   € à�VÒÐ ¨FÒ 2Ð 2°tÔ7UÐ 2Ý!ð=àñô ð ð
 �VÒÐØÔ)ð Ý%ð8àñô ð ðð *.ˆDÔ&Ø�HÐ Ô!?Ð?Ð?Ý!�/à—<’<‘>”>�>�> 8§>¢>Ñ#3Ô#3Ð#3Ð#3ð5àñô ð ð
 	Ô&×*Ò*¨F°HÐ+=Ñ>Ô>Ð>Ð>Ð>r:   c                óX   — | j         rt          | j         ¦  «        S t          dh¦  «        S )N)ru  rÞ  )r`   r–   r(  s    r8   Úget_default_language_systems_z%Builder.get_default_language_systems_2  s2   € ð Ô)ð 	1Ý˜TÔ;Ñ<Ô<Ð<åÐ.Ð/Ñ0Ô0Ð0r:   c                ó  — |r|dk    rt          d|¦  «        ‚|                      ¦   «         | _        t          | j        ¦  «        \  | _        | _        d | _        || _        d| _        d | _	        || _
        |dk    r|| _        || _        d S d S )NrÓ   zL'useExtension' keyword for feature blocks is allowed only for 'aalt' featurer   )r	   r{  rf   Úminra   rb   ri   rk   rc   rd   re   rr   rt   ©r�   r¼   r<   Úuse_extensions       r8   rç   zBuilder.start_feature=  s©   € Øð 	˜T Vš^˜^Ý!Ø^Øñô ð ð !%× BÒ BÑ DÔ DˆÔõ (+¨4Ô+@Ñ'AÔ'AÑ$ˆŒ�d”nØˆÔØ!%ˆÔØˆÔØ)-ˆÔ&Ø+ˆÔØ�6Š>ˆ>Ø"*ˆDÔØ'4ˆDÔ$Ð$Ð$ð ˆ>r:   c                óˆ   — | j         €J ‚d | _         d | _        d | _        d | _        d | _        d| _        d | _        d| _        d S )Nr   F)rk   rf   ra   rb   ri   rc   rd   re   r(  s    r8   ré   zBuilder.end_featureQ  sU   € ØÔ%Ð1Ð1Ð1Ø!%ˆÔØ $ˆÔØˆŒØˆŒØˆÔØˆÔØ)-ˆÔ&Ø#ˆÔÐÐr:   c                óà   — || j         v rt          d|z  |¦  «        ‚| j        dk    rt          d|¦  «        ‚|| _        d | j         |<   d | _        || _        | j        €d| _        d | _        d S d S )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   )rh   r	   rk   rj   ri   re   rc   rd   r~  s       r8   Ústart_lookup_blockzBuilder.start_lookup_block\  s¥   € Ø�4Ô&Ð&Ð&Ý!Ø6¸Ñ=¸xñô ð ð Ô! VÒ+Ð+Ý!ðLàñô ð ð
 !%ˆÔØ$(ˆÔ˜DÑ!ØˆÔØ+ˆÔØÔ!Ð)Ø ˆDÔØ-1ˆDÔ*Ð*Ð*ð *Ð)r:   c                óp   — | j         €J ‚d | _         d | _        d| _        | j        €d| _        d | _        d S d S )NFr   )rj   ri   re   rk   rc   rd   r(  s    r8   Úend_lookup_blockzBuilder.end_lookup_blocko  sP   € ØÔ$Ð0Ð0Ð0Ø $ˆÔØˆÔØ#ˆÔØÔ!Ð)Ø ˆDÔØ-1ˆDÔ*Ð*Ð*ð *Ð)r:   c                ó’   — || j         v s
J |¦   «         ‚d | _        | j         |         }|�|                      || j        ¦  «         d S d S rB   )rh   ri   rÇ   rk   )r�   Úlookup_namerÂ   s      r8   Úadd_lookup_callzBuilder.add_lookup_callx  s`   € Ø˜dÔ1Ð1Ð1Ð1°;Ñ1Ô1Ð1ØˆÔØÔ$ [Ô1ˆØÐØ×'Ò'¨°Ô0FÑGÔGÐGÐGÐGð Ðr:   c                ó   — || _         d S rB   )r}   )r�   r¼   Úrevisions      r8   Úset_font_revisionzBuilder.set_font_revision  s   € Ø%ˆÔÐÐr:   c           
     ó:  ‡ ‡‡— t          |t          ¦  «        r|g}nt          |¦  «        }|rt          d„ |D ¦   «         ¦  «        sJ ‚t          t                               |¦  «        ¦  «        }‰ j        dv rt          d‰ j        z  |¦  «        ‚‰ j        €t          d|¦  «        ‚d ‰ _        |rw|D ]t}‰ j	        |f}|‰ j
        vrŒt          d|                     ¦   «         ›d‰ j	                             ¦   «         ›d‰ j
        |                              ¦   «         ›d�|¦  «        ‚|D ]®}‰ j	        |‰ j        f}‰ j                             |d	         d
|d         fg ¦  «        Š‰ j                             |g ¦  «        Š|d
k    s|r"‰                     ˆfd„‰D ¦   «         ¦  «         nˆfd„‰D ¦   «         ‰ j        |<   |r‰ j        ‰ j
        ‰ j	        |f<   Œ¯t!          ˆ fd„|D ¦   «         ¦  «        ‰ _        t%          |¦  «        dk    r|d	         nd ‰ _        d S )Nc              3  ó<   K  — | ]}t          |¦  «        d k    V — ŒdS )r«  NrÛ   )rC   rù  s     r8   rE   z'Builder.set_language.<locals>.<genexpr>‡  s-   è è € Ð NÐ N¸¥ X¡¤°!Ò!3Ð NÐ NÐ NÐ NÐ NÐ Nr:   ©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Þ  rA  c                ó   •— g | ]}|‰v¯|‘Œ	S rR   rR   )rC   ÚxÚcur_lookupss     €r8   rU   z(Builder.set_language.<locals>.<listcomp>²  s#   ø€ Ð#OÐ#OÐ#O¨!¸!À;Ð:NÐ:N AÐ:NÐ:NÐ:Nr:   c                ó   •— g | ]}|‰v¯|‘Œ	S rR   rR   )rC   r�  rÖ   s     €r8   rU   z(Builder.set_language.<locals>.<listcomp>´  s#   ø€ Ð&RÐ&RÐ&R¨QÀÈ'ÐAQÐAQ qÐAQÐAQÐAQr:   c              3  ó*   •K  — | ]}‰j         |fV — Œd S rB   )ra   )rC   rù  r�   s     €r8   rE   z'Builder.set_language.<locals>.<genexpr>»  s;   øè è € ð *
ð *
Ø)1ˆTŒ\˜8Ð$ð*
ð *
ð *
ð *
ð *
ð *
r:   rÚ   )rV   r.  rz   Úallr@  rA  rk   r	   ri   ra   ro   rw  rn   r°   rÁ   ræ   r–   rf   rÜ   rb   )	r�   r¼   rù  Úinclude_defaultÚrequiredÚ	languagesrÆ   r�  rÖ   s	   `      @@r8   Úset_languagezBuilder.set_language‚  s«  øøø€ Ý�h¥Ñ$Ô$ð 	'Ø!˜
ˆIˆIå˜X™œˆIØÐN�SÐ NÐ NÀIÐ NÑ NÔ NÑNÔNÐNÐNÐNõ �Ÿš yÑ1Ô1Ñ2Ô2ˆ	ØÔ!Ð%5Ð5Ð5Ý!ð&Ø(,Ô(>ñ?àñô ð ð
 Ô!Ð)Ý!ð2àñô ð ð
  ˆÔàð 	Ø%ð ð �Ø”| XÐ.�Ø˜dÔ5Ð5Ð5ØÝ%�oð !ŸšÑ(Ô(Ð(Ð(Øœ×*Ò*Ñ,Ô,Ð,Ð,ØÔ/°Ô4×:Ò:Ñ<Ô<Ð<Ð<ðð ñ	ô 	ð 	ð "ð 	ð 	ˆHØ”< ¨4Ô+AÐBˆCØ”n×(Ò(¨#¨a¬&°&¸#¸a¼&Ð)AÀ2ÑFÔFˆGð
 œ.×3Ò3°C¸Ñ<Ô<ˆKØ˜6Ò!Ð! _Ð!Ø×"Ò"Ð#OÐ#OÐ#OÐ#O¨wÐ#OÑ#OÔ#OÑPÔPÐPÐPà&RÐ&RÐ&RÐ&R°+Ð&RÑ&RÔ&R�”˜sÑ#àð àÔ*ð Ô'¨¬°xÐ(@ÑAøõ !*ð *
ð *
ð *
ð *
Ø5>ð*
ñ *
ô *
ñ !
ô !
ˆÔõ *-¨Y©¬¸1Ò)<Ð)<˜ 1œ˜À$ˆŒˆˆr:   c                ó"  — t          |¦  «        }| j                             |¦  «        }|�|S t          | j        ¦  «        dz   }|| j        |<   |D ]=}|| j        v r&| j        |         \  }}t          d|›d|›�|¦  «        ‚||f| j        |<   Œ>|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Ô1ˆØˆ?ØˆJÝ�$Ô)Ñ*Ô*¨QÑ.ˆØ*-ˆÔ Ñ'Øð 	6ð 	6ˆEØ˜Ô(Ð(Ð(ØÔ)¨%Ô0‘��3Ý%�oà49°E°E¸3¸3ð@àñô ð ð
 (+¨H oˆDÔ˜UÑ#Ð#Øˆ
r:   c                óœ   — t          |¦  «        }| 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  }|�|                       ||¦  «        }||dz  z  }|�#|                      ||¦  «        }|dz  }|| _        nd | _        || _        d S )Néÿ   r®  r¯  )r›  r�  rd   rc   )r�   r¼   rt  Ú
markAttachÚ
markFilterÚmarkAttachClassr¹   s          r8   Úset_lookup_flagzBuilder.set_lookup_flagÛ  sz   € Ø˜‘ˆØÐ!Ø"×6Ò6°xÀÑLÔLˆOØ˜_°Ñ1Ñ2ˆEØÐ!Ø ×2Ò2°8¸ZÑHÔHˆMØ˜D‘LˆEØ-:ˆDÔ*Ð*à-1ˆDÔ*Ø ˆÔÐÐr:   c                óB  — | j         dv rt          d| j         z  |¦  «        ‚| j         €t          d|¦  «        ‚|| j        k    r&| j        dk    r|                      |ddd¬¦  «         d S d | _        || _        d| _        d | _        |                      |ddd¬¦  «         d S )	Nr�  z5Script statements are not allowed within "feature %s"zAScript statements are not allowed within standalone lookup blocksrÞ  TF)r”  r•  r   )rk   r	   ra   rb   r—  ri   rc   rd   )r�   r¼   rÄ   s      r8   Ú
set_scriptzBuilder.set_scriptè  sÚ   € ØÔ!Ð%5Ð5Ð5Ý!ð&Ø(,Ô(>ñ?àñô ð ð
 Ô!Ð)Ý!ØVØñô ð ð �T”\Ò!Ð! d¤n¸Ò&>Ð&>ð ×Ò˜h¨ÀÈuÐÑUÔUÐUØˆFØˆÔØˆŒØˆÔØ)-ˆÔ&Ø×Ò˜( F¸DÈ5ÐÑQÔQÐQÐQÐQr:   c                óˆ   ‡ — g }|D ];}|�"|                      ˆ fd„|D ¦   «         ¦  «         Œ&|                      d¦  «         Œ<|S )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.
        Nc                óN   •— g | ]!}‰j                              |j        ¦  «        ‘Œ"S rR   )rh   r°   r<   )rC   r1  r�   s     €r8   rU   z1Builder.find_lookup_builders_.<locals>.<listcomp>  s,   ø€ ÐIÐIÐI¸�TÔ(×,Ò,¨Q¬VÑ4Ô4ÐIÐIÐIr:   )r»   )r�   rÖ   Úlookup_buildersrê   s   `   r8   Úfind_lookup_builders_zBuilder.find_lookup_builders_  sr   ø€ ð ˆØ!ð 	-ð 	-ˆJØÐ%Ø×&Ò&ØIÐIÐIÐI¸jÐIÑIÔIñô ð ð ð  ×&Ò& tÑ,Ô,Ð,Ð,ØÐr:   c                ó„   — |D ]<}| j                              |t          ¦   «         ¦  «                             |¦  «         Œ=d S rB   )r�   rÁ   r_   r�  )r�   r¼   r$  ÚcontourPointsrÞ   s        r8   Úadd_attach_pointszBuilder.add_attach_points  sM   € Øð 	Nð 	NˆEØÔ×)Ò)¨%µ±´Ñ7Ô7×>Ò>¸}ÑMÔMÐMÐMð	Nð 	Nr:   c                ót   — | j         dk    rt          d|¦  «        ‚| j                             ||f¦  «         d S )NrÓ   z9Feature references are only allowed inside "feature aalt")rk   r	   rq   r»   )r�   r¼   ÚfeatureNames      r8   Úadd_feature_referencezBuilder.add_feature_reference  sK   € ØÔ! VÒ+Ð+Ý!ØKÈXñô ð ð 	Ô×"Ò" H¨kÐ#:Ñ;Ô;Ð;Ð;Ð;r:   c                ó:   — | j                              |¦  «         d S rB   )ru   rx  ©r�   rD   s     r8   Úadd_featureNamezBuilder.add_featureName  s   € ØÔ×Ò˜sÑ#Ô#Ð#Ð#Ð#r:   c                ó:   — | j                              |¦  «         d S rB   )rw   rx  r±  s     r8   Úadd_cv_parameterzBuilder.add_cv_parameter   s   € ØÔ×Ò Ñ$Ô$Ð$Ð$Ð$r:   c                óZ   — || j         v r| j         |xx         dz  cc<   dS d| j         |<   dS )zbAdds new items to ``self.cv_num_named_params_``
        or increments the count of existing items.rÚ   N)ry   r±  s     r8   Úadd_to_cv_num_named_paramsz"Builder.add_to_cv_num_named_params#  sJ   € ð �$Ô+Ð+Ð+ØÔ% cÐ*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ð*Ð*à-.ˆDÔ% cÑ*Ð*Ð*r:   c                óF   — | j         |                              |¦  «         d S rB   )r{   r»   )r�   Ú	characterrD   s      r8   Úadd_cv_characterzBuilder.add_cv_character+  s$   € ØÔ˜CÔ ×'Ò'¨	Ñ2Ô2Ð2Ð2Ð2r:   c                ó6   — |r|||f| _         d S |||f| _        d S rB   )r€   r   )r�   rõ  rö  Úverticalr÷  s        r8   Úset_base_axiszBuilder.set_base_axis.  s4   € Øð 	=Ø$)¨7°FÐ#;ˆDÔ Ð Ð à%*¨G°VÐ$<ˆDÔ!Ð!Ð!r:   c                óÆ   — | j         dk    rt          d| j         z  |¦  «        ‚||||g| _        | j        D ]*\  }}||| j         f}| j                             |g ¦  «         Œ+d S )Nr  z9Parameters statements are not allowed within "feature %s")rk   r	   r|   rf   rn   rÁ   )	r�   r¼   r  r  r  r  rÄ   rÅ   rÆ   s	            r8   Úset_size_parameterszBuilder.set_size_parameters4  s”   € ð Ô! VÒ+Ð+Ý!ð&Ø(,Ô(>ñ?àñô ð ð
 ",¨[¸*ÀhÐ OˆÔØ Ô1ð 	/ð 	/‰LˆF�DØ˜4 Ô!7Ð8ˆCØŒN×%Ò% c¨2Ñ.Ô.Ð.Ð.ð	/ð 	/r:   c                ó�  — |                       |t          |¬¦  «        }|                     ¦   «         D ]“\  }}||j        v r{||j        |         k    rDt                               dd                     |¦  «        d                     |¦  «        |¦  «         n&t          dd                     |¦  «        z  |¦  «        ‚||j        |<   Œ”d S )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Æ   rt  s         r8   Úadd_any_subst_zBuilder.add_any_subst_D  s×   € Ø×!Ò! (­OÀWÐ!ÑMÔMˆØ!Ÿ-š-™/œ/ð 	(ð 	(‰JˆC�Ø�f”nÐ$Ð$Ø˜FœN¨3Ô/Ò/Ð/Ý—H’HØQØŸ	š	 #™œØŸ	š	 %Ñ(Ô(Ø ñ	ô ð ð õ *Ø?À$Ç)Â)ÈCÁ.Ä.ÑPØ ñô ð ð #(ˆFŒN˜3ÑÐð	(ð 	(r:   c                ó`  — | j         dk    rP|                     ¦   «         D ]9\  }}| j                             |g ¦  «        }||vr|                     |¦  «         Œ:d S |s|s|r|                      ||||¦  «         d S |                      |d„ |                     ¦   «         D ¦   «         ¦  «         d S )NrÓ   c                ó   — i | ]
\  }}|f|f“ŒS rR   rR   )rC   rÆ   rt  s      r8   rÒ   z,Builder.add_single_subst.<locals>.<dictcomp>d  s"   € Ð@Ð@Ð@¡* # uˆcˆV�e�XÐ@Ð@Ð@r:   )rk   râ   rs   rÁ   r»   Úadd_single_subst_chained_rÂ  )	r�   r¼   ÚprefixÚsuffixrÌ   Ú
forceChainÚ
from_glyphÚto_glyphrë   s	            r8   Úadd_single_substzBuilder.add_single_substW  sÚ   € ØÔ! VÒ+Ð+Ø(/¯ª©¬ð *ð *Ñ$�
˜HØÔ,×7Ò7¸
ÀBÑGÔG�Ø 4Ð'Ð'Ø—K’K Ñ)Ô)Ð)øØˆFØð 	�Vð 	˜zð 	Ø×*Ò*¨8°V¸VÀWÑMÔMÐMØˆFà×ÒØØ@Ð@°·²±´Ð@Ñ@Ô@ñ	
ô 	
ð 	
ð 	
ð 	
r:   c                ó”   — |s|s|r|                       |||||¦  «         d S |                      ||ft          |¦  «        i¦  «         d S rB   )Úadd_multi_subst_chained_rÂ  r?  )r�   r¼   rÆ  rÞ   rÇ  ÚreplacementsrÈ  s          r8   Úadd_multiple_substzBuilder.add_multiple_substh  sr   € ð ð 	�Vð 	˜zð 	Ø×)Ò)¨(°F¸EÀ6È<ÑXÔXÐXØˆFØ×ÒØØˆX•u˜\Ñ*Ô*Ð+ñ	
ô 	
ð 	
ð 	
ð 	
r:   c                óø  ‡— | j         dk    r>| j                             |g ¦  «        Š‰                     ˆfd„|D ¦   «         ¦  «         d S |s|rj|                      |t
          ¦  «        }|                     |¦  «        }|€|                      |t          ¦  «        }|  	                    |||hg||g¦  «         n|                      |t          ¦  «        }||j
        v rt          d|z  |¦  «        ‚||j
        |<   d S )NrÓ   c              3  ó$   •K  — | ]
}|‰v¯|V — Œd S rB   rR   )rC   rÐ   rë   s     €r8   rE   z.Builder.add_alternate_subst.<locals>.<genexpr>w  s'   øè è € Ð@Ð@˜a°!¸4°-°-˜°-°-°-°-Ð@Ð@r:   z)Already defined alternates for glyph "%s")rk   rs   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_substt  s$  ø€ ØÔ! VÒ+Ð+ØÔ(×3Ò3°E¸2Ñ>Ô>ˆDØ�KŠKÐ@Ð@Ð@Ð@ ;Ð@Ñ@Ô@Ñ@Ô@Ð@ØˆFØð 	G�Vð 	GØ×$Ò$ XÕ/GÑHÔHˆEØ×9Ò9¸%Ñ@Ô@ˆFØˆ~Ø×1Ò1°(Õ<QÑRÔR�Ø×%Ò% e¨V°u°g°YÀÈÈÑQÔQÐQÐQà×%Ò% hÕ0EÑFÔFˆFØ�FÔ%Ð%Ð%Ý!Ø;¸eÑCÀXñô ð ð $/ˆÔ˜%Ñ Ð Ð r:   c                óä   ‡— |s|s|r|                       ||||‰¦  «         d S t          |¦  «        st          d|¦  «        ‚|                      |ˆfd„t	          j        |Ž D ¦   «         ¦  «         d S )Nú!Empty glyph class in substitutionc                ó   •— i | ]}|‰f“ŒS rR   rR   )rC   rÐ   rÔ  s     €r8   rÒ   z.Builder.add_ligature_subst.<locals>.<dictcomp>›  s   ø€ ÐCÐCÐC 1ˆQ��ÐCÐCÐCr:   )Úadd_ligature_subst_chained_r“  r	   rÂ  Ú	itertoolsÚproduct)r�   r¼   rÆ  r$  rÇ  rÔ  rÈ  s        ` r8   Úadd_ligature_substzBuilder.add_ligature_subst‰  s«   ø€ ð ð 	�Vð 	˜zð 	Ø×,Ò,Ø˜& &¨&°+ñô ð ð ˆFÝ�6‰{Œ{ð 	QÝ!Ð"EÀxÑPÔPÐPð 	×ÒØØCÐCÐCÐC­	Ô(9¸6Ð(BÐCÑCÔCñ	
ô 	
ð 	
ð 	
ð 	
r:   c                ó  — t          |¦  «        dk    rÉ| j        rÂ| j        d         j        s°| j        d         }t          |j        ¦  «        dk    r‹|j        |k    r€|j        |k    ru|j        |k    rjt          |j        d         t          ¦  «        s"t          |j        d         ¦  «        |j        d<   |j        d          	                    |d         ¦  «         dS | j         
                    t          ||||¦  «        ¦  «         dS )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Ö   rV   r_   r�  r»   r%   )rÕ  rÆ  r$  rÇ  rÖ   Úlasts         r8   rÓ  zBuilder._add_contextual_rulež  sð   € õ ˆv‰;Œ;˜!ÒÐ ¤Ð°E´KÀ´OÔ4UÐØ”;˜r”?ˆDå�D”KÑ Ô  AÒ%Ð%Ø”K 6Ò)Ð)Ø”K 6Ò)Ð)Ø”L GÒ+Ð+å! $¤+¨a¤.µ#Ñ6Ô6ð 9Ý%(¨¬°Q¬Ñ%8Ô%8�D”K ‘NØ”˜A”×%Ò% f¨Q¤iÑ0Ô0Ð0Ø�ØŒ×ÒÕ.¨v°v¸vÀwÑOÔOÑPÔPÐPÐPÐPr:   c                ó  — t          |¦  «        rt          |¦  «        rt          |¦  «        st          d|¦  «        ‚|                      |t          ¦  «        }|                      |¦  «        }|                      |||||¦  «         d S ©Nú,Empty glyph class in contextual substitution)r“  r	   rÍ   r   r©  rÓ  ©r�   r¼   rÆ  r$  rÇ  rÖ   rÂ   r0  s           r8   Úadd_chain_context_substzBuilder.add_chain_context_substµ  sŽ   € Ý�6‰{Œ{ð 	¥# f¡+¤+ð 	µS¸±[´[ð 	Ý!Ø>Àñô ð ð ×!Ò! (Õ,DÑEÔEˆØ×-Ò-¨gÑ6Ô6ˆØ×!Ò! &¨&°&¸&À(ÑKÔKÐKÐKÐKr:   c                ó¸  — |rt          |¦  «        rt          |¦  «        st          d|¦  «        ‚|                      |t          ¦  «        }|                     |t
          ¦  «        }|€|                      |t
          ¦  «        }|j                             |¦  «         t          | 
                    ¦   «         ¦  «        }|                      |||g||g¦  «         d S 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œkð 	µ°V±´ð 	Ý!Ø>Àñô ð ð
 × Ò  Õ+CÑDÔDˆØ×(Ò(¨Õ2DÑEÔEˆØˆ;Ø×*Ò*¨8Õ5GÑHÔHˆCØŒ×Ò˜7Ñ#Ô#Ð#Ý�7—<’<‘>”>Ñ"Ô"ˆØ×!Ò! %¨°$°¸À#ÀÑGÔGÐGÐGÐGr:   c                óX  — t          |¦  «        rt          |¦  «        st          d|¦  «        ‚|                      |t          ¦  «        }|                     ||it
          ¦  «        }|€|                      |t
          ¦  «        }||j        |<   |                      |||hg||g¦  «         d S 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ÔDˆØ×(Ò(¨%°Ð)>Õ@TÑUÔUˆØˆ;Ø×*Ò*¨8Õ5IÑJÔJˆCØ)ˆŒ�EÑà×!Ò! %¨°5°'°¸FÀSÀEÑJÔJÐJÐJÐJr:   c           
     ó   — t          |¦  «        rt          |¦  «        st          d|¦  «        ‚|                      |t          ¦  «        }|                     ||¦  «        }|€|                      |t          ¦  «        }t          j        |Ž D ]G}|j	         
                    ||¦  «        }	|	|k    rt          d|› d|	› d|› d�|¦  «        ‚||j	        |<   ŒH|j                             t          ||||g¦  «        ¦  «         d S )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ÔDˆØ×1Ò1°&¸+ÑFÔFˆØˆ;Ø×*Ò*¨8Õ5IÑJÔJˆCåÔ" FÐ+ð 	+ð 	+ˆAØ”}×(Ò(¨¨KÑ8Ô8ˆHØ˜;Ò&Ð&Ý%Øe¸ÐeÐeÀhÐeÐeÐWbÐeÐeÐeØñô ð ð
  +ˆCŒM˜!ÑÐàŒ×ÒÕ.¨v°v¸vÈÀuÑMÔMÑNÔNÐNÐNÐNr:   c                óš   — |st          d|¦  «        ‚|                      |t          ¦  «        }|j                             |||f¦  «         d S )NrØ  )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õ  sU   € Øð 	QÝ!Ð"EÀxÑPÔPÐPØ×!Ò! (Õ,JÑKÔKˆØŒ×Ò˜Z¨°WÐ=Ñ>Ô>Ð>Ð>Ð>r:   c                ó„  — |s|s|r|                       ||||¦  «         d S |                      |t          ¦  «        }|D ]�\  }}|st          d|¦  «        ‚|                      ||d¬¦  «        }	|D ]O}
	 |                     ||
|	¦  «         Œ# t          $ r(}t          t          |¦  «        |j        ¦  «        |‚d }~ww xY wŒ‚d S )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$  rt  ÚotValueRecordrÞ   r3  s               r8   Úadd_single_poszBuilder.add_single_posþ  s)  € Øð 	I�Vð 	I˜zð 	IØ×(Ò(¨°6¸6À3ÑGÔGÐGÐGÐGà×%Ò% hÕ0@ÑAÔAˆFØ!$ð Ið I‘�˜Øð Ý)Ø?Àñô ð ð !%× <Ò <Ø˜e°Eð !=ñ !ô !�ð $ð Ið I�EðIØŸš x°¸ÑFÔFÐFÐFøÝ+ð Ið Ið IÝ-­c°!©f¬f°a´jÑAÔAÀqÐHøøøøðIøøøðIðIð Is   Á2B
Â

B<Â#B7Â7B<c                óš  — |r|st          d|¦  «        ‚|                      |t          ¦  «        }|                      ||d¬¦  «        }|                      ||d¬¦  «        }t	          t          t          |¦  «        ¦  «        ¦  «        }	t	          t          t          |¦  «        ¦  «        ¦  «        }
|                     ||	||
|¦  «         d S ©Nrö  Tr÷  )r	   rÍ   r#   rú  r?  r˜   r_   ÚaddClassPair)r�   r¼   Úglyphclass1Úvalue1Úglyphclass2Úvalue2rÂ   Úv1Úv2Úcls1Úcls2s              r8   Úadd_class_pair_poszBuilder.add_class_pair_pos  sÉ   € Øð 	U +ð 	UÝ!Ð"IÈ8ÑTÔTÐTØ×!Ò! (­NÑ;Ô;ˆØ×)Ò)¨(°FÈ4Ð)ÑPÔPˆØ×)Ò)¨(°FÈ4Ð)ÑPÔPˆÝ•V�C Ñ,Ô,Ñ-Ô-Ñ.Ô.ˆÝ•V�C Ñ,Ô,Ñ-Ô-Ñ.Ô.ˆØ×Ò˜H d¨B°°bÑ9Ô9Ð9Ð9Ð9r:   c                óö   — |r|st          d|¦  «        ‚|                      |t          ¦  «        }|                      ||d¬¦  «        }|                      ||d¬¦  «        }|                     |||||¦  «         d S r   )r	   rÍ   r#   rú  ÚaddGlyphPair)	r�   r¼   Úglyph1r  Úglyph2r  rÂ   r  r  s	            r8   Úadd_specific_pair_poszBuilder.add_specific_pair_pos  s�   € Øð 	U˜Vð 	UÝ!Ð"IÈ8ÑTÔTÐTØ×!Ò! (­NÑ;Ô;ˆØ×)Ò)¨(°FÈ4Ð)ÑPÔPˆØ×)Ò)¨(°FÈ4Ð)ÑPÔPˆØ×Ò˜H f¨b°&¸"Ñ=Ô=Ð=Ð=Ð=r:   c           	     óà   — |st          d|¦  «        ‚|                      |t          ¦  «        }|                     |||                      ||¦  «        |                      ||¦  «        ¦  «         d S ©Nrö  )r	   rÍ   r   Úadd_attachmentÚmakeOpenTypeAnchor)r�   r¼   Ú
glyphclassÚentryAnchorÚ
exitAnchorrÂ   s         r8   Úadd_cursive_poszBuilder.add_cursive_pos%  s€   € Øð 	UÝ!Ð"IÈ8ÑTÔTÐTØ×!Ò! (Õ,=Ñ>Ô>ˆØ×ÒØØØ×#Ò# H¨kÑ:Ô:Ø×#Ò# H¨jÑ9Ô9ñ		
ô 	
ð 	
ð 	
ð 	
r:   c                ó  — |                       |t          ¦  «        }|                      |||¦  «         |st          d|¦  «        ‚|D ]C\  }}|                      ||¦  «        }|D ]%}||j                             |i ¦  «        |j        <   Œ&ŒDd S 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_pos1  s·   € Ø×"Ò" 8Õ-?Ñ@Ô@ˆØ�Š˜ '¨5Ñ1Ô1Ð1Øð 	UÝ!Ð"IÈ8ÑTÔTÐTØ%*ð 	Rð 	RÑ!ˆJ˜	Ø×2Ò2°8¸ZÑHÔHˆLØð Rð R�ØEQ�”×(Ò(¨¨rÑ2Ô2°9´>ÑBÐBðRð	Rð 	Rr:   c                ó4  — |                       |t          ¦  «        }g }|st          d|¦  «        ‚|D ]V}i }|                      |||¦  «         |D ]#\  }}	|                      ||¦  «        ||	j        <   Œ$|                     |¦  «         ŒW|D ]}
||j        |
<   Œd S 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Õ->Ñ?Ô?ˆØÐØð 	UÝ!Ð"IÈ8ÑTÔTÐTØð 	-ð 	-ˆEØˆGØ�OŠO˜H g¨uÑ5Ô5Ð5Ø(-ð Wð WÑ$�	˜9Ø*.×*AÒ*AÀ(ÈIÑ*VÔ*V�˜	œÑ'Ð'Ø×#Ò# GÑ,Ô,Ð,Ð,Øð 	8ð 	8ˆEØ'7ˆGÔ˜eÑ$Ð$ð	8ð 	8r:   c                ó  — |                       |t          ¦  «        }|                      |||¦  «         |st          d|¦  «        ‚|D ]C\  }}|                      ||¦  «        }|D ]%}||j                             |i ¦  «        |j        <   Œ&ŒDd S 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_posK  s»   € Ø×"Ò" 8Õ-?Ñ@Ô@ˆØ�Š˜ '¨5Ñ1Ô1Ð1Øð 	UÝ!Ð"IÈ8ÑTÔTÐTØ%*ð 	!ð 	!Ñ!ˆJ˜	Ø×2Ò2°8¸ZÑHÔHˆLØ%ð !ð !�ð !ð Ô!×,Ò,¨X°rÑ:Ô:Ø”Nñð ð!ð	!ð 	!r:   c                ó  — t          |¦  «        rt          |¦  «        rt          |¦  «        st          d|¦  «        ‚|                      |t          ¦  «        }|                      |¦  «        }|                      |||||¦  «         d S )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_posX  sŽ   € Ý�6‰{Œ{ð 	¥# f¡+¤+ð 	µS¸±[´[ð 	Ý!ØBÀHñô ð ð ×!Ò! (Õ,BÑCÔCˆØ×-Ò-¨gÑ6Ô6ˆØ×!Ò! &¨&°&¸&À(ÑKÔKÐKÐKÐKr:   c                óò  — |rt          |¦  «        rt          |¦  «        st          d|¦  «        ‚|                      |t          ¦  «        }g }|j        D ]\  }}}}|                     |¦  «         Œg }	|D ]¯\  }
}|€|	                     d ¦  «         Œ|                      ||d¬¦  «        }|                     ||
|¦  «        }|€0|  	                    |t          ¦  «        }|                     |¦  «         |
D ]}|                     |||¦  «         Œ|	                     |¦  «         Œ°t          |¦  «        t          |	¦  «        k    sJ ||	f¦   «         ‚d„ |D ¦   «         }
|                      |||
||	¦  «         d S )Nr)  Fr÷  c                ó   — g | ]\  }}|‘ŒS rR   rR   )rC   rÐ   rr  s      r8   rU   z3Builder.add_single_pos_chained_.<locals>.<listcomp>{  s   € Ð$Ð$Ð$™˜˜1�!Ð$Ð$Ð$r:   )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Þ   s                  r8   rù  zBuilder.add_single_pos_chained_a  s»  € Øð 	�#˜f™+œ+ð 	­S°©[¬[ð 	Ý!ØBÀHñô ð ð × Ò  Õ+AÑBÔBˆØˆØ %¤ð 	$ð 	$ÑˆAˆq�!�WØ�NŠN˜7Ñ#Ô#Ð#Ð#ØˆØ ð 	ð 	‰MˆF�EØˆ}Ø—’˜DÑ!Ô!Ð!ØØ×2Ò2Ø˜%°ð 3ñ ô ˆGð ×1Ò1°'¸6À7ÑKÔKˆCØˆ{Ø×.Ò.¨xÕ9IÑJÔJ�Ø—’˜sÑ#Ô#Ð#Øð 6ð 6�Ø—’˜H e¨WÑ5Ô5Ð5Ð5Ø�KŠK˜ÑÔÐÐÝ�3‰xŒx�3˜t™9œ9Ò$Ð$Ð$ s¨D kÑ$Ô$Ð$Ø$Ð$ Ð$Ñ$Ô$ˆØ×!Ò! %¨°¸ÀÑFÔFÐFÐFÐFr:   c                ój  — |D ]¯\  }}|j         D ]¢}|j                             ¦   «         D ]†}||j        vr?|                      |t          j        |j        ¦  «        ¦  «        }|j        |f|j        |<   ŒJ|j        |         d         }	|j        |	k    rt          d|›d|	›d|j        ›�|¦  «        ‚Œ‡Œ£Œ°dS )z)Helper for add_mark_{base,liga,mark}_pos.r   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
             r8   r  zBuilder.add_marks_~  s   € à!ð 	ð 	‰LˆAˆyØ )Ô 5ð ð �Ø(Ô/×8Ò8Ñ:Ô:ð ð �DØ =Ô#6Ð6Ð6Ø'+×'>Ò'>Ø$¥d¤m°LÔ4GÑ&HÔ&Hñ(ô (˜ð 6?´^À\Ð4R˜Ô+¨DÑ1Ð1à,9Ô,?ÀÔ,EÀaÔ,HÐ)Ø$œ>Ð->Ò>Ð>Ý"1 /à#' 4 4Ð):Ð):Ð):¸I¼N¸Nð!Là (ñ#ô #ð ð ?ððð	ð 	r:   c                ó:   — | j                              |¦  «         d S rB   )ri   Úadd_subtable_break)r�   r¼   s     r8   r:  zBuilder.add_subtable_break‘  s   € ØÔ×+Ò+¨HÑ5Ô5Ð5Ð5Ð5r:   c                ó–   — | j                              |d¦  «        \  }}|r||k    rt          d|›d|›�|¦  «        ‚||f| j         |<   d S )N©NNr™  z& was assigned to a different class at )r„   r°   r	   )r�   r¼   rÞ   Ú
glyphClassÚoldClassÚoldLocations         r8   ÚsetGlyphClass_zBuilder.setGlyphClass_”  sr   € Ø $Ô 4× 8Ò 8¸ÀÑ MÔ MÑˆ�+Øð 	˜ JÒ.Ð.Ý!�/à�5�5˜+˜+ð'àñô ð ð
 (2°8Ð&<ˆÔ˜UÑ#Ð#Ð#r:   c                óæ   — |D ]}|                       ||d¦  «         Œ|D ]}|                       ||d¦  «         Œ|D ]}|                       ||d¦  «         Œ|D ]}|                       ||d¦  «         Œd S )NrÚ   rA  r’  r«  )r@  )r�   r¼   Ú
baseGlyphsÚligatureGlyphsÚ
markGlyphsÚcomponentGlyphsrÞ   s          r8   Úadd_glyphClassDefzBuilder.add_glyphClassDefž  s¶   € ð  ð 	4ð 	4ˆEØ×Ò ¨%°Ñ3Ô3Ð3Ð3Ø#ð 	4ð 	4ˆEØ×Ò ¨%°Ñ3Ô3Ð3Ð3Øð 	4ð 	4ˆEØ×Ò ¨%°Ñ3Ô3Ð3Ð3Ø$ð 	4ð 	4ˆEØ×Ò ¨%°Ñ3Ô3Ð3Ð3ð	4ð 	4r:   c                ó6   — |D ]}|| j         vr
|| j         |<   Œd S rB   )rƒ   ©r�   r¼   r$  ÚcaretsrÞ   s        r8   Úadd_ligatureCaretByIndex_z!Builder.add_ligatureCaretByIndex_ª  s7   € Øð 	5ð 	5ˆEØ˜DÔ0Ð0Ð0Ø.4�Ô$ UÑ+øð	5ð 	5r:   c                ór   — t          |t          ¦  «        s|S |                      ||¦  «        \  }}|�||fS |S rB   )rV   r   ÚmakeVariablePos)r�   r¼   ÚcaretÚdefaultÚdevices        r8   ÚmakeLigCaretzBuilder.makeLigCaret¯  sH   € Ý˜%¥Ñ0Ô0ð 	ØˆLØ×.Ò.¨x¸Ñ?Ô?‰ˆ�ØÐØ˜VÐ$Ð$Øˆr:   c                óX   ‡ ‡— ˆˆ fd„|D ¦   «         }|D ]}|‰ j         vr
|‰ j         |<   Œd S )Nc                ó<   •— g | ]}‰                      ‰|¦  «        ‘ŒS rR   )rP  )rC   rM  r¼   r�   s     €€r8   rU   z3Builder.add_ligatureCaretByPos_.<locals>.<listcomp>¸  s)   ø€ ÐIÐIÐI¸�$×#Ò# H¨eÑ4Ô4ÐIÐIÐIr:   )r‚   rH  s   ``   r8   Úadd_ligatureCaretByPos_zBuilder.add_ligatureCaretByPos_·  sU   øø€ ØIÐIÐIÐIÐIÀ&ÐIÑIÔIˆØð 	5ð 	5ˆEØ˜DÔ0Ð0Ð0Ø.4�Ô$ UÑ+øð	5ð 	5r:   c                óD   — | j                              |||||g¦  «         d S rB   )r~   r»   )r�   r¼   r
  r.  r/  r0  r1  s          r8   Úadd_name_recordzBuilder.add_name_record½  s)   € ØŒ×Ò˜F J°	¸6À6ÐJÑKÔKÐKÐKÐKr:   c                ó   — || j         |<   d S rB   )rˆ   ©r�   rÆ   rt  s      r8   Úadd_os2_fieldzBuilder.add_os2_fieldÀ  s   € ØˆŒ	�#‰ˆˆr:   c                ó   — || j         |<   d S rB   )r‰   rW  s      r8   Úadd_hhea_fieldzBuilder.add_hhea_fieldÃ  ó   € ØˆŒ
�3‰ˆˆr:   c                ó   — || j         |<   d S rB   )rŠ   rW  s      r8   Úadd_vhea_fieldzBuilder.add_vhea_fieldÆ  r[  r:   c                ób  ‡‡— d| j         vrt          d|¦  «        ‚|| j        v rt          d|› d�|¦  «        ‚d„ | j        D ¦   «         Šˆfd„|                     ¦   «         D ¦   «         }d| j         v r2| j         d         j        Šˆfd„|                     ¦   «         D ¦   «         }|| j        |<   d S )	NrP   z?Cannot add feature variations to a font without an 'fvar' tablezCondition set 'z/' has the same name as a previous condition setc                óB   — i | ]}|j         |j        |j        |j        f“ŒS rR   )rS   ÚminValueÚdefaultValueÚmaxValue)rC   rô  s     r8   rÒ   z,Builder.add_conditionset.<locals>.<dictcomp>×  s:   € ð 
ð 
ð 
àð ŒL˜4œ=¨$Ô*;¸T¼]ÐKð
ð 
ð 
r:   c           	     óv   •— i | ]5\  }\  }}|t          |‰|         ¦  «        t          |‰|         ¦  «        f“Œ6S rR   )r,   )rC   rD   ÚbottomÚtopÚaxisMaps       €r8   rÒ   z,Builder.add_conditionset.<locals>.<dictcomp>Ü  sZ   ø€ ð 
ð 
ð 
ñ
 #�‘]�f˜cð	 Ý˜v w¨s¤|Ñ4Ô4Ý˜s G¨C¤LÑ1Ô1ðð
ð 
ð 
r:   Úavarc                óR   •‡— i | ]"\  Š}‰t          ˆˆfd „|D ¦   «         ¦  «        “Œ#S )c              3  óP   •K  — | ] }‰‰v rt          |‰‰         ¦  «        n|V — Œ!d S rB   )r-   )rC   rr  rô  rÌ   s     €€r8   rE   z6Builder.add_conditionset.<locals>.<dictcomp>.<genexpr>ê  sU   øè è € ð ð àð =AÀG¸O¸OÕ& q¨'°$¬-Ñ8Ô8Ð8ÐQRðð ð ð ð ð r:   )r?  )rC   Úcondition_rangerô  rÌ   s     @€r8   rÒ   z,Builder.add_conditionset.<locals>.<dictcomp>é  sg   øø€ ð ð ð ñ
 *�D˜/ð	 •eð ð ð ð ð à,ðñ ô ñ ô ðð ð r:   )r6   r	   rŒ   r\   râ   Úsegments)r�   r¼   rÆ   rt  rf  rÌ   s       @@r8   Úadd_conditionsetzBuilder.add_conditionsetÉ  s  øø€ Ø˜œÐ"Ð"Ý!ØQØñô ð ð
 �$Ô%Ð%Ð%Ý!ØV #ÐVÐVÐVØñô ð ð
ð 
àœ	ð
ñ 
ô 
ˆð

ð 
ð 
ð 
ð
 ',§k¢k¡m¤mð
ñ 
ô 
ˆð �T”YÐÐØ”i Ô'Ô0ˆGðð ð ð ð
 .3¯[ª[©]¬]ðñ ô ˆEð $)ˆÔ˜CÑ Ð Ð r:   Ú	varscalarr   Úreturnútuple[int, int | None]c                óN  — | j         �| j        €t          d|¦  «        ‚|j        s| j                             |¦  «        dfS 	 | j                             || j         ¦  «        \  }}n## t          $ r}t          d|¦  «        |‚d}~ww xY wd}|�|dk    rt          |¦  «        }||fS )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   ÿÿ )r[   r^   r	   Ú	does_varyÚdefault_valueÚadd_to_variation_storer(   r*   )r�   r¼   rm  rN  ré  r3  rO  s          r8   rL  zBuilder.makeVariablePosó  sê   € ð ÔÐ'¨4Ô+>Ð+FÝ!ØGÈñô ð ð Ô"ð 	FØÔ&×4Ò4°YÑ?Ô?ÀÐEÐEð	Ø!Ô0×GÒGØ˜4Ô/ñô ‰NˆG�U�Uøõ ð 	ð 	ð 	Ý!Ø>Àñô àðøøøøð	øøøð
 ˆØÐ ¨*Ò!4Ð!4Ý% eÑ,Ô,ˆFà˜ˆÐs   Á#A' Á'
BÁ1BÂBc                óà   — d }t          |t          ¦  «        s'|�!t          j        t	          |¦  «        ¦  «        }||fS |                      ||¦  «        \  }}|�|�t          d|¦  «        ‚||fS )Nú4Can't define a device coordinate and variable scalar)rV   r   rŸ  ÚbuildDevicer@  rL  r	   )r�   rm  ÚdeviceTabler¼   rO  rN  s         r8   ÚmakeAnchorPoszBuilder.makeAnchorPos  sˆ   € ØˆÝ˜)¥^Ñ4Ô4ð 	%ØÐ&Ýœ­¨kÑ):Ô):Ñ;Ô;�Ø˜fÐ$Ð$Ø×.Ò.¨x¸ÑCÔC‰ˆ�ØÐ +Ð"9Ý!ØFÈñô ð ð ˜ˆÐr:   c                ó–  — |€dS d\  }}|j         �&t          j        t          |j         ¦  «        ¦  «        }|j        �&t          j        t          |j        ¦  «        ¦  «        }|                      |j        |j         |¦  «        \  }}|                      |j        |j        |¦  «        \  }}t          j        |||j	        ||¦  «        }|S )zast.Anchor --> otTables.AnchorNr<  )
ÚxDeviceTablerŸ  rv  r@  ÚyDeviceTablerx  r�  ÚyÚbuildAnchorÚcontourpoint)r�   r¼   r4  ÚdeviceXÚdeviceYr�  r|  Ú	otlanchors           r8   r  zBuilder.makeOpenTypeAnchor  s¼   € àˆ>Ø�4Ø%Ñˆ�ØÔÐ*Ý”o¥d¨6Ô+>Ñ&?Ô&?Ñ@Ô@ˆGØÔÐ*Ý”o¥d¨6Ô+>Ñ&?Ô&?Ñ@Ô@ˆGØ×'Ò'¨¬°&Ô2EÀxÑPÔP‰
ˆˆ7Ø×'Ò'¨¬°&Ô2EÀxÑPÔP‰
ˆˆ7Ý”O A q¨&Ô*=¸wÈÑPÔPˆ	ØÐr:   c                ó’   — i | ]D\  }}}}|                      d ¦  «        °|d                              ¦   «         |dd…         z   ||f“ŒES )ÚReservedr   rÚ   N)Ú
startswithÚlower)rC   r  r<   ÚisDevices       r8   rÒ   zBuilder.<dictcomp>,  sb   € ð ð ð á ˆAˆt�X˜qØ�Š˜zÑ*Ô*ðØˆQŒ�Š‰Œ˜$˜q˜r˜rœ(Ñ" T¨8Ð$4ðð ð r:   c                ó:  — |sdS i }| j                              ¦   «         D ]Ó\  }\  }}t          ||d¦  «        }|sŒ|r%t          j        t          |¦  «        ¦  «        ||<   ŒCt          |t          ¦  «        rv|dd…         dz   }	|	d                              ¦   «         |	dd…         z   }
t          ||
¦  «        rt          d|¦  «        ‚|  
                    ||¦  «        \  ||<   }|�|||	<   ŒÎ|||<   ŒÔ|r|s|j        rddinddi}t          j        |¦  «        }|S )	z&ast.ValueRecord --> otBase.ValueRecordNr   r«  ÚDevicerÚ   ru  ÚYAdvanceÚXAdvance)Ú_VALUEREC_ATTRSrâ   r;  rŸ  rv  r@  rV   r   r…  r	   rL  r»  Ú
buildValue)r�   r¼   rr  rø  ÚvrÚastNameÚotNamer†  ÚvalÚotDeviceNameÚfeaDeviceNamerO  ÚvalRecs                r8   rú  zBuilder.makeOpenTypeValueRecord2  se  € àð 	Ø�4àˆØ+/Ô+?×+EÒ+EÑ+GÔ+Gð 	!ð 	!Ñ'ˆGÑ'�f˜hÝ˜!˜W dÑ+Ô+ˆCØð ØØð !Ý œ_­T°#©Y¬YÑ7Ô7��6‘
�
Ý˜C¥Ñ0Ô0ð !Ø% a¨ cœ{¨XÑ5�Ø ,¨Q¤× 5Ò 5Ñ 7Ô 7¸,ÀqÀrÀrÔ:JÑ J�Ý˜1˜mÑ,Ô,ð Ý)ØNÐPXñô ð ð &*×%9Ò%9¸(ÀCÑ%HÔ%HÑ"��6‘
˜FØÐ%Ø'-�B�|Ñ$øà ��6‘
�
àð 	D "ð 	DØ$%¤JÐC�*˜a��°ZÀ°OˆBÝ” Ñ#Ô#ˆØˆr:   ©NFrB   )F)rm  r   rn  ro  )bÚ__name__Ú
__module__Ú__qualname__r–   r•   rŽ   r5   r¿   rÇ   rÍ   rš   r›   rœ   r�   r  r)  rž   rŸ   rv  r  r�  r    rk  r­   rÚ  rÑ  r¬   r   r  r  r±   r4  r¡   r¢   rB  r,  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Ö  rÝ  ÚstaticmethodrÓ  ræ  rÅ  rÍ  rÚ  rô  rþ  r
  r  r  r  r#  r'  r*  rù  r  r:  r@  rF  rJ  rP  rS  rU  rX  rZ  r]  rl  rL  rx  r  r   ÚvalueRecordFormatr‹  rú  rR   r:   r8   r4   r4   `   s   € € € € € Ø�ið  ð  ð
ð ñ  ô  ñ ô €Oð H!ð H!ð H!ðT<ð <ð <ð <ð|ð ð ð>ð >ð >ð
 ð  ð  ð  ð:1*ð 1*ð 1*ðf
0ð 
0ð 
0ð2ð 2ð 2ð":ð :ð :ð$ð $ð $ð-ð -ð -ð^ð ð ð4RUð RUð RUðh(ð (ð (ð 4ð 4ð 4ð?ð ?ð ?ð$X
ð X
ð X
ðt+4ð +4ð +4ðZ
ð 
ð 
ðð ð ð*ð *ð *ðX!ð !ð !ðFð ð ð$ð ð ð>ð >ð >ðNð Nð Nð!ð !ð !ðFgð gð gðRð ð ð.ð ð ðð ð ð?ð ?ð ?ð2	1ð 	1ð 	1ð5ð 5ð 5ð 5ð(	$ð 	$ð 	$ð2ð 2ð 2ð 2ð&2ð 2ð 2ðHð Hð Hð&ð &ð &ð<Gð <Gð <Gð|ð ð ð$ð ð ð!ð !ð !ðRð Rð Rð4ð ð ð Nð Nð Nð<ð <ð <ð$ð $ð $ð%ð %ð %ð/ð /ð /ð3ð 3ð 3ð >@ð =ð =ð =ð =ð/ð /ð /ð (ð (ð (ð&
ð 
ð 
ð$ INð	
ð 	
ð 	
ð 	
ð/ð /ð /ð*
ð 
ð 
ð* ðQð Qñ „\ðQð,Lð Lð LðHð Hð HðKð Kð KðOð Oð Oð4?ð ?ð ?ðIð Ið Ið(:ð :ð :ð>ð >ð >ð	
ð 	
ð 	
ðRð Rð Rð8ð 8ð 8ð
!ð 
!ð 
!ðLð Lð LðGð Gð Gð:ð ð ð&6ð 6ð 6ð=ð =ð =ð
4ð 
4ð 
4ð5ð 5ð 5ð
ð ð ð5ð 5ð 5ðLð Lð Lðð ð ð ð  ð  ð ð  ð  ð()ð ()ð ()ðTð ð ð ð<ð ð ðð ð ðð à$*Ô$<ðñ ô €Oðð ð ð ð r:   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.   r2  rÛ  Úior/   Úloggingrã   r®   Ú	getLoggerr•  rÀ  r9   r?   Úobjectr4   rR   r:   r8   ú<module>r²     s   ðØ "Ð "Ð "Ð "Ð "Ð "à "Ð "Ð "Ð "Ð "Ð "Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð
 +Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø /Ð /Ð /Ð /Ð /Ð /Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø @Ð @Ð @Ð @Ð @Ð @Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ #Ð #Ð #Ð #Ð #Ð #Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	à€gÔ˜Ñ!Ô!€ð.ð .ð .ð .ð& 7<ðGð Gð Gð Gð2nð nð nð nð nˆfñ nô nð nð nð nr:   