§
    ¢”j®! ã                   óþ  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlZdZg d¢Zd	„ Z eg d
¢¦  «        Zd„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d „ d!e¦  «        Z G d"„ d#e¦  «        Z G d$„ d%e¦  «        Z  G d&„ d'e¦  «        Z! G d(„ d)e¦  «        Z" G d*„ d+e¦  «        Z# G d,„ d-e¦  «        Z$ G d.„ d/e¦  «        Z% G d0„ d1e¦  «        Z& G d2„ d3e¦  «        Z' G d4„ d5e¦  «        Z( G d6„ d7e¦  «        Z) G d8„ d9e¦  «        Z* G d:„ d;e¦  «        Z+ G d<„ d=e¦  «        Z, G d>„ d?e¦  «        Z- G d@„ dAe¦  «        Z. G dB„ dCe¦  «        Z/ G dD„ dEe¦  «        Z0 G dF„ dGe¦  «        Z1 G dH„ dIe¦  «        Z2 G dJ„ dKe¦  «        Z3 G dL„ dMe¦  «        Z4 G dN„ dOe¦  «        Z5 G dP„ dQe¦  «        Z6 G dR„ dSe¦  «        Z7 G dT„ dUe¦  «        Z8 G dV„ dWe¦  «        Z9 G dX„ dYe¦  «        Z: G dZ„ d[e¦  «        Z; G d\„ d]e¦  «        Z< G d^„ d_e¦  «        Z= G d`„ dae¦  «        Z> G db„ dce¦  «        Z? G dd„ dee¦  «        Z@ G df„ dge¦  «        ZA G dh„ die¦  «        ZB G dj„ dke¦  «        ZC G dl„ dme¦  «        ZD G dn„ doe¦  «        ZE G dp„ dqe¦  «        ZFdr„ ZG G ds„ dte¦  «        ZH G du„ dveH¦  «        ZI G dw„ dxeH¦  «        ZJ G dy„ dze¦  «        ZK G d{„ d|eH¦  «        ZL G d}„ d~e¦  «        ZM G d„ d€e¦  «        ZN G d�„ d‚e¦  «        ZO G dƒ„ d„e¦  «        ZP G d…„ d†e¦  «        ZQ G d‡„ dˆe¦  «        ZR G d‰„ dŠe¦  «        ZS G d‹„ dŒe¦  «        ZT G d�„ dŽe¦  «        ZU G d�„ d�e¦  «        ZV G d‘„ d’e¦  «        ZW G d“„ d”e¦  «        ZXdS )•é    N)ÚFeatureLibError)ÚFeatureLibLocation)ÚgetEncoding)ÚbyteordÚtobytes)ÚOrderedDictz    )BÚElementÚFeatureFileÚCommentÚ	GlyphNameÚ
GlyphClassÚGlyphClassNameÚMarkClassNameÚAnonymousBlockÚBlockÚFeatureBlockÚNestedBlockÚLookupBlockÚGlyphClassDefinitionÚGlyphClassDefStatementÚ	MarkClassÚMarkClassDefinitionÚAlternateSubstStatementÚAnchorÚAnchorDefinitionÚAttachStatementÚAxisValueLocationStatementÚBaseAxisÚCVParametersNameStatementÚChainContextPosStatementÚChainContextSubstStatementÚCharacterStatementÚConditionsetStatementÚCursivePosStatementÚElidedFallbackNameÚElidedFallbackNameIDÚ
ExpressionÚFeatureNameStatementÚFeatureReferenceStatementÚFontRevisionStatementÚ	HheaFieldÚIgnorePosStatementÚIgnoreSubstStatementÚIncludeStatementÚLanguageStatementÚLanguageSystemStatementÚLigatureCaretByIndexStatementÚLigatureCaretByPosStatementÚLigatureSubstStatementÚLookupFlagStatementÚLookupReferenceStatementÚMarkBasePosStatementÚMarkLigPosStatementÚMarkMarkPosStatementÚMultipleSubstStatementÚ
NameRecordÚOS2FieldÚPairPosStatementÚ ReverseChainSingleSubstStatementÚScriptStatementÚSinglePosStatementÚSingleSubstStatementÚSizeParametersÚ	StatementÚSTATAxisValueStatementÚSTATDesignAxisStatementÚSTATNameStatementÚSubtableStatementÚ
TableBlockÚValueRecordÚValueRecordDefinitionÚ	VheaFieldc                 óN   — | €dS dd                      d„ | D ¦   «         ¦  «        z  S )Nz<device NULL>z<device %s>ú, c              3   ó    K  — | ]	}d |z  V — Œ
dS )z%d %dN© )Ú.0Úts     úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/feaLib/ast.pyú	<genexpr>z!deviceToString.<locals>.<genexpr>U   s&   è è € Ð(EÐ(E¸¨°1©Ð(EÐ(EÐ(EÐ(EÐ(EÐ(Eó    )Újoin)Údevices    rQ   ÚdeviceToStringrV   Q   s2   € Ø€~Øˆà˜tŸyšyÐ(EÐ(E¸fÐ(EÑ(EÔ(EÑEÔEÑEÐErS   )4ÚanchorÚ	anchordefÚanonÚ	anonymousÚbyÚcontourÚcursiverU   ÚenumÚ	enumerateÚexcludedfltÚexclude_dfltÚfeatureÚfromÚignoreÚignorebaseglyphsÚignoreligaturesÚignoremarksÚincludeÚincludedfltÚinclude_dfltÚlanguageÚlanguagesystemÚlookupÚ
lookupflagÚmarkÚmarkattachmenttypeÚ	markclassÚnameidÚnullÚ
parametersÚposÚpositionÚrequiredÚrighttoleftÚ
reversesubÚrsubÚscriptÚsubÚ
substituteÚsubtableÚtableÚusemarkfilteringsetÚuseextensionÚvaluerecorddefÚbaseÚgdefÚheadÚhheaÚnameÚvheaÚvmtxc                 ó:  — t          | d¦  «        r|                      ¦   «         S t          | t          ¦  «        rAt	          | ¦  «        dk    r.t          | d         ¦  «        dz   t          | d         ¦  «        z   S |                      ¦   «         t          v rd| z   S | S )NÚasFeaé   r   z - é   ú\)Úhasattrr‹   Ú
isinstanceÚtupleÚlenÚlowerÚfea_keywords)Úgs    rQ   r‹   r‹   ’   s‡   € Ýˆq�'ÑÔð Ø�wŠw‰yŒyÐÝ	�A•uÑ	Ô	ð ¥# a¡&¤&¨A¢+ +Ý�Q�q”T‰{Œ{˜UÑ"¥U¨1¨Q¬4¡[¤[Ñ0Ð0Ø	
�Š‰Œ•lÐ	"Ð	"Ø�a‰xˆàˆrS   c                   ó.   — e Zd ZdZdd„Zd„ Zd	d„Zd„ ZdS )
r	   z8A base class representing "something" in a feature file.Nc                 óT   — |rt          |t          ¦  «        s	t          |Ž }|| _        d S ©N)r�   r   Úlocation©Úselfr™   s     rQ   Ú__init__zElement.__init__    s1   € àð 	5�J xÕ1CÑDÔDð 	5Ý)¨8Ð4ˆHØ ˆŒˆˆrS   c                 ó   — d S r˜   rN   ©r›   Úbuilders     rQ   ÚbuildzElement.build¦   s   € ØˆrS   Ú c                 ó   — t           ‚)zÀReturns this element as a string of feature code. For block-type
        elements (such as :class:`FeatureBlock`), the `indent` string is
        added to the start of each line in the output.)ÚNotImplementedError©r›   Úindents     rQ   r‹   zElement.asFea©   s
   € õ "Ð!rS   c                 ó*   — |                       ¦   «         S r˜   ©r‹   ©r›   s    rQ   Ú__str__zElement.__str__¯   s   € Ø�zŠz‰|Œ|ÐrS   r˜   ©r¡   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rœ   r    r‹   r©   rN   rS   rQ   r	   r	   �   s`   € € € € € ØBÐBð!ð !ð !ð !ðð ð ð"ð "ð "ð "ðð ð ð ð rS   r	   c                   ó   — e Zd ZdS )rB   N©r«   r¬   r­   rN   rS   rQ   rB   rB   ³   ó   € € € € € Ø€DrS   rB   c                   ó   — e Zd ZdS )r'   Nr°   rN   rS   rQ   r'   r'   ·   r±   rS   r'   c                   ó,   ‡ — e Zd ZdZdˆ fd„	Zdd„Zˆ xZS )r   zA comment in a feature file.Nc                 óf   •— t          t          | ¦  «                             |¦  «         || _        d S r˜   )Úsuperr   rœ   Útext)r›   r¶   r™   Ú	__class__s      €rQ   rœ   zComment.__init__¾   s,   ø€ Ý�g�tÑÔ×%Ò% hÑ/Ô/Ð/àˆŒ	ˆ	ˆ	rS   r¡   c                 ó   — | j         S r˜   )r¶   r¤   s     rQ   r‹   zComment.asFeaÃ   s
   € ØŒyÐrS   r˜   rª   ©r«   r¬   r­   r®   rœ   r‹   Ú__classcell__©r·   s   @rQ   r   r   »   sW   ø€ € € € € Ø&Ð&ðð ð ð ð ð ð
ð ð ð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	Ú	NullGlyphz5The NULL glyph, used in glyph deletion substitutions.Nc                 ó<   — t                                | |¦  «         d S r˜   )r'   rœ   rš   s     rQ   rœ   zNullGlyph.__init__Ê   s   € Ý×Ò˜D (Ñ+Ô+Ð+Ð+Ð+rS   c                 ó   — dS )úBThe glyphs in this class as a tuple of :class:`GlyphName` objects.rN   rN   r¨   s    rQ   ÚglyphSetzNullGlyph.glyphSetÎ   s   € àˆrrS   r¡   c                 ó   — dS )NÚNULLrN   r¤   s     rQ   r‹   zNullGlyph.asFeaÒ   s   € ØˆvrS   r˜   rª   ©r«   r¬   r­   r®   rœ   rÁ   r‹   rN   rS   rQ   r½   r½   Ç   sQ   € € € € € Ø?Ð?ð,ð ,ð ,ð ,ðð ð ðð ð ð ð ð rS   r½   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   z)A single glyph name, such as ``cedilla``.Nc                 óJ   — t                                | |¦  «         || _        d S r˜   )r'   rœ   Úglyph)r›   rÇ   r™   s      rQ   rœ   zGlyphName.__init__Ù   s#   € Ý×Ò˜D (Ñ+Ô+Ð+àˆŒ
ˆ
ˆ
rS   c                 ó   — | j         fS ©rÀ   )rÇ   r¨   s    rQ   rÁ   zGlyphName.glyphSetÞ   s   € à”
ˆ}ÐrS   r¡   c                 ó*   — t          | j        ¦  «        S r˜   )r‹   rÇ   r¤   s     rQ   r‹   zGlyphName.asFeaâ   s   € Ý�T”ZÑ Ô Ð rS   r˜   rª   rÄ   rN   rS   rQ   r   r   Ö   sQ   € € € € € Ø3Ð3ðð ð ð ð
ð ð ð!ð !ð !ð !ð !ð !rS   r   c                   óF   — e Zd ZdZdd„Zd„ Zdd„Zd„ Zd„ Zd	„ Z	d
„ Z
d„ ZdS )r   z1A glyph class, such as ``[acute cedilla grave]``.Nc                 ón   — t                                | |¦  «         |�|ng | _        g | _        d| _        d S )Nr   )r'   rœ   ÚglyphsÚoriginalÚcurr)r›   rÍ   r™   s      rQ   rœ   zGlyphClass.__init__é   s:   € Ý×Ò˜D (Ñ+Ô+Ð+à &Ð 2�f�f¸ˆŒØˆŒØˆŒ	ˆ	ˆ	rS   c                 ó*   — t          | j        ¦  «        S rÉ   )r‘   rÍ   r¨   s    rQ   rÁ   zGlyphClass.glyphSetð   s   € å�T”[Ñ!Ô!Ð!rS   r¡   c                 óº  — t          | j        ¦  «        r•| j        t          | j        ¦  «        k     rE| j                             | j        | j        d …         ¦  «         t          | j        ¦  «        | _        dd                     t          t          | j        ¦  «        ¦  «        z   dz   S dd                     t          t          | j        ¦  «        ¦  «        z   dz   S )Nú[ú ú])r’   rÎ   rÏ   rÍ   ÚextendrT   Úmapr‹   r¤   s     rQ   r‹   zGlyphClass.asFeaô   s°   € ÝˆtŒ}ÑÔð 	AØŒy�3˜tœ{Ñ+Ô+Ò+Ð+Ø”×$Ò$ T¤[°´°°Ô%=Ñ>Ô>Ð>Ý ¤Ñ,Ô,�”	Ø˜Ÿš¥#¥e¨T¬]Ñ";Ô";Ñ<Ô<Ñ<¸sÑBÐBà˜Ÿš¥#¥e¨T¬[Ñ"9Ô"9Ñ:Ô:Ñ:¸SÑ@Ð@rS   c                 ó:   — | j                              |¦  «         dS )z6Add a list of :class:`GlyphName` objects to the class.N)rÍ   rÕ   )r›   rÍ   s     rQ   rÕ   zGlyphClass.extendý   s   € àŒ×Ò˜6Ñ"Ô"Ð"Ð"Ð"rS   c                 ó:   — | j                              |¦  «         dS )z4Add a single :class:`GlyphName` object to the class.N)rÍ   Úappend)r›   rÇ   s     rQ   rÙ   zGlyphClass.append  s   € àŒ×Ò˜5Ñ!Ô!Ð!Ð!Ð!rS   c                 ó6  — | j         t          | j        ¦  «        k     r,| j                             | j        | j         d…         ¦  «         | j                             ||f¦  «         | j                             |¦  «         t          | j        ¦  «        | _         dS )a  Add a range (e.g. ``A-Z``) to the class. ``start`` and ``end``
        are either :class:`GlyphName` objects or strings representing the
        start and end glyphs in the class, and ``glyphs`` is the full list of
        :class:`GlyphName` objects in the range.N)rÏ   r’   rÍ   rÎ   rÕ   rÙ   ©r›   ÚstartÚendrÍ   s       rQ   Ú	add_rangezGlyphClass.add_range  sƒ   € ð
 Œ9•s˜4œ;Ñ'Ô'Ò'Ð'ØŒM× Ò  ¤¨T¬Y¨[¨[Ô!9Ñ:Ô:Ð:ØŒ×Ò˜e S˜\Ñ*Ô*Ð*ØŒ×Ò˜6Ñ"Ô"Ð"Ý˜œÑ$Ô$ˆŒ	ˆ	ˆ	rS   c                 ó‚  — | j         t          | j        ¦  «        k     r,| j                             | j        | j         d…         ¦  «         | j                             d                     |¦  «        d                     |¦  «        f¦  «         | j                             |¦  «         t          | j        ¦  «        | _         dS )z¶Add a range to the class by glyph ID. ``start`` and ``end`` are the
        initial and final IDs, and ``glyphs`` is the full list of
        :class:`GlyphName` objects in the range.Nz\{})rÏ   r’   rÍ   rÎ   rÕ   rÙ   ÚformatrÛ   s       rQ   Úadd_cid_rangezGlyphClass.add_cid_range  sœ   € ð Œ9•s˜4œ;Ñ'Ô'Ò'Ð'ØŒM× Ò  ¤¨T¬Y¨[¨[Ô!9Ñ:Ô:Ð:ØŒ×Ò˜fŸmšm¨EÑ2Ô2°F·M²MÀ#Ñ4FÔ4FÐGÑHÔHÐHØŒ×Ò˜6Ñ"Ô"Ð"Ý˜œÑ$Ô$ˆŒ	ˆ	ˆ	rS   c                 óV  — | j         t          | j        ¦  «        k     r,| j                             | j        | j         d…         ¦  «         | j                             |¦  «         | j                             |                     ¦   «         ¦  «         t          | j        ¦  «        | _         dS )zNAdd glyphs from the given :class:`GlyphClassName` object to the
        class.N)rÏ   r’   rÍ   rÎ   rÕ   rÙ   rÁ   )r›   Úgcs     rQ   Ú	add_classzGlyphClass.add_class  s‡   € ð Œ9•s˜4œ;Ñ'Ô'Ò'Ð'ØŒM× Ò  ¤¨T¬Y¨[¨[Ô!9Ñ:Ô:Ð:ØŒ×Ò˜RÑ Ô Ð ØŒ×Ò˜2Ÿ;š;™=œ=Ñ)Ô)Ð)Ý˜œÑ$Ô$ˆŒ	ˆ	ˆ	rS   ©NNrª   )r«   r¬   r­   r®   rœ   rÁ   r‹   rÕ   rÙ   rÞ   rá   rä   rN   rS   rQ   r   r   æ   s    € € € € € Ø;Ð;ðð ð ð ð"ð "ð "ðAð Að Að Að#ð #ð #ð"ð "ð "ð	%ð 	%ð 	%ð%ð %ð %ð%ð %ð %ð %ð %rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   zyA glyph class name, such as ``@FRENCH_MARKS``. This must be instantiated
    with a :class:`GlyphClassDefinition` object.Nc                 óx   — t                                | |¦  «         t          |t          ¦  «        sJ ‚|| _        d S r˜   )r'   rœ   r�   r   Ú
glyphclass)r›   rè   r™   s      rQ   rœ   zGlyphClassName.__init__(  s:   € Ý×Ò˜D (Ñ+Ô+Ð+Ý˜*Õ&:Ñ;Ô;Ð;Ð;Ð;Ø$ˆŒˆˆrS   c                 óN   — t          | j                             ¦   «         ¦  «        S rÉ   )r‘   rè   rÁ   r¨   s    rQ   rÁ   zGlyphClassName.glyphSet-  s   € å�T”_×-Ò-Ñ/Ô/Ñ0Ô0Ð0rS   r¡   c                 ó    — d| j         j        z   S ©Nú@)rè   r‡   r¤   s     rQ   r‹   zGlyphClassName.asFea1  s   € Ø�T”_Ô)Ñ)Ð)rS   r˜   rª   rÄ   rN   rS   rQ   r   r   $  sU   € € € € € ð4ð 4ð%ð %ð %ð %ð
1ð 1ð 1ð*ð *ð *ð *ð *ð *rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   zˆA mark class name, such as ``@FRENCH_MARKS`` defined with ``markClass``.
    This must be instantiated with a :class:`MarkClass` object.Nc                 óx   — t                                | |¦  «         t          |t          ¦  «        sJ ‚|| _        d S r˜   )r'   rœ   r�   r   Ú	markClass)r›   rï   r™   s      rQ   rœ   zMarkClassName.__init__9  s9   € Ý×Ò˜D (Ñ+Ô+Ð+Ý˜)¥YÑ/Ô/Ð/Ð/Ð/Ø"ˆŒˆˆrS   c                 ó4   — | j                              ¦   «         S rÉ   )rï   rÁ   r¨   s    rQ   rÁ   zMarkClassName.glyphSet>  s   € àŒ~×&Ò&Ñ(Ô(Ð(rS   r¡   c                 ó    — d| j         j        z   S rë   )rï   r‡   r¤   s     rQ   r‹   zMarkClassName.asFeaB  s   € Ø�T”^Ô(Ñ(Ð(rS   r˜   rª   rÄ   rN   rS   rQ   r   r   5  sW   € € € € € ðCð Cð#ð #ð #ð #ð
)ð )ð )ð)ð )ð )ð )ð )ð )rS   r   c                   ó"   — e Zd ZdZdd„Zdd„ZdS )r   zAn anonymous data block.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   ÚtagÚcontent)r›   rô   rõ   r™   s       rQ   rœ   zAnonymousBlock.__init__I  s*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒØˆŒˆˆrS   r¡   c                 óˆ   — d                      | j        ¦  «        }|| j        z  }|d                      | j        ¦  «        z  }|S )Nzanon {} {{
z}} {};

)rà   rô   rõ   ©r›   r¥   Úress      rQ   r‹   zAnonymousBlock.asFeaN  sB   € Ø×#Ò# D¤HÑ-Ô-ˆØˆtŒ|ÑˆØˆ|×"Ò" 4¤8Ñ,Ô,Ñ,ˆØˆ
rS   r˜   rª   ©r«   r¬   r­   r®   rœ   r‹   rN   rS   rQ   r   r   F  sB   € € € € € Ø"Ð"ðð ð ð ð
ð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   z,A block of statements: feature, lookup, etc.Nc                 óJ   — t                                | |¦  «         g | _        d S r˜   )rB   rœ   Ú
statementsrš   s     rQ   rœ   zBlock.__init__X  s#   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒˆˆrS   c                 óD   — | j         D ]}|                     |¦  «         ŒdS )z¯When handed a 'builder' object of comparable interface to
        :class:`fontTools.feaLib.builder`, walks the statements in this
        block, calling the builder callbacks.N)rü   r    )r›   rŸ   Úss      rQ   r    zBlock.build\  s4   € ð ”ð 	ð 	ˆAØ�GŠG�GÑÔÐÐð	ð 	rS   r¡   c                 óv   ‡— ‰t           z  Š‰d‰z                        ˆfd„| j        D ¦   «         ¦  «        z   dz   S )Nú
c                 ó<   •— g | ]}|                      ‰¬ ¦  «        ‘ŒS ©©r¥   r§   ©rO   rþ   r¥   s     €rQ   ú
<listcomp>zBlock.asFea.<locals>.<listcomp>g  s'   ø€ Ð#TÐ#TÐ#T¸q A§G¢G°6 GÑ$:Ô$:Ð#TÐ#TÐ#TrS   )ÚSHIFTrT   rü   r¤   s    `rQ   r‹   zBlock.asFeac  sN   ø€ Ø•%‰ˆàØ�f‰}×"Ò"Ð#TÐ#TÐ#TÐ#TÀDÄOÐ#TÑ#TÔ#TÑUÔUñVàñð	
rS   r˜   rª   ©r«   r¬   r­   r®   rœ   r    r‹   rN   rS   rQ   r   r   U  sQ   € € € € € Ø6Ð6ðð ð ð ðð ð ð
ð 
ð 
ð 
ð 
ð 
rS   r   c                   ó    — e Zd ZdZd„ Zdd„ZdS )r
   zpThe top-level element of the syntax tree, containing the whole feature
    file in its ``statements`` attribute.c                 óL   — t                                | d ¬¦  «         i | _        d S ©N)r™   )r   rœ   ÚmarkClassesr¨   s    rQ   rœ   zFeatureFile.__init__p  s&   € Ý�Š�t dˆÑ+Ô+Ð+ØˆÔÐÐrS   r¡   c                 óP   ‡— d                      ˆfd„| j        D ¦   «         ¦  «        S )Nr   c              3   óD   •K  — | ]}|                      ‰¬ ¦  «        V — ŒdS )r  Nr§   r  s     €rQ   rR   z$FeatureFile.asFea.<locals>.<genexpr>u  s1   øè è € ÐIÐI°A˜Ÿš¨˜Ñ/Ô/ÐIÐIÐIÐIÐIÐIrS   )rT   rü   r¤   s    `rQ   r‹   zFeatureFile.asFeat  s,   ø€ Ø�yŠyÐIÐIÐIÐI¸¼ÐIÑIÔIÑIÔIÐIrS   Nrª   rù   rN   rS   rQ   r
   r
   l  sG   € € € € € ð-ð -ðð ð ðJð Jð Jð Jð Jð JrS   r
   c                   ó(   — e Zd ZdZdd„Zd„ Zd	d„ZdS )
r   zA named feature block.FNc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   ©r   rœ   r‡   Úuse_extension©r›   r‡   r  r™   s       rQ   rœ   zFeatureBlock.__init__{  ó-   € Ý�Š�t˜XÑ&Ô&Ð&Ø(,¨mÐ%ˆŒ	�4Ô%Ð%Ð%rS   c                 ój  — |                      | j        | j        | j        ¦  «         |j        }i |_        t
                               | |¦  «         |j                             ¦   «         D ].\  }}|                     |g ¦  «         	                    |¦  «         Œ/||_        | 
                    ¦   «          dS )ú‹Call the ``start_feature`` callback on the builder object, visit
        all the statements in this feature, and then call ``end_feature``.N)Ústart_featurer™   r‡   r  Ú	features_r   r    ÚitemsÚ
setdefaultrÕ   Úend_feature)r›   rŸ   ÚfeaturesÚkeyÚvalues        rQ   r    zFeatureBlock.build  s²   € ð 	×Ò˜dœm¨T¬Y¸Ô8JÑKÔKÐKð Ô$ˆØˆÔÝ�Š�D˜'Ñ"Ô"Ð"Ø!Ô+×1Ò1Ñ3Ô3ð 	7ð 	7‰JˆC�Ø×Ò  RÑ(Ô(×/Ò/°Ñ6Ô6Ð6Ð6Ø$ˆÔØ×ÒÑÔÐÐÐrS   r¡   c                 óè   — |d| j                              ¦   «         z  z   }| j        r|dz  }|dz  }|t                               | |¬¦  «        z  }||d| j                              ¦   «         z  z   z  }|S )Nzfeature %s úuseExtension ú{
r  ú} %s;
)r‡   Ústripr  r   r‹   r÷   s      rQ   r‹   zFeatureBlock.asFea�  sz   € Ø�} t¤y§¢Ñ'8Ô'8Ñ8Ñ8ˆØÔð 	#Ø�?Ñ"ˆCØˆu‰ˆØ�u�{Š{˜4¨ˆ{Ñ/Ô/Ñ/ˆØˆv˜	 D¤I§O¢OÑ$5Ô$5Ñ5Ñ5Ñ5ˆØˆ
rS   ©FNrª   r  rN   rS   rQ   r   r   x  sQ   € € € € € Ø Ð ð<ð <ð <ð <ðð ð ðð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   zYA block inside another block, for example when found inside a
    ``cvParameters`` block.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )r   rœ   rô   Ú
block_name)r›   rô   r&  r™   s       rQ   rœ   zNestedBlock.__init__›  s(   € Ý�Š�t˜XÑ&Ô&Ð&ØˆŒØ$ˆŒˆˆrS   c                 óŠ   — t                                | |¦  «         | j        dk    r|                     | j        ¦  «         d S d S )NÚParamUILabelNameID)r   r    r&  Úadd_to_cv_num_named_paramsrô   rž   s     rQ   r    zNestedBlock.build   sH   € Ý�Š�D˜'Ñ"Ô"Ð"ØŒ?Ð2Ò2Ð2Ø×.Ò.¨t¬xÑ8Ô8Ð8Ð8Ð8ð 3Ð2rS   r¡   c                 óª   — d                      || j        ¦  «        }|t                               | |¬¦  «        z  }|d                      |¦  «        z  }|S )Nz{}{} {{
r  z{}}};
)rà   r&  r   r‹   r÷   s      rQ   r‹   zNestedBlock.asFea¥  sP   € Ø× Ò  ¨¬Ñ9Ô9ˆØ�u�{Š{˜4¨ˆ{Ñ/Ô/Ñ/ˆØˆy×Ò Ñ'Ô'Ñ'ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r   r   —  sU   € € € € € ðð ð%ð %ð %ð %ð
9ð 9ð 9ð
ð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zd	d„ZdS )
r   z*A named lookup, containing ``statements``.FNc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   r  r  s       rQ   rœ   zLookupBlock.__init__¯  r  rS   c                 ó°   — |                      | j        | j        | j        ¦  «         t                               | |¦  «         |                     ¦   «          d S r˜   )Ústart_lookup_blockr™   r‡   r  r   r    Úend_lookup_blockrž   s     rQ   r    zLookupBlock.build³  sM   € Ø×"Ò" 4¤=°$´)¸TÔ=OÑPÔPÐPÝ�Š�D˜'Ñ"Ô"Ð"Ø× Ò Ñ"Ô"Ð"Ð"Ð"rS   r¡   c                 óÖ   — d                      | j        ¦  «        }| j        r|dz  }|dz  }|t                               | |¬¦  «        z  }|d                      || j        ¦  «        z  }|S )Nz
lookup {} r  r   r  z	{}}} {};
)rà   r‡   r  r   r‹   r÷   s      rQ   r‹   zLookupBlock.asFea¸  sp   € Ø×!Ò! $¤)Ñ,Ô,ˆØÔð 	#Ø�?Ñ"ˆCØˆu‰ˆØ�u�{Š{˜4¨ˆ{Ñ/Ô/Ñ/ˆØˆ|×"Ò" 6¨4¬9Ñ5Ô5Ñ5ˆØˆ
rS   r#  rª   r  rN   rS   rQ   r   r   ¬  sQ   € € € € € Ø4Ð4ð<ð <ð <ð <ð#ð #ð #ð
ð ð ð ð ð rS   r   c                   ó,   ‡ — e Zd ZdZdd„Zdˆ fd„	Zˆ xZS )rG   zA ``table ... { }`` block.Nc                 óJ   — t                                | |¦  «         || _        d S r˜   )r   rœ   r‡   )r›   r‡   r™   s      rQ   rœ   zTableBlock.__init__Å  s!   € Ý�Š�t˜XÑ&Ô&Ð&ØˆŒ	ˆ	ˆ	rS   r¡   c                 ó  •— d                      | j                             ¦   «         ¦  «        }|t          t          | ¦  «                             |¬¦  «        z  }|d                      | j                             ¦   «         ¦  «        z  }|S )Nztable {} {{
r  z}} {};
)rà   r‡   r"  rµ   rG   r‹   )r›   r¥   rø   r·   s      €rQ   r‹   zTableBlock.asFeaÉ  sp   ø€ Ø×$Ò$ T¤Y§_¢_Ñ%6Ô%6Ñ7Ô7ˆØ�u•Z Ñ&Ô&×,Ò,°FÐ,Ñ;Ô;Ñ;ˆØˆz× Ò  ¤§¢Ñ!2Ô!2Ñ3Ô3Ñ3ˆØˆ
rS   r˜   rª   r¹   r»   s   @rQ   rG   rG   Â  sW   ø€ € € € € Ø$Ð$ðð ð ð ðð ð ð ð ð ð ð ð ð rS   rG   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   z!Example: ``@UPPERCASE = [A-Z];``.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   r‡   rÍ   )r›   r‡   rÍ   r™   s       rQ   rœ   zGlyphClassDefinition.__init__Ó  s*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒ	ØˆŒˆˆrS   c                 óN   — t          | j                             ¦   «         ¦  «        S rÉ   )r‘   rÍ   rÁ   r¨   s    rQ   rÁ   zGlyphClassDefinition.glyphSetØ  s   € å�T”[×)Ò)Ñ+Ô+Ñ,Ô,Ð,rS   r¡   c                 óV   — d| j         z   dz   | j                             ¦   «         z   dz   S )Nrì   z = ú;)r‡   rÍ   r‹   r¤   s     rQ   r‹   zGlyphClassDefinition.asFeaÜ  s+   € Ø�T”Y‰ Ñ&¨¬×):Ò):Ñ)<Ô)<Ñ<¸sÑBÐBrS   r˜   rª   rÄ   rN   rS   rQ   r   r   Ð  sW   € € € € € Ø+Ð+ðð ð ð ð
-ð -ð -ðCð Cð Cð Cð Cð CrS   r   c                   ó*   — e Zd ZdZ	 dd„Zd„ Zdd„ZdS )	r   z¡Example: ``GlyphClassDef @UPPERCASE, [B], [C], [D];``. The parameters
    must be either :class:`GlyphClass` or :class:`GlyphClassName` objects, or
    ``None``.Nc                 óv   — t                                | |¦  «         ||c| _        | _        || _        || _        d S r˜   )rB   rœ   Ú
baseGlyphsÚ
markGlyphsÚligatureGlyphsÚcomponentGlyphs)r›   r;  r<  r=  r>  r™   s         rQ   rœ   zGlyphClassDefStatement.__init__å  s@   € õ 	×Ò˜4 Ñ*Ô*Ð*Ø,6¸
Ð(ˆŒ˜œØ,ˆÔØ.ˆÔÐÐrS   c                 ó²  — | j         r| j                              ¦   «         nt          ¦   «         }| j        r| j                             ¦   «         nt          ¦   «         }| j        r| j                             ¦   «         nt          ¦   «         }| j        r| j                             ¦   «         nt          ¦   «         }|                     | j        ||||¦  «         dS )z3Calls the builder's ``add_glyphClassDef`` callback.N)r;  rÁ   r‘   r=  r<  r>  Úadd_glyphClassDefr™   )r›   rŸ   rƒ   Úligaro   Úcomps         rQ   r    zGlyphClassDefStatement.buildí  s¶   € à-1¬_ÐIˆtŒ×'Ò'Ñ)Ô)Ð)Å%Á'Ä'ˆØ15Ô1DÐQˆtÔ"×+Ò+Ñ-Ô-Ð-Í%É'Ì'ˆØ-1¬_ÐIˆtŒ×'Ò'Ñ)Ô)Ð)Å%Á'Ä'ˆØ26Ô2FÐSˆtÔ#×,Ò,Ñ.Ô.Ð.ÍEÉGÌGˆØ×!Ò! $¤-°°t¸TÀ4ÑHÔHÐHÐHÐHrS   r¡   c                 ó2  — d                      | j        r| j                             ¦   «         nd| j        r| j                             ¦   «         nd| j        r| j                             ¦   «         nd| j        r| j                             ¦   «         nd¦  «        S )NzGlyphClassDef {}, {}, {}, {};r¡   )rà   r;  r‹   r=  r<  r>  r¤   s     rQ   r‹   zGlyphClassDefStatement.asFeaõ  s’   € Ø.×5Ò5Ø'+¤Ð>ˆDŒO×!Ò!Ñ#Ô#Ð#¸BØ+/Ô+>ÐFˆDÔ×%Ò%Ñ'Ô'Ð'ÀBØ'+¤Ð>ˆDŒO×!Ò!Ñ#Ô#Ð#¸BØ,0Ô,@ÐHˆDÔ ×&Ò&Ñ(Ô(Ð(Àbñ	
ô 
ð 	
rS   r˜   rª   r  rN   rS   rQ   r   r   à  s_   € € € € € ðð ð
 QUð/ð /ð /ð /ðIð Ið Ið
ð 
ð 
ð 
ð 
ð 
rS   r   c                   ó,   — e Zd ZdZd„ Zd„ Zd„ Zdd„ZdS )	r   aB  One `or more` ``markClass`` statements for the same mark class.

    While glyph classes can be defined only once, the feature file format
    allows expanding mark classes with multiple definitions, each using
    different glyphs and anchors. The following are two ``MarkClassDefinitions``
    for the same ``MarkClass``::

        markClass [acute grave] <anchor 350 800> @FRENCH_ACCENTS;
        markClass [cedilla] <anchor 350 -200> @FRENCH_ACCENTS;

    The ``MarkClass`` object is therefore just a container for a list of
    :class:`MarkClassDefinition` statements.
    c                 óH   — || _         g | _        t          ¦   «         | _        d S r˜   )r‡   Údefinitionsr   rÍ   )r›   r‡   s     rQ   rœ   zMarkClass.__init__  s    € ØˆŒ	ØˆÔÝ!‘m”mˆŒˆˆrS   c                 óN  — t          |t          ¦  «        sJ ‚| j                             t	          j        |¦  «        ¦  «         |                     ¦   «         D ]L}|| j        v r7| j        |         j        }|€d}nd|› �}t          d|›d|›�|j        ¦  «        ‚|| j        |<   ŒMdS )z@Add a :class:`MarkClassDefinition` statement to this mark class.Nr¡   z at zGlyph z already defined)
r�   r   rF  rÙ   ÚweakrefÚproxyrÁ   rÍ   r™   r   )r›   Ú
definitionrÇ   ÚotherLocrÝ   s        rQ   ÚaddDefinitionzMarkClass.addDefinition  sÍ   € å˜*Õ&9Ñ:Ô:Ð:Ð:Ð:ØÔ×Ò¥¤¨jÑ 9Ô 9Ñ:Ô:Ð:Ø×(Ò(Ñ*Ô*ð 
	,ð 
	,ˆEØ˜œÐ#Ð#Øœ; uÔ-Ô6�ØÐ#Ø�C�Cà+ Ð+Ð+�CÝ%�oØ49°E°E¸3¸3Ð?ÀÔATñô ð ð ",ˆDŒK˜ÑÐð
	,ð 
	,rS   c                 óN   — t          | j                             ¦   «         ¦  «        S rÉ   )r‘   rÍ   Úkeysr¨   s    rQ   rÁ   zMarkClass.glyphSet"  s   € å�T”[×%Ò%Ñ'Ô'Ñ(Ô(Ð(rS   r¡   c                 óN   — d                      d„ | j        D ¦   «         ¦  «        }|S )Nr   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r˜   r§   )rO   Úds     rQ   rR   z"MarkClass.asFea.<locals>.<genexpr>'  s*   è è € Ð<Ð< a˜Ÿš™	œ	Ð<Ð<Ð<Ð<Ð<Ð<rS   )rT   rF  r÷   s      rQ   r‹   zMarkClass.asFea&  s*   € Ø�iŠiÐ<Ð<¨4Ô+;Ð<Ñ<Ô<Ñ<Ô<ˆØˆ
rS   Nrª   )r«   r¬   r­   r®   rœ   rL  rÁ   r‹   rN   rS   rQ   r   r   þ  s_   € € € € € ðð ð$ð $ð $ð
,ð ,ð ,ð )ð )ð )ðð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   a   A single ``markClass`` statement. The ``markClass`` should be a
    :class:`MarkClass` object, the ``anchor`` an :class:`Anchor` object,
    and the ``glyphs`` parameter should be a `glyph-containing object`_ .

    Example:

        .. code:: python

            mc = MarkClass("FRENCH_ACCENTS")
            mc.addDefinition( MarkClassDefinition(mc, Anchor(350, 800),
                GlyphClass([ GlyphName("acute"), GlyphName("grave") ])
            ) )
            mc.addDefinition( MarkClassDefinition(mc, Anchor(350, -200),
                GlyphClass([ GlyphName("cedilla") ])
            ) )

            mc.asFea()
            # markClass [acute grave] <anchor 350 800> @FRENCH_ACCENTS;
            # markClass [cedilla] <anchor 350 -200> @FRENCH_ACCENTS;

    Nc                 óî   — t                                | |¦  «         t          |t          ¦  «        sJ ‚t          |t          ¦  «        rt          |t
          ¦  «        sJ ‚|||c| _        | _        | _        d S r˜   )	rB   rœ   r�   r   r   r'   rï   rW   rÍ   )r›   rï   rW   rÍ   r™   s        rQ   rœ   zMarkClassDefinition.__init__B  sm   € Ý×Ò˜4 Ñ*Ô*Ð*Ý˜)¥YÑ/Ô/Ð/Ð/Ð/Ý˜&¥&Ñ)Ô)ÐL­j¸ÅÑ.LÔ.LÐLÐLÐLØ3<¸fÀfÐ0ˆŒ˜œ T¤[ [ [rS   c                 ó4   — | j                              ¦   «         S rÉ   )rÍ   rÁ   r¨   s    rQ   rÁ   zMarkClassDefinition.glyphSetH  s   € àŒ{×#Ò#Ñ%Ô%Ð%rS   r¡   c                 ó    — d                      | j                             ¦   «         | j                             ¦   «         | j        j        ¦  «        S )NzmarkClass {} {} @{};)rà   rÍ   r‹   rW   rï   r‡   r¤   s     rQ   r‹   zMarkClassDefinition.asFeaL  sB   € Ø%×,Ò,ØŒK×ÒÑÔ ¤×!2Ò!2Ñ!4Ô!4°d´nÔ6Iñ
ô 
ð 	
rS   r˜   rª   rÄ   rN   rS   rQ   r   r   +  sY   € € € € € ðð ð,Mð Mð Mð Mð&ð &ð &ð
ð 
ð 
ð 
ð 
ð 
rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   z¹A ``sub ... from ...`` statement.

    ``glyph`` and ``replacement`` should be `glyph-containing objects`_.
    ``prefix`` and ``suffix`` should be lists of `glyph-containing objects`_.Nc                 óv   — t                                | |¦  «         |||c| _        | _        | _        || _        d S r˜   )rB   rœ   ÚprefixrÇ   ÚsuffixÚreplacement)r›   rX  rÇ   rY  rZ  r™   s         rQ   rœ   z AlternateSubstStatement.__init__X  s<   € Ý×Ò˜4 Ñ*Ô*Ð*Ø06¸¸vÐ,ˆŒ�T”Z ¤Ø&ˆÔÐÐrS   c                 óN  — | j                              ¦   «         }t          |¦  «        dk    s
J |¦   «         ‚t          |¦  «        d         }d„ | j        D ¦   «         }d„ | j        D ¦   «         }| j                             ¦   «         }|                     | j        ||||¦  «         dS )z5Calls the builder's ``add_alternate_subst`` callback.r�   r   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   ©rÁ   ©rO   Úps     rQ   r  z1AlternateSubstStatement.build.<locals>.<listcomp>b  ó    € Ð4Ð4Ð4 1�!—*’*‘,”,Ð4Ð4Ð4rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  ©rO   rþ   s     rQ   r  z1AlternateSubstStatement.build.<locals>.<listcomp>c  r`  rS   N)	rÇ   rÁ   r’   ÚlistrX  rY  rZ  Úadd_alternate_substr™   )r›   rŸ   rÇ   rX  rY  rZ  s         rQ   r    zAlternateSubstStatement.build]  sŸ   € à”
×#Ò#Ñ%Ô%ˆÝ�5‰zŒz˜QŠˆˆ ‰ŒˆÝ�U‘”˜A”ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØÔ&×/Ò/Ñ1Ô1ˆØ×#Ò# D¤M°6¸5À&È+ÑVÔVÐVÐVÐVrS   r¡   c                 ó  — d}t          | j        ¦  «        st          | j        ¦  «        r©t          | j        ¦  «        r3|d                     t	          t
          | j        ¦  «        ¦  «        dz   z  }|t          | j        ¦  «        dz   z  }t          | j        ¦  «        r3|dd                     t	          t
          | j        ¦  «        ¦  «        z   z  }n|t          | j        ¦  «        z  }|dz  }|t          | j        ¦  «        z  }|dz  }|S )Núsub rÓ   ú'z from r8  )r’   rX  rY  rT   rÖ   r‹   rÇ   rZ  r÷   s      rQ   r‹   zAlternateSubstStatement.asFeag  sö   € ØˆÝˆtŒ{ÑÔð 	%�s 4¤;Ñ/Ô/ð 	%Ý�4”;ÑÔð ?Ø�s—x’x¥¥E¨4¬;Ñ 7Ô 7Ñ8Ô8¸3Ñ>Ñ>�Ø•5˜œÑ$Ô$ sÑ*Ñ*ˆCÝ�4”;ÑÔð ?Ø�s˜SŸXšX¥c­%°´Ñ&=Ô&=Ñ>Ô>Ñ>Ñ>�øà•5˜œÑ$Ô$Ñ$ˆCØˆx‰ˆØ�u�TÔ%Ñ&Ô&Ñ&ˆØˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r   r   R  sZ   € € € € € ðQð Qð
