§
    ¢”jÅŽ  ã                   ó*  — d Z ddlZ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mZ  ej        d¦  «        Zg d	¢Zd
„ Zd„ Z G d„ dej        ¦  «        Z G d„ d¦  «        Zdd„Zedk    rddlZ ej         e¦   «         ¦  «         dS dS )u6  MS VOLT ``.vtp`` to AFDKO ``.fea`` OpenType Layout converter.

Usage
-----

To convert a VTP project file:


.. code-block:: sh

    $ fonttools voltLib.voltToFea input.vtp output.fea

It is also possible convert font files with `TSIV` table (as saved from Volt),
in this case the glyph names used in the Volt project will be mapped to the
actual glyph names in the font files when written to the feature file:

.. code-block:: sh

    $ fonttools voltLib.voltToFea input.ttf output.fea

The ``--quiet`` option can be used to suppress warnings.

The ``--traceback`` can be used to get Python traceback in case of exceptions,
instead of suppressing the traceback.


Limitations
-----------

* Not all VOLT features are supported, the script will error if it it
  encounters something it does not understand. Please report an issue if this
  happens.
* AFDKO feature file syntax for mark positioning is awkward and does not allow
  setting the mark coverage. It also defines mark anchors globally, as a result
  some mark positioning lookups might cover many marks than what was in the VOLT
  file. This should not be an issue in practice, but if it is then the only way
  is to modify the VOLT file or the generated feature file manually to use unique
  mark anchors for each lookup.
* VOLT allows subtable breaks in any lookup type, but AFDKO feature file
  implementations vary in their support; currently AFDKOâ€™s makeOTF supports
  subtable breaks in pair positioning lookups only, while FontToolsâ€™ feaLib
  support it for most substitution lookups and only some positioning lookups.
é    N)ÚStringIO)ÚTopologicalSorter)Úast)ÚTTFontÚ
TTLibError)ÚParserzfontTools.voltLib.voltToFea)ÚGDEFÚGSUBÚGPOSc                 ó,  — g }t          | t          t          f¦  «        r(| D ]$}|                     t	          |¦  «        ¦  «         Œ%nMt          | d¦  «        r(|                     t	          | j        ¦  «        ¦  «         n|                     | ¦  «         |S )NÚenum)Ú
isinstanceÚtupleÚlistÚextendÚ_flatten_groupÚhasattrr   Úappend)ÚgroupÚretÚitems      új/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/voltLib/voltToFea.pyr   r   =   s–   € Ø
€CÝ�%�%¥˜Ñ'Ô'ð Øð 	-ð 	-ˆDØ�JŠJ•~ dÑ+Ô+Ñ,Ô,Ð,Ð,ð	-å	�˜Ñ	Ô	ð Ø�
Š
•> %¤*Ñ-Ô-Ñ.Ô.Ð.Ð.à�
Š
�5ÑÔÐØ€Jó    c                 ó’   ‡— d„ | D ¦   «         Šd„ | D ¦   «         }t          |¦  «        }ˆfd„|                     ¦   «         D ¦   «         S )Nc                 óB   — i | ]}|j                              ¦   «         |“ŒS © )ÚnameÚlower©Ú.0r   s     r   ú
<dictcomp>zsort_groups.<locals>.<dictcomp>M   s(   € Ð?Ð?Ð?¨u�”×!Ò!Ñ#Ô# UÐ?Ð?Ð?r   c                 óp   — i | ]3}|j                              ¦   «         d „ t          |¦  «        D ¦   «         “Œ4S )c                 ót   — g | ]5}t          |t          j        ¦  «        ¯|j                             ¦   «         ‘Œ6S r   )r   ÚVAstÚ	GroupNamer   r   ©r    Úxs     r   ú
<listcomp>z*sort_groups.<locals>.<dictcomp>.<listcomp>O   sD   € ð 
ð 
ð 
àÝ˜!�Tœ^Ñ,Ô,ð
ØŒG�MŠM‰OŒOð
ð 
ð 
r   )r   r   r   r   s     r   r!   zsort_groups.<locals>.<dictcomp>N   s\   € ð ð ð ð ð 	Œ
×ÒÑÔð 
ð 
å# EÑ*Ô*ð
ñ 
ô 
ðð ð r   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r    r   Ú	group_maps     €r   r(   zsort_groups.<locals>.<listcomp>W   s   ø€ Ð>Ð>Ð> ˆI�dŒOÐ>Ð>Ð>r   )r   Ústatic_order)ÚgroupsÚgraphÚsorterr*   s      @r   Úsort_groupsr/   L   sk   ø€ Ø?Ð?¸Ð?Ñ?Ô?€Iðð ð ðñ ô €Eõ ˜uÑ%Ô%€FØ>Ð>Ð>Ð>¨×(;Ò(;Ñ(=Ô(=Ð>Ñ>Ô>Ð>r   c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚLookupFNc                 ó\   •— t          ¦   «                              |||¦  «         g | _        d S ©N)ÚsuperÚ__init__Úchained)Úselfr   Úuse_extensionÚlocationÚ	__class__s       €r   r5   zLookup.__init__[   s*   ø€ Ý‰Œ×Ò˜˜}¨hÑ7Ô7Ð7ØˆŒˆˆr   )FN)Ú__name__Ú
__module__Ú__qualname__r5   Ú__classcell__)r:   s   @r   r1   r1   Z   s=   ø€ € € € € ðð ð ð ð ð ð ð ð ð r   r1   c                   óâ   — e Zd Z ej        d¦  «        Z ej        d¦  «        Zdd„Zd„ Zd„ Z	dd„Z
d	„ Zdd
„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú	VoltToFeaz[^A-Za-z_0-9.]z[^A-Za-z_0-9.\-]Nc                 óT  — t          |t          j        ¦  «        r|d c| _        | _        nd |c| _        | _        || _        i | _        d | _        i | _        i | _	        i | _
        i | _        t          ¦   «         | _        i | _        i | _        i | _        i | _        i | _        i | _        d S r3   )r   r$   ÚVoltFileÚ_docÚ_file_or_pathÚ_fontÚ
_glyph_mapÚ_glyph_orderÚ_gdefÚ_glyphclassesÚ	_featuresÚ_lookupsÚsetÚ_marksÚ
_ligaturesÚ_markclassesÚ_anchorsÚ	_settingsÚ_lookup_namesÚ_class_names)r7   Úfile_or_pathÚfonts      r   r5   zVoltToFea.__init__d   s¬   € Ý�l¥D¤MÑ2Ô2ð 	?Ø,8¸$Ð)ˆDŒI�tÔ)Ð)à,0°,Ð)ˆDŒI�tÔ)ØˆŒ
àˆŒØ ˆÔàˆŒ
ØˆÔØˆŒØˆŒå‘e”eˆŒØˆŒàˆÔØˆŒàˆŒàˆÔØˆÔÐÐr   c                 óî   — || j         vr`| j                             d|¦  «        }|| j                              ¦   «         v r |dz  }|| j                              ¦   «         v ° || j         |<   | j         |         S ©NÚ_)rR   Ú_NOT_LOOKUP_NAME_REÚsubÚvalues©r7   r   Úress      r   Ú_lookupNamezVoltToFea._lookupName~   s‚   € Ø�tÔ)Ð)Ð)ØÔ*×.Ò.¨s°DÑ9Ô9ˆCØ˜Ô+×2Ò2Ñ4Ô4Ð4Ð4Ø�s‘
�ð ˜Ô+×2Ò2Ñ4Ô4Ð4Ð4à'*ˆDÔ˜tÑ$ØÔ! $Ô'Ð'r   c                 óî   — || j         vr`| j                             d|¦  «        }|| j                              ¦   «         v r |dz  }|| j                              ¦   «         v ° || j         |<   | j         |         S rW   )rS   Ú_NOT_CLASS_NAME_RErZ   r[   r\   s      r   Ú
_classNamezVoltToFea._className†   s‚   € Ø�tÔ(Ð(Ð(ØÔ)×-Ò-¨c°4Ñ8Ô8ˆCØ˜Ô*×1Ò1Ñ3Ô3Ð3Ð3Ø�s‘
�ð ˜Ô*×1Ò1Ñ3Ô3Ð3Ð3à&)ˆDÔ˜dÑ#ØÔ  Ô&Ð&r   Fc                 óh  — |j         D ]1}t          |t          j        ¦  «        r|                      |¦  «         Œ2d„ |j         D ¦   «         }t          |¦  «        D ]}|                      |¦  «         Œ|j         D ]ç}t          |t          j        ¦  «        rd|v r|                      |¦  «         Œ6t          |t          j	        ¦  «        r|  
                    ||¦  «         Œgt          |t          j        t          j        f¦  «        rŒŽt          |t          j        ¦  «        r|                      |¦  «         Œ¾t          |t          j        ¦  «        st          |¦  «        ‚Œè|j         D ]I}t          |t          j        ¦  «        r-|j        rd|vrŒ(|j        rd|vrŒ4|                      |¦  «         ŒJd S )Nc                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r   )r   r$   ÚGroupDefinition)r    Úss     r   r(   z0VoltToFea._collectStatements.<locals>.<listcomp>—   s*   € ÐSÐSÐS˜­z¸!½TÔ=QÑ/RÔ/RÐS�!ÐSÐSÐSr   r   r
   )Ú
statementsr   r$   ÚGlyphDefinitionÚ_glyphDefinitionr/   Ú_groupDefinitionÚAnchorDefinitionÚ_anchorDefinitionÚSettingDefinitionÚ_settingDefinitionrd   ÚScriptDefinitionÚ_scriptDefinitionÚLookupDefinitionÚNotImplementedErrorÚposrZ   Ú_lookupDefinition)r7   ÚdocÚtablesÚignore_unsupported_settingsÚ	statementr,   r   s          r   Ú_collectStatementszVoltToFea._collectStatementsŽ   sá  € àœð 	1ð 	1ˆIÝ˜)¥TÔ%9Ñ:Ô:ð 1Ø×%Ò% iÑ0Ô0Ð0øð
 TÐS˜Sœ^ÐSÑSÔSˆÝ  Ñ(Ô(ð 	)ð 	)ˆEØ×!Ò! %Ñ(Ô(Ð(Ð(àœð 	5ð 	5ˆIÝ˜)¥TÔ%:Ñ;Ô;ð 
5Ø˜VÐ#Ð#Ø×*Ò*¨9Ñ5Ô5Ð5øÝ˜I¥tÔ'=Ñ>Ô>ð 5Ø×'Ò'¨	Ð3NÑOÔOÐOÐOÝ˜I­Ô(<½dÔ>RÐ'SÑTÔTð 5ØÝ˜I¥tÔ'<Ñ=Ô=ð 5Ø×&Ò& yÑ1Ô1Ð1Ð1Ý 	­4Ô+@ÑAÔAð 5Ý)¨)Ñ4Ô4Ð4ð5ð
 œð 	2ð 	2ˆIÝ˜)¥TÔ%:Ñ;Ô;ð 2Ø”=ð  V°6Ð%9Ð%9ØØ”=ð  V°6Ð%9Ð%9ØØ×&Ò& yÑ1Ô1Ð1øð	2ð 	2r   c           
      ó
  ‡ — t          j        ¦   «         }|j        }‰ j        rS|                     t          j        d¦  «        ¦  «         |                     ‰ j                             ¦   «         ¦  «         ‰ j        rj|                     t          j        d¦  «        ¦  «         |                     d„ t          ‰ j         
                    ¦   «         ¦  «        D ¦   «         ¦  «         ‰ j        rr|                     t          j        d¦  «        ¦  «         ‰ j                             ¦   «         D ]1}|                     |j        ¦  «         |                     |¦  «         Œ2‰ j                             ¦   «         }|D ]u}||         }|D ]G}||         }	|	D ]}
ˆ fd„|	|
         D ¦   «         |	|
<   Œd„ |	 
                    ¦   «         D ¦   «         ||<   ŒHd„ | 
                    ¦   «         D ¦   «         ||<   Œvd„ | 
                    ¦   «         D ¦   «         }|�rý|                     t          j        d	¦  «        ¦  «         | 
                    ¦   «         D �]À\  }}t          j        |¦  «        }t          |d
„ ¬¦  «        }|dk    r7t!          |¦  «        dk    r$t"                               d¦  «         |d d…         }|D �]>}|dk    r,|j                             t          j        |¦  «        ¦  «         t          ||         d„ ¬¦  «        }|dk    r7t!          |¦  «        dk    r$t"                               d¦  «         |d d…         }|D ]±}
|dk    rK|
dk    rdnd}|j                             t          j        |
                     d¦  «        |¬¦  «        ¦  «         ||         |
         D ]O}‰ j        |                     ¦   «                  }t          j        |¦  «        }|j                             |¦  «         ŒPŒ²�Œ@|                     |¦  «         �ŒÂ‰ j        rìd|v règ }dD ]”}|‰ j        v rtd|                     ¦   «         z   }t          j        |‰ j        |         ¦  «        }|                     |¦  «         |                     t          j        |¦  «        ¦  «         Œ|                     d ¦  «         Œ•t          j        d¦  «        }|j                             t          j        |Ž ¦  «         |                     |¦  «         |S )Nz# Glyph classesz
# Mark classesc              3   ó&   K  — | ]}|d          V — ŒdS ©é   Nr   )r    Úcs     r   ú	<genexpr>z.VoltToFea._buildFeatureFile.<locals>.<genexpr>¼   s&   è è € ÐNÐN q˜a œdÐNÐNÐNÐNÐNÐNr   z

# Lookupsc                 óJ   •— g | ]}|                      ¦   «         ‰j        v ¯|‘Œ S r   )r   rK   )r    Úlr7   s     €r   r(   z/VoltToFea._buildFeatureFile.<locals>.<listcomp>Ë   s4   ø€ ð +ð +ð +Ø¸!¿'º'¹)¼)ÀtÄ}Ð:TÐ:T˜Ð:TÐ:TÐ:Tr   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r    Útr€   s      r   r!   z/VoltToFea._buildFeatureFile.<locals>.<dictcomp>Î   s#   € Ð&KÐ&KÐ&K±°°1ÈÐ&K q¨!Ð&KÐ&KÐ&Kr   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r    r‚   re   s      r   r!   z/VoltToFea._buildFeatureFile.<locals>.<dictcomp>Ï   s#   € Ð$KÐ$KÐ$K©d¨a°ÈÐ$K Q¨Ð$KÐ$KÐ$Kr   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r    r‚   Úfs      r   r!   z/VoltToFea._buildFeatureFile.<locals>.<dictcomp>Ð   s#   € Ð;Ð;Ð;™T˜Q ¸Ð;�A�qÐ;Ð;Ð;r   z
# Featuresc                 ó   — | dk    rdndS )NÚDFLTr   r|   r   ©Úks    r   ú<lambda>z-VoltToFea._buildFeatureFile.<locals>.<lambda>Ö   s   € ÀÀfÂÀ¸A¸AÐRS€ r   )ÚkeyÚaaltr|   zvFEA syntax does not allow script statements in 'aalt' feature, so only lookups from the first script will be included.c                 ó   — | dk    rdndS )NÚdfltr   r|   r   rˆ   s    r   rŠ   z-VoltToFea._buildFeatureFile.<locals>.<lambda>â   s   € ¨1°ª;¨; a a¸A€ r   zzFEA syntax does not allow language statements in 'aalt' feature, so only lookups from the first language will be included.rŽ   TFé   )Úinclude_defaultr	   ©ÚBASEÚMARKÚLIGATUREÚ	COMPONENTÚGDEF_)r   ÚFeatureFilerf   rI   r   ÚCommentr   r[   rO   ÚsortedÚitemsrK   r6   rJ   ÚcopyÚFeatureBlockÚlenÚlogÚwarningÚScriptStatementÚLanguageStatementÚljustr   ÚLookupReferenceStatementrH   ÚGlyphClassDefinitionÚGlyphClassNameÚ
TableBlockÚGlyphClassDefStatement)r7   ru   rt   rf   ÚlookupÚfeaturesÚfeature_tagÚscriptsÚ
script_tagÚlangsÚlanguage_tagÚfeatureÚscript_tagsÚlanguage_tagsr�   r   Ú	lookuprefÚclassesÚ	classnameÚ
glyphclassÚgdefs   `                    r   Ú_buildFeatureFilezVoltToFea._buildFeatureFile²   sq  ø€ ÝŒoÑÔˆØ”^ˆ
àÔð 	;Ø×Ò�cœkÐ*;Ñ<Ô<Ñ=Ô=Ð=Ø×Ò˜dÔ0×7Ò7Ñ9Ô9Ñ:Ô:Ð:àÔð 	OØ×Ò�cœkÐ*<Ñ=Ô=Ñ>Ô>Ð>Ø×ÒÐNÐN­F°4Ô3D×3JÒ3JÑ3LÔ3LÑ,MÔ,MÐNÑNÔNÑNÔNÐNàŒ=ð 	*Ø×Ò�cœk¨-Ñ8Ô8Ñ9Ô9Ð9Øœ-×.Ò.Ñ0Ô0ð *ð *�Ø×!Ò! &¤.Ñ1Ô1Ð1Ø×!Ò! &Ñ)Ô)Ð)Ð)ð ”>×&Ò&Ñ(Ô(ˆØ#ð 		Lð 		LˆKØ˜{Ô+ˆGØ%ð Lð L�
Ø 
Ô+�Ø$)ð ð �Lð+ð +ð +ð +Ø#(¨Ô#6ð+ñ +ô +�E˜,Ñ'Ð'ð 'LÐ&K¸¿º¹¼Ð&KÑ&KÔ&K�˜
Ñ#Ð#Ø$KÐ$K°g·m²m±o´oÐ$KÑ$KÔ$KˆH�[Ñ!Ð!Ø;Ð; X§^¢^Ñ%5Ô%5Ð;Ñ;Ô;ˆàñ %	+Ø×Ò�cœk¨,Ñ7Ô7Ñ8Ô8Ð8Ø(0¯ªÑ(8Ô(8ð #+ñ #+Ñ$�˜WÝÔ*¨;Ñ7Ô7�Ý$ WÐ2SÐ2SÐTÑTÔT�Ø &Ò(Ð(­S°Ñ-=Ô-=ÀÒ-AÐ-AÝ—K’KðRñô ð ð #.¨b¨q¨b¤/�KØ"-ð Añ A�JØ" fÒ,Ð,ØÔ*×1Ò1µ#Ô2EÀjÑ2QÔ2QÑRÔRÐRÝ$*Ø 
Ô+Ø=Ð=ð%ñ %ô %�Mð # fÒ,Ð,µ°]Ñ1CÔ1CÀaÒ1GÐ1GÝŸšðXñô ð ð )6°b°q°bÔ(9˜Ø(5ð Að A˜Ø&¨&Ò0Ð0Ø6BÀfÒ6LÐ6L¨d¨dÐRW˜OØ#Ô.×5Ò5Ý #Ô 5Ø$0×$6Ò$6°qÑ$9Ô$9Ø4Cð!"ñ !"ô !"ñô ð ð %,¨JÔ$7¸Ô$Eð Að A˜DØ%)¤]°4·:²:±<´<Ô%@˜FÝ(+Ô(DÀVÑ(LÔ(L˜IØ#Ô.×5Ò5°iÑ@Ô@Ð@Ð@ðAñAð ×!Ò! 'Ñ*Ô*Ð*Ñ*àŒ:ð 	$˜& FÐ*Ð*ØˆGØAð )ð )�Ø˜4œ:Ð%Ð%Ø '¨$¯*ª*©,¬,Ñ 6�IÝ!$Ô!9¸)ÀTÄZÐPTÔEUÑ!VÔ!V�JØ×%Ò% jÑ1Ô1Ð1Ø—N’N¥3Ô#5°jÑ#AÔ#AÑBÔBÐBÐBà—N’N 4Ñ(Ô(Ð(Ð(å”> &Ñ)Ô)ˆDØŒO×"Ò"¥3Ô#=¸wÐ#GÑHÔHÐHØ×Ò˜dÑ#Ô#Ð#àˆ
r   c                 óP  — | j         €+t          | j        ¦  «                             ¦   «         | _         | j         }|€t          }| j        �| j                             ¦   «         | _        |                      |||¦  «         |  	                    |¦  «        }| 
                    ¦   «         S r3   )rC   Ú
VoltParserrD   ÚparseÚTABLESrE   ÚgetGlyphOrderrG   rx   r·   ÚasFea)r7   ru   rv   rt   Úfeas        r   ÚconvertzVoltToFea.convert
  s‘   € ØŒ9ÐÝ" 4Ô#5Ñ6Ô6×<Ò<Ñ>Ô>ˆDŒIØŒiˆàˆ>ÝˆFØŒ:Ð!Ø $¤
× 8Ò 8Ñ :Ô :ˆDÔà×Ò  VÐ-HÑIÔIÐIØ×$Ò$ VÑ,Ô,ˆØ�yŠy‰{Œ{Ðr   c                 ó’   — 	 |j         }n# t          $ r |}Y nw xY wt          j        | j                             ||¦  «        ¦  «        S r3   )ÚglyphÚAttributeErrorr   Ú	GlyphNamerF   Úget)r7   rÁ   r   s      r   Ú
_glyphNamezVoltToFea._glyphName  sV   € ð	Ø”;ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøåŒ}˜Tœ_×0Ò0°°tÑ<Ô<Ñ=Ô=Ð=ó   ‚
 Š˜c                 óš   — 	 |j         }n# t          $ r |}Y nw xY wt          j        | j        |                     ¦   «                  ¦  «        S r3   )r   rÂ   r   r¥   rI   r   )r7   r   r   s      r   Ú
_groupNamezVoltToFea._groupName  sU   € ð	Ø”;ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøåÔ! $Ô"4°T·Z²Z±\´\Ô"BÑCÔCÐCrÆ   c                 óD   ‡ — ˆ fd„|                      ¦   «         D ¦   «         S )Nc                 ó€   •— g | ]:}t          |t          t          j        f¦  «        r‰                     |¦  «        n|‘Œ;S r   )r   Ústrr$   rÃ   rÅ   ©r    r'   r7   s     €r   r(   z'VoltToFea._glyphSet.<locals>.<listcomp>'  sP   ø€ ð 
ð 
ð 
àõ $.¨aµ#µt´~Ð1FÑ#GÔ#GÐNˆT�_Š_˜QÑÔÐÈQð
ð 
ð 
r   ©ÚglyphSet)r7   r   s   ` r   Ú	_glyphSetzVoltToFea._glyphSet&  s6   ø€ ð
ð 
ð 
ð 
à—]’]‘_”_ð
ñ 
ô 
ð 	
r   c                 ó  — g }|D �]}}t          |t          j        ¦  «        r)|                     |                      |¦  «        ¦  «         ŒFt          |t          j        ¦  «        r)|                     |                      |¦  «        ¦  «         Œ‰t          |t          j        ¦  «        r\|                      |j	        d¬¦  «        }|r| 
                    |¦  «         Œ×|                     t          j        |¦  «        ¦  «         Œÿt          |t          j        ¦  «        rW|                      |¦  «        }|r| 
                    |¦  «         �ŒG|                     t          j        |¦  «        ¦  «         �Œpt          |¦  «        ‚|S ©NT©Úflatten)r   r$   rÃ   r   rÅ   r%   rÈ   ÚEnumÚ	_coverager   r   r   Ú
GlyphClassÚRangerÏ   rq   )r7   ÚcoveragerÓ   rš   r   s        r   rÕ   zVoltToFea._coverage,  s[  € ØˆØð 	0ñ 	0ˆDÝ˜$¥¤Ñ/Ô/ð 0Ø—’˜TŸ_š_¨TÑ2Ô2Ñ3Ô3Ð3Ð3Ý˜D¥$¤.Ñ1Ô1ð 0Ø—’˜TŸ_š_¨TÑ2Ô2Ñ3Ô3Ð3Ð3Ý˜D¥$¤)Ñ,Ô,ð 0Ø—~’~ d¤i¸�~Ñ>Ô>�Øð 7Ø—L’L Ñ&Ô&Ð&Ð&à—L’L¥¤°Ñ!5Ô!5Ñ6Ô6Ð6Ð6Ý˜D¥$¤*Ñ-Ô-ð 0Ø—~’~ dÑ+Ô+�Øð 7Ø—L’L Ñ&Ô&Ð&Ñ&à—L’L¥¤°Ñ!5Ô!5Ñ6Ô6Ð6Ñ6å)¨$Ñ/Ô/Ð/Øˆr   c                 óÌ   — g }|D ]^}|                       |d¬¦  «        }t          |¦  «        dk    rt          j        |¦  «        }n|d         }|                     |¦  «         Œ_|S )NTrÒ   r|   r   )rÕ   r�   r   rÖ   r   )r7   ÚcontextÚoutr   rØ   s        r   Ú_contextzVoltToFea._contextC  sp   € ØˆØð 	!ð 	!ˆDØ—~’~ d°D�~Ñ9Ô9ˆHÝ�8‰}Œ}˜qÒ Ð Ýœ>¨(Ñ3Ô3��à# Aœ;�Ø�JŠJ�xÑ Ô Ð Ð Øˆ
r   c                 ó  — |                       |j        ¦  «        }|                      |j        j        d¬¦  «        }t	          j        |¦  «        }t	          j        ||¦  «        }|| j        |j                             ¦   «         <   d S rÑ   )	ra   r   rÕ   r   r   rÖ   r¤   rI   r   )r7   r   r   Úglyphsrµ   Úclassdefs         r   ri   zVoltToFea._groupDefinitionN  sp   € Ø�Š˜uœzÑ*Ô*ˆØ—’ ¤
¤¸�Ñ>Ô>ˆÝ”^ FÑ+Ô+ˆ
ÝÔ+¨D°*Ñ=Ô=ˆØ19ˆÔ˜5œ:×+Ò+Ñ-Ô-Ñ.Ð.Ð.r   c                 óô  — 	 | j         |j                 | j        |j        <   n# t          $ r Y nw xY w|j        dv rp|j        | j        vr t          j        ¦   «         | j        |j        <   | j        |j                 j	         
                    |                      |j        ¦  «        ¦  «         |j        dk    r!| j                             |j        ¦  «         d S |j        dk    r|j        | j        |j        <   d S d S )Nr‘   r“   r”   )rG   ÚidrF   r   Ú	TypeErrorÚtyperH   r   rÖ   rÞ   r   rÅ   rM   ÚaddÚ
componentsrN   )r7   rÁ   s     r   rh   zVoltToFea._glyphDefinitionU  sú   € ð	Ø*.Ô*;¸E¼HÔ*EˆDŒO˜EœJÑ'Ð'øÝð 	ð 	ð 	ØˆDð	øøøð Œ:ÐBÐBÐBØŒz ¤Ð+Ð+Ý),¬Ñ)9Ô)9�”
˜5œ:Ñ&ØŒJ�u”zÔ"Ô)×0Ò0°·²ÀÄÑ1LÔ1LÑMÔMÐMàŒ:˜ÒÐØŒK�OŠO˜EœJÑ'Ô'Ð'Ð'Ð'ØŒZ˜:Ò%Ð%Ø*/Ô*:ˆDŒO˜EœJÑ'Ð'Ð'ð &Ð%s   ‚" ¢
/®/c                 ó\  — |j         }|j        D ]œ}|j         }|j        D ]‹}d„ |j        D ¦   «         }|j         }|| j        vr
i | j        |<   || j        |         vri | j        |         |<   || j        |         |         vsJ ‚|                     ¦   «         | j        |         |         |<   ŒŒŒ�d S )Nc                 óF   — i | ]}|                      d ¦  «        d         d“ŒS )ú\r   T)Úsplit)r    r€   s     r   r!   z/VoltToFea._scriptDefinition.<locals>.<dictcomp>j  s)   € ÐKÐKÐK°a˜1Ÿ7š7 4™=œ=¨Ô+¨TÐKÐKÐKr   )Útagr­   r©   ÚlookupsrJ   Úkeys)r7   ÚscriptÚstagÚlangÚltagr¯   rë   Úftags           r   ro   zVoltToFea._scriptDefinitione  sÞ   € ØŒzˆØ”Lð 
	Bð 
	BˆDØ”8ˆDØœ=ð Bð B�ØKÐK¸7¼?ÐKÑKÔK�Ø”{�Ø˜tœ~Ð-Ð-Ø+-�D”N 4Ñ(Ø˜tœ~¨dÔ3Ð3Ð3Ø13�D”N 4Ô(¨Ñ.Ø 4¤>°$Ô#7¸Ô#=Ð=Ð=Ð=Ð=Ø3:·<²<±>´>�”˜tÔ$ TÔ*¨4Ñ0Ð0ðBð
	Bð 
	Br   c                 ó²   — |j                              d¦  «        r|j        | j        |j         <   d S |s$t                               d|j         › �¦  «         d S d S )NÚ	COMPILER_zUnsupported setting ignored: )r   Ú
startswithÚvaluerQ   rž   rŸ   )r7   ÚsettingÚignore_unsupporteds      r   rm   zVoltToFea._settingDefinitions  si   € ØŒ<×"Ò" ;Ñ/Ô/ð 	HØ+2¬=ˆDŒN˜7œ<Ñ(Ð(Ð(Ø#ð 	HÝ�KŠKÐF¸¼ÐFÐFÑGÔGÐGÐGÐGð	Hð 	Hr   c                 óØ   — |\  }}}}}}|r|                      ¦   «         pd }|r|                      ¦   «         pd }	|r|                      ¦   «         pd }
t          j        ||||	|
|¬¦  «        S )N)Ú
xPlacementÚ
yPlacementÚxAdvanceÚ
xPlaDeviceÚ
yPlaDeviceÚ
xAdvDevice)rš   r   ÚValueRecord)r7   Ú
adjustmentÚadvÚdxÚdyÚadv_adjust_byÚdx_adjust_byÚdy_adjust_byÚ
adv_deviceÚ	dx_deviceÚ	dy_devices              r   Ú_adjustmentzVoltToFea._adjustmenty  s�   € ØAKÑ>ˆˆR��] L°,à"Ð< }×':Ò':Ñ'<Ô'<ÐDÀˆ
Ø Ð9 \×%7Ò%7Ñ%9Ô%9ÐA¸Tˆ	Ø Ð9 \×%7Ò%7Ñ%9Ô%9ÐA¸Tˆ	åŒØØØØ Ø Ø!ð
ñ 
ô 
ð 	
r   c                 ó¼   — |\  }}}}}}|rJ ‚|r|                      ¦   «         pd }|r|                      ¦   «         pd }	t          j        |pd|pd|pd |	pd ¬¦  «        S )Nr   )ÚxDeviceTableÚyDeviceTable)rš   r   ÚAnchor)
r7   r   r  r  r  r  r  r  r  r	  s
             r   Ú_anchorzVoltToFea._anchor‰  s�   € ØAKÑ>ˆˆR��] L°,à Ð Ð Ð Ø Ð9 \×%7Ò%7Ñ%9Ô%9ÐA¸Tˆ	Ø Ð9 \×%7Ò%7Ñ%9Ô%9ÐA¸Tˆ	åŒzØˆG�!ØˆG�!Ø"Ð* dØ"Ð* dð	
ñ 
ô 
ð 	
r   c                 ó’  — |j         }|j        }|                      |j        ¦  «        }|| j        vr
i | j        |<   |                     d¦  «        r(|d d…         |dd …                              ¦   «         z   }n|                     ¦   «         }|| j        |         vri | j        |         |<   || j        |         |         |j        <   d S )NÚMARK_é   )r   Ú
glyph_namer  rr   rP   rô   r   Ú	component)r7   Ú	anchordefÚ
anchornameÚ	glyphnameÚanchors        r   rk   zVoltToFea._anchorDefinition—  sÎ   € Ø”^ˆ
ØÔ(ˆ	Ø—’˜iœmÑ,Ô,ˆà˜DœMÐ)Ð)Ø')ˆDŒM˜)Ñ$Ø× Ò  Ñ)Ô)ð 	,Ø# B Q Bœ¨*°Q°R°R¬.×*>Ò*>Ñ*@Ô*@Ñ@ˆJˆJà#×)Ò)Ñ+Ô+ˆJØ˜Tœ]¨9Ô5Ð5Ð5Ø35ˆDŒM˜)Ô$ ZÑ0ØDJˆŒ�iÔ  Ô,¨YÔ-@ÑAÐAÐAr   c           
      óD  ‡ — |j         }|j        }t          |t          j        ¦  «        �r%|j                             ¦   «         D �]\  \  }}\  }}|j        |dz
           }	|j        |dz
           }
d}|	|
z   D ]}t          |t          j	        ¦  «        sd}Œ‰  
                    |	¦  «        }‰  
                    |
¦  «        }‰                      |¦  «        }‰                      |¦  «        }t          |¦  «        dk    sJ ‚t          |¦  «        dk    sJ ‚|                     t          j        |d         ||d         ||¬¦  «        ¦  «         �Œ
d S t          |t          j        ¦  «        r�|j        D ]w\  }}‰  
                    |¦  «        }‰                      |¦  «        }t          |¦  «        dk    sJ ‚|                     t          j        |d         |fgg g d¦  «        ¦  «         Œxd S t          |t          j        ¦  «        �r÷i }t)          ¦   «         }|j        D �]t\  }}‰                      |› d|j        › �¦  «        }t          j        |¦  «        }|                     ¦   «         }t)          ¦   «         }|D ])}|                     |                     ¦   «         ¦  «         Œ*|                     |¦  «        s|                     |¦  «         |sŒ´|                     |¦  «         |D ]U}‰                      |¦  «        }‰ j        |         d|› �         d         }t          j         |||¦  «        } | ‰ j!        ||f<   ŒV|j"        D ]K}!|!                     ¦   «         D ]4}"|"|vrg ||"<   ||f||"         vr||"                              ||f¦  «         Œ5ŒL�ŒvtG          ˆ fd„|D ¦   «         ¦  «        }#tG          ˆ fd	„|D ¦   «         ¦  «        }$|D �].}"d}%|#r‰ j$        |"         }%d
