§
    ¢”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        úg/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/feaLib/builder.pyÚaddOpenTypeFeaturesr9   6   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?   H   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>b   s<   è è € ð  ð  àõ 	ˆC‰Œð ð  ð  ð  ð  ð  r:   )
ÚBASEÚGDEFÚGPOSÚGSUBúOS/2ÚheadÚhhear<   ÚvheaÚSTATc                óD  — || _         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| _        t          ¦   «         | _        d| _        i | _        d | _        d | _        d | _        g | _        i i dœ| _        i | _        i | _        i | _        g | _        d | _        i | _         d| _!        t          ¦   «         | _"        i | _#        t          ¦   «         | _$        i | _%        i | _&        tO          tP          ¦  «        | _)        d | _*        d | _+        g | _,        d | _-        d | _.        i | _/        i | _0        i | _1        i | _2        i | _3        i | _4        i | _5        i | _6        i | _7        i | _8        i | _9        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_Ú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__r   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Ú	makeTablero   Ú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   rb   Ú
lookupflagrc   ÚmarkFilterSetrd   Ú	extensionrk   Ú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   )re   rm   Ú
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)rh   Útyper·   rb   r¸   rc   Úcan_add_mappingri   r	   r6   rd   r¹   rk   rº   rg   rj   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   )ry   )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:   )rp   rr   Úitemsrm   ÚwarningsÚwarnrV   ry   ÚgetAlternateGlyphsrÀ   Úextendrk   Ústart_featurerq   rs   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ÚRangeEndru   ÚSubfamilyNameIDrt   ÚFeatureParamsStylisticSetÚVersionÚUINameIDrv   ÚFeatureParamsCharacterVariantsÚFormatrw   r¯   r  r  r  rx   ÚNumNamedParametersÚFirstParamUILabelNameIDrÛ   rz   Ú	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   Úintrt   ru   r  rv   rw   Ú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ÚbXHeightr4  ÚsTypoAscenderÚsTypoDescenderÚsTypoLineGapÚusWinAscentÚusWinDescentr   Ú	achVendIDÚusWeightClassÚusWidthClassÚsetUnicodeRangesÚbuild_codepages_rK  rL  rM  rN  rQ  rR  ÚmaxÚversion)rŒ   r¨   Údatarl  r4  ÚpagesrJ  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.rq  rp  )rŠ   r	   rV   r*  ry   Ú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   )Ú	axisOrderry  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         }t          j        | j        |||¬¦  «         d S )Nrw  zDesignAxes not definedr€  r   r‹  rÙ   )rs  r<   r@  )rs  Ú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<   rq  zElidedFallbackNameID z; points to a nameID that does not exist in the "name" tablerp  )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  s-  ø€ ØŒ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åÔØŒ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ã  r@  iå  r‘  iæ  é   iç  rC  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Œ   rn  Úbitsr—  ÚjrÆ  s        @r8   rj  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Ù   r@  Údflt)r   ÚAxisÚBaseTagListÚBaselineTagrÛ   ÚBaseTagCountÚBaseScriptListÚBaseScriptRecordÚBaseScriptCountr—   ÚBaseScriptTagÚ
BaseScriptÚ
BaseValuesÚindexÚDefaultIndexrÕ  ÚBaseCoordCountÚBaseLangSysRecordrº   rÙ  ÚMinMaxÚMinCoordÚMaxCoordÚFeatMinMaxCountÚDefaultMinMaxÚBaseLangSysTagÚBaseLangSysCount)rŒ   ÚaxisÚbasesÚscriptsÚ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©   rF  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><  s"   € ÐLÐLÐL¡ ¡F Q¨�q˜!ÐLÐLÐLr:   r‘  )rƒ   rá   rk   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>M  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_L  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>W  s
   € ¸4À¼7€ r:   ©rÅ   )r—   r†   rá   rº   rž  ÚbuildMarkGlyphSetsDefrZ   )rŒ   ÚsetsÚglyphsÚid_s       r8   r  z"Builder.buildGDEFMarkGlyphSetsDef_T  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   rm  rl   r   ©rŒ   s    r8   r°   zBuilder.buildDebg\  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Ô   )rk   Úlookup_indexr¨   Úget_lookup_name_Úpromote_lookup_typer	   r»   rÛ   r
   Ústrrl   rº   r5   r'   Ú	Exception)
rŒ   rD   rÁ   rÕ   r<   ÚresolvedÚlÚ	otLookupsÚer»   s
             r8   ÚbuildLookups_zBuilder.buildLookups_b  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   r@  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   r0  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¦   r3  ÚLookupr—   rm   rá   ÚtupleÚdictÚfromkeysr•   Úany_feature_variationsrÛ   rl   r-  Ú_replaceÚKeyErrorrâ   rã   r¯   Ú
FeatureTagÚFeaturer(  ÚFeatureParamsry   ÚLookupListIndexr§   rº   rÀ   rn   Ú	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Úlangrecr9  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)ro   rá   r‹   r¨   r*  rº   r+   r6   )rŒ   r¨   Ú	table_tagÚfeature_varsÚhas_any_variationsr  rU  Ú
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   rj  rb  s     €r8   rE   z1Builder.any_feature_variations.<locals>.<genexpr>
  s*   øè è € Ð>Ð>°�q”w )Ò+Ð>Ð>Ð>Ð>Ð>Ð>r:   TF)ro   rá   r©   )rŒ   rU  rb  r  rÔ   re  rf  rg  s     `     r8   rA  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:   )rg   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	   rf   Ú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)rt  rÝ  )r`   r•   r'  s    r8   Úget_default_language_systems_z%Builder.get_default_language_systems_-  s2   € ð Ô)ð 	1Ý˜TÔ;Ñ<Ô<Ð<åÐ.Ð/Ñ0Ô0Ð0r:   c                óè   — |r|dk    rt          d|¦  «        ‚|                      ¦   «         | _        d| _        d | _        || _        d| _        d | _        || _        |dk    r|| _	        || _
        d S d S )NrÒ   zL'useExtension' keyword for feature blocks is allowed only for 'aalt' featurert  r   )r	   rz  re   ra   rh   rj   rb   rc   rd   rq   rs   ©rŒ   r»   r<   Úuse_extensions       r8   ræ   zBuilder.start_feature8  s•   € Øð 	˜T Vš^˜^Ý!Ø^Øñô ð ð !%× BÒ BÑ DÔ DˆÔØˆŒØˆÔØ!%ˆÔØˆÔØ)-ˆÔ&Ø+ˆÔØ�6Š>ˆ>Ø"*ˆDÔØ'4ˆDÔ$Ð$Ð$ð ˆ>r:   c                ól   — | j         €J ‚d | _         d | _        d | _        d| _        d | _        d| _        d S )Nr   F)rj   re   rh   rb   rc   rd   r'  s    r8   rè   zBuilder.end_featureI  sG   € ØÔ%Ð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   )rg   r	   rj   ri   rh   rd   rb   rc   r|  s       r8   Ústart_lookup_blockzBuilder.start_lookup_blockR  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   )ri   rh   rd   rj   rb   rc   r'  s    r8   Úend_lookup_blockzBuilder.end_lookup_blocke  sP   € ØÔ$Ð0Ð0Ð0Ø $ˆÔØˆÔØ#ˆÔØÔ!Ð)Ø ˆDÔØ-1ˆDÔ*Ð*Ð*ð *Ð)r:   c                ó’   — || j         v s
J |¦   «         ‚d | _        | j         |         }|�|                      || j        ¦  «         d S d S rB   )rg   rh   rÆ   rj   )rŒ   Úlookup_namerÁ   s      r8   Úadd_lookup_callzBuilder.add_lookup_calln  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_revisionu  s   € Ø%ˆÔÐÐr:   c           	     óþ  ‡— t          |¦  «        dk    sJ ‚| j        dv rt          d| j        z  |¦  «        ‚| j        €t          d|¦  «        ‚d | _        | j        || j        f}| j                             |d         d|d         f¦  «        Š|dk    s|r‰r‰d d …         | j        |<   n1| j                             |g ¦  «        }ˆfd„|D ¦   «         | j        |<   t          | j        |fg¦  «        | _        |rƒ| j        |f}|| j	        v r`t          d	| 
                    ¦   «         ›d
| j         
                    ¦   «         ›d| j	        |          
                    ¦   «         ›d�|¦  «        ‚| j        | j	        |<   d S d S )Nrª  ©rÒ   r  z7Language statements are not allowed within "feature %s"zCLanguage statements are not allowed within standalone lookup blocksr   rÝ  r@  c                ó   •— g | ]}|‰v¯|‘Œ	S rR   rR   )rC   ÚxrÕ   s     €r8   rU   z(Builder.set_language.<locals>.<listcomp>“  s#   ø€ Ð"NÐ"NÐ"N¨¸QÀgÐ=MÐ=M 1Ð=MÐ=MÐ=Mr:   z	Language z	 (script z ) has already specified feature z as its required feature)rÛ   rj   r	   rh   ra   rm   r¯   r•   re   rn   rv  )rŒ   r»   rø  Úinclude_defaultÚrequiredrÅ   Úcur_lookupsrÕ   s          @r8   Úset_languagezBuilder.set_languagex  sß  ø€ Ý�8‰}Œ} Ò!Ð!Ð!Ð!ØÔ!Ð%5Ð5Ð5Ý!ð&Ø(,Ô(>ñ?àñô ð ð
 Ô!Ð)Ý!ð2àñô ð ð
  ˆÔàŒ|˜X tÔ'=Ð>ˆØ”.×$Ò$ c¨!¤f¨f°c¸!´fÐ%=Ñ>Ô>ˆØ˜ÒÐ /Ð°wÐØ")¨!¨!¨!¤*ˆDŒN˜3ÑÐð œ.×,Ò,¨S°"Ñ5Ô5ˆKØ"NÐ"NÐ"NÐ"N¨kÐ"NÑ"NÔ"NˆDŒN˜3ÑÝ )¨D¬L¸(Ð+CÐ*DÑ EÔ EˆÔàð 	BØ”< Ð*ˆCØ�dÔ-Ð-Ð-Ý%�oð !ŸšÑ(Ô(Ð(Ð(Øœ×*Ò*Ñ,Ô,Ð,Ð,ØÔ/°Ô4×:Ò:Ñ<Ô<Ð<Ð<ðð ñ	ô 	ð 	ð ,0Ô+AˆDÔ# CÑ(Ð(Ð(ð	Bð 	B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–  rc   rb   )rŒ   r»   rs  Ú
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                ó   — | j         dv rt          d| j         z  |¦  «        ‚| j         €t          d|¦  «        ‚| j        |dfhk    r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Ý  r   TF)r�  rŽ  )rj   r	   re   rh   ra   rb   rc   r�  )rŒ   r»   rÃ   s      r8   Ú
set_scriptzBuilder.set_scriptÍ  s¸   € ØÔ!Ð%5Ð5Ð5Ý!ð&Ø(,Ô(>ñ?àñô ð ð
 Ô!Ð)Ý!ØVØñô ð ð Ô  f¨fÐ%5Ð$6Ò6Ð6àˆ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   )rg   r¯   r<   )rC   r0  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")rj   r	   rp   rº   )rŒ   r»   ÚfeatureNames      r8   Úadd_feature_referencezBuilder.add_feature_referenceö  sK   € ØÔ! VÒ+Ð+Ý!ØKÈXñô ð ð 	Ô×"Ò" H¨kÐ#:Ñ;Ô;Ð;Ð;Ð;r:   c                ó:   — | j                              |¦  «         d S rB   )rt   rw  ©rŒ   rD   s     r8   Úadd_featureNamezBuilder.add_featureNameý  s   € ØÔ×Ò˜sÑ#Ô#Ð#Ð#Ð#r:   c                ó:   — | j                              |¦  «         d S rB   )rv   rw  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)rx   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   )rz   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")rj   r	   r{   re   rm   rÀ   )	rŒ   r»   r  r  r  r  rÃ   rÄ   rÅ   s	            r8   Úset_size_parameterszBuilder.set_size_parameters  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Å   rs  s         r8   Úadd_any_subst_zBuilder.add_any_subst_$  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Å   rs  s      r8   rÑ   z,Builder.add_single_subst.<locals>.<dictcomp>D  s"   € Ð@Ð@Ð@¡* # uˆcˆV�e�XÐ@Ð@Ð@r:   )rj   rá   rr   rÀ   rº   Úadd_single_subst_chained_r»  )	rŒ   r»   ÚprefixÚsuffixrË   Ú
forceChainÚ
from_glyphÚto_glyphrê   s	            r8   Úadd_single_substzBuilder.add_single_subst7  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")rj   rr   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_Úallr	   r»  Ú	itertoolsÚproduct)rŒ   r»   r¿  r#  rÀ  rÍ  rÁ  s        ` r8   Úadd_ligature_substzBuilder.add_ligature_substi  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Á   r/  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#  rs  ÚotValueRecordrÝ   r2  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_pos  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_pos+  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_pos8  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Ï   rq  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#  rs  Ú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   )rh   Úadd_subtable_break)rŒ   r»   s     r8   r4  zBuilder.add_subtable_breakq  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_t  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Ù   r@  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   )rJ  )rC   rG  r»   rŒ   s     €€r8   rU   z3Builder.add_ligatureCaretByPos_.<locals>.<listcomp>˜  s)   ø€ ÐIÐIÐI¸�$×#Ò# H¨eÑ4Ô4ÐIÐIÐIr:   )r�   rB  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.  r/  r0  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Å   rs  s      r8   Úadd_os2_fieldzBuilder.add_os2_field   s   € ØˆŒ	�#‰ˆˆr:   c                ó   — || j         |<   d S rB   )rˆ   rQ  s      r8   Úadd_hhea_fieldzBuilder.add_hhea_field£  ó   € ØˆŒ
�3‰ˆˆr:   c                ó   — || j         |<   d S rB   )r‰   rQ  s      r8   Úadd_vhea_fieldzBuilder.add_vhea_field¦  rU  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   rq  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Å   rs  r`  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»   rg  rH  rè  r2  rI  s          r8   rF  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?  rF  r	   )rŒ   rg  ÚdeviceTabler»   rI  rH  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.AnchorNr6  )
ÚxDeviceTablerž  rp  r?  ÚyDeviceTablerr  rŒ  ÚyÚbuildAnchorÚcontourpoint)rŒ   r»   r.  ÚdeviceXÚdeviceYrŒ  rv  Ú	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Ù   ro  ÚYAdvanceÚXAdvance)Ú_VALUEREC_ATTRSrá   r:  rž  rp  r?  rV   r   r  r	   rF  r´  Ú
buildValue)rŒ   r»   rq  rò  ÚvrÚastNameÚotNamer€  ÚvalÚotDeviceNameÚfeaDeviceNamerI  ÚvalRecs                r8   rô  zBuilder.makeOpenTypeValueRecord  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)rg  r   rh  ri  )bÚ__name__Ú
__module__Ú__qualname__r•   r”   r�   r5   r¾   rÆ   rÌ   r™   rš   r›   rœ   r  r(  r�   rž   ru  r~  rŽ  rŸ   rj  r¬   rÙ  rÐ  r«   rÿ  r  r  r°   r3  r    r¡   rA  r+  rx  rz  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  r4  r:  r@  rD  rJ  rM  rO  rR  rT  rW  rf  rF  rr  r  r   ÚvalueRecordFormatr…  rô  rR   r:   r8   r4   r4   a   s   € € € € € Ø�ið  ð  ð
ð ñ  ô  ñ ô €Oð G!ð G!ð G!ðR<ð <ð <ð <ð|ð ð ð>ð >ð >ð
 ð  ð  ð  ð:1*ð 1*ð 1*ðf
0ð 
0ð 
0ð2ð 2ð 2ð":ð :ð :ð$ð $ð $ð-ð -ð -ð^ð ð ð4RUð RUð RUðh(ð (ð (ð 4ð 4ð 4ð?ð ?ð ?ð$S
ð S
ð S
ðj+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ð&ð &ð &ð+Bð +Bð +BðZð ð ð$ð ð ð!ð !ð !ðRð Rð Rð*ð ð ð 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.   r,  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ð2Mð Mð Mð Mð Mˆfñ Mô Mð Mð Mð Mr:   