'ð 'ð 'ð 'ð
Wð Wð Wðð ð ð ð ð rS   r   c                   ó,   — e Zd ZdZ	 	 	 	 	 dd„Zdd„ZdS )r   z¬An ``Anchor`` element, used inside a ``pos`` rule.

    If a ``name`` is given, this will be used in preference to the coordinates.
    Other values should be integer.
    Nc                 ó”   — t                                | |¦  «         || _        |||c| _        | _        | _        ||c| _        | _        d S r˜   )r'   rœ   r‡   ÚxÚyÚcontourpointÚxDeviceTableÚyDeviceTable)r›   rj  rk  r‡   rl  rm  rn  r™   s           rQ   rœ   zAnchor.__init__~  sP   € õ 	×Ò˜D (Ñ+Ô+Ð+ØˆŒ	Ø,-¨q°,Ð)ˆŒ�”˜Ô)Ø/;¸\Ð,ˆÔ˜4Ô,Ð,Ð,rS   r¡   c                 óf  — | j         �d                     | j         ¦  «        S d                     | j        | j        ¦  «        }| j        r|d                     | j        ¦  «        z  }| j        s| j        r8|dz  }|t          | j        ¦  «        z  }|dz  }|t          | j        ¦  «        z  }|dz  }|S )Nz<anchor {}>z<anchor {} {}ú contourpoint {}rÓ   ú>)r‡   rà   rj  rk  rl  rm  rn  rV   r÷   s      rQ   r‹   zAnchor.asFea�  sÀ   € ØŒ9Ð Ø ×'Ò'¨¬	Ñ2Ô2Ð2Ø×$Ò$ T¤V¨T¬VÑ4Ô4ˆØÔð 	@ØÐ%×,Ò,¨TÔ->Ñ?Ô?Ñ?ˆCØÔð 	5 Ô 1ð 	5Ø�3‰JˆCØ•> $Ô"3Ñ4Ô4Ñ4ˆCØ�3‰JˆCØ•> $Ô"3Ñ4Ô4Ñ4ˆCØˆs‰
ˆØˆ
rS   )NNNNNrª   rù   rN   rS   rQ   r   r   w  s[   € € € € € ðð ð ØØØØðJð Jð Jð Jðð ð ð ð ð rS   r   c                   ó"   — e Zd ZdZdd„Zdd„ZdS )r   zCA named anchor definition. (2.e.viii). ``name`` should be a string.Nc                 óz   — t                                | |¦  «         ||||f\  | _        | _        | _        | _        d S r˜   )rB   rœ   r‡   rj  rk  rl  )r›   r‡   rj  rk  rl  r™   s         rQ   rœ   zAnchorDefinition.__init__Ÿ  s>   € Ý×Ò˜4 Ñ*Ô*Ð*Ø7;¸QÀÀ<Ð7OÑ4ˆŒ	�4”6˜4œ6 4Ô#4Ð#4Ð#4rS   r¡   c                 óÈ   — d                      | j        | j        ¦  «        }| j        r|d                      | j        ¦  «        z  }|d                      | j        ¦  «        z  }|S )NzanchorDef {} {}rp  z {};)rà   rj  rk  rl  r‡   r÷   s      rQ   r‹   zAnchorDefinition.asFea£  s`   € Ø×&Ò& t¤v¨t¬vÑ6Ô6ˆØÔð 	@ØÐ%×,Ò,¨TÔ->Ñ?Ô?Ñ?ˆCØˆv�}Š}˜TœYÑ'Ô'Ñ'ˆØˆ
rS   rå   rª   rù   rN   rS   rQ   r   r   œ  sF   € € € € € ØMÐMðPð Pð Pð Pðð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   z&A ``GDEF`` table ``Attach`` statement.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   rÍ   ÚcontourPoints)r›   rÍ   rw  r™   s       rQ   rœ   zAttachStatement.__init__®  s-   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒØ*ˆÔÐÐrS   c                 óz   — | j                              ¦   «         }|                     | j        || j        ¦  «         dS )z3Calls the builder's ``add_attach_points`` callback.N)rÍ   rÁ   Úadd_attach_pointsr™   rw  ©r›   rŸ   rÍ   s      rQ   r    zAttachStatement.build³  s8   € à”×%Ò%Ñ'Ô'ˆØ×!Ò! $¤-°¸Ô9KÑLÔLÐLÐLÐLrS   r¡   c                 ó    — d                      | j                             ¦   «         d                     d„ | j        D ¦   «         ¦  «        ¦  «        S )NzAttach {} {};rÓ   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   ©Ústr)rO   Úcs     rQ   rR   z(AttachStatement.asFea.<locals>.<genexpr>º  s(   è è € Ð)MÐ)M°Q­#¨a©&¬&Ð)MÐ)MÐ)MÐ)MÐ)MÐ)MrS   )rà   rÍ   r‹   rT   rw  r¤   s     rQ   r‹   zAttachStatement.asFea¸  sK   € Ø×%Ò%ØŒK×ÒÑÔ §¢Ð)MÐ)M¸$Ô:LÐ)MÑ)MÔ)MÑ!MÔ!Mñ
ô 
ð 	
rS   r˜   rª   r  rN   rS   rQ   r   r   «  sT   € € € € € Ø0Ð0ð+ð +ð +ð +ð
Mð Mð Mð

ð 
ð 
ð 
ð 
ð 
rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r    a@  A chained contextual positioning statement.

    ``prefix``, ``glyphs``, and ``suffix`` should be lists of
    `glyph-containing objects`_ .

    ``lookups`` should be a list of elements representing what lookups
    to apply at each glyph position. Each element should be a
    :class:`LookupBlock` to apply a single chaining lookup at the given
    position, a list of :class:`LookupBlock`\ s to apply multiple
    lookups, or ``None`` to apply no lookup. The length of the outer
    list should equal the length of ``glyphs``; the inner lists can be
    of variable length.Nc                 ó  — t                                | |¦  «         |||c| _        | _        | _        t          |¦  «        | _        t          |¦  «        D ]3\  }}|r,	 t          |¦  «         Œ# t          $ r |g| j        |<   Y Œ/w xY wŒ4d S r˜   ©
rB   rœ   rX  rÍ   rY  rc  Úlookupsr_   ÚiterÚ	TypeError©r›   rX  rÍ   rY  rƒ  r™   Úirm   s           rQ   rœ   z!ChainContextPosStatement.__init__Ì  ó«   € Ý×Ò˜4 Ñ*Ô*Ð*Ø06¸ÀÐ-ˆŒ�T”[ $¤+Ý˜G‘}”}ˆŒÝ" 7Ñ+Ô+ð 	/ð 	/‰IˆAˆvØð /ð/Ý˜‘L”L�L�LøÝ ð /ð /ð /Ø'- h�D”L ‘O�O�Oð/øøøð/ð	/ð 	/ó   ÁA-Á-BÂBc                 ó²   — d„ | j         D ¦   «         }d„ | j        D ¦   «         }d„ | j        D ¦   «         }|                     | j        |||| j        ¦  «         dS )z7Calls the builder's ``add_chain_context_pos`` callback.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z2ChainContextPosStatement.build.<locals>.<listcomp>Ù  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  ©rO   r•   s     rQ   r  z2ChainContextPosStatement.build.<locals>.<listcomp>Ú  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z2ChainContextPosStatement.build.<locals>.<listcomp>Û  r`  rS   N)rX  rÍ   rY  Úadd_chain_context_posr™   rƒ  ©r›   rŸ   rX  rÍ   rY  s        rQ   r    zChainContextPosStatement.build×  sr   € à4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ×%Ò%ØŒM˜6 6¨6°4´<ñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 ó
  — d}t          | j        ¦  «        s3t          | j        ¦  «        st          d„ | j        D ¦   «         ¦  «        �rt          | j        ¦  «        r*|d                     d„ | j        D ¦   «         ¦  «        dz   z  }t          | j        ¦  «        D ]i\  }}||                     ¦   «         dz   z  }| j        |         r| j        |         D ]}|d|j	        z   z  }Œ|t          | j        ¦  «        dz
  k     r|dz  }Œjt          | j        ¦  «        r3|dd                     t          t          | j        ¦  «        ¦  «        z   z  }n0|d                     t          t          | j        ¦  «        ¦  «        z  }|dz  }|S )	Núpos c                 ó   — g | ]}|d u‘ŒS r˜   rN   ©rO   rj  s     rQ   r  z2ChainContextPosStatement.asFea.<locals>.<listcomp>å  ó   € Ð8Ð8Ð8 a�A˜T�MÐ8Ð8Ð8rS   rÓ   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r˜   r§   r�  s     rQ   rR   z1ChainContextPosStatement.asFea.<locals>.<genexpr>è  ó*   è è € Ð?Ð?¨a §¢¡	¤	Ð?Ð?Ð?Ð?Ð?Ð?rS   rg  ú lookup r�   r8  ©r’   rX  rY  Úanyrƒ  rT   r_   rÍ   r‹   r‡   rÖ   ©r›   r¥   rø   r‡  r•   Úlus         rQ   r‹   zChainContextPosStatement.asFeaà  ó†  € Øˆå�”ÑÔð	5å�4”;ÑÔð	5õ Ð8Ð8¨4¬<Ð8Ñ8Ô8Ñ9Ô9ñ	5õ
 �4”;ÑÔð FØ�s—x’xÐ?Ð?°4´;Ð?Ñ?Ô?Ñ?Ô?À#ÑEÑE�Ý! $¤+Ñ.Ô.ð ð ‘��1Ø�q—w’w‘y”y 3‘Ñ&�Ø”< ”?ð 4Ø"œl¨1œoð 4ð 4˜Ø˜z¨B¬GÑ3Ñ3˜˜Ø•s˜4œ;Ñ'Ô'¨!Ñ+Ò+Ð+Ø˜3‘J�CøÝ�4”;ÑÔð ?Ø�s˜SŸXšX¥c­%°´Ñ&=Ô&=Ñ>Ô>Ñ>Ñ>�øà�3—8’8�C¥ t¤{Ñ3Ô3Ñ4Ô4Ñ4ˆCØˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r    r    ¾  óU   € € € € € ðð ð	/ð 	/ð 	/ð 	/ð
ð 
ð 
ðð ð ð ð ð rS   r    c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r!   aA  A chained contextual substitution statement.

    ``prefix``, ``glyphs``, and ``suffix`` should be lists of
    `glyph-containing objects`_ .

    ``lookups`` should be a list of elements representing what lookups
    to apply at each glyph position. Each element should be a
    :class:`LookupBlock` to apply a single chaining lookup at the given
    position, a list of :class:`LookupBlock`\ s to apply multiple
    lookups, or ``None`` to apply no lookup. The length of the outer
    list should equal the length of ``glyphs``; the inner lists can be
    of variable length.Nc                 ó  — t                                | |¦  «         |||c| _        | _        | _        t          |¦  «        | _        t          |¦  «        D ]3\  }}|r,	 t          |¦  «         Œ# t          $ r |g| j        |<   Y Œ/w xY wŒ4d S r˜   r‚  r†  s           rQ   rœ   z#ChainContextSubstStatement.__init__  rˆ  r‰  c                 ó²   — d„ | j         D ¦   «         }d„ | j        D ¦   «         }d„ | j        D ¦   «         }|                     | j        |||| j        ¦  «         dS )z9Calls the builder's ``add_chain_context_subst`` callback.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z4ChainContextSubstStatement.build.<locals>.<listcomp>  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r�  s     rQ   r  z4ChainContextSubstStatement.build.<locals>.<listcomp>  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z4ChainContextSubstStatement.build.<locals>.<listcomp>  r`  rS   N)rX  rÍ   rY  Úadd_chain_context_substr™   rƒ  r�  s        rQ   r    z ChainContextSubstStatement.build  sr   € à4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ×'Ò'ØŒM˜6 6¨6°4´<ñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 ó
  — d}t          | j        ¦  «        s3t          | j        ¦  «        st          d„ | j        D ¦   «         ¦  «        �rt          | j        ¦  «        r*|d                     d„ | j        D ¦   «         ¦  «        dz   z  }t          | j        ¦  «        D ]i\  }}||                     ¦   «         dz   z  }| j        |         r| j        |         D ]}|d|j	        z   z  }Œ|t          | j        ¦  «        dz
  k     r|dz  }Œjt          | j        ¦  «        r3|dd                     t          t          | j        ¦  «        ¦  «        z   z  }n0|d                     t          t          | j        ¦  «        ¦  «        z  }|dz  }|S )	Nrf  c                 ó   — g | ]}|d u‘ŒS r˜   rN   r”  s     rQ   r  z4ChainContextSubstStatement.asFea.<locals>.<listcomp>  r•  rS   rÓ   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r˜   r§   r�  s     rQ   rR   z3ChainContextSubstStatement.asFea.<locals>.<genexpr>"  r—  rS   rg  r˜  r�   r8  r™  r›  s         rQ   r‹   z ChainContextSubstStatement.asFea  r�  rS   r˜   rª   r  rN   rS   rQ   r!   r!   ø  rž  rS   r!   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r$   znA cursive positioning statement. Entry and exit anchors can either
    be :class:`Anchor` objects or ``None``.Nc                 óh   — t                                | |¦  «         || _        ||c| _        | _        d S r˜   )rB   rœ   rè   ÚentryAnchorÚ
exitAnchor)r›   rè   r«  r¬  r™   s        rQ   rœ   zCursivePosStatement.__init__6  s4   € Ý×Ò˜4 Ñ*Ô*Ð*Ø$ˆŒØ,7¸Ð)ˆÔ˜$œ/˜/˜/rS   c                 ó‚   — |                      | j        | j                             ¦   «         | j        | j        ¦  «         dS )z8Calls the builder object's ``add_cursive_pos`` callback.N)Úadd_cursive_posr™   rè   rÁ   r«  r¬  rž   s     rQ   r    zCursivePosStatement.build;  sB   € à×ÒØŒM˜4œ?×3Ò3Ñ5Ô5°tÔ7GÈÌñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 óæ   — | j         r| j                              ¦   «         nd}| j        r| j                             ¦   «         nd}d                     | j                             ¦   «         ||¦  «        S )Nú<anchor NULL>zpos cursive {} {} {};)r«  r‹   r¬  rà   rè   )r›   r¥   ÚentryÚexits       rQ   r‹   zCursivePosStatement.asFeaA  sh   € Ø,0Ô,<ÐQ�Ô ×&Ò&Ñ(Ô(Ð(À/ˆØ*.¬/ÐNˆtŒ×$Ò$Ñ&Ô&Ð&¸ˆØ&×-Ò-¨d¬o×.CÒ.CÑ.EÔ.EÀuÈdÑSÔSÐSrS   r˜   rª   r  rN   rS   rQ   r$   r$   2  s_   € € € € € ð/ð /ðDð Dð Dð Dð

ð 
ð 
ðTð Tð Tð Tð Tð TrS   r$   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r)   zExample: ``feature salt;``Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   )rB   rœ   r™   ÚfeatureName)r›   rµ  r™   s      rQ   rœ   z"FeatureReferenceStatement.__init__J  s/   € Ý×Ò˜4 Ñ*Ô*Ð*Ø+3°[Ð'ˆŒ�tÔ'Ð'Ð'rS   c                 óF   — |                      | j        | j        ¦  «         dS )z>Calls the builder object's ``add_feature_reference`` callback.N)Úadd_feature_referencer™   rµ  rž   s     rQ   r    zFeatureReferenceStatement.buildN  s#   € à×%Ò% d¤m°TÔ5EÑFÔFÐFÐFÐFrS   r¡   c                 ó6   — d                      | j        ¦  «        S )Nzfeature {};)rà   rµ  r¤   s     rQ   r‹   zFeatureReferenceStatement.asFeaR  s   € Ø×#Ò# DÔ$4Ñ5Ô5Ð5rS   r˜   rª   r  rN   rS   rQ   r)   r)   G  sX   € € € € € Ø$Ð$ðBð Bð Bð BðGð Gð Gð6ð 6ð 6ð 6ð 6ð 6rS   r)   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r,   zøAn ``ignore pos`` statement, containing `one or more` contexts to ignore.

    ``chainContexts`` should be a list of ``(prefix, glyphs, suffix)`` tuples,
    with each of ``prefix``, ``glyphs`` and ``suffix`` being
    `glyph-containing objects`_ .Nc                 óJ   — t                                | |¦  «         || _        d S r˜   ©rB   rœ   ÚchainContexts©r›   r¼  r™   s      rQ   rœ   zIgnorePosStatement.__init__]  ó&   € Ý×Ò˜4 Ñ*Ô*Ð*Ø*ˆÔÐÐrS   c                 ó¦   — | j         D ]H\  }}}d„ |D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }|                     | j        |||g ¦  «         ŒIdS )z[Calls the builder object's ``add_chain_context_pos`` callback on each
        rule context.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z,IgnorePosStatement.build.<locals>.<listcomp>e  ó    € Ð3Ð3Ð3 q�a—j’j‘l”lÐ3Ð3Ð3rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r�  s     rQ   r  z,IgnorePosStatement.build.<locals>.<listcomp>f  rÁ  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z,IgnorePosStatement.build.<locals>.<listcomp>g  rÁ  rS   N)r¼  r�  r™   r�  s        rQ   r    zIgnorePosStatement.builda  s†   € ð '+Ô&8ð 	Uð 	UÑ"ˆF�F˜FØ3Ð3¨FÐ3Ñ3Ô3ˆFØ3Ð3¨FÐ3Ñ3Ô3ˆFØ3Ð3¨FÐ3Ñ3Ô3ˆFØ×)Ò)¨$¬-¸ÀÈÐQSÑTÔTÐTÐTð		Uð 	UrS   r¡   c           	      óV  — g }| j         D �]\  }}}d}t          |¦  «        st          |¦  «        r�t          |¦  «        r.|d                     t          t          |¦  «        ¦  «        dz   z  }|d                     d„ |D ¦   «         ¦  «        z  }t          |¦  «        r.|dd                     t          t          |¦  «        ¦  «        z   z  }n+|d                     t          t          |¦  «        ¦  «        z  }|                     |¦  «         �Œdd                     |¦  «        z   dz   S )Nr¡   rÓ   c              3   óD   K  — | ]}|                      ¦   «         d z   V — ŒdS ©rg  Nr§   r�  s     rQ   rR   z+IgnorePosStatement.asFea.<locals>.<genexpr>q  s.   è è € Ð@Ð@°A §¢¡	¤	¨C¡Ð@Ð@Ð@Ð@Ð@Ð@rS   zignore pos rL   r8  ©r¼  r’   rT   rÖ   r‹   rÙ   ©r›   r¥   ÚcontextsrX  rÍ   rY  rø   s          rQ   r‹   zIgnorePosStatement.asFeaj  s  € ØˆØ&*Ô&8ð 
	!ñ 
	!Ñ"ˆF�F˜FØˆCÝ�6‰{Œ{ð 4�c &™kœkð 4Ý�v‘;”;ð >Ø˜3Ÿ8š8¥C­¨vÑ$6Ô$6Ñ7Ô7¸#Ñ=Ñ=�CØ�s—x’xÐ@Ð@¸Ð@Ñ@Ô@Ñ@Ô@Ñ@�Ý�v‘;”;ð >Ø˜3 §¢­#­e°VÑ*<Ô*<Ñ!=Ô!=Ñ=Ñ=�Cøà�s—x’x¥¥E¨6Ñ 2Ô 2Ñ3Ô3Ñ3�Ø�OŠO˜CÑ Ô Ð Ñ Ø˜tŸyšy¨Ñ2Ô2Ñ2°SÑ8Ð8rS   r˜   rª   r  rN   rS   rQ   r,   r,   V  sX   € € € € € ð%ð %ð+ð +ð +ð +ðUð Uð Uð9ð 9ð 9ð 9ð 9ð 9rS   r,   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r-   zøAn ``ignore sub`` statement, containing `one or more` contexts to ignore.

    ``chainContexts`` should be a list of ``(prefix, glyphs, suffix)`` tuples,
    with each of ``prefix``, ``glyphs`` and ``suffix`` being
    `glyph-containing objects`_ .Nc                 óJ   — t                                | |¦  «         || _        d S r˜   r»  r½  s      rQ   rœ   zIgnoreSubstStatement.__init__�  r¾  rS   c                 ó¦   — | j         D ]H\  }}}d„ |D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }|                     | j        |||g ¦  «         ŒIdS )z]Calls the builder object's ``add_chain_context_subst`` callback on
        each rule context.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z.IgnoreSubstStatement.build.<locals>.<listcomp>‰  rÁ  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r�  s     rQ   r  z.IgnoreSubstStatement.build.<locals>.<listcomp>Š  rÁ  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z.IgnoreSubstStatement.build.<locals>.<listcomp>‹  rÁ  rS   N)r¼  r¥  r™   r�  s        rQ   r    zIgnoreSubstStatement.build…  s†   € ð '+Ô&8ð 	Wð 	WÑ"ˆF�F˜FØ3Ð3¨FÐ3Ñ3Ô3ˆFØ3Ð3¨FÐ3Ñ3Ô3ˆFØ3Ð3¨FÐ3Ñ3Ô3ˆFØ×+Ò+¨D¬M¸6À6È6ÐSUÑVÔVÐVÐVð		Wð 	WrS   r¡   c           	      ó¾  — g }| j         D ]¹\  }}}d}t          |¦  «        r.|d                     t          t          |¦  «        ¦  «        dz   z  }|d                     d„ |D ¦   «         ¦  «        z  }t          |¦  «        r.|dd                     t          t          |¦  «        ¦  «        z   z  }|                     |¦  «         Œºdd                     |¦  «        z   dz   S )Nr¡   rÓ   c              3   óD   K  — | ]}|                      ¦   «         d z   V — ŒdS rÆ  r§   r�  s     rQ   rR   z-IgnoreSubstStatement.asFea.<locals>.<genexpr>”  s.   è è € Ð<Ð<°˜AŸGšG™IœI¨™OÐ<Ð<Ð<Ð<Ð<Ð<rS   zignore sub rL   r8  rÇ  rÈ  s          rQ   r‹   zIgnoreSubstStatement.asFeaŽ  sá   € ØˆØ&*Ô&8ð 	!ð 	!Ñ"ˆF�F˜FØˆCÝ�6‰{Œ{ð :Ø�s—x’x¥¥E¨6Ñ 2Ô 2Ñ3Ô3°cÑ9Ñ9�Ø�3—8’8Ð<Ð<°VÐ<Ñ<Ô<Ñ<Ô<Ñ<ˆCÝ�6‰{Œ{ð :Ø�s˜SŸXšX¥c­%°Ñ&8Ô&8Ñ9Ô9Ñ9Ñ9�Ø�OŠO˜CÑ Ô Ð Ð Ø˜tŸyšy¨Ñ2Ô2Ñ2°SÑ8Ð8rS   r˜   rª   r  rN   rS   rQ   r-   r-   z  sX   € € € € € ð%ð %ð+ð +ð +ð +ðWð Wð Wð
9ð 
9ð 
9ð 
9ð 
9ð 
9rS   r-   c                   ó2   ‡ — e Zd ZdZdˆ fd„	Zd„ Zdd„Zˆ xZS )	r.   zAn ``include()`` statement.Nc                 óf   •— t          t          | ¦  «                             |¦  «         || _        d S r˜   )rµ   r.   rœ   Úfilename)r›   rÔ  r™   r·   s      €rQ   rœ   zIncludeStatement.__init__ž  s-   ø€ ÝÕ Ñ%Ô%×.Ò.¨xÑ8Ô8Ð8Ø ˆŒˆˆrS   c                 ó,   — t          d| j        ¦  «        ‚)NzqBuilding an include statement is not implemented yet. Instead, use Parser(..., followIncludes=True) for building.)r   r™   r¨   s    rQ   r    zIncludeStatement.build¢  s   € åðJàŒMñ
ô 
ð 	
rS   r¡   c                 ó   — |d| j         z  z   S )Nzinclude(%s);)rÔ  r¤   s     rQ   r‹   zIncludeStatement.asFeaª  s   € Ø˜¨¬Ñ6Ñ6Ð6rS   r˜   rª   )r«   r¬   r­   r®   rœ   r    r‹   rº   r»   s   @rQ   r.   r.   ›  sf   ø€ € € € € Ø%Ð%ð!ð !ð !ð !ð !ð !ð
ð 
ð 
ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7rS   r.   c                   ó(   — e Zd ZdZd	d„Zd„ Zd
d„ZdS )r/   z*A ``language`` statement within a feature.TFNc                 ó�   — t                                | |¦  «         t          |¦  «        dk    sJ ‚|| _        || _        || _        d S )Né   )rB   rœ   r’   rk   Úinclude_defaultrw   )r›   rk   rÚ  rw   r™   s        rQ   rœ   zLanguageStatement.__init__±  sI   € Ý×Ò˜4 Ñ*Ô*Ð*Ý�8‰}Œ} Ò!Ð!Ð!Ð!Ø ˆŒØ.ˆÔØ ˆŒˆˆrS   c                 ó`   — |                      | j        | j        | j        | j        ¬¦  «         dS )z4Call the builder object's ``set_language`` callback.)r™   rk   rÚ  rw   N)Úset_languager™   rk   rÚ  rw   rž   s     rQ   r    zLanguageStatement.build¸  s>   € à×ÒØ”]Ø”]Ø Ô0Ø”]ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 ó˜   — d                      | j                             ¦   «         ¦  «        }| j        s|dz  }| j        r|dz  }|dz  }|S )Nzlanguage {}z exclude_dfltz	 requiredr8  )rà   rk   r"  rÚ  rw   r÷   s      rQ   r‹   zLanguageStatement.asFeaÁ  sZ   € Ø×"Ò" 4¤=×#6Ò#6Ñ#8Ô#8Ñ9Ô9ˆØÔ#ð 	#Ø�?Ñ"ˆCØŒ=ð 	Ø�;ÑˆCØˆs‰
ˆØˆ
rS   )TFNrª   r  rN   rS   rQ   r/   r/   ®  sQ   € € € € € Ø4Ð4ð!ð !ð !ð !ð
ð 
ð 
ðð ð ð ð ð rS   r/   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r0   z)A top-level ``languagesystem`` statement.Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   )rB   rœ   r{   rk   )r›   r{   rk   r™   s       rQ   rœ   z LanguageSystemStatement.__init__Î  s,   € Ý×Ò˜4 Ñ*Ô*Ð*Ø&,¨hÐ"ˆŒ�T”]�]�]rS   c                 óR   — |                      | j        | j        | j        ¦  «         dS )z<Calls the builder object's ``add_language_system`` callback.N)Úadd_language_systemr™   r{   rk   rž   s     rQ   r    zLanguageSystemStatement.buildÒ  s&   € à×#Ò# D¤M°4´;ÀÄÑNÔNÐNÐNÐNrS   r¡   c                 óf   — d                      | j        | j                             ¦   «         ¦  «        S )Nzlanguagesystem {} {};)rà   r{   rk   r"  r¤   s     rQ   r‹   zLanguageSystemStatement.asFeaÖ  s(   € Ø&×-Ò-¨d¬k¸4¼=×;NÒ;NÑ;PÔ;PÑQÔQÐQrS   r˜   rª   r  rN   rS   rQ   r0   r0   Ë  sZ   € € € € € Ø3Ð3ð8ð 8ð 8ð 8ðOð Oð OðRð Rð Rð Rð Rð RrS   r0   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r*   zŒA ``head`` table ``FontRevision`` statement. ``revision`` should be a
    number, and will be formatted to three significant decimal places.Nc                 óJ   — t                                | |¦  «         || _        d S r˜   )rB   rœ   Úrevision)r›   rå  r™   s      rQ   rœ   zFontRevisionStatement.__init__Þ  s#   € Ý×Ò˜4 Ñ*Ô*Ð*Ø ˆŒˆˆrS   c                 óF   — |                      | j        | j        ¦  «         d S r˜   )Úset_font_revisionr™   rå  rž   s     rQ   r    zFontRevisionStatement.buildâ  s"   € Ø×!Ò! $¤-°´Ñ?Ô?Ð?Ð?Ð?rS   r¡   c                 ó6   — d                      | j        ¦  «        S )NzFontRevision {:.3f};)rà   rå  r¤   s     rQ   r‹   zFontRevisionStatement.asFeaå  s   € Ø%×,Ò,¨T¬]Ñ;Ô;Ð;rS   r˜   rª   r  rN   rS   rQ   r*   r*   Ú  sZ   € € € € € ðJð Jð!ð !ð !ð !ð@ð @ð @ð<ð <ð <ð <ð <ð <rS   r*   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r1   z˜A ``GDEF`` table ``LigatureCaretByIndex`` statement. ``glyphs`` should be
    a `glyph-containing object`_, and ``carets`` should be a list of integers.Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   ©rB   rœ   rÍ   Úcarets©r›   rÍ   rì  r™   s       rQ   rœ   z&LigatureCaretByIndexStatement.__init__í  ó,   € Ý×Ò˜4 Ñ*Ô*Ð*Ø$*¨FÐ ˆŒ�T”[�[�[rS   c                 ó”   — | j                              ¦   «         }|                     | j        |t	          | j        ¦  «        ¦  «         dS )zBCalls the builder object's ``add_ligatureCaretByIndex_`` callback.N)rÍ   rÁ   Úadd_ligatureCaretByIndex_r™   Úsetrì  rz  s      rQ   r    z#LigatureCaretByIndexStatement.buildñ  s?   € à”×%Ò%Ñ'Ô'ˆØ×)Ò)¨$¬-¸ÅÀTÄ[ÑAQÔAQÑRÔRÐRÐRÐRrS   r¡   c                 ó    — d                      | j                             ¦   «         d                     d„ | j        D ¦   «         ¦  «        ¦  «        S )NzLigatureCaretByIndex {} {};rÓ   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r}  r”  s     rQ   rR   z6LigatureCaretByIndexStatement.asFea.<locals>.<genexpr>ø  ó(   è è € Ð)FÐ)F°Q­#¨a©&¬&Ð)FÐ)FÐ)FÐ)FÐ)FÐ)FrS   ©rà   rÍ   r‹   rT   rì  r¤   s     rQ   r‹   z#LigatureCaretByIndexStatement.asFeaö  sJ   € Ø,×3Ò3ØŒK×ÒÑÔ §¢Ð)FÐ)F¸$¼+Ð)FÑ)FÔ)FÑ!FÔ!Fñ
ô 
ð 	
rS   r˜   rª   r  rN   rS   rQ   r1   r1   é  sZ   € € € € € ðRð Rð4ð 4ð 4ð 4ðSð Sð Sð

ð 
ð 
ð 
ð 
ð 
rS   r1   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r2   z–A ``GDEF`` table ``LigatureCaretByPos`` statement. ``glyphs`` should be
    a `glyph-containing object`_, and ``carets`` should be a list of integers.Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   rë  rí  s       rQ   rœ   z$LigatureCaretByPosStatement.__init__   rî  rS   c                 ó”   — | j                              ¦   «         }|                     | j        |t	          | j        ¦  «        ¦  «         dS )z@Calls the builder object's ``add_ligatureCaretByPos_`` callback.N)rÍ   rÁ   Úadd_ligatureCaretByPos_r™   rñ  rì  rz  s      rQ   r    z!LigatureCaretByPosStatement.build  s?   € à”×%Ò%Ñ'Ô'ˆØ×'Ò'¨¬°v½sÀ4Ä;Ñ?OÔ?OÑPÔPÐPÐPÐPrS   r¡   c                 ó    — d                      | j                             ¦   «         d                     d„ | j        D ¦   «         ¦  «        ¦  «        S )NzLigatureCaretByPos {} {};rÓ   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r}  r”  s     rQ   rR   z4LigatureCaretByPosStatement.asFea.<locals>.<genexpr>  rô  rS   rõ  r¤   s     rQ   r‹   z!LigatureCaretByPosStatement.asFea	  sJ   € Ø*×1Ò1ØŒK×ÒÑÔ §¢Ð)FÐ)F¸$¼+Ð)FÑ)FÔ)FÑ!FÔ!Fñ
ô 
ð 	
rS   r˜   rª   r  rN   rS   rQ   r2   r2   ü  sZ   € € € € € ðRð Rð4ð 4ð 4ð 4ðQð Qð Qð

ð 
ð 
ð 
ð 
ð 
rS   r2   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r3   aS  A chained contextual substitution statement.

    ``prefix``, ``glyphs``, and ``suffix`` should be lists of
    `glyph-containing objects`_; ``replacement`` should be a single
    `glyph-containing object`_.

    If ``forceChain`` is True, this is expressed as a chaining rule
    (e.g. ``sub f' i' by f_i``) even when no context is given.Nc                 ó†   — t                                | |¦  «         |||c| _        | _        | _        ||c| _        | _        d S r˜   )rB   rœ   rX  rÍ   rY  rZ  Ú
forceChain)r›   rX  rÍ   rY  rZ  rþ  r™   s          rQ   rœ   zLigatureSubstStatement.__init__  sC   € Ý×Ò˜4 Ñ*Ô*Ð*Ø17¸ÀÐ-ˆŒ�T”[ $¤+Ø,7¸Ð)ˆÔ˜$œ/˜/˜/rS   c                 ó¾   — d„ | j         D ¦   «         }d„ | j        D ¦   «         }d„ | j        D ¦   «         }|                     | j        |||| j        | j        ¦  «         d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z0LigatureSubstStatement.build.<locals>.<listcomp>  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r�  s     rQ   r  z0LigatureSubstStatement.build.<locals>.<listcomp>   r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z0LigatureSubstStatement.build.<locals>.<listcomp>!  r`  rS   )rX  rÍ   rY  Úadd_ligature_substr™   rZ  rþ  r�  s        rQ   r    zLigatureSubstStatement.build  sw   € Ø4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ×"Ò"ØŒM˜6 6¨6°4Ô3CÀTÄ_ñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 ó@  — d}t          | j        ¦  «        st          | j        ¦  «        s| j        r¤t          | j        ¦  «        r*|d                     d„ | j        D ¦   «         ¦  «        dz   z  }|d                     d„ | j        D ¦   «         ¦  «        z  }t          | j        ¦  «        r*|dd                     d„ | j        D ¦   «         ¦  «        z   z  }n'|d                     d„ | j        D ¦   «         ¦  «        z  }|dz  }|t          | j        ¦  «        z  }|dz  }|S )	Nrf  rÓ   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r˜   r§   r�  s     rQ   rR   z/LigatureSubstStatement.asFea.<locals>.<genexpr>*  r—  rS   c              3   óD   K  — | ]}|                      ¦   «         d z   V — ŒdS rÆ  r§   r�  s     rQ   rR   z/LigatureSubstStatement.asFea.<locals>.<genexpr>+  s.   è è € ÐAÐA°˜AŸGšG™IœI¨™OÐAÐAÐAÐAÐAÐArS   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r˜   r§   r�  s     rQ   rR   z/LigatureSubstStatement.asFea.<locals>.<genexpr>-  s*   è è € Ð%EÐ%E°A a§g¢g¡i¤iÐ%EÐ%EÐ%EÐ%EÐ%EÐ%ErS   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r˜   r§   r�  s     rQ   rR   z/LigatureSubstStatement.asFea.<locals>.<genexpr>/  s*   è è € Ð;Ð;¨!˜AŸGšG™IœIÐ;Ð;Ð;Ð;Ð;Ð;rS   ú by r8  )r’   rX  rY  rþ  rT   rÍ   r‹   rZ  r÷   s      rQ   r‹   zLigatureSubstStatement.asFea&  s,  € ØˆÝˆtŒ{ÑÔð 	<�s 4¤;Ñ/Ô/ð 	<°4´?ð 	<Ý�4”;ÑÔð FØ�s—x’xÐ?Ð?°4´;Ð?Ñ?Ô?Ñ?Ô?À#ÑEÑE�Ø�3—8’8ÐAÐA°T´[ÐAÑAÔAÑAÔAÑAˆCÝ�4”;ÑÔð FØ�s˜SŸXšXÐ%EÐ%E¸¼Ð%EÑ%EÔ%EÑEÔEÑEÑE�øà�3—8’8Ð;Ð;¨t¬{Ð;Ñ;Ô;Ñ;Ô;Ñ;ˆCØˆv‰ˆØ�u�TÔ%Ñ&Ô&Ñ&ˆØˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r3   r3     s[   € € € € € ðBð BðDð Dð Dð Dð

ð 
ð 
ðð ð ð ð ð rS   r3   c                   ó*   — e Zd ZdZ	 dd„Zd„ Zd	d„ZdS )
r4   zôA ``lookupflag`` statement. The ``value`` should be an integer value
    representing the flags in use, but not including the ``markAttachment``
    class and ``markFilteringSet`` values, which must be specified as
    glyph-containing objects.r   Nc                 óf   — t                                | |¦  «         || _        || _        || _        d S r˜   )rB   rœ   r  ÚmarkAttachmentÚmarkFilteringSet)r›   r  r  r  r™   s        rQ   rœ   zLookupFlagStatement.__init__<  s7   € õ 	×Ò˜4 Ñ*Ô*Ð*ØˆŒ
Ø,ˆÔØ 0ˆÔÐÐrS   c                 óÒ   — d}| j         �| j                              ¦   «         }d}| j        �| j                             ¦   «         }|                     | j        | j        ||¦  «         dS )z8Calls the builder object's ``set_lookup_flag`` callback.N)r  rÁ   r  Úset_lookup_flagr™   r  )r›   rŸ   Ú
markAttachÚ
markFilters       rQ   r    zLookupFlagStatement.buildD  sj   € àˆ
ØÔÐ*ØÔ,×5Ò5Ñ7Ô7ˆJØˆ
ØÔ Ð,ØÔ.×7Ò7Ñ9Ô9ˆJØ×Ò ¤¨t¬z¸:ÀzÑRÔRÐRÐRÐRrS   r¡   c                 ó  — g }g d¢}d}t          t          |¦  «        ¦  «        D ]0}| j        |z  dk    r|                     ||         ¦  «         |dz  }Œ1| j        �?|                     d                     | j                             ¦   «         ¦  «        ¦  «         | j        �?|                     d                     | j                             ¦   «         ¦  «        ¦  «         |sdg}d                     d                     |¦  «        ¦  «        S )	N)ÚRightToLeftÚIgnoreBaseGlyphsÚIgnoreLigaturesÚIgnoreMarksr�   r   zMarkAttachmentType {}zUseMarkFilteringSet {}Ú0zlookupflag {};rÓ   )	Úranger’   r  rÙ   r  rà   r‹   r  rT   )r›   r¥   rø   ÚflagsrÏ   r‡  s         rQ   r‹   zLookupFlagStatement.asFeaN  s  € ØˆØUÐUÐUˆØˆÝ•s˜5‘z”zÑ"Ô"ð 	ð 	ˆAØŒz˜DÑ  AÒ%Ð%Ø—
’
˜5 œ8Ñ$Ô$Ð$Ø˜1‘9ˆDˆDØÔÐ*Ø�JŠJÐ.×5Ò5°dÔ6I×6OÒ6OÑ6QÔ6QÑRÔRÑSÔSÐSØÔ Ð,Ø�JŠJÐ/×6Ò6°tÔ7L×7RÒ7RÑ7TÔ7TÑUÔUÑVÔVÐVØð 	Ø�%ˆCØ×&Ò& s§x¢x°¡}¤}Ñ5Ô5Ð5rS   )r   NNNrª   r  rN   rS   rQ   r4   r4   6  s_   € € € € € ð!ð !ð MQð1ð 1ð 1ð 1ðSð Sð Sð6ð 6ð 6ð 6ð 6ð 6rS   r4   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r5   z…Represents a ``lookup ...;`` statement to include a lookup in a feature.

    The ``lookup`` should be a :class:`LookupBlock` object.Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   )rB   rœ   r™   rm   )r›   rm   r™   s      rQ   rœ   z!LookupReferenceStatement.__init__d  s,   € Ý×Ò˜4 Ñ*Ô*Ð*Ø&.°Ð"ˆŒ�t”{�{�{rS   c                 óD   — |                      | j        j        ¦  «         dS )z8Calls the builder object's ``add_lookup_call`` callback.N)Úadd_lookup_callrm   r‡   rž   s     rQ   r    zLookupReferenceStatement.buildh  s!   € à×Ò ¤Ô 0Ñ1Ô1Ð1Ð1Ð1rS   r¡   c                 ó@   — d                      | j        j        ¦  «        S )Nz
lookup {};)rà   rm   r‡   r¤   s     rQ   r‹   zLookupReferenceStatement.asFeal  s   € Ø×"Ò" 4¤;Ô#3Ñ4Ô4Ð4rS   r˜   rª   r  rN   rS   rQ   r5   r5   _  sU   € € € € € ð?ð ?ð8ð 8ð 8ð 8ð2ð 2ð 2ð5ð 5ð 5ð 5ð 5ð 5rS   r5   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r6   z­A mark-to-base positioning rule. The ``base`` should be a
    `glyph-containing object`_. The ``marks`` should be a list of
    (:class:`Anchor`, :class:`MarkClass`) tuples.Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   )rB   rœ   rƒ   Úmarks)r›   rƒ   r!  r™   s       rQ   rœ   zMarkBasePosStatement.__init__u  s,   € Ý×Ò˜4 Ñ*Ô*Ð*Ø $ eÐˆŒ	�4”:�:�:rS   c                 óv   — |                      | j        | j                             ¦   «         | j        ¦  «         dS )z:Calls the builder object's ``add_mark_base_pos`` callback.N)Úadd_mark_base_posr™   rƒ   rÁ   r!  rž   s     rQ   r    zMarkBasePosStatement.buildy  s2   € à×!Ò! $¤-°´×1CÒ1CÑ1EÔ1EÀtÄzÑRÔRÐRÐRÐRrS   r¡   c                 óþ   — d                      | j                             ¦   «         ¦  «        }| j        D ]C\  }}|d|z   t          z   d                      |                     ¦   «         |j        ¦  «        z   z  }ŒD|dz  }|S )Nzpos base {}r   ú{} mark @{}r8  )rà   rƒ   r‹   r!  r  r‡   ©r›   r¥   rø   ÚaÚms        rQ   r‹   zMarkBasePosStatement.asFea}  sz   € Ø×"Ò" 4¤9§?¢?Ñ#4Ô#4Ñ5Ô5ˆØ”Jð 	Sð 	S‰DˆAˆqØ�4˜&‘=¥5Ñ(¨=×+?Ò+?ÀÇÂÁ	Ä	È1Ì6Ñ+RÔ+RÑRÑRˆCˆCØˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r6   r6   p  sX   € € € € € ð5ð 5ð,ð ,ð ,ð ,ðSð Sð Sðð ð ð ð ð rS   r6   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r7   aÙ  A mark-to-ligature positioning rule. The ``ligatures`` must be a
    `glyph-containing object`_. The ``marks`` should be a list of lists: each
    element in the top-level list represents a component glyph, and is made
    up of a list of (:class:`Anchor`, :class:`MarkClass`) tuples representing
    mark attachment points for that position.

    Example::

        m1 = MarkClass("TOP_MARKS")
        m2 = MarkClass("BOTTOM_MARKS")
        # ... add definitions to mark classes...

        glyph = GlyphName("lam_meem_jeem")
        marks = [
            [ (Anchor(625,1800), m1) ], # Attachments on 1st component (lam)
            [ (Anchor(376,-378), m2) ], # Attachments on 2nd component (meem)
            [ ]                         # No attachments on the jeem
        ]
        mlp = MarkLigPosStatement(glyph, marks)

        mlp.asFea()
        # pos ligature lam_meem_jeem <anchor 625 1800> mark @TOP_MARKS
        # ligComponent <anchor 376 -378> mark @BOTTOM_MARKS;

    Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   )rB   rœ   Ú	ligaturesr!  )r›   r+  r!  r™   s       rQ   rœ   zMarkLigPosStatement.__init__   ó,   € Ý×Ò˜4 Ñ*Ô*Ð*Ø%.°Ð"ˆŒ˜œ
˜
˜
rS   c                 óv   — |                      | j        | j                             ¦   «         | j        ¦  «         dS )z9Calls the builder object's ``add_mark_lig_pos`` callback.N)Úadd_mark_lig_posr™   r+  rÁ   r!  rž   s     rQ   r    zMarkLigPosStatement.build¤  s2   € à× Ò  ¤°´×0GÒ0GÑ0IÔ0IÈ4Ì:ÑVÔVÐVÐVÐVrS   r¡   c                 óÖ  — d                      | j                             ¦   «         ¦  «        }g }| j        D ]‡}d}|�t	          |¦  «        sd|z   t
          dz  z   dz   }nI|D ]F\  }}|d|z   t
          dz  z   d                      |                     ¦   «         |j        ¦  «        z   z  }ŒG|                     |¦  «         Œˆ|d|z   t
          z   dz                        |¦  «        z  }|dz  }|S )	Nzpos ligature {}r¡   r   rŒ   r°  r%  ÚligComponentr8  )	rà   r+  r‹   r!  r’   r  r‡   rÙ   rT   )r›   r¥   rø   ÚligsÚlÚtempr'  r(  s           rQ   r‹   zMarkLigPosStatement.asFea¨  s  € Ø×&Ò& t¤~×';Ò';Ñ'=Ô'=Ñ>Ô>ˆØˆØ”ð 	ð 	ˆAØˆDØˆy¥ A¡¤ˆyØ˜f‘}¥u¨q¡yÑ0°?ÑB��àð ð ‘D�A�qØØØ ñ!å !™)ñ$ð (×.Ò.¨q¯wªw©y¬y¸!¼&ÑAÔAñBñ�D�Dð �KŠK˜ÑÔÐÐØ��v‘¥Ñ%¨Ñ6×<Ò<¸TÑBÔBÑBˆØˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r7   r7   …  sX   € € € € € ðð ð46ð 6ð 6ð 6ðWð Wð Wðð ð ð ð ð rS   r7   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r8   z°A mark-to-mark positioning rule. The ``baseMarks`` must be a
    `glyph-containing object`_. The ``marks`` should be a list of
    (:class:`Anchor`, :class:`MarkClass`) tuples.Nc                 óZ   — t                                | |¦  «         ||c| _        | _        d S r˜   )rB   rœ   Ú	baseMarksr!  )r›   r6  r!  r™   s       rQ   rœ   zMarkMarkPosStatement.__init__Â  r,  rS   c                 óv   — |                      | j        | j                             ¦   «         | j        ¦  «         dS )z:Calls the builder object's ``add_mark_mark_pos`` callback.N)Úadd_mark_mark_posr™   r6  rÁ   r!  rž   s     rQ   r    zMarkMarkPosStatement.buildÆ  s2   € à×!Ò! $¤-°´×1HÒ1HÑ1JÔ1JÈDÌJÑWÔWÐWÐWÐWrS   r¡   c                 óþ   — d                      | j                             ¦   «         ¦  «        }| j        D ]C\  }}|d|z   t          z   d                      |                     ¦   «         |j        ¦  «        z   z  }ŒD|dz  }|S )Nzpos mark {}r   r%  r8  )rà   r6  r‹   r!  r  r‡   r&  s        rQ   r‹   zMarkMarkPosStatement.asFeaÊ  s|   € Ø×"Ò" 4¤>×#7Ò#7Ñ#9Ô#9Ñ:Ô:ˆØ”Jð 	Sð 	S‰DˆAˆqØ�4˜&‘=¥5Ñ(¨=×+?Ò+?ÀÇÂÁ	Ä	È1Ì6Ñ+RÔ+RÑRÑRˆCˆCØˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r8   r8   ½  sX   € € € € € ð5ð 5ð6ð 6ð 6ð 6ðXð Xð Xðð ð ð ð ð rS   r8   c                   ó*   — e Zd ZdZ	 dd„Zd„ Zd	d„ZdS )
r9   a™  A multiple substitution statement.

    Args:
        prefix: a list of `glyph-containing objects`_.
        glyph: a single glyph-containing object.
        suffix: a list of glyph-containing objects.
        replacement: a list of glyph-containing objects.
        forceChain: If true, the statement is expressed as a chaining rule
            (e.g. ``sub f' i' by f_i``) even when no context is given.
    FNc                 ó„   — t                                | |¦  «         |||c| _        | _        | _        || _        || _        d S r˜   )rB   rœ   rX  rÇ   rY  rZ  rþ  )r›   rX  rÇ   rY  rZ  rþ  r™   s          rQ   rœ   zMultipleSubstStatement.__init__Þ  sC   € õ 	×Ò˜4 Ñ*Ô*Ð*Ø/5°u¸fÐ,ˆŒ�T”Z ¤Ø&ˆÔØ$ˆŒˆˆrS   c           	      ó¾  — d„ | j         D ¦   «         }d„ | j        D ¦   «         }t          | j        d¦  «        r| j                             ¦   «         }n| j        g}t          |¦  «        }g }| j        D ]j}t          |d¦  «        r|                     ¦   «         }n|g}t          |¦  «        dk    rt          |¦  «        |k    r||z  }|                     |¦  «         Œkt          t          |Ž ¦  «        }t          ¦   «         }	t          |¦  «        D ]L\  }
}||	vrC|	                     |¦  «         |                     | j        ||||r||
         pd| j        ¦  «         ŒMdS )z;Calls the builder object's ``add_multiple_subst`` callback.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z0MultipleSubstStatement.build.<locals>.<listcomp>è  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z0MultipleSubstStatement.build.<locals>.<listcomp>é  r`  rS   rÁ   r�   rN   N)rX  rY  r�   rÇ   rÁ   r’   rZ  rÙ   rc  Úziprñ  r_   ÚaddÚadd_multiple_substr™   rþ  )r›   rŸ   rX  rY  Ú	originalsÚcountÚreplacesÚrÚreplaceÚseen_originalsr‡  rÎ   s               rQ   r    zMultipleSubstStatement.buildæ  s‚  € à4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆÝ�4”:˜zÑ*Ô*ð 	%Øœ
×+Ò+Ñ-Ô-ˆIˆIàœ˜ˆIÝ�I‘”ˆØˆØÔ!ð 	%ð 	%ˆAÝ�q˜*Ñ%Ô%ð ØŸ*š*™,œ,��à˜#�Ý�7‰|Œ|˜qÒ Ð ¥S¨¡\¤\°UÒ%:Ð%:Ø! E™/�Ø�OŠO˜GÑ$Ô$Ð$Ð$Ý�˜X˜Ñ'Ô'ˆå™œˆÝ$ YÑ/Ô/ð 
	ð 
	‰KˆAˆxØ˜~Ð-Ð-Ø×"Ò" 8Ñ,Ô,Ð,Ø×*Ò*Ø”MØØØØÐ, ¨!¤Ð2°Ø”Oñô ð øð
	ð 
	rS   r¡   c                 ó~  — d}t          | j        ¦  «        st          | j        ¦  «        s| j        r©t          | j        ¦  «        r3|d                     t          t          | j        ¦  «        ¦  «        dz   z  }|t          | j        ¦  «        dz   z  }t          | j        ¦  «        r3|dd                     t          t          | j        ¦  «        ¦  «        z   z  }n|t          | j        ¦  «        z  }| j        pt          ¦   «         g}|dz  }|d                     t          t          |¦  «        ¦  «        z  }|dz  }|S )Nrf  rÓ   rg  r	  r8  )
r’   rX  rY  rþ  rT   rÖ   r‹   rÇ   rZ  r½   )r›   r¥   rø   rZ  s       rQ   r‹   zMultipleSubstStatement.asFea  s  € ØˆÝˆtŒ{ÑÔð 	%�s 4¤;Ñ/Ô/ð 	%°4´?ð 	%Ý�4”;ÑÔð ?Ø�s—x’x¥¥E¨4¬;Ñ 7Ô 7Ñ8Ô8¸3Ñ>Ñ>�Ø•5˜œÑ$Ô$ sÑ*Ñ*ˆCÝ�4”;ÑÔð ?Ø�s˜SŸXšX¥c­%°´Ñ&=Ô&=Ñ>Ô>Ñ>Ñ>�øà•5˜œÑ$Ô$Ñ$ˆCØÔ&Ð7­9©;¬;¨-ˆØˆv‰ˆØˆs�xŠx��E ;Ñ/Ô/Ñ0Ô0Ñ0ˆØˆs‰
ˆØˆ
rS   r#  rª   r  rN   rS   rQ   r9   r9   Ò  s]   € € € € € ð	ð 	ð NRð%ð %ð %ð %ðð ð ðBð ð ð ð ð rS   r9   c                   ó,   — e Zd ZdZ	 	 dd„Zd„ Zd	d„ZdS )
r<   a¥  A pair positioning statement.

    ``glyphs1`` and ``glyphs2`` should be `glyph-containing objects`_.
    ``valuerecord1`` should be a :class:`ValueRecord` object;
    ``valuerecord2`` should be either a :class:`ValueRecord` object or ``None``.
    If ``enumerated`` is true, then this is expressed as an
    `enumerated pair <https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html#6.b.ii>`_.
    FNc                 ó†   — t                                | |¦  «         || _        ||c| _        | _        ||c| _        | _        d S r˜   )rB   rœ   Ú
enumeratedÚglyphs1Úvaluerecord1Úglyphs2Úvaluerecord2)r›   rL  rM  rN  rO  rK  r™   s          rQ   rœ   zPairPosStatement.__init__"  sI   € õ 	×Ò˜4 Ñ*Ô*Ð*Ø$ˆŒØ*1°<Ð'ˆŒ�dÔ'Ø*1°<Ð'ˆŒ�dÔ'Ð'Ð'rS   c                 ó¾  — | j         r‹| j                             ¦   «         | j                             ¦   «         g}d}t	          j        |Ž D ]/\  }}d}|                     | j        || j        || j	        ¦  «         Œ0|st          d| j        ¦  «        ‚dS t          | j        t          ¦  «        ot          | j        t          ¦  «        }|r>|                     | j        | j        j        | j        | j        j        | j	        ¦  «         dS |                     | j        | j                             ¦   «         | j        | j                             ¦   «         | j	        ¦  «         dS )aM  Calls a callback on the builder object:

        * If the rule is enumerated, calls ``add_specific_pair_pos`` on each
          combination of first and second glyphs.
        * If the glyphs are both single :class:`GlyphName` objects, calls
          ``add_specific_pair_pos``.
        * Else, calls ``add_class_pair_pos``.
        FTz%Empty glyph class in positioning ruleN)rK  rL  rÁ   rN  Ú	itertoolsÚproductÚadd_specific_pair_posr™   rM  rO  r   r�   r   rÇ   Úadd_class_pair_pos)r›   rŸ   r•   Ú	seen_pairÚglyph1Úglyph2Úis_specifics          rQ   r    zPairPosStatement.build0  s€  € ð Œ?ð 	Ø”×&Ò&Ñ(Ô(¨$¬,×*?Ò*?Ñ*AÔ*AÐBˆAØˆIÝ"+Ô"3°QÐ"7ð ð ‘�˜Ø �	Ø×-Ò-Ø”M 6¨4Ô+<¸fÀdÔFWñô ð ð ð ð Ý%Ø;¸T¼]ñô ð ð ˆFå  ¤­yÑ9Ô9ð 
½jØŒL�)ñ?
ô ?
ˆð ð 	Ø×)Ò)Ø”Ø”Ô"ØÔ!Ø”Ô"ØÔ!ñô ð ð ð ð ×&Ò&Ø”Ø”×%Ò%Ñ'Ô'ØÔ!Ø”×%Ò%Ñ'Ô'ØÔ!ñô ð ð ð rS   r¡   c                 óØ  — | j         rdnd}| j        rx|d                     | j                             ¦   «         | j                             ¦   «         | j                             ¦   «         | j                             ¦   «         ¦  «        z  }n_|d                     | j                             ¦   «         | j                             ¦   «         | j                             ¦   «         ¦  «        z  }|S )Nzenum r¡   zpos {} {} {} {};zpos {} {} {};)rK  rO  rà   rL  r‹   rM  rN  r÷   s      rQ   r‹   zPairPosStatement.asFea[  sÙ   € ØœÐ0ˆgˆg¨bˆØÔð 
	ØÐ%×,Ò,Ø”×"Ò"Ñ$Ô$ØÔ!×'Ò'Ñ)Ô)Ø”×"Ò"Ñ$Ô$ØÔ!×'Ò'Ñ)Ô)ñ	ô ñ ˆCˆCð �?×)Ò)Ø”×"Ò"Ñ$Ô$ d¤l×&8Ò&8Ñ&:Ô&:¸DÔ<M×<SÒ<SÑ<UÔ<Uñô ñ ˆCð ˆ
rS   r#  rª   r  rN   rS   rQ   r<   r<     sb   € € € € € ðð ð Øð@ð @ð @ð @ð)ð )ð )ðVð ð ð ð ð rS   r<   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r=   aP  A reverse chaining substitution statement. You don't see those every day.

    Note the unusual argument order: ``suffix`` comes `before` ``glyphs``.
    ``old_prefix``, ``old_suffix``, ``glyphs`` and ``replacements`` should be
    lists of `glyph-containing objects`_. ``glyphs`` and ``replacements`` should
    be one-item lists.
    Nc                 óv   — t                                | |¦  «         ||c| _        | _        || _        || _        d S r˜   )rB   rœ   Ú
old_prefixÚ
old_suffixrÍ   Úreplacements)r›   r\  r]  rÍ   r^  r™   s         rQ   rœ   z)ReverseChainSingleSubstStatement.__init__t  s=   € Ý×Ò˜4 Ñ*Ô*Ð*Ø+5°zÐ(ˆŒ˜œØˆŒØ(ˆÔÐÐrS   c                 ó€  — d„ | j         D ¦   «         }d„ | j        D ¦   «         }| j        d                              ¦   «         }| j        d                              ¦   «         }t          |¦  «        dk    r|t          |¦  «        z  }|                     | j        ||t          t          ||¦  «        ¦  «        ¦  «         d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z:ReverseChainSingleSubstStatement.build.<locals>.<listcomp>{  ó    € Ð8Ð8Ð8 1�!—*’*‘,”,Ð8Ð8Ð8rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z:ReverseChainSingleSubstStatement.build.<locals>.<listcomp>|  ra  rS   r   r�   )
r\  r]  rÍ   rÁ   r^  r’   Úadd_reverse_chain_single_substr™   Údictr?  ©r›   rŸ   rX  rY  rB  rD  s         rQ   r    z&ReverseChainSingleSubstStatement.buildz  s¼   € Ø8Ð8¨¬Ð8Ñ8Ô8ˆØ8Ð8¨¬Ð8Ñ8Ô8ˆØ”K ”N×+Ò+Ñ-Ô-ˆ	ØÔ$ QÔ'×0Ò0Ñ2Ô2ˆÝˆx‰=Œ=˜AÒÐØ¥# i¡.¤.Ñ0ˆHØ×.Ò.ØŒM˜6 6­4µ°I¸xÑ0HÔ0HÑ+IÔ+Iñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 óv  — d}t          | j        ¦  «        st          | j        ¦  «        r¤t          | j        ¦  «        r*|d                     d„ | j        D ¦   «         ¦  «        dz   z  }|d                     d„ | j        D ¦   «         ¦  «        z  }t          | j        ¦  «        r*|dd                     d„ | j        D ¦   «         ¦  «        z   z  }n0|d                     t          t          | j        ¦  «        ¦  «        z  }|d                     d                     d„ | j        D ¦   «         ¦  «        ¦  «        z  }|S )Nzrsub rÓ   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z9ReverseChainSingleSubstStatement.asFea.<locals>.<genexpr>‰  s(   è è € ÐBÐB¨Q¥ a¡¤ÐBÐBÐBÐBÐBÐBrS   c              3   ó:   K  — | ]}t          |¦  «        d z   V — ŒdS rÆ  r§   r�  s     rQ   rR   z9ReverseChainSingleSubstStatement.asFea.<locals>.<genexpr>Š  ó,   è è € Ð@Ð@¨q�E !™HœH s™NÐ@Ð@Ð@Ð@Ð@Ð@rS   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z9ReverseChainSingleSubstStatement.asFea.<locals>.<genexpr>Œ  s(   è è € Ð%HÐ%H°1¥e¨A¡h¤hÐ%HÐ%HÐ%HÐ%HÐ%HÐ%HrS   ú by {};c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z9ReverseChainSingleSubstStatement.asFea.<locals>.<genexpr>�  ó(   è è € Ð(MÐ(M°a­¨q©¬Ð(MÐ(MÐ(MÐ(MÐ(MÐ(MrS   )	r’   r\  r]  rT   rÍ   rÖ   r‹   rà   r^  r÷   s      rQ   r‹   z&ReverseChainSingleSubstStatement.asFea…  s-  € ØˆÝˆtŒÑÔð 	5¥3 t¤Ñ#7Ô#7ð 	5Ý�4”?Ñ#Ô#ð IØ�s—x’xÐBÐB°$´/ÐBÑBÔBÑBÔBÀSÑHÑH�Ø�3—8’8Ð@Ð@°D´KÐ@Ñ@Ô@Ñ@Ô@Ñ@ˆCÝ�4”?Ñ#Ô#ð IØ�s˜SŸXšXÐ%HÐ%H¸¼Ð%HÑ%HÔ%HÑHÔHÑHÑH�øà�3—8’8�C¥ t¤{Ñ3Ô3Ñ4Ô4Ñ4ˆCØˆy×Ò §¢Ð(MÐ(M¸4Ô;LÐ(MÑ(MÔ(MÑ MÔ MÑNÔNÑNˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r=   r=   k  sU   € € € € € ðð ð)ð )ð )ð )ð	
ð 	
ð 	
ðð ð ð ð ð rS   r=   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r@   a.  A single substitution statement.

    Note the unusual argument order: ``prefix`` and suffix come `after`
    the replacement ``glyphs``. ``prefix``, ``suffix``, ``glyphs`` and
    ``replace`` should be lists of `glyph-containing objects`_. ``glyphs`` and
    ``replace`` should be one-item lists.
    Nc                 ó„   — t                                | |¦  «         ||c| _        | _        || _        || _        || _        d S r˜   )rB   rœ   rX  rY  rþ  rÍ   r^  )r›   rÍ   rF  rX  rY  rþ  r™   s          rQ   rœ   zSingleSubstStatement.__init__œ  sD   € Ý×Ò˜4 Ñ*Ô*Ð*Ø#)¨6Ð ˆŒ�T”[Ø$ˆŒØˆŒØ#ˆÔÐÐrS   c                 óŒ  — d„ | j         D ¦   «         }d„ | j        D ¦   «         }| j        d                              ¦   «         }| j        d                              ¦   «         }t          |¦  «        dk    r|t          |¦  «        z  }|                     | j        ||t          t          ||¦  «        ¦  «        | j
        ¦  «         dS )z9Calls the builder object's ``add_single_subst`` callback.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z.SingleSubstStatement.build.<locals>.<listcomp>¥  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z.SingleSubstStatement.build.<locals>.<listcomp>¦  r`  rS   r   r�   N)rX  rY  rÍ   rÁ   r^  r’   Úadd_single_substr™   r   r?  rþ  re  s         rQ   r    zSingleSubstStatement.build£  sÄ   € à4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ”K ”N×+Ò+Ñ-Ô-ˆ	ØÔ$ QÔ'×0Ò0Ñ2Ô2ˆÝˆx‰=Œ=˜AÒÐØ¥# i¡.¤.Ñ0ˆHØ× Ò ØŒMØØÝ�˜I xÑ0Ô0Ñ1Ô1ØŒOñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 ór  — d}t          | j        ¦  «        st          | j        ¦  «        s| j        r¤t          | j        ¦  «        r*|d                     d„ | j        D ¦   «         ¦  «        dz   z  }|d                     d„ | j        D ¦   «         ¦  «        z  }t          | j        ¦  «        r*|dd                     d„ | j        D ¦   «         ¦  «        z   z  }n'|d                     d„ | j        D ¦   «         ¦  «        z  }|d                     d                     d„ | j        D ¦   «         ¦  «        ¦  «        z  }|S )	Nrf  rÓ   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z-SingleSubstStatement.asFea.<locals>.<genexpr>·  s(   è è € Ð>Ð>¨Q¥ a¡¤Ð>Ð>Ð>Ð>Ð>Ð>rS   c              3   ó:   K  — | ]}t          |¦  «        d z   V — ŒdS rÆ  r§   r�  s     rQ   rR   z-SingleSubstStatement.asFea.<locals>.<genexpr>¸  ri  rS   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z-SingleSubstStatement.asFea.<locals>.<genexpr>º  s(   è è € Ð%DÐ%D°1¥e¨A¡h¤hÐ%DÐ%DÐ%DÐ%DÐ%DÐ%DrS   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z-SingleSubstStatement.asFea.<locals>.<genexpr>¼  s(   è è € Ð:Ð:¨�E !™HœHÐ:Ð:Ð:Ð:Ð:Ð:rS   rk  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r§   r�  s     rQ   rR   z-SingleSubstStatement.asFea.<locals>.<genexpr>½  rm  rS   )r’   rX  rY  rþ  rT   rÍ   rà   r^  r÷   s      rQ   r‹   zSingleSubstStatement.asFea³  s;  € ØˆÝˆtŒ{ÑÔð 	;�s 4¤;Ñ/Ô/ð 	;°4´?ð 	;Ý�4”;ÑÔð EØ�s—x’xÐ>Ð>°$´+Ð>Ñ>Ô>Ñ>Ô>ÀÑDÑD�Ø�3—8’8Ð@Ð@°D´KÐ@Ñ@Ô@Ñ@Ô@Ñ@ˆCÝ�4”;ÑÔð EØ�s˜SŸXšXÐ%DÐ%D¸¼Ð%DÑ%DÔ%DÑDÔDÑDÑD�øà�3—8’8Ð:Ð:¨d¬kÐ:Ñ:Ô:Ñ:Ô:Ñ:ˆCØˆy×Ò §¢Ð(MÐ(M¸4Ô;LÐ(MÑ(MÔ(MÑ MÔ MÑNÔNÑNˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r@   r@   “  sU   € € € € € ðð ð$ð $ð $ð $ð
ð 
ð 
ð ð ð ð ð ð rS   r@   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r>   zA ``script`` statement.Nc                 óJ   — t                                | |¦  «         || _        d S r˜   )rB   rœ   r{   )r›   r{   r™   s      rQ   rœ   zScriptStatement.__init__Ä  s#   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒˆˆrS   c                 óF   — |                      | j        | j        ¦  «         dS )z,Calls the builder's ``set_script`` callback.N)Ú
set_scriptr™   r{   rž   s     rQ   r    zScriptStatement.buildÈ  s"   € à×Ò˜4œ=¨$¬+Ñ6Ô6Ð6Ð6Ð6rS   r¡   c                 óZ   — d                      | j                             ¦   «         ¦  «        S )Nz
script {};)rà   r{   r"  r¤   s     rQ   r‹   zScriptStatement.asFeaÌ  s$   € Ø×"Ò" 4¤;×#4Ò#4Ñ#6Ô#6Ñ7Ô7Ð7rS   r˜   rª   r  rN   rS   rQ   r>   r>   Á  sQ   € € € € € Ø!Ð!ðð ð ð ð7ð 7ð 7ð8ð 8ð 8ð 8ð 8ð 8rS   r>   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r?   zßA single position statement. ``prefix`` and ``suffix`` should be
    lists of `glyph-containing objects`_.

    ``pos`` should be a one-element list containing a (`glyph-containing object`_,
    :class:`ValueRecord`) tuple.Nc                 óv   — t                                | |¦  «         |||c| _        | _        | _        || _        d S r˜   )rB   rœ   ru   rX  rY  rþ  )r›   ru   rX  rY  rþ  r™   s         rQ   rœ   zSinglePosStatement.__init__×  s9   € Ý×Ò˜4 Ñ*Ô*Ð*Ø-0°&¸&Ð*ˆŒ�$”+˜tœ{Ø$ˆŒˆˆrS   c                 ó²   — d„ | j         D ¦   «         }d„ | j        D ¦   «         }d„ | j        D ¦   «         }|                     | j        |||| j        ¦  «         dS )z7Calls the builder object's ``add_single_pos`` callback.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  r^  s     rQ   r  z,SinglePosStatement.build.<locals>.<listcomp>Þ  r`  rS   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rN   r]  rb  s     rQ   r  z,SinglePosStatement.build.<locals>.<listcomp>ß  r`  rS   c                 ó@   — g | ]\  }}|                      ¦   «         |f‘ŒS rN   r]  )rO   r•   r  s      rQ   r  z,SinglePosStatement.build.<locals>.<listcomp>à  s)   € Ð>Ð>Ð>©¨¨E�—
’
‘”˜eÐ$Ð>Ð>Ð>rS   N)rX  rY  ru   Úadd_single_posr™   rþ  )r›   rŸ   rX  rY  ru   s        rQ   r    zSinglePosStatement.buildÜ  sg   € à4Ð4¨¬Ð4Ñ4Ô4ˆØ4Ð4¨¬Ð4Ñ4Ô4ˆØ>Ð>°T´XÐ>Ñ>Ô>ˆØ×Ò˜tœ}¨f°f¸cÀ4Ä?ÑSÔSÐSÐSÐSrS   r¡   c                 ó,  — d}t          | j        ¦  «        st          | j        ¦  «        s| j        r¶t          | j        ¦  «        r3|d                     t          t          | j        ¦  «        ¦  «        dz   z  }|d                     d„ | j        D ¦   «         ¦  «        z  }t          | j        ¦  «        r3|dd                     t          t          | j        ¦  «        ¦  «        z   z  }n'|d                     d„ | j        D ¦   «         ¦  «        z  }|dz  }|S )Nr’  rÓ   c                 óŽ   — g | ]B}t          |d          ¦  «        dz   |d         �d|d                               ¦   «         z   ndz   ‘ŒCS )r   rg  r�   NrÓ   r¡   r§   r”  s     rQ   r  z,SinglePosStatement.asFea.<locals>.<listcomp>é  sd   € ð ð ð ð õ ˜!˜Aœ$‘K”KØñà/0°¬tÐ/?˜˜a œdŸjšj™lœlÑ*Ð*ÀRñIðð ð rS   c                 óˆ   — g | ]?}t          |d          ¦  «        dz   |d         �|d                               ¦   «         ndz   ‘Œ@S )r   rÓ   r�   Nr¡   r§   r”  s     rQ   r  z,SinglePosStatement.asFea.<locals>.<listcomp>ô  sU   € ð ð ð àõ ˜!˜Aœ$‘K”K #Ñ%¸¸1¼Ð9I¨¨1¬¯ª©¬¨ÈrÑRðð ð rS   r8  )r’   rX  rY  rþ  rT   rÖ   r‹   ru   r÷   s      rQ   r‹   zSinglePosStatement.asFeaã  s*  € ØˆÝˆtŒ{ÑÔð 	�s 4¤;Ñ/Ô/ð 	°4´?ð 	Ý�4”;ÑÔð ?Ø�s—x’x¥¥E¨4¬;Ñ 7Ô 7Ñ8Ô8¸3Ñ>Ñ>�Ø�3—8’8ðð ð "œXð	ñ ô ñô ñ ˆCõ �4”;ÑÔð ?Ø�s˜SŸXšX¥c­%°´Ñ&=Ô&=Ñ>Ô>Ñ>Ñ>�øà�3—8’8ðð à!œXðñ ô ñô ñ ˆCð 	ˆs‰
ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r?   r?   Ð  sX   € € € € € ð$ð $ð%ð %ð %ð %ð
Tð Tð Tðð ð ð ð ð rS   r?   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	rF   zRepresents a subtable break.Nc                 ó<   — t                                | |¦  «         d S r˜   )rB   rœ   rš   s     rQ   rœ   zSubtableStatement.__init__   s   € Ý×Ò˜4 Ñ*Ô*Ð*Ð*Ð*rS   c                 ó:   — |                      | j        ¦  «         dS )z<Calls the builder objects's ``add_subtable_break`` callback.N)Úadd_subtable_breakr™   rž   s     rQ   r    zSubtableStatement.build  s   € à×"Ò" 4¤=Ñ1Ô1Ð1Ð1Ð1rS   r¡   c                 ó   — dS )Nz	subtable;rN   r¤   s     rQ   r‹   zSubtableStatement.asFea  s   € Øˆ{rS   r˜   rª   r  rN   rS   rQ   rF   rF   ý  sQ   € € € € € Ø&Ð&ð+ð +ð +ð +ð2ð 2ð 2ðð ð ð ð ð rS   rF   c                   óR   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dd„Zd„ Zd„ Zd„ Zdd	„Zd
„ Z	e	Z
dS )rH   zRepresents a value record.NFc                 óÂ   — t                                | |
¦  «         ||c| _        | _        ||c| _        | _        ||c| _        | _        ||c| _        | _	        |	| _
        d S r˜   )r'   rœ   Ú
xPlacementÚ
yPlacementÚxAdvanceÚyAdvanceÚ
xPlaDeviceÚ
yPlaDeviceÚ
xAdvDeviceÚ
yAdvDeviceÚvertical)r›   r�  r‘  r’  r“  r”  r•  r–  r—  r˜  r™   s              rQ   rœ   zValueRecord.__init__  se   € õ 	×Ò˜D (Ñ+Ô+Ð+Ø,6¸
Ð(ˆŒ˜œØ(0°(Ð$ˆŒ�t”}Ø,6¸
Ð(ˆŒ˜œØ,6¸
Ð(ˆŒ˜œØ ˆŒˆˆrS   c                 óÂ   — | j         |j         k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r˜   )r�  r‘  r’  r“  r”  r–  ©r›   Úothers     rQ   Ú__eq__zValueRecord.__eq__"  sr   € àŒO˜uÔ/Ò/ð 4Ø” 5Ô#3Ò3ð4à” ¤Ò/ð4ð ” ¤Ò/ð4ð ” 5Ô#3Ò3ð	4ð
 ” 5Ô#3Ò3ð	
rS   c                 ó.   — |                       |¦  «         S r˜   )rœ  rš  s     rQ   Ú__ne__zValueRecord.__ne__,  s   € Ø—;’;˜uÑ%Ô%Ð%Ð%rS   c                 óP  — t          | j        ¦  «        t          | j        ¦  «        z  t          | j        ¦  «        z  t          | j        ¦  «        z  t          | j        ¦  «        z  t          | j        ¦  «        z  t          | j        ¦  «        z  t          | j        ¦  «        z  S r˜   )	Úhashr�  r‘  r’  r“  r”  r•  r–  r—  r¨   s    rQ   Ú__hash__zValueRecord.__hash__/  sœ   € å�”Ñ!Ô!Ý�4”?Ñ#Ô#ñ$å�4”=Ñ!Ô!ñ"õ �4”=Ñ!Ô!ñ"õ �4”?Ñ#Ô#ñ	$õ
 �4”?Ñ#Ô#ñ$õ �4”?Ñ#Ô#ñ$õ �4”?Ñ#Ô#ñ$ð		
rS   r¡   c                 óÈ  — | sdS | j         | j        }}| j        | j        }}| j        | j        }}| j        | j        }	}| j        }
|€(|€&|€|
rt          |¦  «        S |€|
st          |¦  «        S |pd}|pd}|pd}|pd}|€|€|€|	€d|›d|›d|›d|›d�	S d|›d|›d|›d|›dt          |¦  «        ›dt          |¦  «        ›dt          |¦  «        ›dt          |	¦  «        ›d�S )Nz<NULL>r   ú<rÓ   rq  )r�  r‘  r’  r“  r”  r•  r–  r—  r˜  r~  rV   )r›   r¥   rj  rk  r’  r“  r”  r•  r–  r—  r˜  s              rQ   r‹   zValueRecord.asFea;  sR  € Øð 	Ø�8àŒ ¤ˆ1ˆØ!œ]¨D¬M�(ˆØ!%¤°$´/�Jˆ
Ø!%¤°$´/�Jˆ
Ø”=ˆð ˆ9˜˜ØÐ HÐÝ˜8‘}”}Ð$ØÐ!¨(Ð!Ý˜8‘}”}Ð$ð ˆF�ˆØˆF�ˆØ�=˜qˆØ�=˜qˆð ÐØÐ"ØÐ"ØÐ"Ð"à&' a a¨¨¨¨H¨H¨H°h°h°hÐ?Ð?øð ˆAˆAØˆAˆAØˆHˆHØˆHˆHÝ˜:Ñ&Ô&Ð&Ð&Ý˜:Ñ&Ô&Ð&Ð&Ý˜:Ñ&Ô&Ð&Ð&Ý˜:Ñ&Ô&Ð&Ð&ð	
ð 		
rS   c                 ó:   ‡ — t          ˆ fd„dD ¦   «         ¦  «        S )Nc              3   ó<   •K  — | ]}t          ‰|¦  «        d uV — Œd S r˜   )Úgetattr)rO   Úvr›   s     €rQ   rR   z'ValueRecord.__bool__.<locals>.<genexpr>h  sF   øè è € ð 
ð 
àõ �D˜!ÑÔ DÐ(ð
ð 
ð 
ð 
ð 
ð 
rS   )r�  r‘  r’  r“  r”  r•  r–  r—  )rš  r¨   s   `rQ   Ú__bool__zValueRecord.__bool__g  s=   ø€ Ýð 
ð 
ð 
ð 
ð	ð
ñ 
ô 
ñ 
ô 
ð 	
rS   )
NNNNNNNNFNrª   )r«   r¬   r­   r®   rœ   rœ  rž  r¡  r‹   r¨  Ú__nonzero__rN   rS   rQ   rH   rH     s    € € € € € Ø$Ð$ð ØØØØØØØØØð!ð !ð !ð !ð(
ð 
ð 
ð&ð &ð &ð

ð 

ð 

ð*
ð *
ð *
ð *
ðX
ð 
ð 
ð €K€K€KrS   rH   c                   ó"   — e Zd ZdZdd„Zdd„ZdS )rI   z+Represents a named value record definition.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   r‡   r  )r›   r‡   r  r™   s       rQ   rœ   zValueRecordDefinition.__init__|  s*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒ	ØˆŒ
ˆ
ˆ
rS   r¡   c                 óf   — d                      | j                             ¦   «         | j        ¦  «        S )NzvalueRecordDef {} {};)rà   r  r‹   r‡   r¤   s     rQ   r‹   zValueRecordDefinition.asFea�  s(   € Ø&×-Ò-¨d¬j×.>Ò.>Ñ.@Ô.@À$Ä)ÑLÔLÐLrS   r˜   rª   rù   rN   rS   rQ   rI   rI   y  sH   € € € € € Ø5Ð5ðð ð ð ð
Mð Mð Mð Mð Mð MrS   rI   c                 ó€   — | dk    r|dk    r|dk    rdS | dk    r|dk    r|dk    rdS d                      | ||¦  «        S )Né   r�   i	  r¡   r   Ú1ú{} {} {}©rà   )ÚpidÚeidÚlids      rQ   Úsimplify_name_attributesrµ  …  sV   € Ø
ˆa‚x€x�C˜1’H�H ¨¢ ØˆrØ	�Šˆ�c˜Q’h�h 3¨!¢8 8Øˆsà× Ò   c¨3Ñ/Ô/Ð/rS   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r:   z€Represents a name record. (`Section 9.e. <https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html#9.e>`_)Nc                 ó‚   — t                                | |¦  «         || _        || _        || _        || _        || _        d S r˜   )rB   rœ   ÚnameIDÚ
platformIDÚ	platEncIDÚlangIDÚstring)r›   r¸  r¹  rº  r»  r¼  r™   s          rQ   rœ   zNameRecord.__init__‘  s?   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒØ$ˆŒØ"ˆŒØˆŒØˆŒˆˆrS   c                 óv   — |                      | j        | j        | j        | j        | j        | j        ¦  «         dS )z8Calls the builder object's ``add_name_record`` callback.N)Úadd_name_recordr™   r¸  r¹  rº  r»  r¼  rž   s     rQ   r    zNameRecord.build™  sB   € à×ÒØŒMØŒKØŒOØŒNØŒKØŒKñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c           	      ó   ‡‡— d„ Št          | j        | j        | j        ¦  «        }|€t	          d| j        ¦  «        ‚t          | j        |¬¦  «        Š|dk    r?d                     ˆˆfd„t          dt          ‰¦  «        d¦  «        D ¦   «         ¦  «        }n!d                     ˆfd	„‰D ¦   «         ¦  «        }t          | j        | j        | j        ¦  «        }|dk    r|d
z  }d                     | j        ||¦  «        S )Nc                 óJ   — | dk    r| dk    r| dvrt          | ¦  «        S || z  S )Né    é~   )é"   é\   )Úchr)r  Úescape_patterns     rQ   Úescapez NameRecord.asFea.<locals>.escape¥  s3   € à�DŠyˆy˜Q $šY˜Y¨1°LÐ+@Ð+@Ý˜1‘v”v�à%¨Ñ)Ð)rS   zUnsupported encoding)ÚencodingÚ	utf_16_ber¡   c           
      ó†   •— g | ]=} ‰t          ‰|         ¦  «        d z  t          ‰|dz            ¦  «        z   d¦  «        ‘Œ>S )é   r�   z\%04x©r   )rO   r‡  rÇ  rþ   s     €€rQ   r  z$NameRecord.asFea.<locals>.<listcomp>²  sY   ø€ ð ð ð àð �F�7 1 Q¤4™=œ=¨3Ñ.µ¸¸1¸q¹5¼Ñ1BÔ1BÑBÀHÑMÔMðð ð rS   r   rŒ   c                 óB   •— g | ]} ‰t          |¦  «        d ¦  «        ‘ŒS )z\%02xrÌ  )rO   ÚbrÇ  s     €rQ   r  z$NameRecord.asFea.<locals>.<listcomp>¸  s+   ø€ Ð%NÐ%NÐ%NÀq f f­W°Q©Z¬Z¸Ñ&BÔ&BÐ%NÐ%NÐ%NrS   rÓ   znameid {} {}"{}";)r   r¹  rº  r»  r   r™   r   r¼  rT   r  r’   rµ  rà   r¸  )r›   r¥   rÈ  Úescaped_stringÚplatrÇ  rþ   s        @@rQ   r‹   zNameRecord.asFea¤  s!  øø€ ð	*ð 	*ð 	*õ ˜tœ°´ÀÄÑLÔLˆØÐÝ!Ð"8¸$¼-ÑHÔHÐHÝ�D”K¨(Ð3Ñ3Ô3ˆØ�{Ò"Ð"ØŸWšWðð ð ð ð å" 1¥c¨!¡f¤f¨aÑ0Ô0ðñ ô ñô ˆNˆNð  ŸWšWÐ%NÐ%NÐ%NÐ%NÈAÐ%NÑ%NÔ%NÑOÔOˆNÝ'¨¬¸¼ÈÌÑUÔUˆØ�2Š:ˆ:Ø�C‰KˆDØ"×)Ò)¨$¬+°t¸^ÑLÔLÐLrS   r˜   rª   r  rN   rS   rQ   r:   r:   Ž  s]   € € € € € ð Kð  Kðð ð ð ð	
ð 	
ð 	
ðMð Mð Mð Mð Mð MrS   r:   c                   ó    — e Zd ZdZd„ Zdd„ZdS )r(   z4Represents a ``sizemenuname`` or ``name`` statement.c                 óp   — t                                | |¦  «         |                     | j        ¦  «         dS )z8Calls the builder object's ``add_featureName`` callback.N)r:   r    Úadd_featureNamer¸  rž   s     rQ   r    zFeatureNameStatement.buildÂ  s4   € å×Ò˜˜wÑ'Ô'Ð'Ø×Ò ¤Ñ,Ô,Ð,Ð,Ð,rS   r¡   c                 ó°   — | j         dk    rd}nd}t          | j        | j        | j        ¦  «        }|dk    r|dz  }d                     ||| j        ¦  «        S )NÚsizeÚsizemenunamer‡   r¡   rÓ   z
{} {}"{}";)r¸  rµ  r¹  rº  r»  rà   r¼  )r›   r¥   rô   rÐ  s       rQ   r‹   zFeatureNameStatement.asFeaÇ  s^   € ØŒ;˜&Ò Ð Ø ˆCˆCàˆCÝ'¨¬¸¼ÈÌÑUÔUˆØ�2Š:ˆ:Ø�C‰KˆDØ×"Ò" 3¨¨d¬kÑ:Ô:Ð:rS   Nrª   )r«   r¬   r­   r®   r    r‹   rN   rS   rQ   r(   r(   ¿  s=   € € € € € Ø>Ð>ð-ð -ð -ð
;ð ;ð ;ð ;ð ;ð ;rS   r(   c                   ó   — e Zd ZdZdd„ZdS )rE   z+Represents a STAT table ``name`` statement.r¡   c                 óŽ   — t          | j        | j        | j        ¦  «        }|dk    r|dz  }d                     || j        ¦  «        S ©Nr¡   rÓ   zname {}"{}";©rµ  r¹  rº  r»  rà   r¼  ©r›   r¥   rÐ  s      rQ   r‹   zSTATNameStatement.asFeaÕ  óC   € Ý'¨¬¸¼ÈÌÑUÔUˆØ�2Š:ˆ:Ø�C‰KˆDØ×$Ò$ T¨4¬;Ñ7Ô7Ð7rS   Nrª   )r«   r¬   r­   r®   r‹   rN   rS   rQ   rE   rE   Ò  s.   € € € € € Ø5Ð5ð8ð 8ð 8ð 8ð 8ð 8rS   rE   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	rA   zA ``parameters`` statement.Nc                 ót   — t                                | |¦  «         || _        || _        || _        || _        d S r˜   )rB   rœ   Ú
DesignSizeÚSubfamilyIDÚ
RangeStartÚRangeEnd)r›   rß  rà  rá  râ  r™   s         rQ   rœ   zSizeParameters.__init__ß  s9   € Ý×Ò˜4 Ñ*Ô*Ð*Ø$ˆŒØ&ˆÔØ$ˆŒØ ˆŒˆˆrS   c                 ój   — |                      | j        | j        | j        | j        | j        ¦  «         dS )z<Calls the builder object's ``set_size_parameters`` callback.N)Úset_size_parametersr™   rß  rà  rá  râ  rž   s     rQ   r    zSizeParameters.buildæ  s>   € à×#Ò#ØŒMØŒOØÔØŒOØŒMñ	
ô 	
ð 	
ð 	
ð 	
rS   r¡   c                 óþ   — d                      | j        | j        ¦  «        }| j        dk    s| j        dk    rC|d                      t          | j        dz  ¦  «        t          | j        dz  ¦  «        ¦  «        z  }|dz   S )Nzparameters {:.1f} {}r   z {} {}é
   r8  )rà   rß  rà  rá  râ  Úintr÷   s      rQ   r‹   zSizeParameters.asFeað  sv   € Ø$×+Ò+¨D¬O¸TÔ=MÑNÔNˆØŒ?˜aÒÐ 4¤=°AÒ#5Ð#5Ø�8—?’?¥3 t¤¸Ñ';Ñ#<Ô#<½cÀ$Ä-ÐRTÑBTÑ>UÔ>UÑVÔVÑVˆCØ�S‰yÐrS   r˜   rª   r  rN   rS   rQ   rA   rA   Ü  sQ   € € € € € Ø%Ð%ð!ð !ð !ð !ð
ð 
ð 
ðð ð ð ð ð rS   rA   c                   ó*   — e Zd ZdZ	 dd„Zd„ Zdd„ZdS )	r   z;Represent a name statement inside a ``cvParameters`` block.Nc           	      óV   — t                                | ||||||¬¦  «         || _        d S r
  )r:   rœ   r&  )r›   r¸  r¹  rº  r»  r¼  r&  r™   s           rQ   rœ   z"CVParametersNameStatement.__init__ú  s=   € õ 	×ÒØ�&˜* i°¸È(ð 	ñ 	
ô 	
ð 	
ð %ˆŒˆˆrS   c                 ó  — d}| j         dk    r3d                     |j                             | j        d¦  «        ¦  «        }|                     | j        ¦  «         | j        | j         |z   f| _        t                               | |¦  «         dS )z9Calls the builder object's ``add_cv_parameter`` callback.r¡   r(  z_{}r   N)r&  rà   Úcv_num_named_params_Úgetr¸  Úadd_cv_parameterr:   r    )r›   rŸ   Úitems      rQ   r    zCVParametersNameStatement.build  s‚   € àˆØŒ?Ð2Ò2Ð2Ø—<’< Ô <× @Ò @ÀÄÈaÑ PÔ PÑQÔQˆDØ× Ò  ¤Ñ-Ô-Ð-Ø”{ D¤O°dÑ$:Ð;ˆŒÝ×Ò˜˜wÑ'Ô'Ð'Ð'Ð'rS   r¡   c                 óŽ   — t          | j        | j        | j        ¦  «        }|dk    r|dz  }d                     || j        ¦  «        S rÙ  rÚ  rÛ  s      rQ   r‹   zCVParametersNameStatement.asFea  rÜ  rS   r˜   rª   r  rN   rS   rQ   r   r   ÷  sX   € € € € € ØEÐEð SWð%ð %ð %ð %ð(ð (ð (ð8ð 8ð 8ð 8ð 8ð 8rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r"   a  
    Statement used in cvParameters blocks of Character Variant features (cvXX).
    The Unicode value may be written with either decimal or hexadecimal
    notation. The value must be preceded by '0x' if it is a hexadecimal value.
    The largest Unicode value allowed is 0xFFFFFF.
    Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   Ú	characterrô   )r›   rò  rô   r™   s       rQ   rœ   zCharacterStatement.__init__  s*   € Ý×Ò˜4 Ñ*Ô*Ð*Ø"ˆŒØˆŒˆˆrS   c                 óF   — |                      | j        | j        ¦  «         dS )z9Calls the builder object's ``add_cv_character`` callback.N)Úadd_cv_characterrò  rô   rž   s     rQ   r    zCharacterStatement.build  s"   € à× Ò  ¤°´Ñ:Ô:Ð:Ð:Ð:rS   r¡   c                 ó6   — d                      | j        ¦  «        S )NzCharacter {:#x};)rà   rò  r¤   s     rQ   r‹   zCharacterStatement.asFea#  s   € Ø!×(Ò(¨¬Ñ8Ô8Ð8rS   r˜   rª   r  rN   rS   rQ   r"   r"     sU   € € € € € ðð ðð ð ð ð
;ð ;ð ;ð9ð 9ð 9ð 9ð 9ð 9rS   r"   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r   z‡An axis definition, being either a ``VertAxis.BaseTagList/BaseScriptList``
    pair or a ``HorizAxis.BaseTagList/BaseScriptList`` pair.Nc                 ót   — t                                | |¦  «         || _        || _        || _        g | _        d S r˜   )rB   rœ   ÚbasesÚscriptsr˜  Úminmax)r›   rø  rù  r˜  rú  r™   s         rQ   rœ   zBaseAxis.__init__+  s8   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒ
ØˆŒØ ˆŒØˆŒˆˆrS   c                 ó^   — |                      | j        | j        | j        | j        ¦  «         dS )z6Calls the builder object's ``set_base_axis`` callback.N)Úset_base_axisrø  rù  r˜  rú  rž   s     rQ   r    zBaseAxis.build2  s*   € à×Ò˜dœj¨$¬,¸¼ÀtÄ{ÑSÔSÐSÐSÐSrS   r¡   c           	      ó  ‡— | j         rdndŠd„ | j        D ¦   «         }ˆfd„| j        D ¦   «         }d                     ‰d                     | j        ¦  «        |‰d                     |¦  «        ¦  «        d                     |¦  «        z   S )	NÚVertÚHorizc                 ó¬   — g | ]Q}d                       |d         |d         d                     t          t          |d         ¦  «        ¦  «        ¦  «        ‘ŒRS )r°  r   r�   rÓ   rŒ   )rà   rT   rÖ   r~  )rO   r'  s     rQ   r  z"BaseAxis.asFea.<locals>.<listcomp>8  sZ   € ð 
ð 
ð 
àð ×Ò˜a œd A a¤D¨#¯(ª(µ3µs¸A¸a¼D±>´>Ñ*BÔ*BÑCÔCð
ð 
ð 
rS   c           
      ór   •— g | ]3}d                       ‰|d         |d         |d         |d         ¦  «        ‘Œ4S )z
{}Axis.MinMax {} {} {}, {};r   r�   rŒ   r®  r±  )rO   r'  Ú	directions     €rQ   r  z"BaseAxis.asFea.<locals>.<listcomp><  sR   ø€ ð 
ð 
ð 
àð ,×2Ò2°9¸aÀ¼dÀAÀaÄDÈ!ÈAÌ$ÐPQÐRSÔPTÑUÔUð
ð 
ð 
rS   z2{}Axis.BaseTagList {};
{}{}Axis.BaseScriptList {};rÓ   rL   r   )r˜  rù  rú  rà   rT   rø  )r›   r¥   rù  Úminmaxesr  s       @rQ   r‹   zBaseAxis.asFea6  s±   ø€ Ø"œmÐ8�F�F°ˆ	ð
ð 
à”\ð
ñ 
ô 
ˆð
ð 
ð 
ð 
à”[ð
ñ 
ô 
ˆð E×KÒKØ�s—x’x ¤
Ñ+Ô+¨V°YÀÇ	Â	È'Ñ@RÔ@Rñ
ô 
à�IŠI�hÑÔñ ð 	 rS   rå   rª   r  rN   rS   rQ   r   r   '  sZ   € € € € € ð@ð @ðð ð ð ðTð Tð Tð ð  ð  ð  ð  ð  rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r;   zÔAn entry in the ``OS/2`` table. Most ``values`` should be numbers or
    strings, apart from when the key is ``UnicodeRange``, ``CodePageRange``
    or ``Panose``, in which case it should be an array of integers.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   ©rB   rœ   r  r  ©r›   r  r  r™   s       rQ   rœ   zOS2Field.__init__J  ó*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒØˆŒ
ˆ
ˆ
rS   c                 óF   — |                      | j        | j        ¦  «         dS )z6Calls the builder object's ``add_os2_field`` callback.N)Úadd_os2_fieldr  r  rž   s     rQ   r    zOS2Field.buildO  s"   € à×Ò˜dœh¨¬
Ñ3Ô3Ð3Ð3Ð3rS   r¡   c                 óF  ‡— d„ Šd}d}t          d„ |D ¦   «         ¦  «        }|                     ˆfd„|D ¦   «         ¦  «         d‰g|d<   dd	„ g|d
<   | j        |v rFd                     || j                 d          || j                 d         | j        ¦  «        ¦  «        S dS )Nc                 óR   — d                      t          t          | ¦  «        ¦  «        S )NrÓ   )rT   rÖ   r~  )rj  s    rQ   Ú
intarr2strz"OS2Field.asFea.<locals>.intarr2strT  s   € Ø—8’8�C¥ Q™KœKÑ(Ô(Ð(rS   )ÚFSTypeÚTypoAscenderÚTypoDescenderÚTypoLineGapÚ	winAscentÚ
winDescentÚXHeightÚ	CapHeightÚWeightClassÚ
WidthClassÚLowerOpSizeÚUpperOpSize)ÚUnicodeRangeÚCodePageRangec                 óH   — g | ]}|                      ¦   «         |t          gf‘Œ S rN   )r“   r~  r”  s     rQ   r  z"OS2Field.asFea.<locals>.<listcomp>f  s)   € Ð@Ð@Ð@°1˜!Ÿ'š'™)œ) a­ XÐ.Ð@Ð@Ð@rS   c                 ó@   •— g | ]}|                      ¦   «         |‰gf‘ŒS rN   ©r“   )rO   rj  r  s     €rQ   r  z"OS2Field.asFea.<locals>.<listcomp>g  s*   ø€ ÐFÐFÐF¸!˜!Ÿ'š'™)œ) a¨ _Ð5ÐFÐFÐFrS   ÚPanoseÚpanoseÚVendorc                 ó,   — d                      | ¦  «        S )Nz"{}"r±  )rk  s    rQ   ú<lambda>z OS2Field.asFea.<locals>.<lambda>i  s   € °&·-²-ÀÑ2BÔ2B€ rS   Úvendorú{} {};r   r�   r¡   )rd  Úupdater  rà   r  )r›   r¥   ÚnumbersÚrangesÚkeywordsr  s        @rQ   r‹   zOS2Field.asFeaS  sÙ   ø€ ð	)ð 	)ð 	)ð
ˆð 3ˆÝÐ@Ð@¸Ð@Ñ@Ô@ÑAÔAˆØ�ŠÐFÐFÐFÐF¸vÐFÑFÔFÑGÔGÐGØ&¨
Ð3ˆ�ÑØ&Ð(BÐ(BÐCˆ�ÑØŒ8�xÐÐØ—?’?Ø˜œÔ" 1Ô%Ð'< x°´Ô'9¸!Ô'<¸T¼ZÑ'HÔ'Hñô ð ð ˆrrS   r˜   rª   r  rN   rS   rQ   r;   r;   E  sW   € € € € € ðGð Gðð ð ð ð
4ð 4ð 4ðð ð ð ð ð rS   r;   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r+   zAn entry in the ``hhea`` table.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   r  r  s       rQ   rœ   zHheaField.__init__t  r  rS   c                 óF   — |                      | j        | j        ¦  «         dS )z7Calls the builder object's ``add_hhea_field`` callback.N)Úadd_hhea_fieldr  r  rž   s     rQ   r    zHheaField.buildy  ó"   € à×Ò˜tœx¨¬Ñ4Ô4Ð4Ð4Ð4rS   r¡   c                 ó„   — d}t          d„ |D ¦   «         ¦  «        }d                     || j                 | j        ¦  «        S )N)ÚCaretOffsetÚAscenderÚ	DescenderÚLineGapc                 ó:   — g | ]}|                      ¦   «         |f‘ŒS rN   r  r”  s     rQ   r  z#HheaField.asFea.<locals>.<listcomp>  ó$   € Ð8Ð8Ð8¨A˜!Ÿ'š'™)œ) Q˜Ð8Ð8Ð8rS   r%  ©rd  rà   r  r  ©r›   r¥   Úfieldsr)  s       rQ   r‹   zHheaField.asFea}  s@   € ØDˆÝÐ8Ð8°Ð8Ñ8Ô8Ñ9Ô9ˆØ�Š˜x¨¬Ô1°4´:Ñ>Ô>Ð>rS   r˜   rª   r  rN   rS   rQ   r+   r+   q  óQ   € € € € € Ø)Ð)ðð ð ð ð
5ð 5ð 5ð?ð ?ð ?ð ?ð ?ð ?rS   r+   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	rJ   zAn entry in the ``vhea`` table.Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   r  r  s       rQ   rœ   zVheaField.__init__†  r  rS   c                 óF   — |                      | j        | j        ¦  «         dS )z7Calls the builder object's ``add_vhea_field`` callback.N)Úadd_vhea_fieldr  r  rž   s     rQ   r    zVheaField.build‹  r.  rS   r¡   c                 ó„   — d}t          d„ |D ¦   «         ¦  «        }d                     || j                 | j        ¦  «        S )N)ÚVertTypoAscenderÚVertTypoDescenderÚVertTypoLineGapc                 ó:   — g | ]}|                      ¦   «         |f‘ŒS rN   r  r”  s     rQ   r  z#VheaField.asFea.<locals>.<listcomp>‘  r5  rS   r%  r6  r7  s       rQ   r‹   zVheaField.asFea�  s@   € ØMˆÝÐ8Ð8°Ð8Ñ8Ô8Ñ9Ô9ˆØ�Š˜x¨¬Ô1°4´:Ñ>Ô>Ð>rS   r˜   rª   r  rN   rS   rQ   rJ   rJ   ƒ  r9  rS   rJ   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	rD   z²A STAT table Design Axis

    Args:
        tag (str): a 4 letter axis tag
        axisOrder (int): an int
        names (list): a list of :class:`STATNameStatement` objects
    Nc                 ót   — t                                | |¦  «         || _        || _        || _        || _        d S r˜   )rB   rœ   rô   Ú	axisOrderÚnamesr™   )r›   rô   rE  rF  r™   s        rQ   rœ   z STATDesignAxisStatement.__init__ž  s8   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒØ"ˆŒØˆŒ
Ø ˆŒˆˆrS   c                 ó<   — |                      | | j        ¦  «         d S r˜   )ÚaddDesignAxisr™   rž   s     rQ   r    zSTATDesignAxisStatement.build¥  s    € Ø×Ò˜d D¤MÑ2Ô2Ð2Ð2Ð2rS   r¡   c                 óª   ‡— ‰t           z  Šd| j        › d| j        › d�}|d‰z                        ˆfd„| j        D ¦   «         ¦  «        dz   z  }|dz  }|S )NzDesignAxis rÓ   z { 
r   c                 ó<   •— g | ]}|                      ‰¬ ¦  «        ‘ŒS r  r§   r  s     €rQ   r  z1STATDesignAxisStatement.asFea.<locals>.<listcomp>«  ó'   ø€ Ð$PÐ$PÐ$PÀ Q§W¢W°F WÑ%;Ô%;Ð$PÐ$PÐ$PrS   ú};)r  rô   rE  rT   rF  r÷   s    ` rQ   r‹   zSTATDesignAxisStatement.asFea¨  so   ø€ Ø•%‰ˆØ=˜DœHÐ=Ð= t¤~Ð=Ð=Ð=ˆØ��v‘×#Ò#Ð$PÐ$PÐ$PÐ$PÀTÄZÐ$PÑ$PÔ$PÑQÔQÐTXÑXÑXˆØˆt‰ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   rD   rD   •  sU   € € € € € ðð ð!ð !ð !ð !ð3ð 3ð 3ðð ð ð ð ð rS   rD   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r%   ziSTAT table ElidedFallbackName

    Args:
        names: a list of :class:`STATNameStatement` objects
    Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   rF  r™   )r›   rF  r™   s      rQ   rœ   zElidedFallbackName.__init__·  ó*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒ
Ø ˆŒˆˆrS   c                 óF   — |                      | j        | j        ¦  «         d S r˜   )ÚsetElidedFallbackNamerF  r™   rž   s     rQ   r    zElidedFallbackName.build¼  ó"   € Ø×%Ò% d¤j°$´-Ñ@Ô@Ð@Ð@Ð@rS   r¡   c                 óˆ   ‡— ‰t           z  Šd}|d‰z                        ˆfd„| j        D ¦   «         ¦  «        dz   z  }|dz  }|S )NzElidedFallbackName { 
r   c                 ó<   •— g | ]}|                      ‰¬ ¦  «        ‘ŒS r  r§   r  s     €rQ   r  z,ElidedFallbackName.asFea.<locals>.<listcomp>Â  rK  rS   rL  )r  rT   rF  r÷   s    ` rQ   r‹   zElidedFallbackName.asFea¿  sX   ø€ Ø•%‰ˆØ'ˆØ��v‘×#Ò#Ð$PÐ$PÐ$PÐ$PÀTÄZÐ$PÑ$PÔ$PÑQÔQÐTXÑXÑXˆØˆt‰ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   r%   r%   °  sX   € € € € € ðð ð!ð !ð !ð !ð
Að Að Aðð ð ð ð ð rS   r%   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r&   zpSTAT table ElidedFallbackNameID

    Args:
        value: an int pointing to an existing name table name ID
    Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   r  r™   )r›   r  r™   s      rQ   rœ   zElidedFallbackNameID.__init__Î  rO  rS   c                 óF   — |                      | j        | j        ¦  «         d S r˜   )rQ  r  r™   rž   s     rQ   r    zElidedFallbackNameID.buildÓ  rR  rS   r¡   c                 ó   — d| j         › d�S )NzElidedFallbackNameID r8  )r  r¤   s     rQ   r‹   zElidedFallbackNameID.asFeaÖ  s   € Ø4 t¤zÐ4Ð4Ð4Ð4rS   r˜   rª   r  rN   rS   rQ   r&   r&   Ç  sX   € € € € € ðð ð!ð !ð !ð !ð
Að Að Að5ð 5ð 5ð 5ð 5ð 5rS   r&   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	rC   zÝA STAT table Axis Value Record

    Args:
        names (list): a list of :class:`STATNameStatement` objects
        locations (list): a list of :class:`AxisValueLocationStatement` objects
        flags (int): an int
    Nc                 óf   — t                                | |¦  «         || _        || _        || _        d S r˜   )rB   rœ   rF  Ú	locationsr  )r›   rF  r[  r  r™   s        rQ   rœ   zSTATAxisValueStatement.__init__ã  s1   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒ
Ø"ˆŒØˆŒ
ˆ
ˆ
rS   c                 ó<   — |                      | | j        ¦  «         d S r˜   )ÚaddAxisValueRecordr™   rž   s     rQ   r    zSTATAxisValueStatement.buildé  s    € Ø×"Ò" 4¨¬Ñ7Ô7Ð7Ð7Ð7rS   r¡   c                 ó’  — d}| j         D ]}||                     ¦   «         z  }Œ| j        D ]}||                     ¦   «         z  }|dz  }Œ| j        rqddg}g }d}t	          t          |¦  «        ¦  «        D ]0}| j        |z  dk    r|                     ||         ¦  «         |dz  }Œ1|dd                     |¦  «        › d	�z  }|d
z  }|S )NzAxisValue {
r   ÚOlderSiblingFontAttributeÚElidableAxisValueNamer�   r   zflag rÓ   ú;
rL  )r[  r‹   rF  r  r  r’   rÙ   rT   )	r›   r¥   rø   r™   Ú
nameRecordr  ÚflagStringsrÏ   r‡  s	            rQ   r‹   zSTATAxisValueStatement.asFeaì  s  € ØˆØœð 	$ð 	$ˆHØ�8—>’>Ñ#Ô#Ñ#ˆCˆCàœ*ð 	ð 	ˆJØ�:×#Ò#Ñ%Ô%Ñ%ˆCØ�4‰KˆCˆCàŒ:ð 	6Ø0Ð2IÐJˆEØˆKØˆDÝ�3˜u™:œ:Ñ&Ô&ð !ð !�Ø”: Ñ$¨Ò)Ð)Ø×&Ò& u¨Q¤xÑ0Ô0Ð0Ø˜q‘y��ØÐ5˜3Ÿ8š8 KÑ0Ô0Ð5Ð5Ð5Ñ5ˆCØˆt‰ˆØˆ
rS   r˜   rª   r  rN   rS   rQ   rC   rC   Ú  sU   € € € € € ðð ðð ð ð ð8ð 8ð 8ðð ð ð ð ð rS   rC   c                   ó"   — e Zd ZdZdd„Zdd„ZdS )r   z�
    A STAT table Axis Value Location

    Args:
        tag (str): a 4 letter axis tag
        values (list): a list of ints and/or floats
    Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   rô   Úvalues)r›   rô   rf  r™   s       rQ   rœ   z#AxisValueLocationStatement.__init__  s*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒØˆŒˆˆrS   r¡   c                 óv   — |d| j         › d�z  }|d                     d„ | j        D ¦   «         ¦  «        › d�z  }|S )Nz	location rÓ   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r˜   r}  )rO   r‡  s     rQ   rR   z3AxisValueLocationStatement.asFea.<locals>.<genexpr>  s(   è è € Ð7Ð7 a�3˜q™6œ6Ð7Ð7Ð7Ð7Ð7Ð7rS   ra  )rô   rT   rf  )r›   rø   s     rQ   r‹   z AxisValueLocationStatement.asFea  sO   € ØÐ&˜4œ8Ð&Ð&Ð&Ñ&ˆØ�#—(’(Ð7Ð7¨4¬;Ð7Ñ7Ô7Ñ7Ô7Ð<Ð<Ð<Ñ<ˆØˆ
rS   r˜   rª   rù   rN   rS   rQ   r   r     sF   € € € € € ðð ðð ð ð ð
ð ð ð ð ð rS   r   c                   ó(   — e Zd ZdZdd„Zd„ Zdd„ZdS )	r#   zÚ
    A variable layout conditionset

    Args:
        name (str): the name of this conditionset
        conditions (dict): a dictionary mapping axis tags to a
            tuple of (min,max) userspace coordinates.
    Nc                 óX   — t                                | |¦  «         || _        || _        d S r˜   )rB   rœ   r‡   Ú
conditions)r›   r‡   rk  r™   s       rQ   rœ   zConditionsetStatement.__init__   s*   € Ý×Ò˜4 Ñ*Ô*Ð*ØˆŒ	Ø$ˆŒˆˆrS   c                 óR   — |                      | j        | j        | j        ¦  «         d S r˜   )Úadd_conditionsetr™   r‡   rk  rž   s     rQ   r    zConditionsetStatement.build%  s&   € Ø× Ò  ¤°´	¸4¼?ÑKÔKÐKÐKÐKrS   r¡   c           	      óÌ   — ||d| j         › d�z   dz   z  }| j                             ¦   «         D ]!\  }\  }}||t          z   |› d|› d|› d�z   z  }Œ"||dz   d| j         › d�z   z  }|S )Nzconditionset rÓ   r   ra  Ú})r‡   rk  r  r  )r›   rø   r¥   rô   ÚminvalueÚmaxvalues         rQ   r‹   zConditionsetStatement.asFea(  s¡   € ØˆvÐ4¨¬	Ð4Ð4Ð4Ñ4°uÑ<Ñ<ˆØ)-¬×)>Ò)>Ñ)@Ô)@ð 	Fð 	FÑ%ˆCÑ%�(˜HØ�6�E‘> sÐ$EÐ$E¨XÐ$EÐ$E¸Ð$EÐ$EÐ$EÑEÑEˆCˆCØˆv˜‰|Ð0 $¤)Ð0Ð0Ð0Ñ0Ñ0ˆØˆ
rS   r˜   )r¡   r¡   r  rN   rS   rQ   r#   r#     sX   € € € € € ðð ð%ð %ð %ð %ð
Lð Lð Lðð ð ð ð ð rS   r#   c                   ó(   — e Zd ZdZdd„Zd„ Zd	d„ZdS )
ÚVariationBlockzCA variation feature block, applicable in a given set of conditions.FNc                 óh   — t                                | |¦  «         |||c| _        | _        | _        d S r˜   )r   rœ   r‡   Úconditionsetr  )r›   r‡   ru  r  r™   s        rQ   rœ   zVariationBlock.__init__3  s8   € Ý�Š�t˜XÑ&Ô&Ð&àØØð 	9ˆŒ	�4Ô$ dÔ&8Ð&8Ð&8rS   c                 ó(  — |                      | j        | j        | j        ¦  «         | j        dk    r+| j        |j        vrt          d| j        › �| j        ¦  «        ‚|j        }i |_        t           	                    | |¦  «         |j         
                    ¦   «         D ]W\  }}|j                             |i ¦  «                             | j        g ¦  «        }|                     |¦  «         ||vrg ||<   ŒX||_        |                     ¦   «          dS )r  rÃ   z,variation block used undefined conditionset N)r  r™   r‡   r  ru  Úconditionsets_r   r  r   r    r  Úfeature_variations_r  rÕ   r  )r›   rŸ   r  r  r  r  s         rQ   r    zVariationBlock.build;  s(  € ð 	×Ò˜dœm¨T¬Y¸Ô8JÑKÔKÐKàÔ Ò'Ð'ØÔ!¨Ô)?Ð?Ð?å!ØR¸tÔ?PÐRÐRØ”ñô ð ð Ô$ˆØˆÔÝ�Š�D˜'Ñ"Ô"Ð"Ø!Ô+×1Ò1Ñ3Ô3ð 	#ð 	#‰JˆC�ØÔ/×:Ò:¸3ÀÑCÔC×NÒNØÔ! 2ñô ˆEð �LŠL˜ÑÔÐØ˜(Ð"Ð"Ø "�˜‘øØ$ˆÔØ×ÒÑÔÐÐÐrS   r¡   c                 ó  — |d| j                              ¦   «         z  z   }|| j        dz   z  }| j        r|dz  }|dz  }|t                               | |¬¦  «        z  }||d| j                              ¦   «         z  z   z  }|S )Nzvariation %s rÓ   r  r   r  r!  )r‡   r"  ru  r  r   r‹   r÷   s      rQ   r‹   zVariationBlock.asFeaW  sŒ   € Ø�¨¬¯ªÑ):Ô):Ñ:Ñ:ˆØˆtÔ  3Ñ&Ñ&ˆØÔð 	#Ø�?Ñ"ˆCØˆu‰ˆØ�u�{Š{˜4¨ˆ{Ñ/Ô/Ñ/ˆØˆv˜	 D¤I§O¢OÑ$5Ô$5Ñ5Ñ5Ñ5ˆØˆ
rS   r#  rª   r  rN   rS   rQ   rs  rs  0  sQ   € € € € € ØMÐMð
ð 
ð 
ð 
ðð ð ð8ð ð ð ð ð rS   rs  )YrH  ÚfontTools.feaLib.errorr   ÚfontTools.feaLib.locationr   ÚfontTools.misc.encodingToolsr   ÚfontTools.misc.textToolsr   r   Úcollectionsr   rQ  r  Ú__all__rV   rñ  r”   r‹   Úobjectr	   rB   r'   r   r½   r   r   r   r   r   r   r
   r   r   r   rG   r   r   r   r   r   r   r   r   r    r!   r$   r)   r,   r-   r.   r/   r0   r*   r1   r2   r3   r4   r5   r6   r7   r8   r9   r<   r=   r@   r>   r?   rF   rH   rI   rµ  r:   r(   rE   rA   r   r"   r   r;   r+   rJ   rD   r%   r&   rC   r   r#   rs  rN   rS   rQ   ú<module>r�     sv  ðØ €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð à€ðCð Cð C€ðLFð Fð Fð ˆsð5ð 5ð 5ñ7ô 7€ðtð ð ðð ð ð ð ˆfñ ô ð ð,	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ˆgñ 	ô 	ð 	ðð ð ð ð �
ñ ô ð ð!ð !ð !ð !ð !�
ñ !ô !ð !ð ;%ð ;%ð ;%ð ;%ð ;%�ñ ;%ô ;%ð ;%ð|*ð *ð *ð *ð *�Zñ *ô *ð *ð")ð )ð )ð )ð )�Jñ )ô )ð )ð"ð ð ð ð �Yñ ô ð ð
ð 
ð 
ð 
ð 
ˆIñ 
ô 
ð 
ð.	Jð 	Jð 	Jð 	Jð 	J�%ñ 	Jô 	Jð 	Jðð ð ð ð �5ñ ô ð ð>ð ð ð ð �%ñ ô ð ð*ð ð ð ð �%ñ ô ð ð,ð ð ð ð �ñ ô ð ðCð Cð Cð Cð C˜9ñ Cô Cð Cð 
ð 
ð 
ð 
ð 
˜Yñ 
ô 
ð 
ð<*ð *ð *ð *ð *�ñ *ô *ð *ðZ$
ð $
ð $
ð $
ð $
˜)ñ $
ô $
ð $
ðN"ð "ð "ð "ð "˜iñ "ô "ð "ðJ"ð "ð "ð "ð "ˆZñ "ô "ð "ðJð ð ð ð �yñ ô ð ð
ð 
ð 
ð 
ð 
�iñ 
ô 
ð 
ð&7ð 7ð 7ð 7ð 7˜yñ 7ô 7ð 7ðt7ð 7ð 7ð 7ð 7 ñ 7ô 7ð 7ðtTð Tð Tð Tð T˜)ñ Tô Tð Tð*6ð 6ð 6ð 6ð 6 	ñ 6ô 6ð 6ð!9ð !9ð !9ð !9ð !9˜ñ !9ô !9ð !9ðH9ð 9ð 9ð 9ð 9˜9ñ 9ô 9ð 9ðB7ð 7ð 7ð 7ð 7�yñ 7ô 7ð 7ð&ð ð ð ð ˜	ñ ô ð ð:Rð Rð Rð Rð R˜iñ Rô Rð Rð<ð <ð <ð <ð <˜Iñ <ô <ð <ð
ð 
ð 
ð 
ð 
 Iñ 
ô 
ð 
ð&
ð 
ð 
ð 
ð 
 )ñ 
ô 
ð 
ð&$ð $ð $ð $ð $˜Yñ $ô $ð $ðN&6ð &6ð &6ð &6ð &6˜)ñ &6ô &6ð &6ðR5ð 5ð 5ð 5ð 5˜yñ 5ô 5ð 5ð"ð ð ð ð ˜9ñ ô ð ð*5ð 5ð 5ð 5ð 5˜)ñ 5ô 5ð 5ðpð ð ð ð ˜9ñ ô ð ð*Cð Cð Cð Cð C˜Yñ Cô Cð CðLPð Pð Pð Pð P�yñ Pô Pð Pðf%ð %ð %ð %ð % yñ %ô %ð %ðP+ð +ð +ð +ð +˜9ñ +ô +ð +ð\8ð 8ð 8ð 8ð 8�iñ 8ô 8ð 8ð*ð *ð *ð *ð *˜ñ *ô *ð *ðZð ð ð ð ˜	ñ ô ð ðkð kð kð kð k�*ñ kô kð kð\	Mð 	Mð 	Mð 	Mð 	M˜Iñ 	Mô 	Mð 	Mð0ð 0ð 0ð.Mð .Mð .Mð .Mð .M�ñ .Mô .Mð .Mðb;ð ;ð ;ð ;ð ;˜:ñ ;ô ;ð ;ð&8ð 8ð 8ð 8ð 8˜
ñ 8ô 8ð 8ðð ð ð ð �Yñ ô ð ð68ð 8ð 8ð 8ð 8 
ñ 8ô 8ð 8ð69ð 9ð 9ð 9ð 9˜ñ 9ô 9ð 9ð* ð  ð  ð  ð  ˆyñ  ô  ð  ð<)ð )ð )ð )ð )ˆyñ )ô )ð )ðX?ð ?ð ?ð ?ð ?�	ñ ?ô ?ð ?ð$?ð ?ð ?ð ?ð ?�	ñ ?ô ?ð ?ð$ð ð ð ð ˜iñ ô ð ð6ð ð ð ð ˜ñ ô ð ð.5ð 5ð 5ð 5ð 5˜9ñ 5ô 5ð 5ð&%ð %ð %ð %ð %˜Yñ %ô %ð %ðPð ð ð ð  ñ ô ð ð(ð ð ð ð ˜Iñ ô ð ð4/ð /ð /ð /ð /�Uñ /ô /ð /ð /ð /rS   