„ tK          |%¦  «        D ¦   «         }||"         D ]}\  }}t          j        |¦  «        }tK          d|%dz   ¦  «        D ]P}&|&‰ j        |"         |         v r9‰ j        |"         |         |&         }||&dz
                                ||f¦  «         ŒQŒ~‰                      |"¦  «        }!|$rt          j&        |!|d         ¦  «        }n3|#rt          j'        |!|¦  «        }nt          j(        |!|d         ¦  «        }|                     |¦  «         �Œ0d S t          |t          j)        ¦  «        �r{g }'|j*        D ]3}|D ].}!|!                     ¦   «         D ]}"|'                     |"¦  «         ŒŒ/Œ4g }(|j+        D ]3}|D ].}!|!                     ¦   «         D ]}"|(                     |"¦  «         ŒŒ/Œ4|'D ] }"‰                      |"¦  «        }‰ j        |"         d         d         })d }*|"|(v rA‰ j        |"         d         d         }*|( ,                    |( -                    |"¦  «        ¦  «         |                     t          j.        ||)|*¦  «        ¦  «         Œ¡|(D ]Y}"‰                      |"¦  «        }‰ j        |"         d         d         }*|                     t          j.        |d |*¦  «        ¦  «         ŒZd S t_          |¦  «        ‚)Nr|   FTr   )Ú
enumeratedú.r  c              3   ó*   •K  — | ]}|‰j         v V — Œd S r3   )rN   ©r    Únr7   s     €r   r~   z(VoltToFea._gposLookup.<locals>.<genexpr>ô  s*   øè è € ÐDÐD°q˜a 4¤?Ð2ÐDÐDÐDÐDÐDÐDr   c              3   ó*   •K  — | ]}|‰j         v V — Œd S r3   )rM   r  s     €r   r~   z(VoltToFea._gposLookup.<locals>.<genexpr>õ  s*   øè è € Ð<Ð<¨q˜!˜tœ{Ð*Ð<Ð<Ð<Ð<Ð<Ð<r   c                 ó   — g | ]}g ‘ŒS r   r   )r    rX   s     r   r(   z)VoltToFea._gposLookup.<locals>.<listcomp>û  s   € Ð7Ð7Ð7 ˜Ð7Ð7Ð7r   ÚentryÚexit)0rf   rr   r   r$   ÚPositionAdjustPairDefinitionÚadjust_pairrš   Úcoverages_1Úcoverages_2r%   rÕ   r
  r�   r   r   ÚPairPosStatementÚPositionAdjustSingleDefinitionÚadjust_singleÚSinglePosStatementÚPositionAttachDefinitionrL   Úcoverage_tora   r   Ú	MarkClassr   ÚupdaterÎ   Ú
isdisjointÚdifference_updaterÅ   rP   ÚMarkClassDefinitionrO   rØ   ÚallrN   ÚrangeÚMarkMarkPosStatementÚMarkLigPosStatementÚMarkBasePosStatementÚPositionAttachCursiveDefinitionÚcoverages_enterÚcoverages_exitÚpopÚindexÚCursivePosStatementrq   )+r7   r¨   Ú	fealookuprf   rr   Úidx1Úidx2Úpos1Úpos2Ú
coverage_1Ú
coverage_2r  r   Úglyphs1Úglyphs2Úrecord1Úrecord2ÚaÚbrÞ   ÚrecordÚanchorsÚallmarksrØ   r  r´   Ú	markclassÚmarksÚmarkr  rÁ   r  ÚmarkdefÚbaser   Úis_ligatureÚis_markrå   r  Úenter_coverageÚexit_coverager!  r"  s+   `                                          r   Ú_gposLookupzVoltToFea._gposLookup¦  s¬  ø€ ØÔ)ˆ
àŒjˆÝ�c�4Ô<Ñ=Ô=ñ 	+Ø.1¬o×.CÒ.CÑ.EÔ.Eð ñ Ñ*‘��t™l˜t TØ œ_¨T°A©XÔ6�
Ø œ_¨T°A©XÔ6�
ð #�
Ø&¨Ñ3ð *ð *�DÝ% d­D¬NÑ;Ô;ð *Ø%)˜
øàŸ.š.¨Ñ4Ô4�ØŸ.š.¨Ñ4Ô4�Ø×*Ò*¨4Ñ0Ô0�Ø×*Ò*¨4Ñ0Ô0�Ý˜7‘|”| qÒ(Ð(Ð(Ð(Ý˜7‘|”| qÒ(Ð(Ð(Ð(Ø×!Ò!ÝÔ(Ø œ
 G¨W°Q¬Z¸ÈZðñ ô ñô ð ñ ð#ð õ, ˜�TÔ@ÑAÔAð h	+ØÔ)ð ð ‘��1ØŸš¨Ñ*Ô*�Ø×)Ò)¨!Ñ,Ô,�Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ø×!Ò!ÝÔ*¨V°A¬Y¸Ð,?Ð+@À"ÀbÈ%ÑPÔPñô ð ð ð	ð õ ˜�TÔ:Ñ;Ô;ñ `	+ØˆGÝ‘u”uˆHØ(+¬ð &Jñ &JÑ$�˜*ð !ŸOšO¨zÐ,IÐ,I¸F¼KÐ,IÐ,IÑJÔJ�	ÝœM¨)Ñ4Ô4�	ð (×-Ò-Ñ/Ô/�
õ ™œ�Ø$ð 2ð 2�DØ—L’L §¢¡¤Ñ1Ô1Ð1Ð1Ø×'Ò'¨Ñ1Ô1ð !Ø×+Ò+¨HÑ5Ô5Ð5Ø ð !Ø Ø—’ Ñ&Ô&Ð&à!&ð Hð H�IØ ŸOšO¨IÑ6Ô6�EØ!œ]¨9Ô5Ð6J¸jÐ6JÐ6JÔKÈAÔN�FÝ!Ô5°iÀÈÑOÔO�GØ@G�DÔ% y°)Ð&<Ñ=Ð=àœLð Jð J�DØ $§¢¡¤ð Jð J˜Ø wÐ.Ð.Ø,.˜G D™MØ&¨	Ð2¸'À$¼-ÐGÐGØ# DœM×0Ò0°*¸iÐ1HÑIÔIÐIøð	JñJõ ÐDÐDÐDÐD¸GÐDÑDÔDÑDÔDˆKÝÐ<Ð<Ð<Ð<°GÐ<Ñ<Ô<Ñ<Ô<ˆGØð (ñ (�Ø�
Øð 7Ø!%¤°Ô!6�Jà7Ð7¥U¨:Ñ%6Ô%6Ð7Ñ7Ô7�Ø'.¨t¤}ð Mð M‘O�D˜)Ý #¤¨iÑ 8Ô 8�IÝ%*¨1¨j¸1©nÑ%=Ô%=ð Mð M˜	Ø$¨¬°dÔ(;¸DÔ(AÐAÐAØ%)¤]°4Ô%8¸Ô%>¸yÔ%I˜FØ! )¨a¡-Ô0×7Ò7¸ÀÐ8KÑLÔLÐLøðMð
 —’ tÑ,Ô,�Øð DÝÔ3°D¸%À¼(ÑCÔC�D�DØ ð DÝÔ2°4¸Ñ?Ô?�D�DåÔ3°D¸%À¼(ÑCÔC�DØ×!Ò! $Ñ'Ô'Ð'Ñ'ð)(ð (õ* ˜�TÔAÑBÔBñ 	+àˆNØÔ/ð 4ð 4�Ø$ð 4ð 4�DØ $§¢¡¤ð 4ð 4˜Ø&×-Ò-¨dÑ3Ô3Ð3Ð3ð4ð4ð ˆMØÔ.ð 3ð 3�Ø$ð 3ð 3�DØ $§¢¡¤ð 3ð 3˜Ø%×,Ò,¨TÑ2Ô2Ð2Ð2ð3ð3ð 'ð Oð O�ØŸš¨Ñ-Ô-�Øœ dÔ+¨GÔ4°QÔ7�Ø�Ø˜=Ð(Ð(Øœ=¨Ô.¨vÔ6°qÔ9�DØ!×%Ò% m×&9Ò&9¸$Ñ&?Ô&?Ñ@Ô@Ð@Ø×!Ò!¥#Ô"9¸%ÀÈÑ"MÔ"MÑNÔNÐNÐNð &ð Nð N�ØŸš¨Ñ-Ô-�Ø”} TÔ*¨6Ô2°1Ô5�Ø×!Ò!¥#Ô"9¸%ÀÀtÑ"LÔ"LÑMÔMÐMÐMðNð Nõ
 & cÑ*Ô*Ð*r   c                 ó$  — |j         }|j        }t          |t          j        ¦  «        rð|j                             ¦   «         D ]Ô\  \  }	}
\  }}|                      |j        |	dz
           ¦  «        }|                      |j	        |
dz
           ¦  «        }t          |¦  «        dk    sJ ‚t          |¦  «        dk    sJ ‚|d         |d         f}|rt          j        |||fg¦  «        }nt          j        |||||g¦  «        }|                     |¦  «         ŒÕd S t          |t          j        ¦  «        r›t          j        ¦   «         g}|j        D ]5\  }}|d                              |                      |d¬¦  «        ¦  «         Œ6|rt          j        |||fg¦  «        }nt          j        ||||g¦  «        }|                     |¦  «         d S t          |t          j        ¦  «        r›t          j        ¦   «         g}|j        D ]5\  }}|d                              |                      |d¬¦  «        ¦  «         Œ6|rt          j        |||fg¦  «        }nt          j        ||||g¦  «        }|                     |¦  «         d S t+          |¦  «        ‚)Nr|   r   TrÒ   )rf   rr   r   r$   r#  r$  rš   rÕ   r%  r&  r�   r   ÚIgnorePosStatementÚChainContextPosStatementr   r(  rÖ   r)  r   r+  r,  rq   )r7   r¨   ÚprefixÚsuffixÚignorer=  r6   rf   rr   r>  r?  r@  rA  rD  rE  rÞ   rw   rH  rX   rØ   s                       r   Ú_gposContextLookupzVoltToFea._gposContextLookup+  sÈ  € ØÔ)ˆ
àŒjˆÝ�c�4Ô<Ñ=Ô=ð (	+Ø.1¬o×.CÒ.CÑ.EÔ.Eð -ð -Ñ*‘��t™l˜t TØŸ.š.¨¬¸À¹Ô)BÑCÔC�ØŸ.š.¨¬¸À¹Ô)BÑCÔC�Ý˜7‘|”| qÒ(Ð(Ð(Ð(Ý˜7‘|”| qÒ(Ð(Ð(Ð(Ø! !œ* g¨a¤jÐ1�àð Ý #Ô 6¸ÀÈÐ8PÐ7QÑ RÔ R�I�Iå #Ô <Ø ¨°¸'Ð0Bñ!ô !�Ið ×!Ò! )Ñ,Ô,Ð,Ð,ð-ð -õ ˜�TÔ@ÑAÔAð 	+Ý”nÑ&Ô&Ð'ˆFØÔ)ð Bð B‘��1Ø�q”	× Ò  §¢°¸4 Ñ!@Ô!@ÑAÔAÐAÐAàð ÝÔ2°V¸VÀVÐ4LÐ3MÑNÔN�	�	åÔ8Ø˜F F¨W¨Iñô �	ð ×Ò˜iÑ(Ô(Ð(Ð(Ð(Ý˜�TÔ:Ñ;Ô;ð 	+Ý”nÑ&Ô&Ð'ˆFØ"œð Ið I‘�˜!Ø�q”	× Ò  §¢°À$ Ñ!GÔ!GÑHÔHÐHÐHàð ÝÔ2°V¸VÀVÐ4LÐ3MÑNÔN�	�	åÔ8Ø˜F F¨W¨Iñô �	ð ×Ò˜iÑ(Ô(Ð(Ð(Ð(å% cÑ*Ô*Ð*r   c                 ó¢	  ‡ ‡— |j         }|j        }t          |t          j        ¦  «        �rži }|j                             ¦   «         D �]'\  }}|r|s/|j        \  }}	}
t           	                    |› d|	› d|
› d�¦  «         Œ9‰  
                    |¦  «        }‰  
                    |¦  «        }t          |¦  «        dk    sJ ‚t          |d                              ¦   «         |d                              ¦   «         ¦  «        D ]n\  }}|                     t          ‰                      |¦  «        ¦  «        g ¦  «                             t          ‰                      |¦  «        ¦  «        ¦  «         Œo�Œ)|                     ¦   «         D ]C\  }}t%          j        g |g t%          j        |¦  «        ¦  «        }|                     |¦  «         ŒDd S |j                             ¦   «         D �]ê\  }}|r|s/|j        \  }}	}
t           	                    |› d|	› d|
› d�¦  «         Œ9‰  
                    |¦  «        }‰  
                    |¦  «        }t          |t          j        ¦  «        rVt          |¦  «        dk    sJ ‚t          |¦  «        dk    sJ ‚|                     t%          j        ||g g d¦  «        ¦  «         ŒÓt          |t          j        ¦  «        rŒît          |t          j        ¦  «        rGt          |¦  «        dk    sJ ‚|                     t%          j        g |d         g |¦  «        ¦  «         �ŒOt          |t          j        ¦  «        �rst          |¦  «        dk    sJ ‚t%          j        g |g |d         d¦  «        }t9          d„ |D ¦   «         ¦  «        Š‰dk    �r	t;          ˆfd„|D ¦   «         ¦  «        sJ ‚d„ |D ¦   «         }ˆfd	„|D ¦   «         }|d                              ¦   «         }t          |¦  «        dk    r|d         g‰z  }t          |¦  «        ‰k    sJ ‚|                     t%          j        d
|› �¦  «        ¦  «         t          g |¢|‘R Ž D ]I}ˆ fd„|D ¦   «         }|                     t%          j        g |d d…         g |d         d¦  «        ¦  «         ŒJ�ŒÆ|                     |¦  «         �ŒÝt?          |¦  «        ‚d S )Nú:ú: Ignoring empty substitutionr|   r   Fc              3   óX   K  — | ]%}t          |                     ¦   «         ¦  «        V — Œ&d S r3   ©r�   rÎ   r&   s     r   r~   z(VoltToFea._gsubLookup.<locals>.<genexpr>˜  s2   è è € Ð:Ð:¨a�˜AŸJšJ™LœLÑ)Ô)Ð:Ð:Ð:Ð:Ð:Ð:r   c              3   ób   •K  — | ])}t          |                     ¦   «         ¦  «        ‰d fv V — Œ*dS r{   rb  ©r    r'   r  s     €r   r~   z(VoltToFea._gsubLookup.<locals>.<genexpr>›  s<   øè è € ÐKÐK¸q�s 1§:¢:¡<¤<Ñ0Ô0°Q¸°FÐ:ÐKÐKÐKÐKÐKÐKr   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   rÍ   r&   s     r   r(   z)VoltToFea._gsubLookup.<locals>.<listcomp>œ  s    € Ð;Ð;Ð;¨q˜aŸjšj™lœlÐ;Ð;Ð;r   c                 óR   •— g | ]#}t          |¦  «        d k    r|d         g‰z  n|‘Œ$S )r|   r   )r�   rd  s     €r   r(   z)VoltToFea._gsubLookup.<locals>.<listcomp>�  s5   ø€ ÐQÐQÐQÀQ­S°©V¬V°qª[¨[  !¤˜v¨™z˜z¸aÐQÐQÐQr   ú# c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )rÅ   rÌ   s     €r   r(   z)VoltToFea._gsubLookup.<locals>.<listcomp>­  s%   ø€ Ð!EÐ!EÐ!E¸ $§/¢/°!Ñ"4Ô"4Ð!EÐ!EÐ!Er   éÿÿÿÿ) rf   rZ   r   r$   ÚSubstitutionAlternateDefinitionÚmappingrš   r9   rž   rŸ   rÕ   r�   ÚziprÎ   Ú
setdefaultrË   rÅ   r   r   ÚAlternateSubstStatementrÖ   ÚSubstitutionSingleDefinitionÚSingleSubstStatementÚ+SubstitutionReverseChainingSingleDefinitionÚSubstitutionMultipleDefinitionÚMultipleSubstStatementÚSubstitutionLigatureDefinitionÚLigatureSubstStatementÚmaxr2  r˜   rq   )r7   r¨   r=  rf   rZ   Ú
alternatesr‹   ÚvalÚpathÚlineÚcolumnrÞ   ÚreplacementsÚ	src_glyphÚ
repl_glyphrÁ   rw   ÚreplacementÚzippedr  s   `                  @r   Ú_gsubLookupzVoltToFea._gsubLookupY  s\  øø€ ØÔ)ˆ
àŒjˆõ
 �c�4Ô?Ñ@Ô@ñ 	ØˆJØœK×-Ò-Ñ/Ô/ð ñ ‘��SØð  #ð Ø),¬Ñ&�D˜$ Ý—K’K 4Ð VÐ V¨$Ð VÐ V°Ð VÐ VÐ VÑWÔWÐWØØŸš¨Ñ,Ô,�Ø#Ÿ~š~¨cÑ2Ô2�Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ý-0Ø˜1”I×&Ò&Ñ(Ô(¨,°q¬/×*BÒ*BÑ*DÔ*Dñ.ô .ð ð Ñ)�I˜zð ×)Ò)­#¨d¯oªo¸iÑ.HÔ.HÑ*IÔ*IÈ2ÑNÔN×UÒUÝ˜DŸOšO¨JÑ7Ô7Ñ8Ô8ñô ð ð ñð (2×'7Ò'7Ñ'9Ô'9ð -ð -Ñ#��|ÝÔ7Ø˜˜r¥3¤>°,Ñ#?Ô#?ñô �	ð ×!Ò! )Ñ,Ô,Ð,Ð,ØˆFàœ×)Ò)Ñ+Ô+ð =	/ñ =	/‰HˆC�Øð ˜cð Ø%(¤\Ñ"��d˜FÝ—’˜tÐRÐR dÐRÐR¨VÐRÐRÐRÑSÔSÐSØØ—^’^ CÑ(Ô(ˆFØŸ>š>¨#Ñ.Ô.ˆLÝ˜#�tÔ@ÑAÔAð 6/Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ý˜<Ñ(Ô(¨AÒ-Ð-Ð-Ð-Ø×!Ò!ÝÔ,¨V°\À2ÀrÈ5ÑQÔQñô ð ð õ ˜C¥Ô!QÑRÔRð 0/àÝ˜C¥Ô!DÑEÔEð -/Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ø×!Ò!ÝÔ.¨r°6¸!´9¸bÀ,ÑOÔOñô ð ñ õ ˜C¥Ô!DÑEÔEñ (/Ý˜<Ñ(Ô(¨AÒ-Ð-Ð-Ð-ÝÔ6Ø˜  L°¤O°Uñô �	õ Ð:Ð:°6Ð:Ñ:Ô:Ñ:Ô:�Ø�q’5‘5åÐKÐKÐKÐKÀFÐKÑKÔKÑKÔKÐKÐKÐKØ;Ð;°FÐ;Ñ;Ô;�FØQÐQÐQÐQÈ&ÐQÑQÔQ�Fð #/¨q¤/×":Ò":Ñ"<Ô"<�KÝ˜;Ñ'Ô'¨1Ò,Ð,Ø'2°1¤~Ð&6¸Ñ&:˜Ý˜{Ñ+Ô+¨qÒ0Ð0Ð0Ð0ð ×%Ò%¥c¤kÐ2B°yÐ2BÐ2BÑ&CÔ&CÑDÔDÐDå"%Ð"; vÐ";¨{Ð";Ð";Ð";ð ð ˜Ø!EÐ!EÐ!EÐ!E¸fÐ!EÑ!EÔ!E˜Ø"×)Ò)ÝÔ6Ø " F¨3¨B¨3¤K°°V¸B´ZÀñô ñô ð ð ñð ×%Ò% iÑ0Ô0Ð0Ñ0å)¨#Ñ.Ô.Ð.ð{=	/ð =	/r   c           	      ód  — |j         }|j        }t          |t          j        ¦  «        r¯|j                             ¦   «         D ]Œ\  }	}
|	r|
s/|j        \  }}}t           	                    |› d|› d|› d�¦  «         Œ8|  
                    |	¦  «        }|  
                    |
¦  «        }|                     t          j        ||||¦  «        ¦  «         Œ�g |_        d S t          |t          j        t          j        t          j        t          j        f¦  «        st'          t)          |¦  «        ¦  «        ‚g }|j                             ¦   «         D ]b\  }	}
|	r|
s/|j        \  }}}t           	                    |› d|› d|› d�¦  «         Œ8|                     |  
                    |	d¬¦  «        ¦  «         Œct-          |¦  «        dk    rt          j        |¦  «        g}|r-|                     t          j        |||fg¦  «        ¦  «         d S |                     t          j        ||||g¦  «        ¦  «         d S )Nr_  r`  TrÒ   r|   )rf   rZ   r   r$   rq  rk  rš   r9   rž   rŸ   rÕ   r   r   Ú ReverseChainSingleSubstStatementr6   ro  rr  rt  rj  rq   rã   r   r�   rÖ   ÚIgnoreSubstStatementÚChainContextSubstStatement)r7   r¨   rZ  r[  r\  r=  r6   rf   rZ   r‹   rx  ry  rz  r{  rÞ   r|  s                   r   Ú_gsubContextLookupzVoltToFea._gsubContextLookup¸  sg  € ØÔ)ˆ
àŒjˆå�c�4ÔKÑLÔLð 	àœK×-Ò-Ñ/Ô/ð ð ‘��SØð  #ð Ø),¬Ñ&�D˜$ Ý—K’K 4Ð VÐ V¨$Ð VÐ V°Ð VÐ VÐ VÑWÔWÐWØØŸš¨Ñ,Ô,�Ø#Ÿ~š~¨cÑ2Ô2�Ø×!Ò!ÝÔ8Ø ¨°ñô ñô ð ð ð
 !#ˆIÔØˆFåØåÔ1ÝÔ3ÝÔ3ÝÔ4ð	ñ
ô 
ð 		1õ &¥d¨3¡i¤iÑ0Ô0Ð0àˆØœ×)Ò)Ñ+Ô+ð 	=ð 	=‰HˆC�Øð ˜cð Ø%(¤\Ñ"��d˜FÝ—’˜tÐRÐR dÐRÐR¨VÐRÐRÐRÑSÔSÐSØØ�MŠM˜$Ÿ.š.¨°d˜.Ñ;Ô;Ñ<Ô<Ð<Ð<åˆv‰;Œ;˜Š?ˆ?Ý”n VÑ,Ô,Ð-ˆFØð 	Ø×Ò�cÔ6¸ÀÈÐ8PÐ7QÑRÔRÑSÔSÐSÐSÐSà×ÒÝÔ.¨v°v¸vÈÀyÑQÔQñô ð ð ð r   c           	      óÆ  — d }d }d}|j         dk    r|dz  }|j        s|dz  }|j        s|dz  }nVt          |j        t          ¦  «        r|                      |j        ¦  «        }n!|j        �|                      |j        ¦  «        }d }|s|€|�t          j        |||¦  «        }d}| j	         
                    d¦  «        rd}d	|j        v �rK|j                             d	¦  «        d         }|                     ¦   «         | j        vrut          |                      |¦  «        |¬
¦  «        }|�|j                             |¦  «         |j                             t          j        d|j        z   ¦  «        ¦  «         n~| j        |                     ¦   «                  }|j                             t          j        ¦   «         ¦  «         |j                             t          j        d|j        z   ¦  «        ¦  «         || j        |                     ¦   «         <   nft          |                      |j        ¦  «        |¬
¦  «        }|�|j                             |¦  «         || j        |j                             ¦   «         <   |j        �4|j                             t          j        d|j        z   ¦  «        ¦  «         g }	|j        D ]‹}
|                      |
j        ¦  «        }|                      |
j        ¦  «        }|
j        dk    }|	                     |||g¦  «         |r0t7          |j        ¦  «        dk    r|	                     g g dg¦  «         ŒŒ|	rÔt          j        |                      |j        dz   ¦  «        |¬
¦  «        }|j                             |¦  «         |j        �|                      ||¦  «         n|j         �|  !                    ||¦  «         |	D ]I\  }}}|j        �|  "                    ||||||¦  «         Œ(|j         �|  #                    ||||||¦  «         ŒJd S |j        �|                      ||¦  «         d S |j         �|  !                    ||¦  «         d S d S )Nr   ÚRTLr|   é   é   FÚCOMPILER_USEEXTENSIONLOOKUPSTrè   )r8   rg  ÚEXCEPT_CONTEXTz chained)$Ú	directionÚprocess_baseÚprocess_marksr   rË   rÈ   Úmark_glyph_setr   ÚLookupFlagStatementrQ   rÄ   r   ré   r   rK   r1   r^   rf   r   r˜   ÚSubtableStatementÚcommentsrÚ   rÜ   ÚleftÚrightÚex_or_inr�   ÚLookupBlockr6   rZ   r�  rr   rV  r†  r]  )r7   r¨   Úmark_attachementÚmark_filteringÚflagsÚlookupflagsr8   r   r=  ÚcontextsrÚ   rZ  r[  r\  r6   s                  r   rs   zVoltToFea._lookupDefinitionê  s­  € ØÐØˆàˆØÔ˜uÒ$Ð$Ø�Q‰JˆEØÔ"ð 	Ø�Q‰JˆEð Ô#ð 	DØ�Q‰JˆEˆEÝ˜Ô,­cÑ2Ô2ð 	DØ#Ÿš¨vÔ/CÑDÔDÐÐØÔ"Ð.Ø!Ÿ_š_¨VÔ-BÑCÔCˆNàˆØð 	Ð$Ð0°NÐ4NÝÔ1ØÐ'¨ñô ˆKð ˆØŒ>×ÒÐ<Ñ=Ô=ð 	!Ø ˆMà�6”;ÐÑð ”;×$Ò$ TÑ*Ô*¨1Ô-ˆDØ�zŠz‰|Œ| 4¤=Ð0Ð0Ý"Ø×$Ò$ TÑ*Ô*Ø"/ðñ ô �	ð Ð*ØÔ(×/Ò/°Ñ<Ô<Ð<ØÔ$×+Ò+­C¬K¸¸v¼{Ñ8JÑ,KÔ,KÑLÔLÐLÐLà œM¨$¯*ª*©,¬,Ô7�	ØÔ$×+Ò+­CÔ,AÑ,CÔ,CÑDÔDÐDØÔ$×+Ò+­C¬K¸¸v¼{Ñ8JÑ,KÔ,KÑLÔLÐLØ*3ˆDŒM˜$Ÿ*š*™,œ,Ñ'Ð'åØ× Ò  ¤Ñ-Ô-Ø+ðñ ô ˆIð Ð&ØÔ$×+Ò+¨KÑ8Ô8Ð8Ø1:ˆDŒM˜&œ+×+Ò+Ñ-Ô-Ñ.àŒ?Ð&ØÔ ×'Ò'­¬°D¸6¼?Ñ4JÑ(KÔ(KÑLÔLÐLàˆØ”~ð 	1ð 	1ˆGØ—]’] 7¤<Ñ0Ô0ˆFØ—]’] 7¤=Ñ1Ô1ˆFØÔ%Ð)9Ò9ˆFØ�OŠO˜V V¨VÐ4Ñ5Ô5Ð5ð ð 1�#˜fœnÑ-Ô-°Ò2Ð2Ø—’  R¨ Ñ0Ô0Ð0øàð 	4Ý”oØ× Ò  ¤¨zÑ!9Ñ:Ô:Ø+ðñ ô ˆGð Ô×$Ò$ WÑ-Ô-Ð-ØŒzÐ%Ø× Ò  ¨Ñ1Ô1Ð1Ð1Ø”Ð'Ø× Ò  ¨Ñ1Ô1Ð1Ø*2ð ð Ñ&�˜ Ø”:Ð)Ø×+Ò+Ø ¨°¸	À7ñô ð ð ð ”ZÐ+Ø×+Ò+Ø ¨°¸	À7ñô ð øðð ð ŒzÐ%Ø× Ò  ¨Ñ3Ô3Ð3Ð3Ð3Ø”Ð'Ø× Ò  ¨Ñ3Ô3Ð3Ð3Ð3ð (Ð'r   r3   )F)NF)r;   r<   r=   ÚreÚcompilerY   r`   r5   r^   ra   rx   r·   r¿   rÅ   rÈ   rÏ   rÕ   rÜ   ri   rh   ro   rm   r
  r  rk   rV  r]  r�  r†  rs   r   r   r   r@   r@   `   sÍ  € € € € € Ø$˜"œ*Ð%6Ñ7Ô7ÐØ#˜œÐ$7Ñ8Ô8Ððð ð ð ð4(ð (ð (ð'ð 'ð 'ð"2ð "2ð "2ð "2ðHVð Vð Vðpð ð ð ð>ð >ð >ðDð Dð Dð
ð 
ð 
ðð ð ð ð.	ð 	ð 	ð:ð :ð :ð;ð ;ð ;ð Bð Bð BðHð Hð Hð Hð
ð 
ð 
ð 
ð 
ð 
ðKð Kð KðC+ð C+ð C+ðJ,+ð ,+ð ,+ð\]/ð ]/ð ]/ð~0ð 0ð 0ðd]4ð ]4ð ]4ð ]4ð ]4r   r@   c           
      ó¤  — ddl }ddlm} ddlm} |                     dt          j        ¬¦  «        }|                     dd|d	¬
¦  «         |                     dd|d¬
¦  «         |                     dddt          dd¬¦  «         |                     dddd¬¦  «         |                     ddd¬¦  «         | 
                    | ¦  «        } ||j        rdnd¬¦  «         |j        }d}	 t          |¦  «        }d|v r.t          |d         j                             d¦  «        ¦  «        }nt"                               d ¦  «         d!S n# t&          $ r Y nw xY wt)          ||¦  «        }	 |                     |j        ¦  «        }	nŠ# t.          $ r}}
|j        r‚ t3          |
j        d         d"d¦  «        }d#|
› d$�}|r,|\  }}}t"                               |› d%|› d%|› d&|› �¦  «         nt"                               |¦  «         Y d}
~
d!S d}
~
ww xY wt7          |j        d'¦  «        5 }|                     |	¦  «         ddd¦  «         dS # 1 swxY w Y   dS )(z'Convert MS VOLT to AFDKO feature files.r   N)ÚPath)ÚconfigLoggerzfonttools voltLib.voltToFea)ÚdescriptionÚinputÚINPUTzinput font/VTP file to process)Úmetavarrã   ÚhelpÚfeaturefileÚOUTPUTzoutput feature filez-tz--tabler   ru   z:List of tables to write, by default all tables are written)ÚactionÚchoicesÚdestr¦  z-qz--quietÚ
store_truezSuppress non-error messages)r©  r¦  z--tracebacku   Donâ€™t catch exceptionsÚERRORÚINFO)ÚlevelÚTSIVzutf-8z6"TSIV" table is missing, font was not saved from VOLT?r|   r9   ú"z" is not supportedr_  z: Úw)ÚargparseÚpathlibr   Ú	fontToolsr¡  ÚArgumentParserÚmainÚ__doc__Úadd_argumentr»   Ú
parse_argsÚquietr£  r   r   ÚdataÚdecoderž   Úerrorr   r@   r¿   ru   rq   Ú	tracebackÚgetattrÚargsÚopenr§  Úwrite)rÁ  r³  r   r¡  ÚparserÚoptionsrT   rU   Ú	converterr¾   Úer9   Úmessagery  rz  r{  Úfeafiles                    r   r·  r·  J  sQ  € ð €O€O€OØÐÐÐÐÐà&Ð&Ð&Ð&Ð&Ð&à×$Ò$Ø%µ4´<ð %ñ ô €Fð ×ÒØ˜ tÐ2Rð ñ ô ð ð ×ÒØ˜x¨dÐ9Nð ñ ô ð ð ×ÒØØØÝØØIð ñ ô ð ð ×ÒØˆi Ð3Pð ñ ô ð ð ×ÒØ˜lÐ1Kð ñ ô ð ð ×Ò Ñ%Ô%€Gà€L 7¤=Ð<˜˜°fÐ>Ñ>Ô>Ð>à”=€LØ€DðÝ�lÑ#Ô#ˆØ�Tˆ>ˆ>Ý# D¨¤LÔ$5×$<Ò$<¸WÑ$EÔ$EÑFÔFˆLˆLå�IŠIÐNÑOÔOÐOØ�1ð øõ ð ð ð Øˆðøøøõ ˜,¨Ñ-Ô-€IðØ×Ò ¤Ñ/Ô/ˆˆøÝð 
ð 
ð 
ØÔð 	ØÝ˜1œ6 !œ9 j°$Ñ7Ô7ˆØ+�aÐ+Ð+Ð+ˆØð 	Ø!)ÑˆD�$˜Ý�IŠI˜Ð:Ð: Ð:Ð: vÐ:Ð:°Ð:Ð:Ñ;Ô;Ð;Ð;å�IŠI�gÑÔÐØˆqˆqˆqˆqˆqøøøøð
øøøõ 
ˆgÔ! 3Ñ	'Ô	'ð ¨7Ø�Š�cÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s>   Ã)AE Å
EÅEÅ(F Æ
H
ÆA2HÈH
È"IÉI	ÉI	Ú__main__r3   )r¸  Úloggingr�  Úior   Úgraphlibr   ÚfontTools.feaLibr   ÚfontTools.ttLibr   r   ÚfontTools.voltLibr$   ÚfontTools.voltLib.parserr   r¹   Ú	getLoggerrž   r»   r   r/   r—  r1   r@   r·  r;   Úsysr"  r   r   r   ú<module>rÔ     s€  ðð+ð +ðZ €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &à  Ð  Ð  Ð  Ð  Ð  Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9à€gÔÐ5Ñ6Ô6€à	!Ð	!Ð	!€ð	ð 	ð 	ð?ð ?ð ?ðð ð ð ð ˆSŒ_ñ ô ð ðg4ð g4ð g4ð g4ð g4ñ g4ô g4ð g4ðT?ð ?ð ?ð ?ðD ˆzÒÐØ€J€J€Jà€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr   