§
    ‚ÛgYo  ã                   ó,  — 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m	Z	 ddl
mZ ddlmZ  ej        d¦  «        Zg d¢Z G d	„ d
ej        ¦  «        Z G d„ d¦  «        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)Úast)ÚTTFontÚ
TTLibError)ÚParserzfontTools.voltLib.voltToFea)ÚGDEFÚGSUBÚGPOSc                   ó   — e Zd Zdd„ZdS )ÚMarkClassDefinitionÚ c                 ó|   — d}t          | dd¦  «        s|dz  }|t          j                             | |¦  «        z  }|S )Nr   ÚusedFú#)Úgetattrr   r   ÚasFea)ÚselfÚindentÚress      úQ/granary/edev/quantum/lib/python3.11/site-packages/fontTools/voltLib/voltToFea.pyr   zMarkClassDefinition.asFea=   sF   € ØˆÝ�t˜V UÑ+Ô+ð 	Ø�3‰JˆCØ�sÔ&×,Ò,¨T°6Ñ:Ô:Ñ:ˆØˆ
ó    N)r   )Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   <   s(   € € € € € ðð ð ð ð ð r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚGroupc                 óx   — |j                              ¦   «         | _         d„ |j        j        D ¦   «         | _        d S )Nc                 ót   — g | ]5}t          |t          j        ¦  «        ¯|j                             ¦   «         ‘Œ6S r   )Ú
isinstanceÚVAstÚ	GroupNameÚgroupÚlower)Ú.0Úxs     r   ú
<listcomp>z"Group.__init__.<locals>.<listcomp>I   sC   € ð 
ð 
ð 
Ø !½
À1ÅdÄnÑ8UÔ8Uð
ØŒG�MŠM‰OŒOð
ð 
ð 
r   )Únamer$   ÚenumÚgroups)r   r#   s     r   Ú__init__zGroup.__init__G   s?   € Ø”J×$Ò$Ñ&Ô&ˆŒ	ð
ð 
Ø%*¤Z¤_ð
ñ 
ô 
ˆŒˆˆr   c                 óŠ   — | j         |j        v rdS |j         | j        v rdS | j        r	|j        sdS | j        s	|j        rdS d S d S )NTF)r(   r*   )r   Úothers     r   Ú__lt__zGroup.__lt__M   sn   € ØŒ9˜œÐ$Ð$Ø�4ØŒ:˜œÐ$Ð$Ø�5ØŒ;ð 	˜uœ|ð 	Ø�5ØŒ{ð 	˜uœ|ð 	Ø�4ð	ð 	ð 	ð 	r   N)r   r   r   r+   r.   r   r   r   r   r   F   s2   € € € € € ð
ð 
ð 
ðð ð ð ð r   r   c                   óÖ   — e Zd Z ej        d¦  «        Z ej        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„ 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                 óð   — || _         || _        i | _        d | _        i | _        i | _        i | _        i | _        t          ¦   «         | _	        i | _
        i | _        i | _        i | _        i | _        i | _        d S ©N)Ú_file_or_pathÚ_fontÚ
_glyph_mapÚ_glyph_orderÚ_gdefÚ_glyphclassesÚ	_featuresÚ_lookupsÚsetÚ_marksÚ
_ligaturesÚ_markclassesÚ_anchorsÚ	_settingsÚ_lookup_namesÚ_class_names)r   Úfile_or_pathÚfonts      r   r+   zVoltToFea.__init__\   s{   € Ø)ˆÔØˆŒ
àˆŒØ ˆÔàˆŒ
ØˆÔØˆŒØˆŒå‘e”eˆŒØˆŒàˆÔØˆŒàˆŒàˆÔØˆÔÐÐr   c                 óî   — || j         vr`| j                             d|¦  «        }|| j                              ¦   «         v r |dz  }|| j                              ¦   «         v ° || j         |<   | j         |         S ©NÚ_)rA   Ú_NOT_LOOKUP_NAME_REÚsubÚvalues©r   r(   r   s      r   Ú_lookupNamezVoltToFea._lookupNames   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 rF   )rB   Ú_NOT_CLASS_NAME_RErI   rJ   rK   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   c                 óF  — d„ |j         D ¦   «         }t          |d„ ¬¦  «        D ]}|                      |¦  «         Œ|j         D �]}t          |t          j        ¦  «        r|                      |¦  «         Œ3t          |t          j        ¦  «        rd|v r|                      |¦  «         Œgt          |t          j	        ¦  «        r|  
                    |¦  «         Œ—t          |t          j        ¦  «        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   c                 ó    — t          | ¦  «        S r2   )r   )r&   s    r   ú<lambda>z.VoltToFea._collectStatements.<locals>.<lambda>ˆ   s   € µe¸A±h´h€ r   ©Úkeyr
   r	   )Ú
statementsÚsortedÚ_groupDefinitionr    r!   ÚGlyphDefinitionÚ_glyphDefinitionÚAnchorDefinitionÚ_anchorDefinitionÚSettingDefinitionÚ_settingDefinitionrR   ÚScriptDefinitionÚ_scriptDefinitionÚLookupDefinitionÚNotImplementedErrorÚposrI   Ú_lookupDefinition)r   ÚdocÚtablesr*   Ú	statements        r   Ú_collectStatementszVoltToFea._collectStatementsƒ   sÐ  € ð TÐS˜Sœ^ÐSÑSÔSˆÝ Ð,>Ð,>Ð?Ñ?Ô?ð 	-ð 	-ˆIØ×!Ò! )Ñ,Ô,Ð,Ð,àœð 	5ñ 	5ˆIÝ˜)¥TÔ%9Ñ:Ô:ð 5Ø×%Ò% iÑ0Ô0Ð0Ð0Ý˜I¥tÔ'<Ñ=Ô=ð 
5Ø˜VÐ#Ð#Ø×*Ò*¨9Ñ5Ô5Ð5øÝ˜I¥tÔ'=Ñ>Ô>ð 5Ø×'Ò'¨	Ñ2Ô2Ð2Ð2Ý˜I¥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        r||                     t          j        d¦  «        ¦  «         ‰ j                             ¦   «         D ];}|                     t          |dg ¦  «        ¦  «         |                     |¦  «         Œ<‰ j                             ¦   «         }|D ]u}||         }|D ]G}||         }	|	D ]}
ˆ fd„|	|
         D ¦   «         |	|
<   Œd„ |	 
                    ¦   «         D ¦   «         ||<   ŒHd„ | 
                    ¦   «         D ¦   «         ||<   Œvd	„ | 
                    ¦   «         D ¦   «         }|�rb|                     t          j        d
¦  «        ¦  «         | 
                    ¦   «         D �]%\  }}t          j        |¦  «        }t          |d„ ¬¦  «        }|D ]á}|j                             t          j        |¦  «        ¦  «         t          ||         d„ ¬¦  «        }|D ]˜}
|
dk    rdnd}|j                             t          j        |
|¬¦  «        ¦  «         ||         |
         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

# LookupsÚtargetsc                 óJ   •— g | ]}|                      ¦   «         ‰j        v ¯|‘Œ S r   )r$   r:   )r%   Úlr   s     €r   r'   z/VoltToFea._buildFeatureFile.<locals>.<listcomp>½   s-   ø€ Ð"XÐ"XÐ"X¨¸Q¿WºW¹Y¼YÈ$Ì-Ð=WÐ=W 1Ð=WÐ=WÐ=Wr   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r%   Útrr   s      r   ú
<dictcomp>z/VoltToFea._buildFeatureFile.<locals>.<dictcomp>¾   s#   € Ð EÐ EÐ E©$¨!¨QÀ1Ð E  AÐ EÐ EÐ Er   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r%   rt   rS   s      r   ru   z/VoltToFea._buildFeatureFile.<locals>.<dictcomp>¿   s#   € ÐDÐDÐD¡t q¨!À!ÐD˜a ÐDÐDÐDr   c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r%   rt   Úfs      r   ru   z/VoltToFea._buildFeatureFile.<locals>.<dictcomp>À   s#   € Ð;Ð;Ð;™T˜Q ¸Ð;�A�qÐ;Ð;Ð;r   z
# Featuresc                 ó   — | dk    rdndS )NÚDFLTr   rm   r   ©Úks    r   rU   z-VoltToFea._buildFeatureFile.<locals>.<lambda>Æ   s   € ¸1Àº;¸;°a°aÈA€ r   rV   c                 ó   — | dk    rdndS )NÚdfltr   rm   r   r{   s    r   rU   z-VoltToFea._buildFeatureFile.<locals>.<lambda>É   s   € ÀQÈ&Â[À[ÀÀÐVW€ r   r~   TF)Úinclude_defaultr   ©ÚBASEÚMARKÚLIGATUREÚ	COMPONENTÚGDEF_)r   ÚFeatureFilerX   r8   ÚappendÚCommentÚextendrJ   r>   rY   Úitemsr:   r   r9   ÚcopyÚFeatureBlockÚScriptStatementÚLanguageStatementr$   ÚLookupReferenceStatementr7   ÚGlyphClassDefinitionÚGlyphClassNameÚ
TableBlockÚGlyphClassDefStatement)r   rh   rg   rX   ÚlookupÚfeaturesÚftagÚscriptsÚstagÚlangsÚltagÚfeatureÚstagsÚltagsr   r(   Ú	lookuprefÚclassesÚ	classnameÚ
glyphclassÚgdefs   `                    r   Ú_buildFeatureFilezVoltToFea._buildFeatureFile¤   s–  ø€ ÝŒ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ð *ð *�Ø×!Ò!¥'¨&°)¸RÑ"@Ô"@ÑAÔAÐAØ×!Ò! &Ñ)Ô)Ð)Ð)ð ”>×&Ò&Ñ(Ô(ˆØð 	Eð 	EˆDØ˜t”nˆGØð Fð F�Ø œ�Ø!ð Yð Y�DØ"XÐ"XÐ"XÐ"X¨e°D¬kÐ"XÑ"XÔ"X�E˜$‘K�KØ EÐ E°%·+²+±-´-Ð EÑ EÔ E�˜‘�ØDÐD¨w¯}ª}©¬ÐDÑDÔDˆH�T‰NˆNØ;Ð; X§^¢^Ñ%5Ô%5Ð;Ñ;Ô;ˆàñ 	+Ø×Ò�cœk¨,Ñ7Ô7Ñ8Ô8Ð8Ø!)§¢Ñ!1Ô!1ð +ñ +‘��gÝÔ*¨4Ñ0Ô0�Ý˜wÐ,MÐ,MÐNÑNÔN�Ø!ð Að A�DØÔ&×-Ò-­cÔ.AÀ$Ñ.GÔ.GÑHÔHÐHÝ" 7¨4¤=Ð6WÐ6WÐXÑXÔX�EØ %ð Að A˜Ø26¸&².°.¨$¨$Àe˜ØÔ*×1Ò1ÝÔ1°$ÈÐXÑXÔXñô ð ð %,¨D¤M°$Ô$7ð 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                 ó(  — t          | j        ¦  «                             ¦   «         }|€t          }| j        �| j                             ¦   «         | _        |                      ||¦  «         |                      |¦  «        }| 	                    ¦   «         S r2   )
Ú
VoltParserr3   ÚparseÚTABLESr4   ÚgetGlyphOrderr6   rj   r£   r   )r   rh   rg   Úfeas       r   ÚconvertzVoltToFea.convertæ   s}   € Ý˜Ô+Ñ,Ô,×2Ò2Ñ4Ô4ˆàˆ>ÝˆFØŒ:Ð!Ø $¤
× 8Ò 8Ñ :Ô :ˆDÔà×Ò  VÑ,Ô,Ð,Ø×$Ò$ VÑ,Ô,ˆØ�yŠy‰{Œ{Ðr   c                 ó’   — 	 |j         }n# t          $ r |}Y nw xY wt          j        | j                             ||¦  «        ¦  «        S r2   )ÚglyphÚAttributeErrorr   Ú	GlyphNamer5   Úget)r   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 r2   )r#   r­   r   r‘   r8   r$   )r   r#   r(   s      r   Ú
_groupNamezVoltToFea._groupNameù   sU   € ð	Ø”;ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøåÔ! $Ô"4°T·Z²Z±\´\Ô"BÑCÔCÐCr±   c                 ó>  — g }|D �]}t          |t          j        ¦  «        r)|                     |                      |¦  «        ¦  «         ŒFt          |t          j        ¦  «        r)|                     |                      |¦  «        ¦  «         Œ‰t          |t          j        ¦  «        r)|                     |                      |¦  «        ¦  «         ŒÌt          |t          j	        ¦  «        r#|                     |j
        |j        f¦  «         �Œ	t          |¦  «        ‚|S r2   )r    r!   r®   r‡   r°   r"   r³   ÚEnumÚ_enumÚRangeÚstartÚendrd   )r   ÚcoveragerŠ   Úitems       r   Ú	_coveragez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Ø—’˜TŸZšZ¨Ñ-Ô-Ñ.Ô.Ð.Ð.Ý˜D¥$¤*Ñ-Ô-ð 0Ø—’˜dœj¨$¬(Ð3Ñ4Ô4Ð4Ñ4å)¨$Ñ/Ô/Ð/Øˆr   c                 óZ   — t          j        |                      |j        ¦  «        ¦  «        S r2   )r   Ú
GlyphClassr¼   r)   )r   r)   s     r   r¶   zVoltToFea._enum  s    € ÝŒ~˜dŸnšn¨T¬YÑ7Ô7Ñ8Ô8Ð8r   c                 ó¦   — g }|D ]K}|                       |¦  «        }t          |t          t          f¦  «        s|g}|                     |¦  «         ŒL|S r2   )r¼   r    ÚtupleÚlistr‰   )r   ÚcontextÚoutr»   rº   s        r   Ú_contextzVoltToFea._context  s^   € ØˆØð 	!ð 	!ˆDØ—~’~ dÑ+Ô+ˆHÝ˜h­µ¨Ñ6Ô6ð &Ø$˜:�Ø�JŠJ�xÑ Ô Ð Ð Øˆ
r   c                 óÚ   — |                       |j        ¦  «        }|                      |j        ¦  «        }t	          j        ||¦  «        }|| j        |j                             ¦   «         <   d S r2   )rO   r(   r¶   r)   r   r�   r8   r$   )r   r#   r(   Úglyphsr¡   s        r   rZ   zVoltToFea._groupDefinition  s[   € Ø�Š˜uœzÑ*Ô*ˆØ—’˜EœJÑ'Ô'ˆÝÔ-¨d°FÑ;Ô;ˆ
à1;ˆÔ˜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ƒ   )r6   Úidr5   r(   Ú	TypeErrorÚtyper7   r   r¾   rÆ   r‡   r°   r<   ÚaddÚ
componentsr=   )r   r¬   s     r   r\   zVoltToFea._glyphDefinition"  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%   rr   s     r   ru   z/VoltToFea._scriptDefinition.<locals>.<dictcomp>7  s)   € ÐKÐKÐK°a˜1Ÿ7š7 4™=œ=¨Ô+¨TÐKÐKÐKr   )Útagr™   r•   Úlookupsr9   Úkeys)r   Úscriptr˜   Úlangrš   r›   rÒ   r–   s           r   rb   zVoltToFea._scriptDefinition2  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 t                               d|j         › �¦  «         d S )NÚ	COMPILER_zUnsupported setting ignored: )r(   Ú
startswithÚvaluer@   ÚlogÚwarning)r   Úsettings     r   r`   zVoltToFea._settingDefinition@  sT   € ØŒ<×"Ò" ;Ñ/Ô/ð 	HØ+2¬=ˆDŒN˜7œ<Ñ(Ð(Ð(å�KŠKÐF¸¼ÐFÐFÑGÔGÐGÐGÐGr   c                 óØ   — |\  }}}}}}|r|                      ¦   «         pd }|r|                      ¦   «         pd }	|r|                      ¦   «         pd }
t          j        ||||	|
|¬¦  «        S )N)Ú
xPlacementÚ
yPlacementÚxAdvanceÚ
xPlaDeviceÚ
yPlaDeviceÚ
xAdvDevice)rŠ   r   ÚValueRecord)r   Ú
adjustmentÚadvÚdxÚdyÚadv_adjust_byÚdx_adjust_byÚdy_adjust_byÚ
adv_deviceÚ	dx_deviceÚ	dy_devices              r   Ú_adjustmentzVoltToFea._adjustmentF  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)
r   rå   ræ   rç   rè   ré   rê   rë   rí   rî   s
             r   Ú_anchorzVoltToFea._anchorV  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                 ó0  — |j         }|j        }|                      |j        ¦  «        }|                     d¦  «        r‹d                     |                     d¦  «        dd …         ¦  «        }t          j        |  	                    |¦  «        ¦  «        }|  
                    |¦  «        }t          |||¦  «        }|| j        ||f<   d S || j        vr
i | j        |<   || j        |         vri | j        |         |<   || j        |         |         |j        <   d S )NÚMARK_rG   rm   )r(   Ú
glyph_namerô   re   rØ   ÚjoinrÐ   r   Ú	MarkClassrO   r°   r   r>   r?   Ú	component)	r   Ú	anchordefÚ
anchornameÚ	glyphnameÚanchorr(   Ú	markclassr¬   Úmarkdefs	            r   r^   zVoltToFea._anchorDefinitiond  s  € Ø”^ˆ
ØÔ(ˆ	Ø—’˜iœmÑ,Ô,ˆà× Ò  Ñ)Ô)ð 	OØ—8’8˜J×,Ò,¨SÑ1Ô1°!°"°"Ô5Ñ6Ô6ˆDÝœ d§o¢o°dÑ&;Ô&;Ñ<Ô<ˆIØ—O’O IÑ.Ô.ˆEÝ)¨)°V¸UÑCÔCˆGØ9@ˆDÔ˜y¨*Ð5Ñ6Ð6Ð6à ¤Ð-Ð-Ø+-�”˜iÑ(Ø ¤¨yÔ!9Ð9Ð9Ø79�”˜iÔ(¨Ñ4ØHNˆDŒM˜)Ô$ ZÔ0°Ô1DÑEÐEÐEr   c           
      ó   — |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 }|j        D ]°\  }}|D ]2}|                     ¦   «         D ]}|d|z   f}d| j        |         _        ŒŒ3t          j        |                      |¦  «        ¦  «        }|j        D ]G}|                     ¦   «         D ]0}||vrg ||<   |||         vr||                              |¦  «         Œ1ŒHŒ±|D �]f}d}|| j        v r| j        |         }g }||         D ]·}t          j        |                      |¦  «        ¦  «        }t9          d|dz   ¦  «        D ]z}t          |¦  «        |k     r|                     g ¦  «         d }|| j        |         |         v r| j        |         |         |         }||dz
                                ||f¦  «         Œ{Œ¸|                      |¦  «        }|| j        v rt          j         ||d         ¦  «        }n:|| j        v rt          j!        ||¦  «        }nt          j"        ||d         ¦  «        }|                     |¦  «         �Œhd 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 tS          |¦  «        ‚)	Nrm   FTr   )Ú
enumeratedrö   ÚentryÚexit)*rX   re   r    r!   ÚPositionAdjustPairDefinitionÚadjust_pairrŠ   Úcoverages_1Úcoverages_2r"   r¼   rï   Úlenr‡   r   ÚPairPosStatementÚPositionAdjustSingleDefinitionÚadjust_singleÚSinglePosStatementÚPositionAttachDefinitionÚcoverage_toÚglyphSetr>   r   rù   rO   rº   r=   Úranger?   r°   r<   ÚMarkMarkPosStatementÚMarkLigPosStatementÚMarkBasePosStatementÚPositionAttachCursiveDefinitionÚcoverages_enterÚcoverages_exitÚpopÚindexÚCursivePosStatementrd   )&r   r”   Ú	fealookuprX   re   Úidx1Úidx2Úpos1Úpos2Ú
coverage_1Ú
coverage_2r  r»   Úglyphs1Úglyphs2Úrecord1Úrecord2ÚaÚbrÆ   ÚrecordÚanchorsÚmarksr    Úmarkr(   rW   rÿ   ÚbaserÌ   rú   rþ   Úenter_coveragerº   Úexit_coverager¬   r  r  s&                                         r   Ú_gposLookupzVoltToFea._gposLookupv  s´  € ØÔ)ˆ
àŒjˆÝ�c�4Ô<Ñ=Ô=ñ h	+Ø.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ð Q	+ØÔ)ð ð ‘��1ØŸš¨Ñ*Ô*�Ø×)Ò)¨!Ñ,Ô,�Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ø×!Ò!ÝÔ*¨V°A¬Y¸Ð,?Ð+@À"ÀbÈ%ÑPÔPñô ð ð ð	ð õ ˜�TÔ:Ñ;Ô;ñ I	+ØˆGØ$'¤Oð <ð <Ñ ��yØ!ð ;ð ;�Dð
 !%§¢¡¤ð ;ð ;˜Ø# W¨yÑ%8Ð9˜Ø6:˜Ô)¨#Ô.Ô3Ð3ð;õ  œM¨$¯/ª/¸)Ñ*DÔ*DÑEÔE�	ØœLð <ð <�DØ $§¢¡¤ð <ð <˜Ø wÐ.Ð.Ø,.˜G D™MØ$¨G°D¬MÐ9Ð9Ø# DœM×0Ò0°Ñ;Ô;Ð;øð	<ð<ð  ð (ñ (�Ø�
Ø˜4œ?Ð*Ð*Ø!%¤°Ô!6�Jà�Ø# DœMð Ið I�DÝ #¤¨d¯oªo¸dÑ.CÔ.CÑ DÔ D�IÝ%*¨1¨j¸1©nÑ%=Ô%=ð Ið I˜	Ý˜u™:œ:¨	Ò1Ð1Ø!ŸLšL¨Ñ,Ô,Ð,Ø!%˜Ø$¨¬°dÔ(;¸DÔ(AÐAÐAØ%)¤]°4Ô%8¸Ô%>¸yÔ%I˜FØ˜i¨!™mÔ,×3Ò3°V¸YÐ4GÑHÔHÐHÐHðIð —’ tÑ,Ô,�Ø˜4œ;Ð&Ð&ÝÔ3°D¸%À¼(ÑCÔC�D�DØ˜Tœ_Ð,Ð,ÝÔ2°4¸Ñ?Ô?�D�DåÔ3°D¸%À¼(ÑCÔC�DØ×!Ò! $Ñ'Ô'Ð'Ñ'ð/(ð (õ0 ˜�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                 ó6  — |j         }|j        r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||f}t          j        ||||¦  «        }|                     |¦  «         Œ×d S t          |t          j        ¦  «        r›t          j        ¦   «         g}|j        D ]5\  }}|                      |¦  «        }|d                              |¦  «         Œ6|rt          j        |||fg¦  «        }nt          j        ||||g¦  «        }|                     |¦  «         d S t          |t          j        ¦  «        r™t          j        ¦   «         g}|j        D ]3\  }}|d                              |                      |¦  «        ¦  «         Œ4|rt          j        |||fg¦  «        }nt          j        ||||g¦  «        }|                     |¦  «         d S t-          |¦  «        ‚)Nrm   r   )rX   Úreversalre   r    r!   r  r  rŠ   r¼   r  r  r	  r   ÚIgnorePosStatementÚChainContextPosStatementr‡   r  r¾   r  r‰   r  r  rd   )r   r”   ÚprefixÚsuffixÚignorer  ÚtargetlookuprX   re   r  r  r  r  r"  r#  rÆ   ri   rÒ   r&  r'  r¬   rº   rG   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à+¨\Ð:�GÝ #Ô <Ø ¨°ñ!ô !�Ið ×!Ò! )Ñ,Ô,Ð,Ð,ð-ð -õ ˜�TÔ@ÑAÔAð 	+Ý”nÑ&Ô&Ð'ˆFØÔ)ð (ð (‘��1ØŸš qÑ)Ô)�Ø�q”	× Ò  Ñ'Ô'Ð'Ð'àð ÝÔ2°V¸VÀVÐ4LÐ3MÑNÔN�	�	åÔ8Ø˜F F¨\¨Nñô �	ð ×Ò˜iÑ(Ô(Ð(Ð(Ð(Ý˜�TÔ:Ñ;Ô;ð 	+Ý”nÑ&Ô&Ð'ˆFØ"œð ;ð ;‘�˜!Ø�q”	× Ò  §¢°Ñ!9Ô!9Ñ:Ô:Ð:Ð:àð ÝÔ2°V¸VÀVÐ4LÐ3MÑNÔN�	�	åÔ8Ø˜F F¨\¨Nñô �	ð ×Ò˜iÑ(Ô(Ð(Ð(Ð(å% cÑ*Ô*Ð*r   c           	      óR  — |j         }|j        }|j                             ¦   «         D �]ý\  }	}
|	r|
s/|j        \  }}}t
                               |› d|› d|› d�¦  «         Œ9d }|                      |	¦  «        }|                      |
¦  «        }|r|||f}t          j	        |g¦  «        }�net          |t          j        ¦  «        rDt          |¦  «        dk    sJ ‚t          |¦  «        dk    sJ ‚t          j        |||||¦  «        }�nt          |t          j        ¦  «        rBt          |¦  «        dk    sJ ‚t          |¦  «        dk    sJ ‚t          j        ||||¦  «        }n«t          |t          j        ¦  «        r4t          |¦  «        dk    sJ ‚t          j        ||d         |||¦  «        }n]t          |t          j        ¦  «        r4t          |¦  «        dk    sJ ‚t          j        ||||d         |¦  «        }nt+          |¦  «        ‚|                     |¦  «         �Œÿd S )Nú:z: Ignoring empty substitutionrm   r   )rX   rI   ÚmappingrŠ   ÚlocationrÚ   rÛ   r¼   r   ÚIgnoreSubstStatementr    r!   ÚSubstitutionSingleDefinitionr	  ÚSingleSubstStatementÚ+SubstitutionReverseChainingSingleDefinitionÚ ReverseChainSingleSubstStatementÚSubstitutionMultipleDefinitionÚMultipleSubstStatementÚSubstitutionLigatureDefinitionÚLigatureSubstStatementrd   r‡   )r   r”   r4  r5  r6  Úchainr  rX   rI   rW   ÚvalÚpathÚlineÚcolumnri   rÆ   ÚreplacementsÚchain_contexts                     r   Ú_gsubLookupzVoltToFea._gsubLookup  sj  € ØÔ)ˆ
àŒjˆØœ×)Ò)Ñ+Ô+ð #	)ñ #	)‰HˆC�Øð ˜cð Ø%(¤\Ñ"��d˜FÝ—’˜tÐRÐR dÐRÐR¨VÐRÐRÐRÑSÔSÐSØØˆIØ—^’^ CÑ(Ô(ˆFØŸ>š>¨#Ñ.Ô.ˆLØð /Ø!'¨°Ð 8�ÝÔ4°m°_ÑEÔE�	‘	Ý˜C¥Ô!BÑCÔCð /Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ý˜<Ñ(Ô(¨AÒ-Ð-Ð-Ð-ÝÔ4Ø˜L¨&°&¸%ñô �	‘	õ ˜C¥Ô!QÑRÔRð /Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ý˜<Ñ(Ô(¨AÒ-Ð-Ð-Ð-ÝÔ@Ø˜F F¨Lñô �	�	õ ˜C¥Ô!DÑEÔEð /Ý˜6‘{”{ aÒ'Ð'Ð'Ð'ÝÔ6Ø˜F 1œI v¨|¸Uñô �	�	õ ˜C¥Ô!DÑEÔEð /Ý˜<Ñ(Ô(¨AÒ-Ð-Ð-Ð-ÝÔ6Ø˜F F¨L¸¬O¸Uñô �	�	õ *¨#Ñ.Ô.Ð.Ø×Ò˜iÑ(Ô(Ð(Ñ(ðG#	)ð #	)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	        v �rN|j	         
                    d¦  «        d         }|                     ¦   «         | j        vrxt          j        |                      |¦  «        ¦  «        }|�|j                             |¦  «         |j                             t          j        d|j	        z   ¦  «        ¦  «         n~| j        |                     ¦   «                  }|j                             t          j        ¦   «         ¦  «         |j                             t          j        d|j	        z   ¦  «        ¦  «         || j        |                     ¦   «         <   nit          j        |                      |j	        ¦  «        ¦  «        }|�|j                             |¦  «         || j        |j	                             ¦   «         <   |j        �4|j                             t          j        d|j        z   ¦  «        ¦  «         g }|j        r–|j        D ]�}	|                      |	j        ¦  «        }
|                      |	j        ¦  «        }|	j        dk    }|                     |
||d	g¦  «         |r1t3          |j        ¦  «        dk    r|                     g g d	d
g¦  «         ŒŽn|                     g g d	d	g¦  «         d }|D �]\  }
}}}|j        �|                      ||
||||¦  «         |j        �Õ| j                             d¦  «        rd
|_        |
s|s|s|r–|sy|€w|                      |j	        dz   ¦  «        }t          j        |¦  «        }tA          |dg ¦  «        |_!        |j!                             |¦  «         |  "                    ||¦  «         |  #                    ||
||||¦  «         Œï|  "                    ||¦  «         �Œd S )Nr   ÚRTLrm   é   é   rÏ   z# ÚEXCEPT_CONTEXTFTÚCOMPILER_USEEXTENSIONLOOKUPSz targetrp   )$Ú	directionÚprocess_baseÚprocess_marksr    Ústrr³   Úmark_glyph_setr   ÚLookupFlagStatementr(   rÐ   r$   r:   ÚLookupBlockrL   rX   r‡   rˆ   ÚSubtableStatementÚcommentsrÂ   rÄ   ÚleftÚrightÚex_or_inr	  rI   rM  re   r@   r¯   Úuse_extensionr   rp   r/  r8  )r   r”   Úmark_attachementÚmark_filteringÚflagsÚlookupflagsr(   r  ÚcontextsrÂ   r4  r5  r6  r7  rF  Ú
targetnames                   r   rf   zVoltToFea._lookupDefinitionA  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ð �6”;ÐÑð ”;×$Ò$ TÑ*Ô*¨1Ô-ˆDØ�zŠz‰|Œ| 4¤=Ð0Ð0ÝœO¨D×,<Ò,<¸TÑ,BÔ,BÑCÔC�	ØÐ*ØÔ(×/Ò/°Ñ<Ô<Ð<ØÔ$×+Ò+­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˜$Ÿ*š*™,œ,Ñ'Ð'åœ¨×(8Ò(8¸¼Ñ(EÔ(EÑFÔFˆIØÐ&ØÔ$×+Ò+¨KÑ8Ô8Ð8Ø1:ˆDŒM˜&œ+×+Ò+Ñ-Ô-Ñ.àŒ?Ð&ØÔ ×'Ò'­¬°D¸6¼?Ñ4JÑ(KÔ(KÑLÔLÐLàˆØŒ>ð 	4Ø!œ>ð ;ð ;�ØŸš w¤|Ñ4Ô4�ØŸš w¤}Ñ5Ô5�Ø Ô)Ð-=Ò=�Ø—’ ¨°¸Ð ?Ñ@Ô@Ð@ð ð ;�c &¤.Ñ1Ô1°QÒ6Ð6Ø—O’O R¨¨U°DÐ$9Ñ:Ô:Ð:øð;ð �OŠO˜R  U¨EÐ2Ñ3Ô3Ð3àˆØ-5ð 	8ñ 	8Ñ)ˆF�F˜F EØŒzÐ%Ø× Ò  ¨°¸ÀÈ	ÑRÔRÐRàŒzÐ%Ø”>×%Ò%Ð&DÑEÔEð 3Ø.2�IÔ+Øð 8˜Vð 8 uð 8°ð 8Ø!ð ? lÐ&:Ø%)×%5Ò%5°f´kÀIÑ6MÑ%NÔ%N˜
Ý'*¤°zÑ'BÔ'B˜Ý,3°I¸yÈ"Ñ,MÔ,M˜	Ô)Ø!Ô)×0Ò0°Ñ>Ô>Ð>Ø×(Ò(¨°Ñ>Ô>Ð>Ø×+Ò+Ø ¨°¸	À<ñô ð ð ð ×$Ò$ V¨YÑ7Ô7Ð7ùð%	8ð 	8r   r2   )r   r   r   ÚreÚcompilerH   rN   r+   rL   rO   rj   r£   rª   r°   r³   r¼   r¶   rÄ   rZ   r\   rb   r`   rï   rô   r^   r/  r8  rM  rf   r   r   r   r0   r0   X   sª  € € € € € Ø$˜"œ*Ð%6Ñ7Ô7ÐØ#˜œÐ$7Ñ8Ô8Ððð ð ð ð.(ð (ð (ð'ð 'ð 'ð2ð 2ð 2ðB@ð @ð @ðD
ð 
ð 
ð 
ð>ð >ð >ðDð Dð Dðð ð ð9ð 9ð 9ðð ð ð<ð <ð <ð;ð ;ð ;ð Bð Bð BðHð Hð Hð
ð 
ð 
ð 
ð 
ð 
ðOð Oð Oð$l+ð l+ð l+ð\2+ð 2+ð 2+ðh')ð ')ð ')ðRQ8ð Q8ð Q8ð Q8ð Q8r   r0   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‡   rh   z:List of tables to write, by default all tables are written)ÚactionÚchoicesÚdestrp  z-qz--quietÚ
store_truezSuppress non-error messages)rs  rp  z--tracebacku   Donâ€™t catch exceptionsÚERRORÚINFO)ÚlevelÚTSIVzutf-8z6"TSIV" table is missing, font was not saved from VOLT?rm   r<  ú"z" is not supportedr:  z: Úw)ÚargparseÚpathlibrj  Ú	fontToolsrk  ÚArgumentParserÚmainÚ__doc__Úadd_argumentr§   Ú
parse_argsÚquietrm  r   r   ÚdataÚdecoderÚ   Úerrorr   r0   rª   rh   rd   Ú	tracebackr   ÚargsÚopenrq  Úwrite)rŠ  r}  rj  rk  ÚparserÚoptionsrC   rD   Ú	converterr©   Úer<  ÚmessagerH  rI  rJ  Úfeafiles                    r   r�  r�  •  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__r2   )r‚  Úloggingrg  Úior   ÚfontTools.feaLibr   ÚfontTools.ttLibr   r   ÚfontTools.voltLibr!   ÚfontTools.voltLib.parserr   r¥   Ú	getLoggerrÚ   r§   r   r   r0   r�  r   Úsysr  r   r   r   ú<module>rœ     sy  ðð+ð +ðZ €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9à€gÔÐ5Ñ6Ô6€à	!Ð	!Ð	!€ðð ð ð ð ˜#Ô1ñ ô ð ðð ð ð ð ñ ô ð ð$z8ð z8ð z8ð z8ð z8ñ z8ô z8ð z8ðz?ð ?ð ?ð ?ðD ˆzÒÐØ€J€J€Jà€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr   